Benjamin Otte
071c9a8221
API: gdk: Add gdk_rgba_is_clear() and gdk_rgba_is_opaque()
...
I want to use these inside GSK, and I'm not a fan of putting GdkRGBA
APIs into it or duplicating it into GTK.
So public API it is.
2016-12-20 18:01:12 +01:00
Benjamin Otte
15e8a22f08
gsk: Move gtk/gtkcairoblur.c to gsk/gskcairoblur.c
2016-12-20 18:01:11 +01:00
Benjamin Otte
6e31fc4300
inspector: Print node type in node properties
2016-12-20 18:01:11 +01:00
Benjamin Otte
75b76af221
gsk: Add GskBorderNode
...
The node draws a solid CSS border, which can be used to cover everything
but dashed and dotted borders (double, groove, inset, ...).
For different border styles, we overlay multiple nodes and set their
colors to transparent for sides with non-matching styles.
2016-12-20 18:01:11 +01:00
Benjamin Otte
9af468cdec
gtk: Remove unused argument from function
2016-12-20 18:01:11 +01:00
Benjamin Otte
a9809e5d30
gsk: Add gsk_rounded_rect_shrink()
...
... and replace _gtk_rounded_box_grow() and _gtk_rounded_box_shrink()
with it.
2016-12-20 18:01:11 +01:00
Benjamin Otte
1760e0d3f3
vulkan: Get rid of color in push constants
...
The color comes in instance data now, no need to abuse push constants
for it.
2016-12-20 18:01:11 +01:00
Benjamin Otte
1b90ce6b33
vulkan: Remove color from push constants
...
It's now handled by the color pipeline.
2016-12-20 18:01:11 +01:00
Benjamin Otte
b04eecf860
vulkan: Pass color rects in instance data
...
This way, we don't need push constants or per-vertex data, we can render
colored rectangles completely via instance data.
2016-12-20 18:01:11 +01:00
Benjamin Otte
4c74695a85
vulkan: Don't pass texture coordinates to the color pipeline
2016-12-20 18:01:11 +01:00
Benjamin Otte
5dfb74c70c
vulkan: Get vertex description from pipeline subclass
2016-12-20 18:01:11 +01:00
Benjamin Otte
b4f04d0c1d
vulkan: Split color and blend pipelines
2016-12-20 18:01:11 +01:00
Benjamin Otte
e68b18aa4e
vulkan: Move vertex data tracking to the pipeline subclass
...
That way, different pipelines can draw different kinds of data.
2016-12-20 18:01:11 +01:00
Benjamin Otte
9aecd6dd56
vulkan: Add GskVulkanBlendPipeline
...
So far that's just a simple pipeline that doesn't do anything.
2016-12-20 18:01:11 +01:00
Benjamin Otte
453478719d
vulkan: Make GskVulkanPipeline derivable
2016-12-20 18:01:11 +01:00
Benjamin Otte
65e9894450
menu: Implement snapshot() for the menu code
2016-12-20 18:01:11 +01:00
Benjamin Otte
e492a63e4c
paned: Implement snapshot()
2016-12-20 18:01:11 +01:00
Benjamin Otte
8ad7c435ca
cssimage: Implement snapshot() for cross-fade
2016-12-20 18:01:11 +01:00
Benjamin Otte
9822fe81a3
snapshot: Implement gtk_snapshot_push_opacity()
...
Use it in GtkWidget's opacity handling.
2016-12-20 18:01:11 +01:00
Benjamin Otte
6b29dbf26a
snapshot: Handle NULL returns in pop_and_append()
2016-12-20 18:01:11 +01:00
Benjamin Otte
30438c6e8b
gsk: Add cross-fade node
...
And implement stack crossfades with it.
2016-12-20 18:01:11 +01:00
Benjamin Otte
3e4fd32b54
vulkan: Batch upload image barriers together
...
Doesn't seem to help much though...
2016-12-20 18:01:11 +01:00
Benjamin Otte
7b9ace488b
vulkan: Add GskVulkanUploader
...
It's the thing that makes sure pixels end up on the GPU.
2016-12-20 18:01:11 +01:00
Benjamin Otte
85559d1fd9
vulkan: Split out command pool
...
This way we can pass the command pool around.
And that allows us to allocate and submitcustom buffers.
And that is necessary to make staging images work.
2016-12-20 18:01:11 +01:00
Benjamin Otte
ba7ac637bc
vulkan: Implement staging-buffer image upload
...
This is not enabled by default. Use GSK_RENDERING_MODE=staging-buffer to
use the code.
2016-12-20 18:01:11 +01:00
Benjamin Otte
81297857cc
snapshot: Convert Range, Scale, ColorScale
...
And of course Scrollbar, but that one does no drawing itself.
2016-12-20 18:01:11 +01:00
Benjamin Otte
3ef03c8bc0
gsk: Check for NULL in calls to gsk_cairo_node_get_surface()
...
That function does actually sometimes return NULL and is documented to
do so, so handle that case in the renderers (by omitting the node).
2016-12-20 18:01:11 +01:00
Benjamin Otte
e8cd71228a
gsk: Implement linear gradient render nodes
2016-12-20 18:01:11 +01:00
Benjamin Otte
cf520b7a1f
gsk: Add blend nodes
...
Implement blend mode support in GTK background compositing with it.
2016-12-20 18:01:11 +01:00
Benjamin Otte
3e26fadb24
css: Replace custom blend modes with GskBlendMode
2016-12-20 18:01:11 +01:00
Benjamin Otte
2118f394d2
gsk: Add missing blend modes
...
This brings GSK blend modes in line with the CSS spec.
2016-12-20 18:01:11 +01:00
Benjamin Otte
08a2a29c26
vulkan: Add infrastructure for multiple pipelines
...
And use it to draw solid colors with a 2nd pipeline.
2016-12-20 18:01:11 +01:00
Benjamin Otte
7d837a2ae6
vulkan: Split PipelineLayout into its own object
...
This way, we can share the layout between different pipelines.
2016-12-20 18:01:11 +01:00
Benjamin Otte
f4f0dba5c6
vulkan: Split render ops into seperate structs
...
This makes it a lot clearer which members are relevant for each
different operation.
2016-12-20 18:01:11 +01:00
Benjamin Otte
62eb9d42aa
vulkan: Add infrastructure for push constants
...
THe code includes fragment push constants for colors, but that code is
so far unused.
2016-12-20 18:01:10 +01:00
Benjamin Otte
58b2c1d009
cssimage: Port a few more simple ones to snapshots
2016-12-20 18:01:10 +01:00
Benjamin Otte
cd68c93b4c
render: Fall back later when rendering backgrounds
...
We can now render most backgrounds fine.
2016-12-20 18:01:10 +01:00
Benjamin Otte
3d5173d4ac
gtk: Fix memleaks
...
It turns out, some simple getters - such as
gdk_drawing_context_get_clip() - love copying things before returning
them.
I guess somebody has to burn cycles...
2016-12-20 18:01:10 +01:00
Benjamin Otte
dd1cf1ac0f
css: An opaque background does not allow omitting push_group
...
When the background-clip of the background is smaller than the
background-clip of blended images, not pushing a group is wrong.
Test testing exactly that included.
2016-12-20 18:01:10 +01:00
Benjamin Otte
23e35706b4
gsk: Add support for rounded clip rectangles
...
Also add support to GtkSnapshot, so people can push rounded clips.
2016-12-20 18:01:10 +01:00
Benjamin Otte
f96f16899d
roundedbox: Remove _gtk_rounded_box_path()
...
Use gsk_rounded_rect_path() instead.
That's a private GSK function, be we can just include its header.
2016-12-20 18:01:10 +01:00
Benjamin Otte
fa9b0f9965
roundedbox: Remove _gtk_rounded_box_move()
...
Use gsk_rounded_rect_offset() instead.
2016-12-20 18:01:10 +01:00
Benjamin Otte
e26f84fca0
gtk: Remove GtkRoundedBox struct
...
Use GskRoundedRect instead.
2016-12-20 18:01:10 +01:00
Benjamin Otte
a2dfb1e93f
roundedbox: typedef to GskRoundedRect
2016-12-20 18:01:10 +01:00
Benjamin Otte
c04bece131
roundedbox: Use a graphene_size_t for the corners
...
Obviously, I'm trying to port GtkRoundedBox to GskRoundedRect.
This is the second step on that path.
2016-12-20 18:01:10 +01:00
Benjamin Otte
6d012fb4ea
gtk: Get rid of GtkCssCorner
...
We have GskCorner now which is identical.
2016-12-20 18:01:10 +01:00
Benjamin Otte
59d638a09f
gsk: Add GskRoundedRect
...
It's essentially a port of GtkRoundedBox to graphene.
2016-12-20 18:01:10 +01:00
Benjamin Otte
0a0cbcdcb6
viewport: implement snapshot()
2016-12-20 18:01:10 +01:00
Benjamin Otte
b0175421f2
stack: Implement snapshot()
...
This uses the new push()/pop() mechanism to its fullest extent when
implementing transitions. It's fun to inspect the results in the
inspector.
Crossfades don't work yet, they continue using a Cairo fallback.
A side effect of the stack conversion is that widget-factory now uses
snapshots for a lot more things.
2016-12-20 18:01:10 +01:00
Benjamin Otte
1137483d15
snapshot: Work on pushing and popping again
...
It is now possible to call push() subfunctions for simple container
nodes with just a single child. So you can for example
gtk_snapshot_push_clip() a clip region that all the nodes that get
appended later will then obey.
gtk_snapshot_pop() will then not return a container node, but a clip
node containing the container node (and similar for the transform
example).
This is implemented internally by providing a "collect function" when
pushing that is called when popping to collects all the accumulated
nodes and combine them into the single node that gets returned.
To simplify things even more, gtk_snapshot_pop_and_append() has been
added, which pops the currently pushed node and appends it to the
parent.
The icon rendering code has been converted to this approach.
2016-12-20 18:01:10 +01:00