Matthias Clasen
eb23e23b03
ngl: Avoid cairo_to_png in debug output
...
Just use a GL texture and gdk_texture_save_to_png,
it was made for this.
2021-09-15 21:18:34 -04:00
Matthias Clasen
423a4d4c3e
Annotate gsk_cairo_blur_compute_pixels as const
2021-09-14 16:38:08 -04:00
Matthias Clasen
6faef4416f
Annotate gsk_ngl_uniform_state_align as pure
2021-09-14 16:38:08 -04:00
Matthias Clasen
5f452a5e6c
Annotate gsk_rounded_rect_is_circular as pure
...
And also mark gsk_rounded_rect_to_string as malloc.
2021-09-14 16:38:08 -04:00
Matthias Clasen
060f2d5f65
Annotate pango_glyph_string_num_glyphs as pure
2021-09-14 16:38:08 -04:00
Benjamin Otte
193b383739
ngl: Simplify and unbug texture download
...
If we can't handle the texture, always just download_texture() it,
that way we are sure it's a memory texture.
2021-09-13 01:56:47 +02:00
Benjamin Otte
9c8e464b04
texture: Add GdkMemoryConversion private enum
...
Now gdk_memory_convert() converts to one of these conversions instead of
re(ab)using parts of the GdkMemoryFormat enum.
2021-09-12 05:22:21 +02:00
Benjamin Otte
140976a670
Merge branch 'wip/otte/for-master' into 'master'
...
rendernode: Write the whole node
See merge request GNOME/gtk!3938
2021-09-11 20:56:39 +00:00
Benjamin Otte
9f2b847835
rendernode: Write the whole node
...
It turns out g_output_stream_write_bytes() does not write the bytes.
It should be renamed to g_output_stream_write_some_of_the_bytes() maybe.
2021-09-11 22:28:40 +02:00
Matthias Clasen
155a4fac5c
Add vectorized half-float conversion
...
We can't make the -4 versions inline, since
we use ifuncs for them, so make vectorized
versions.
Test included.
2021-09-10 22:17:31 -04:00
Matthias Clasen
65ce3eb207
Avoid hand-rolled color glyph information
...
Followup to b244f31337
. Pango provides color glyph
information for us now, so we don't need to steal a
bit anymore.
2021-09-05 10:58:50 -04:00
Matthias Clasen
ce2b2128bb
Revert "gsk: Add font options to text nodes"
...
This reverts commit f1347f5841
.
2021-09-04 15:42:05 -04:00
Matthias Clasen
41c25b8809
Revert "gsk: Add font options to the glyph cache"
...
This reverts commit 6599cb001f
.
2021-09-04 15:42:05 -04:00
Matthias Clasen
b5ff35ff3e
Revert "gsk: Pass font options along"
...
This reverts commit 299c7c3514
.
2021-09-04 15:42:05 -04:00
Matthias Clasen
299c7c3514
gsk: Pass font options along
...
Use the font options from the text node when
looking up glyphs.
2021-09-03 12:52:05 -04:00
Matthias Clasen
6599cb001f
gsk: Add font options to the glyph cache
...
The cairo_t that we create to render glyphs for
the glyph cache needs to match the font options
that are supposedly governing how glyphs are
drawn.
Since we allow font options to be different per
widget in gtk, we need to have them at least at
the level of individual render nodes. Adding them
to the lookup key for the glyph cache has the
side effect of solving another problem: We are
not flushing the cache when font options change.
2021-09-03 12:52:05 -04:00
Matthias Clasen
f1347f5841
gsk: Add font options to text nodes
...
Since font options affect how the glyphs get rendered,
we need to pass the font options down from the gtk level
to where the glyph cache is populated.
Add a new gsk_text_node_new_full api that takes a
cairo_font_options_t in addition to the other parameters.
2021-09-03 12:43:35 -04:00
Matthias Clasen
b244f31337
Use color glyph information from Pango
...
Pango now sets a bit in PangoGlyphVisAttr for
color glyphs, so we don't need to do that
ourselves anymore.
2021-09-01 01:47:06 -04:00
Benjamin Otte
0b7a36ce33
rendernode: Add (de)serialization support for render nodes
...
This includes our own new mime type for render nodes, too.
2021-08-30 06:02:15 +02:00
Benjamin Otte
1957915940
rendernode: Add GValue functions for render nodes
...
This is needed as GskRenderNode is its own fundamental type and has its
own GValue infrastructure. And I want to put render nodes into the
clipboard which uses GValues.
2021-08-30 06:02:15 +02:00
Matthias Clasen
1cfd340cae
ngl: Avoid a coordinate overflow
...
This was showing up as big text selections going
missing sporadically.
Fixes : #4214
2021-08-28 15:42:30 -04:00
Matthias Clasen
e9e373913e
gsk: Drop the gl renderer
...
ngl supports all the same platforms as gl
now, and has seen more improvements in the
last cycle.
2021-08-20 22:58:30 -04:00
Benjamin Otte
ea07bf7536
Merge branch 'wip/otte/for-master' into 'master'
...
ngl: Make current when unrealizing
See merge request GNOME/gtk!3835
2021-08-08 01:09:31 +00:00
Benjamin Otte
80e6f1ca8c
ngl: Make current when unrealizing
...
The profiler (at least) discards GL objects and we want to discard them
on the right context.
2021-08-08 02:17:08 +02:00
Matthias Clasen
916886312a
Merge branch 'wip/exalm/shadow-extents' into 'master'
...
Shrink shadow extents
See merge request GNOME/gtk!3825
2021-08-05 16:39:52 +00:00
Alexander Mikhaylenko
46a9538b6a
Shrink shadow extents
...
Long time ago, Cairo shadows in both GTK3 and 4 were drawn at a size about
twice their radius. Eventually this was fixed but the shadow extents are
still calculated for the previous size and appear unreasonably large: for
example, 141px for a 50px radius shadow. This can get very noticeable in
places such as invisible window frame which gets included into screenshots.
https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/3419 just divides the
radius by 2 when drawing a shadow with Cairo, do the same when calculating
extents.
See https://gitlab.gnome.org/GNOME/gtk/-/issues/3841
2021-08-04 14:47:17 +05:00
Matthias Clasen
e1606ce8eb
Merge branch 'color-glyph-fixes' into 'master'
...
gsk: Make color glyphs
Closes #4141
See merge request GNOME/gtk!3812
2021-07-31 20:54:39 +00:00
Matthias Clasen
915c229396
gsk: Use harfbuzz for color fonts
...
harfbuzz has all the information we need, so we
can avoid poking directly at freetype apis. Also
drop the caching of color glyph information until
it turns out to be a problem.
2021-07-31 16:34:38 -04:00
Matthias Clasen
a7a2dbc3ea
gsk: Cache per-glyph color information
...
We don't really want to load the bitmaps every time
we create a render node, so do it once and cache the
information on the PangoFont.
2021-07-31 16:34:38 -04:00
Matthias Clasen
7e8f586859
ngl: Use per-glyph color information
...
Decide per-glyph whether we need color nor not.
Fixes : #4141
2021-07-31 16:34:24 -04:00
Matthias Clasen
bb9dccd773
gsk: Mark color glyphs
...
Steal a bit from PangoGlyphVisAttr to mark glyphs
that have color.
2021-07-31 16:34:24 -04:00
Matthias Clasen
ed41c46926
ngl: Bypass pango for glyph cache rendering
...
We can just use cairo directly here,
and cut out some layers of pango in the middle.
2021-07-30 19:46:07 -04:00
Matthias Clasen
09deb1d757
ngl: Cosmetics
...
Use the macro we already have to check that colors
are fully transparent.
2021-07-26 13:42:10 -04:00
Matthias Clasen
0ef12193f9
gsk: Optimize gsk_transform_to...
...
Optimize these functions for the common cases.
2021-07-24 18:48:10 -04:00
Matthias Clasen
b695ef9168
gsk: Add a shortcut for a common transform case
...
Add a private getter for the translation part of a
transform node, to avoid pulling it out of the transform
over and over.
2021-07-24 18:48:09 -04:00
Matthias Clasen
7fb1389648
gsk: Add a private getter for container children
...
No need to get them one-by-one, in our inner loop.
2021-07-24 18:48:09 -04:00
Matthias Clasen
f88efb811b
ngl: Reduce type checking overhead
...
No need to be very careful here, these are entirely
internal types.
2021-07-24 18:48:09 -04:00
Matthias Clasen
466d33ca69
ngl: Speed up clipping calculations a bit
...
Exit as early as possible from intersect_rounded_rectilinear.
2021-07-24 18:48:09 -04:00
Matthias Clasen
7bdda15b86
Cosmetics
...
Fix a comment typo.
2021-07-22 17:03:08 -04:00
Matthias Clasen
a10b1b7341
Add more sysprof marks
...
Add a few more marks during gtk_init to figure out where
our startup time goes, and avoid the sysprof initialization
from distorting the first mark.
2021-07-22 12:51:32 -04:00
Benjamin Otte
c7320df0c9
gdk: Add gdk_gl_context_is_shared()
...
... and use it in the GL renderers.
2021-07-22 16:27:31 +02:00
Benjamin Otte
dd666e4fe4
ngl: Store the shared driver in the display
...
... instead of some random GL context.
2021-07-22 16:23:56 +02:00
Benjamin Otte
430b6f8fb1
gdk: Add GdkDisplay::init_gl vfunc
...
The vfunc is called to initialize GL and it returns a "base" context
that GDK then uses as the context all others are shared with. So the GL
context share tree now looks like:
+ context from init_gl
- context1
- context2
...
So this is a flat tree now, the complexity is gone.
The only caveat is that backends now need to create a GL context when
initializing GL so some refactoring was needed.
Two new functions have been added:
* gdk_display_prepare_gl()
This is public API and can be used to ensure that GL has been
initialized or if not, retrieve an error to display (or debug-print).
* gdk_display_get_gl_context()
This is a private function to retrieve the base context from
init_gl(). It replaces gdk_surface_get_shared_data_context().
2021-07-22 16:23:56 +02:00
Matthias Clasen
1c90bb522e
ngl: Handle negative scales
...
Scale factors can be negative, but we were not
looking out for that, triggering an assertion when
trying to create a render target with negative
width of height. Avoid that.
Fixes : #4096
2021-07-15 16:40:13 -04:00
Matthias Clasen
c799452973
ngl: Do nothing for transparent text nodes
...
Like the previous commit - a transparent text node
will not produce any visible pixels, so bail out early.
2021-07-15 13:18:23 -04:00
Matthias Clasen
fd48afb77d
ngl: Do nothing for transparent color nodes
...
No need to send commands to the GPU to render transparency.
2021-07-15 13:18:23 -04:00
Benjamin Otte
ca3d942b9b
rendernodeparser: Remove leftover debug prints
2021-07-14 20:19:40 +02:00
Benjamin Otte
5470a1344d
rendernodeparser: Don't use %g when writing file
...
%g is locale dependent and can add "," where "." should be. Use
string_append_double() instead.
2021-07-14 20:18:44 +02:00
Matthias Clasen
fc9c34897a
ngl: Make the C half-float implementation accessible
...
Make this accessible for tests.
2021-07-13 09:03:49 -04:00
Matthias Clasen
f45c0b9609
gsk: Another vbo_size overflow fix
...
We can overflow vbo_size not just by batching
too much, but also by producing humongous text
nodes. Split them up.
2021-06-29 15:22:40 -04:00