399df06d19
stylecontext: Refactor gtk_style_context_invalidate()
...
There's no need anymore to recreate styles, nodes do that automagically
now.
This allows making gtk_css_node_set_style() private.
2015-03-18 15:23:32 +01:00
6dd19306eb
cssnode: Create animated styles by default
...
... and hardcode transient and path nodes to never create animated
styles.
2015-03-18 15:23:32 +01:00
f43543165b
cssnode: Add optimization
...
Don't even try to propagate changes when we know there are none.
2015-03-18 15:23:32 +01:00
4b2cdb37fb
cssnode: Remove timestamp from gtk_css_node_validate()
...
GtkCssNode knows its own timestamp.
2015-03-18 15:23:32 +01:00
dbe5058b86
cssnode: Add API to query the timestamp
...
... and pass it to the API that computes new styles.
A special timestamp of 0 means "please don't animate" and is used when
no frame clock is available for a node.
2015-03-18 15:23:32 +01:00
5833858abf
cssnode: Make parent style change part of GtkCssNode
2015-03-18 15:23:32 +01:00
ceaa594fa4
cssnode: Propagate pending changes after recomputing new style
...
This way we can propagate if the new style actually changed anything.
2015-03-18 15:23:32 +01:00
cadf6a9d3c
cssnode: Add gtk_css_node_invalidate_style_provider()
...
This function not just invalidates the current node, but also all
children.
2015-03-18 15:23:32 +01:00
16b8972bee
cssnode: Change get_style_provider() vfunc
...
Instead of always returning a provider, allow the vfunc to return NULL
to mane "use same provider as parent". This allows a bunch of
optimizations.
2015-03-18 15:23:32 +01:00
c0f6e746a0
cssnode: Implement a way to properly track invalidations
...
See the comment in gtkcssnodeprivate.h for how this works.
2015-03-18 15:23:32 +01:00
13fd368781
cssnode: Change vfunc
...
This is mainly an attempt to merge the update_style() and validte()
vfuncs. Code is not there yet, but that's the idea.
Also, gtk_css_node_set_style() should not be public. And this gets
closer to that goal, too.
2015-03-18 15:23:31 +01:00
75b633ae08
cssnode: Only pass a boolean for parent changes
...
Nobody cares what changed in the parent, so don't track it.
2015-03-18 15:23:31 +01:00
e95985da26
cssstyle: Remove unused optimization
...
After measuring it, I realized the optimization never triggers for
Adwaita and rarely ever triggers for simple themes. So it is not
useful to keep it around.
2015-03-18 15:23:31 +01:00
9b73b39f9a
cssnode: Treat transient nodes as invisible nodes
...
Making transient nodes invisible allows us to remove special cases
without any bad side effects and they continue working just like they
did before.
2015-03-18 15:23:31 +01:00
2694545468
cssnode: Add visibility concept
...
This allows hiding nodes of invisible widgets.
And that in turn makes sure :nth-child() works as expected.
2015-03-18 15:23:31 +01:00
ee91fb71ca
box: Use CSS nodes instead of widget paths
...
This is a very simple patch that causes a bunch of overhead. But it
works.
2015-03-18 15:23:31 +01:00
507016cafc
cssnode: Refactor node tree modification code
...
This allows adding more API for it.
It also includes code that tracks modifications and invalidates siblings
and their positions whenever nodes get added or removed.
2015-03-18 15:23:31 +01:00
ee6d081ed9
cssnode: Remove now unused arg from vfunc
2015-03-18 15:23:31 +01:00
89115be3cb
cssnode: Add a matcher for nodes
...
... and use that matcher by default - ie for transient nodes.
2015-03-18 15:23:31 +01:00
2bf7bdd651
cssmatcher: Allow widget path matcher to take a node declaration
...
The node declaration has the same functionality as
gtk_css_node_declaration_add_to_widget_path(). So instead of using that
function on a path, you can use the original path and the declaration in
a matcher.
2015-03-18 15:23:30 +01:00
630f0f199e
cssnode: Split out a function
...
So far the vfunc is kinda quirky (the path argument is an out argument
for something you have to free when you're done with the matcher), but
I'm about to change that.
2015-03-18 15:23:30 +01:00
28043f0a92
cssnode: Refactor invalidation propagation
...
We want to be sure to gtk_css_node_invalidate() all potential changes.
2015-03-18 15:23:30 +01:00
cdd964a3af
cssnode: Change way invalidation is handled
...
Have a queue_validate() vfunc and a dequeue_validate() vfunc that are
called only on root nodes so they can queue a validation on their frame
clocks.
2015-03-18 15:23:30 +01:00
caf2fc9a10
cssnode: Only recreate styles when needed
2015-03-18 15:23:30 +01:00
219e52f7e1
cssnode: Automatically recreate style on get_style() call
...
When the style is invalid, redo it.
Make this a vfunc, so the widget nodes can opt out.
2015-03-18 15:23:30 +01:00
71813671ef
cssnode: Track pending changes here
...
... instead of GtkCssWidgetNode.
2015-03-18 15:23:30 +01:00
649edbe2fc
stylecontext: Move style creation functions to CssNode code
2015-03-18 15:23:30 +01:00
c4b88e05fd
stylecontext: Redo handling of differing state
...
Instead of passing an "override_state" flag, create a new CssNode just
for this simple lookup.
2015-03-18 15:23:30 +01:00
03ac5f310b
cssnode: Add gtk_style_context_get_style_provider()
...
... and use it when looking up properties.
2015-03-18 15:23:29 +01:00
4cc2af2db1
stylecontext: Move validation into GtkCssNode
2015-03-18 15:23:29 +01:00
55e68bc2ea
cssnode: Track invalid flag
...
Remove it from GtkStyleContext.
2015-03-18 15:23:29 +01:00
a589f98821
cssnode: Implement refcounting
...
The parent refs the child, so gtk_css_node_set_parent() adds/removes a
reference.
We should probably refactor this so that we name the function
parent.add(node) instead of node.set_parent(parent) - makes the
refcounting more clear.
2015-03-18 15:23:29 +01:00
721dce73e0
stylecontext: Handle parent in CssNode code
...
Make CssNode a real tree with a DOM-like API.
2015-03-18 15:23:29 +01:00
7bafb63ec3
cssnode: Handle invalidation
...
Handle invalidation of node inside the CssNode code, don't do it in the
stylecontext.
2015-03-18 15:23:29 +01:00
e2f6d4db43
cssnode: Split into 3 objects
...
- GtkCssWidgetNode
for style contexts owned by a widget
- GtkCssPathNode
for style contexts using a GtkWidgetPath
- GtkCssTransientNode
for nodes created with gtk_style_context_save()/restore()
2015-03-18 15:23:29 +01:00
726d8abb7d
cssnode: Turn into a GObject
...
This will allow us to use subclasses.
2015-03-18 15:23:28 +01:00
cf6d9edc12
stylecontext: Turn CssNode accesses into getters/setters
...
That way we can hide the struct in the source file.
2015-03-18 15:23:28 +01:00
be596f3967
stylecontext: Split out GtkCssNode into own file
...
The functionality of it is supposed to grow, so better put it in a
custom file early.
This is just a naive split so far, the next patches will split things
further.
2015-03-18 15:23:28 +01:00