Matthias Clasen
820c9403e3
cssnode: Make the profiler support unconditional
2020-01-21 11:38:34 -05:00
Benjamin Otte
2a5a52dd4b
selector: Add GtkSelectorCategory
...
This will make it easier to write more complex matching algorithms.
2020-01-21 16:59:37 +01:00
Benjamin Otte
e6a0a2f587
stylecontext: Remove excess gtk_css_node_invalidate() call
...
This call is not necessary, because gtk_css_node_set_parent() does the
right thing. (It probably hasn't been necessary for years, but I'm
not gonna try my luck on GTK3 at this stage.)
This code is usually called the first time
gtk_widget_get_style_context() is called on a widget and its style
context gets create. At that point however, the css nodes are in the
right place already, so no invalidation should happen.
2020-01-21 14:49:25 +01:00
Benjamin Otte
631ea5caac
Merge branch 'otte/for-master' into 'master'
...
Otte/for master
See merge request GNOME/gtk!1333
2020-01-21 12:09:26 +00:00
Benjamin Otte
d59784f7c7
win32: Don't save/restore the context for querying the font
...
Use the font in the current state.
2020-01-21 12:48:20 +01:00
Benjamin Otte
193eb5b0dd
widget: Remove gtk_widget_get_path()
2020-01-21 12:47:16 +01:00
Benjamin Otte
6a1adf6f1a
cssnode: Remove unused widget path vfuncs
2020-01-21 12:47:16 +01:00
Benjamin Otte
563ad2db1b
containter: Remove gtk_container_get_path_for_child()
2020-01-21 12:47:16 +01:00
Benjamin Otte
c85d9a3259
stylecontext: Change semantics of gtk_style_context_get_path()
...
Widget contexts now return NULL here. A non-NULL result requires a
previous call to gtk_style_context_set_path()
2020-01-21 12:47:16 +01:00
Benjamin Otte
b9c81b1b94
widget: Initialize cssnode name asap
...
That way, it's correct in subclass's init functions.
2020-01-21 12:47:16 +01:00
Matthias Clasen
a38ba91e35
Add some static assertions
...
Add assertions that ensure the relationships between
css property IDs that we rely on are preserved.
2020-01-20 22:54:26 -05:00
Matthias Clasen
a350c2452a
Add profiler support for css validation
...
Push numbers about css validation and style creation
to sysprof.
2020-01-20 21:55:16 -05:00
Benjamin Otte
025902b9fb
textview: Make cursor work when blinking is disabled
2020-01-21 01:42:00 +01:00
Matthias Clasen
7e2e92a87e
cssselector: Inline a few things
2020-01-19 15:56:54 -05:00
Matthias Clasen
be4d42507c
style cascade: Remove some pointless casts
...
The casts and checks in gtkstylecascade.c are leftovers
from when we had GtkStyleProviderPrivate, and no longer
serve any purpose.
2020-01-19 15:56:54 -05:00
Matthias Clasen
6e88ccf7fb
pick: Take advantage of transform categories
...
Transform categories let us easily avoid doing matrix math
when we can just do a simple translation.
2020-01-19 15:56:54 -05:00
Matthias Clasen
cec4c15f05
Refactor gtk_widget_pick
...
Split this into a recursive part and a public
entry point. This lets us avoid some duplicate
checks.
2020-01-19 15:56:54 -05:00
Matthias Clasen
95f00c6071
css: Redo the pseudoclass selectors
...
There is no need to duplicate the classes, we can make
do with a single class for all the states.
2020-01-18 23:06:25 -05:00
Matthias Clasen
55cfeccfd2
css: Go back to clearing out selectors
...
Now that we use the selector tree for change computation
again, we don't need the ruleset selectors anymore.
Bring back the code that cleans them out.
2020-01-18 23:06:25 -05:00
Matthias Clasen
a463dccd81
Refine the selector tree printing
...
Also show which tree nodes have exact matches.
2020-01-18 14:32:55 -05:00
Matthias Clasen
a5530caec3
Actually turn of css value accounting
...
We need an #undef here. While doing so, make sure
it compiles without warnings when disabled.
2020-01-18 14:30:23 -05:00
Matthias Clasen
92cfc03821
inspector: Avoid an array overrun
...
Commit 3f56af3738
added a new value to the
GdkInputSource enum, forgetting that the inspector
has an array of names to match this enum.
Fixes: https://gitlab.gnome.org/GNOME/gtk/issues/2385
2020-01-18 11:49:16 -05:00
Timm Bäder
26506b0a15
cssimagefallback: Don't snapshot invisible colors
...
This avoids a few render nodes later.
2020-01-18 08:49:52 +01:00
Timm Bäder
f8fa946989
widget: Get opacity without GtkStyleContext
...
GtkStyleContext is really just unnecessary here.
2020-01-18 08:49:52 +01:00
Timm Bäder
119ebe1d70
cssstyle: set font variations in get_pango_font()
...
Doesn't make sense to set all the css values on the font description in
there except for the font variations, so do these here as well.
2020-01-18 08:49:52 +01:00
Timm Bäder
dda54b2b8f
widget: Get DPI from style directly
...
Instead of going through GtkStyleContext.
2020-01-18 08:49:52 +01:00
Timm Bäder
821efcb725
cssstyle: Implement get_pango_font() directly
...
Instead of going through the slow GValue code path. This function was
unused, so use it in GtkWidget's update_pango_context() now.
2020-01-18 08:49:52 +01:00
Matthias Clasen
f5182f1c35
css: Mark transform value as computed
...
This is not very useful, since transitions generate
a ton of transforms anyway.
2020-01-18 08:49:52 +01:00
Matthias Clasen
1efa39672b
css: Simplify default values
...
We no longer need to create one-element arrays or
corners with two identical values.
2020-01-18 08:49:52 +01:00
Matthias Clasen
3f38a1c94c
css: Re-add a lost special case
...
When the border-style special cases were moved in
c687f485fd
, the one for outline-width was lost.
Make the code more compact, and bring the special
case back.
2020-01-18 08:49:52 +01:00
Timm Bäder
d861dd5df8
csshorthandproperty: Try to avoid allocating a GString for 1 font
2020-01-18 08:49:52 +01:00
Timm Bäder
8c98fd2e46
cssdimensionvalue: remove early-out code from transition()
...
We do this directly in gtk_css_value_transition() now
2020-01-18 08:49:52 +01:00
Timm Bäder
2e89c5360a
numbervalue: Add early-out to multiply()
...
If the factor is 1, we already know what the result is going to be.
2020-01-18 08:49:52 +01:00
Timm Bäder
e448fc41f3
cssnumbervalue: Move early-out code to GtkCssValue
...
These checks make sense for all css values.
2020-01-18 08:49:52 +01:00
Timm Bäder
c9e972eecb
cssdimensionvalue: Implement transition()
...
Instead of falling back to the generic gtk_css_number_value_transition
(which can allocate multiple new css values), just implement this here.
2020-01-18 08:49:52 +01:00
Timm Bäder
45455f1bdb
Remove GtkCssShadowsValue
...
Previously, we wrapped all GtkCssShadowValues in a GtkCssShadowsValue,
even if it was just one shadow. This causes an unnecessary bloat in
css values.
Make each GtkCssShadowValue able to handle multiple shadows instead, and
use gtk_css_shadow_value* API everywhere.
2020-01-18 08:49:52 +01:00
Timm Bäder
a3769eb0e5
cssshadowvalue: Only create 2 shadows values for transitions
...
This is for cases where we want to transition from "no shadow" to
"shadow", which we need quite a lot.
2020-01-18 08:49:52 +01:00
Timm Bäder
7c75ea376f
cssvalue: Improve css value accounting output
...
And make it fully optional behind an #ifdef.
2020-01-18 08:49:52 +01:00
Timm Bäder
96143548ac
csscolorvalue: check for singletons in new_literal
...
Gets rid of another ~400 GtkCssValue instances in the widget-factory.
2020-01-18 08:49:51 +01:00
Timm Bäder
0b2a6e34c4
cssimage: Add is_computed vfunc
...
Same semantics as the is_computed field of GtkCssValue
2020-01-18 08:49:51 +01:00
Timm Bäder
24d8c0a7dc
css: Set the is_computed flag for more values
...
With these changes, we skip roughly 85% of compute() calls during
widget-factory startup
2020-01-18 08:49:51 +01:00
Timm Bäder
ba08f5e67d
cssvalue: Don't call compute() for already computed css values
...
As per the previous commit, this is unnecessary.
Even with the small amount of css values we mark as is_computed, we
already skip computing over 60% of them like this during the startup of
the widget factory.
2020-01-18 08:49:51 +01:00
Timm Bäder
31aa5a0e53
cssvalue: Add is_computed flag
...
When a css value has "child" css values (e.g. a linear gradient has
several color stop css values) which are all computed (won't change when
compute() is called on them), we want to skip computing the entire
subtree.
Since css values are immutable, we can set the is_computed flag at
construct time.
Since GtkCssValue instances are 0-initialized in _gtk_css_value_alloc,
the default for is_computed it FALSE. This commit only sets it to TRUE
in a few cases, such as various "none" singleton values which will never
change. Later commits will refine this and set it for more values.
2020-01-18 08:49:51 +01:00
Timm Bäder
8c678ac756
css: Move border-width special cases out of GtkCssDimensionValue
...
Move them to style computation instead, so we don't have them in such a
generic place.
2020-01-18 08:49:51 +01:00
Timm Bäder
7d1f915a61
csscolorvalue: Don't copy rgbas when applying function
...
We get const pointers to the colors, so just use those and unref the
values later.
2020-01-18 08:49:51 +01:00
Timm Bäder
fc2d05ee38
cssimageradial: Use array + length instead of GArray
...
This makes sense since we're not going to change the (amount of) colors
after parsing.
2020-01-18 08:49:51 +01:00
Timm Bäder
00aa4f0597
cssimagelinear: Use count+array for the color stops, not GArray
...
This makse sense but will also make later changes to GtkCssImageLinear
simpler.
2020-01-18 08:49:51 +01:00
Timm Bäder
3401150cca
cssimagefallback: Don't compute new image if only a color is set
...
Themes might use e.g. image(red), which is a constant value and will
never change. In that case, the fallback image has ->color set, but not
->images. If that's the case and the computed color is the same as
the one we already have, just return the already existing image.
2020-01-18 08:49:51 +01:00
Timm Bäder
67991ed0f4
Remove GtkCssRgbaValue
...
The differenciation between a literal color value and an RGBA value
caused problems in various situations. Just treat the two the same but
don't allow access to the rgba value of a non-literal color value.
This gets rid of around 1.6k rgba values in the widget-factory.
2020-01-18 08:49:51 +01:00
Matthias Clasen
741e12012d
dump css value stats
2020-01-18 08:49:51 +01:00