| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
This makes us take the fast path in signal emission.
|
|
|
|
|
| |
Align the property nicks of GtkCssNode with the column names
in the inspector node tree.
|
| |
|
|
|
|
|
|
|
|
| |
Previously this setting would just invalidate the whole CSS tree and
thereby hopefully avoid all cache usage.
Now, we actually don't cause extra invalidations anymore, but instead
avoid ever inserting anything into the cache when this setting is set.
|
|
|
|
|
|
| |
For now, the split out style cache doesn't cache anything. This is
mostly to make sure that bisections of wrong caching behavior will
bisect down to the commit that actually adds caching.
|
|
|
|
|
| |
Add a newline after CSS properties, so things don't run into
each other.
|
|
|
|
|
|
|
|
|
|
|
| |
Drop the custom style printing implementation in gtkcssnode.c and
instead reuse the existing gtk_css_style_print function, extending
it a bit to suit our needs.
Instead of computing values, just recognize initial values by
having no CSS section. Also do away with the show-initial flag, and
just always filter out initial values. The flag can come back when
it is needed.
|
|
|
|
|
|
|
| |
The node declaration has all the information we are printing
here (except for visibility). At the same time, redo the format
to print the information in selector format, and indicate
(in)visibility by enclosing the selector in square brackets.
|
| |
|
|
|
|
|
|
|
|
| |
Add a gtk_style_context_to_string function that can serialize
a CSS node or tree of nodes, optionally including CSS properties
as well.
This will be useful in writing tests.
|
|
|
|
| |
Replace unref + assignment + ref combinations by g_set_object_calls.
|
|
|
|
|
|
|
|
|
|
|
| |
Invisible nodes don't change the first/last-child status of the nodes
after/before them. That means we don't have to just check the state of
the adjacent node when modifying this state, but all their siblings
until we hit a visible node.
The same way, a node is not the first child if it has no previous
sibling, it is the first child if it has no previous visible sibling.
This is important for caching in the global lookup cache.
|
|
|
|
|
|
|
| |
gtk_css_node_insert_before/after can easily create cycles
which later lead to stack overflows. Even if we're not
catching all cycles here, at least we can detect obviously
invalid arguments, such as inserting a node next to itself.
|
|
|
|
|
|
| |
When we reuse styles that didn't change across changes to the source
CSS, make sure we clear the caches. Otherwise child nodes will pick up
styles from the old source CSS.
|
|
|
|
|
|
|
|
|
|
| |
In commit 2c613166771ea9118ebda91c311f11b3462330fb we avoided emitting
the style-changed signal if no CSS property changed.
Unfortunately, this also caused CSS styles to not be updated when
animations started if those animations did not change any CSS value
immediately. In those cases the animation would just never start.
The obvious example was the spinner.
|
|
|
|
|
|
|
|
| |
Catch the case where a CSS style did not change and don't emit the
style-changed signal in that case.
This saves not only the emission of the signal, but also doesn't cause
invalidation in child nodes, which would previously get a PARENT_STYLE
|
|
|
|
|
|
|
|
| |
Instead of having old and new style, now have a GtkCssStyleChange opaque
object that will compute the changes you are interested in for you.
This simplifies change signal handlers quite a bit and avoids lots of
repeated computation in every signal handler.
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Write up some of the insights from doing the CSS node transition,
so the knowledge is not lost.
|
|
|
|
|
|
| |
We were just catching the previous sibling before. Now we properly
invalidate all previous siblings (and also all other wiblings, but we
can think about optimizing that later).
|
|
|
|
|
|
|
|
| |
Since 4ebb5781eaf332da3f8ce5ffb5ecc8668a56f118 ID has a specific value,
while it used to be the same as NAME. Thus, explicitly list ID as a
radical change just like NAME.
https://bugzilla.gnome.org/show_bug.cgi?id=757397
|
| |
|
|
|
|
|
| |
Nothing is using the /*interned*/ annotations currently,
but if we are doing this, we should be consistent.
|
|
|
|
|
| |
The namespace that belonged to regions is supposed to be used for
CssNode names.
|
|
|
|
|
| |
This is a simple port, no code modifications so far other than replacing
gtk_style_context_save() with gtk_style_context_save_to_node().
|
| |
|
|
|
|
| |
This is less expensive.
|
| |
|
|
|
|
|
|
| |
The previous code was crashing when used as the returned classes array
would have been invalid after the first deletion. So if a 2nd class
would be deleted, invalid memory might have been referenced.
|
|
|
|
|
|
| |
Avoid creating the GList of strings when the GQuarks
will just be determined again. Instead have
gtk_style_context_list_classes() do it specifically.
|
|
|
|
|
| |
Introduce a GTK_DEBUG_CHECK() macro and use it to check for
GTK_DEBUG flags everywhere. Also guard all such places by
|
|
|
|
|
|
|
|
| |
We can actually share :first-child/:last-child related things now,
because we special case them. So the only positions we cannot cache are
nth-child/nth-last-child.
This should take care of a lot of Adwaita's styling.
|
| |
|
|
|
|
|
|
|
|
| |
gtk_css_node_set_after/before() are now called
gtk_css_node_insert_after/before().
This brings them in line with other similar APIs (ie GtkListStore). And
it allows easier usage of the API (see changes to gtkbox.c).
|
|
|
|
| |
This avoids running animations in hidden toplevels.
|
| |
|
|
|
|
|
|
| |
As a side effect, this should fix this bug:
https://bugzilla.gnome.org/show_bug.cgi?id=751910
|
|
|
|
| |
The previous code was overly complicated and wrong.
|
| |
|
|
|
|
| |
The signal gets emitted whenever the style needs to be changed.
|
|
|
|
|
|
| |
This allows monitoring the CSS tree. For now, moving a child to a
different position relative to its siblings while keeping the same
parent will cause a child-added + child-removed emission.
|
|
|
|
|
|
| |
We need to properly track if a node needs to propagate invalidation
state information to its children. We didn't do this properly before and
that could lead to us forgetting to invalidate nodes in corner cases.
|
|
|
|
|
|
|
|
| |
Do not propagate the TIMESTAMP change through the node tree, as that
causes lots of uneeded markings of nodes as invalid.
Instead, walk the node tree and find the nodes that have a non-static
style and only invalidate timestamps on those.
|
|
|
|
|
|
|
| |
Gets rid of the need to do
if (ANIMATED_STYLE() &&
animated_style_is_static(ANIMATED_STYLE(style))
|
|
|
|
|
|
|
|
|
| |
Only invalidate timestamps if the node is marked as invalid. We overload
the meaning of "invalid" as "tracks timestamps".
While I don't like the way this is written, it is an important
optimization because 95+% of nodes don't animate so timestamps don't
matter to them. But timestamps are invalidated 60x per second.
|
|
|
|
|
|
|
|
|
| |
We don't return a NULL style to mean "no changes" anymore, instead
we check new_style == old_style to mean that.
Make sure the code reflects this, otherwise we'll send
GTK_CSS_CHANGE_PARENT_STYLE invalidations everywhere and screw up
performance.
|
|
|
|
|
|
| |
We want to ensure that the style is created properly.
This also allows making the create_Style() function private.
|
|
|
|
|
|
| |
Now that the widget node recomputes styles on update_style() we can just
call it during validate(). That way, we don't need the widget node to
manually compute its style.
|