Compare commits

...

48 Commits

Author SHA1 Message Date
Matthias Clasen
f502743621 gpu: Never create empty images
Creating a Vulkan image with width or height zero is an error,
so check at the time when we compute the device pixel rect.

The node file in the included test was devised by Benjamin Otte.

Fixes: #6691
2024-05-06 22:10:38 -04:00
Benjamin Otte
de5b6764bc Merge branch 'wip/otte/for-6694' into 'main'
dmabuf: Ref previous context

Closes #6694

See merge request GNOME/gtk!7232
2024-05-06 22:56:05 +00:00
Benjamin Otte
bc17dfa83d dmabuf: Ref previous context
In case the context's only reference was held by being the current
context, setting the new context would free it.

Resetting it later would then be a use-after-free.

Fixes #6694
2024-05-07 00:34:47 +02:00
Matthias Clasen
84a98f74c1 Merge branch 'fix-test-breakage' into 'main'
Fix recent test breakage

See merge request GNOME/gtk!7233
2024-05-06 21:56:13 +00:00
Matthias Clasen
50facedc47 Fix recent test breakage
I neglected to fix affected tests in 76b0687467, since
ci was down at the time. Sorry about that.
2024-05-06 17:11:44 -04:00
Matthias Clasen
200cacc3ad Merge branch 'matthiasc/for-main' into 'main'
inspector: Show more key event details

See merge request GNOME/gtk!7224
2024-05-05 17:29:29 +00:00
Matthias Clasen
eed3cab29f Merge branch 'list-item-factory-docs' into 'main'
docs: Clarify types for BuilderListItemFactory

See merge request GNOME/gtk!7226
2024-05-05 15:00:49 +00:00
Matthias Clasen
76b0687467 Put newlines before base64 blobs
This makes things look a bit cleaner in the node editor, since
the first line no longer sticks out.
2024-05-05 10:16:01 -04:00
Matthias Clasen
5039dc40f8 Merge branch 'main' into 'main'
vulkan: Don't queue presentation if image acquisition fails

See merge request GNOME/gtk!7204
2024-05-05 04:06:44 +00:00
Doğukan Korkmaztürk
7c3de4a2da vulkan: Recreate swapchain when it is necessary or beneficial
Currently, GTK does not check the result of vkAcquireNextImageKHR() and
assumes that it always succeeds. As a result, the vkQueuePresentKHR() is
unconditionally set to wait for the semaphore passed to
vkAcquireNextImageKHR() earlier.

However, if vkAcquireNextImageKHR() fails for some reason, the semaphore
passed to it does not get signalled. This causes the presentation
command to wait for the semaphore to be signalled indefinitely, which
causes GTK to hang.

This change adds error handling around vkAcquireNextImageKHR() to make
GTK recreate the Vulkan swapchain when it is necessary or beneficial and
helps avoiding situations that could cause indefinite waits.
2024-05-04 22:14:33 -04:00
Matthias Clasen
b486e9b760 inspector: Show more key event details
Consumed modifiers are relevant to understanding why shortcut
do or do not match, so show them.
2024-05-04 21:29:40 -04:00
Matthias Clasen
ce2fd8a0d0 NEWS: Updates 2024-05-04 21:29:40 -04:00
Hugo Carvalho
99b1b26fdb Update Portuguese translation
(cherry picked from commit a249b58094)
2024-05-04 22:23:06 +00:00
James Westman
b7e4bbaf74 docs: Clarify types for BuilderListItemFactory
The docs for GtkBuilderListItemFactory previously stated that the
template must extend GtkListItem. However, this is not always true.
GtkListView has headers which must extend GtkListHeader, and
GtkColumnView has its own types.

Clarified this in the GtkBuilderListItemFactory docs, and specified the
expected types in the GtkColumnView, GtkListView, and GtkGridView docs.
2024-05-04 13:20:41 -05:00
Matthias Clasen
f579b171a9 Merge branch 'gbsneto/more-win32-cleanups' into 'main'
Various cleanups around Win32

See merge request GNOME/gtk!7223
2024-05-03 17:27:05 +00:00
Georges Basile Stavracas Neto
f9929d15eb gtk-demo: Remove set-but-unused variable 2024-05-03 12:30:39 -03:00
Georges Basile Stavracas Neto
c45a6ad52d gsk/gpu: Use G_GSIZE_FORMAT for printing gsizes
On Windows, gsize is a long long unsigned. The compiler complains about
that.

Use G_GSIZE_FORMAT which translates to %llu on Windows, %lu on most
platforms, and sometimes just %u on rare cases.
2024-05-03 12:30:39 -03:00
Matthias Clasen
7233e38aa8 Merge branch 'gbsneto/cleanup-meson-profiler' into 'main'
testsuite: Remove leftover code from meson.build

See merge request GNOME/gtk!7222
2024-05-03 13:44:07 +00:00
Benjamin Otte
73ba97acd9 Merge branch 'duplicate-gl-version' into 'main'
glcontext: Remove duplicate check for GL version

See merge request GNOME/gtk!7221
2024-05-03 13:42:03 +00:00
Georges Basile Stavracas Neto
7d2ad604d2 win32/vulkancontext: Remove unused variable
Silences a compiler warning.
2024-05-03 09:52:57 -03:00
Georges Basile Stavracas Neto
45e64b915c win32/wgl: Initialize hwnd to NULL
Otherwise there's a valid code path that may return it uninitialized.
2024-05-03 09:51:46 -03:00
Georges Basile Stavracas Neto
ebaef9f18b win32/cursor: Ignore GdkPixbuf deprecation warning
Seems harmless to ignore this for now, other bits of code also ignore
this.
2024-05-03 09:49:46 -03:00
Robert Ancell
c73fe8ac4a glcontext: Remove duplicate check for GL version 2024-05-03 16:40:01 +12:00
Georges Basile Stavracas Neto
8ed8f883d1 testsuite: Remove leftover code from meson.build
Performance tests were dropped at 5dd0d39a6b. The 'profiler' option
was renamed to 'sysprof' by commit e915a1aa7f.
2024-05-02 20:28:27 -03:00
Matthias Clasen
032a5afc20 Merge branch 'accessible_help_text' into 'main'
accessible help text

See merge request GNOME/gtk!6992
2024-05-02 17:20:17 +00:00
Matthias Clasen
0064500146 Merge branch 'michaelweghorn/a11y_role_mapping' into 'main'
a11y atspi: Improve mapping for container roles

See merge request GNOME/gtk!7209
2024-05-02 01:33:02 +00:00
Matthias Clasen
4582ddcad9 Merge branch 'matthiasc/for-main' into 'main'
gtk-demo: Name some idles

See merge request GNOME/gtk!7218
2024-05-02 01:30:42 +00:00
Matthias Clasen
8bb2720494 icontheme: Move css style code where it belongs
Move gtk_icon_theme_lookup_symbolic_colors to gtkcssstyle.c, and
rename it to gtk_css_style_lookup_symbolic_colors.

Update all callers.
2024-05-01 16:06:16 -04:00
Matthias Clasen
3b8218a99e gtk-demo: Name some idles
These show up in profiles, so give them a name.
2024-05-01 16:06:16 -04:00
Matthias Clasen
9a8fa8dd82 Merge branch 'wip/chergert/fix-6684' into 'main'
undo: fix off-by-one when prepending to inline string

Closes #6684

See merge request GNOME/gtk!7217
2024-05-01 19:50:23 +00:00
Matthias Clasen
d6892c85dc Merge branch 'serialize-hint-metrics' into 'main'
gsk: Serialize hint metrics too

See merge request GNOME/gtk!7215
2024-05-01 18:40:13 +00:00
Christian Hergert
d3c20c3269 undo: fix off-by-one when prepending to inline string
This fixes the conditional in istring_prepend() to match other uses,
notably to match istring_append().

Fixes #6684
2024-05-01 11:28:55 -07:00
Matthias Clasen
9904259661 gsk: Serialize hint metrics too
We need this to ensure that we properly roundtrip text nodes
without any changes.
2024-05-01 14:00:18 -04:00
Emin Tufan Çetin
a8fcde11de Update Turkish translation 2024-05-01 16:19:02 +00:00
Matthias Clasen
d2d4cd64cd Merge branch 'no-a11y-focus-events' into 'main'
a11y: Stop emitting Focus events

See merge request GNOME/gtk!7213
2024-05-01 15:18:42 +00:00
Matthias Clasen
2c7e68d98f Merge branch 'matthiasc/for-main' into 'main'
Revert "gdk/frameclock: add mark when we discover frames may drop"

See merge request GNOME/gtk!7214
2024-05-01 12:43:52 +00:00
Matthias Clasen
6f42f8ef2c Revert "gdk/frameclock: add mark when we discover frames may drop"
This reverts commit 84a304e66e.

This produces marks that are confusing to me. They don't correlate
with actual gaps in the frame cycle and often overlap with regular
'window presented' marks. Also, the function we are emitting these
marks from is called from the get_frame_time getter, and we
definitely don't want to emit marks from there.
2024-05-01 08:03:16 -04:00
Matthias Clasen
152dd70cde a11y: Drop the Focus event from the interface too
We don't use it anymore.
2024-05-01 07:57:19 -04:00
Matthias Clasen
8ec1045c87 a11y: Stop emitting Focus events
These have been deprecated for a long time, and we have been asked
to stop emitting them.

Related: #454
2024-05-01 07:55:47 -04:00
Michael Weghorn
ad8613876c a11y atspi: Improve mapping for container roles
GTK_ACCESSIBLE_ROLE_GENERIC is for
"a nameless container that has no semantic meaning of its own",
for which AT-SPI role ATSPI_ROLE_PANEL [1]
("A generic container that is often used to group
objects.") fits better than ATSPI_ROLE_FILLER
("A object that fills up space in a user interface."),
so map to this one.

With this in place, widgets like GtkBox are again
reported with the panel role on AT-SPI level after
commit a86923de94
("a11y: Change the role for many containers"),
whose commit message suggests that the change
on the AT-SPI level was unintended.

For GTK_ACCESSIBLE_ROLE_GROUP, use the corresponding
ATSPI_ROLE_GROUPING ("A group of related widgets.
This group typically has a label.").

[1] https://docs.gtk.org/atspi2/enum.Role.html
2024-04-30 14:44:11 +02:00
Emmanuele Bassi
f537a55b71 Coding style fixes 2024-04-24 11:57:00 +01:00
Lukáš Tyrychtr
b0450d4b1b Do not perform a changed help-text check twice 2024-04-23 11:40:51 +02:00
Lukáš Tyrychtr
91ff8bf336 The new member needs a separate docblock 2024-04-23 11:40:51 +02:00
Emmanuele Bassi
7b145f72dc Apply review feedback fixes 2024-04-23 11:40:51 +02:00
Lukáš Tyrychtr
0dcc21b605 4.14 did not cut it 2024-04-23 11:40:51 +02:00
Lukáš Tyrychtr
bd43a9e868 Document the new property 2024-04-23 11:40:51 +02:00
Lukáš Tyrychtr
9bf23d80a1 Test the new property and fix oversights found by the test 2024-04-23 11:40:51 +02:00
Lukáš Tyrychtr
38fd66dc04 a11y: Support setting the accessible help text
This adds support for setting a string used to describe the operation of a control,
if there's something special about it.

This is mapped to the HelpText property in the AT-SPI2 backend,
and has equivalent in others.
2024-04-23 11:40:51 +02:00
52 changed files with 2309 additions and 1359 deletions

48
NEWS
View File

@@ -1,6 +1,54 @@
Overview of Changes in 4.15.1, xx-xx-xxxx
=========================================
* GtkGraphicsOffload:
- Don't crash without a child
* CSS:
- Support the :root selector
* Icontheme:
- Make symbolic svg loading more efficient
- Handle color-free symbolics more efficiently
* Accessibility:
- Make the gtk-demo sidebar search more accessible
- Stop emitting focus events
* GDK:
- Support XDG_ACTIVATION_TOKEN
- dmabuf: Be more defensive when importing unknown formats to GL
- dmabuf: Use narrow range for YUV
* GSK:
- Improve logging for GDK_DEBUG=offload
- Improve logging for GSK_DEBUG=renderer
- gpu: Warn about inefficient texture import
- gpu: Handle tiny offscreens correctly
- vulkan: Add profiler marks in various places
- vulkan: Fix a problem with imported dmabufs showing up black
* Wayland:
- Use wl_compositor version 6
* X11:
- Implement a missing method
* Build:
- Fix many ubsan warnings
* Debugging:
- Show more texture details in the recorder
* macOS:
- Fix problems with events handed back to the OS
- Respect GDK_DEBUG=default-settings
* Translation updates:
Korean
Turkish
Overview of Changes in 4.15.0, 21-04-2024
=========================================

View File

@@ -363,7 +363,9 @@ insert_markup_idle (gpointer data)
if (g_get_monotonic_time () - begin > G_TIME_SPAN_MILLISECOND)
{
g_idle_add (insert_markup_idle, data);
guint id;
id = g_idle_add (insert_markup_idle, data);
g_source_set_name_by_id (id, "[gtk-demo] insert_markup_idle");
return G_SOURCE_REMOVE;
}
@@ -398,7 +400,9 @@ parse_markup_idle (gpointer data)
do {
if (g_get_monotonic_time () - begin > G_TIME_SPAN_MILLISECOND)
{
g_idle_add (parse_markup_idle, data);
guint id;
id = g_idle_add (parse_markup_idle, data);
g_source_set_name_by_id (id, "[gtk-demo] parse_markup_idle");
return G_SOURCE_REMOVE;
}

View File

@@ -40,7 +40,7 @@ get_win32_all_locales_scripts (LPWSTR locale_w, DWORD flags, LPARAM param)
{
wchar_t *langname_w = NULL;
wchar_t locale_abbrev_w[9];
gchar *langname, *locale_abbrev, *locale, *p;
gchar *langname, *locale_abbrev, *locale;
gint i;
const LCTYPE iso639_lctypes[] = { LOCALE_SISO639LANGNAME, LOCALE_SISO639LANGNAME2 };
GHashTable *ht_scripts_langs = (GHashTable *) param;
@@ -59,7 +59,6 @@ get_win32_all_locales_scripts (LPWSTR locale_w, DWORD flags, LPARAM param)
GetLocaleInfoEx (locale_w, LOCALE_SLOCALIZEDDISPLAYNAME, langname_w, langname_size);
langname = g_utf16_to_utf8 (langname_w, -1, NULL, NULL, NULL);
locale = g_utf16_to_utf8 (locale_w, -1, NULL, NULL, NULL);
p = strchr (locale, '-');
lang = pango_language_from_string (locale);
if (g_hash_table_lookup (ht_scripts_langs, lang) == NULL)
g_hash_table_insert (ht_scripts_langs, lang, langname);

View File

@@ -330,6 +330,7 @@ stroke bounds of the path.
| offset | `<point>` | 0 0 | non-default |
| hint-style | `<hint style>` | slight | non-default |
| antialias | `<antialias>` | gray | non-default |
| hint-metrics | `<hint metrics>` | off | non-default |
Creates a node like `gsk_text_node_new()` with the given properties.
@@ -346,6 +347,7 @@ font, an error node will be returned.
Possible values for hint-style are none, slight or full.
Possible value for antialias are none or gray.
Possible value for hint-metrics are on or off.
### texture

View File

@@ -155,6 +155,7 @@ Each property name is part of the `GtkAccessibleProperty` enumeration.
| %GTK_ACCESSIBLE_PROPERTY_VALUE_MIN | “aria-valuemin” | double |
| %GTK_ACCESSIBLE_PROPERTY_VALUE_NOW | “aria-valuenow” | double |
| %GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT | “aria-valuetext” | translatable string |
| %GTK_ACCESSIBLE_PROPERTY_HELP_TEXT | N/A | translatable string |
#### List of accessible relations
@@ -216,6 +217,10 @@ are accessible as part of the development process. The GTK Inspector shows
the accessible attributes of each widget, and also provides an overlay that
can highlight accessibility issues.
If you support some non-standard keyboard interactions for a widget, you
**should** set an appropriate `GTK_ACCESSIBLE_PROPERTY_HELP_TEXT` to help
discoverability of the behavior.
It is possible to set accessible attributes in UI files as well:
```xml
<object class="GtkButton" id="button1">

View File

@@ -163,6 +163,8 @@ gdk_dmabuf_get_egl_downloader (GdkDisplay *display,
return NULL;
previous = gdk_gl_context_get_current ();
if (previous)
g_object_ref (previous);
formats = gdk_dmabuf_formats_builder_new ();
external = gdk_dmabuf_formats_builder_new ();
@@ -194,7 +196,10 @@ gdk_dmabuf_get_egl_downloader (GdkDisplay *display,
}
if (previous)
gdk_gl_context_make_current (previous);
{
gdk_gl_context_make_current (previous);
g_object_unref (previous);
}
return GDK_DMABUF_DOWNLOADER (renderer);
}

View File

@@ -192,13 +192,6 @@ compute_smooth_frame_time (GdkFrameClock *clock,
* and new_frame_time >= old_frame_time. */
frames_passed = (new_frame_time - smoothed_frame_time_base + frame_interval / 2) / frame_interval;
if (frames_passed > 1)
gdk_profiler_add_markf ((smoothed_frame_time_base - (frame_interval * (frames_passed-1))) * 1000L,
frame_interval * (frames_passed-1) * 1000L,
"Dropped Frames",
"%u frames may have been dropped",
frames_passed-1);
/* We use an approximately whole number of frames in the future from
* last smoothed frame time. This way we avoid minor jitter in the
* frame times making the animation speed uneven, but still animate

View File

@@ -1956,8 +1956,6 @@ gdk_gl_context_get_glsl_version_string (GdkGLContext *self)
return "#version 310 es";
else if (gdk_gl_version_greater_equal (&priv->gl_version, &GDK_GL_VERSION_INIT (3, 0)))
return "#version 300 es";
else if (gdk_gl_version_greater_equal (&priv->gl_version, &GDK_GL_VERSION_INIT (3, 0)))
return "#version 300 es";
else
return "#version 100";
}

View File

@@ -632,6 +632,7 @@ gdk_vulkan_context_begin_frame (GdkDrawContext *draw_context,
{
GdkVulkanContext *context = GDK_VULKAN_CONTEXT (draw_context);
GdkVulkanContextPrivate *priv = gdk_vulkan_context_get_instance_private (context);
VkResult acquire_result;
guint i;
if (depth != priv->current_format)
@@ -653,12 +654,29 @@ gdk_vulkan_context_begin_frame (GdkDrawContext *draw_context,
cairo_region_union (priv->regions[i], region);
}
GDK_VK_CHECK (vkAcquireNextImageKHR, gdk_vulkan_context_get_device (context),
priv->swapchain,
UINT64_MAX,
priv->draw_semaphore,
VK_NULL_HANDLE,
&priv->draw_index);
acquire_next_image:
acquire_result = GDK_VK_CHECK (vkAcquireNextImageKHR, gdk_vulkan_context_get_device (context),
priv->swapchain,
UINT64_MAX,
priv->draw_semaphore,
VK_NULL_HANDLE,
&priv->draw_index);
if ((acquire_result == VK_ERROR_OUT_OF_DATE_KHR) ||
(acquire_result == VK_SUBOPTIMAL_KHR))
{
GError *error = NULL;
GDK_DEBUG (VULKAN, "Recreating the swapchain");
if (!gdk_vulkan_context_check_swapchain (context, &error))
{
g_warning ("%s", error->message);
g_error_free (error);
return;
}
goto acquire_next_image;
}
cairo_region_union (region, priv->regions[priv->draw_index]);
}

View File

@@ -908,7 +908,9 @@ _gdk_win32_create_hicon_for_texture (GdkTexture *texture,
width = cairo_image_surface_get_width (surface);
height = cairo_image_surface_get_height (surface);
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
pixbuf = gdk_pixbuf_get_from_surface (surface, 0, 0, width, height);
G_GNUC_END_IGNORE_DEPRECATIONS
icon = pixbuf_to_hicon (pixbuf, is_icon, x, y);

View File

@@ -267,7 +267,7 @@ create_dummy_gl_window (void)
{
WNDCLASS wclass = { 0, };
ATOM klass;
HWND hwnd;
HWND hwnd = NULL;
wclass.lpszClassName = "GdkGLDummyWindow";
wclass.lpfnWndProc = DefWindowProc;

View File

@@ -38,7 +38,6 @@ gdk_win32_vulkan_context_create_surface (GdkVulkanContext *context,
{
GdkSurface *window = gdk_draw_context_get_surface (GDK_DRAW_CONTEXT (context));
GdkDisplay *display = gdk_draw_context_get_display (GDK_DRAW_CONTEXT (context));
GdkWin32Surface *win32_surface = GDK_WIN32_SURFACE (window);
VkWin32SurfaceCreateInfoKHR info;
VkResult result;

View File

@@ -546,7 +546,7 @@ gsk_gpu_device_maybe_gc (GskGpuDevice *self)
if (priv->cache_timeout == 0 || dead_texture_pixels > 1000000)
{
GSK_DEBUG (GLYPH_CACHE, "Pre-frame GC (%lu dead pixels)", dead_texture_pixels);
GSK_DEBUG (GLYPH_CACHE, "Pre-frame GC (%" G_GSIZE_FORMAT " dead pixels)", dead_texture_pixels);
gsk_gpu_device_gc (self, g_get_monotonic_time ());
}
}

View File

@@ -311,7 +311,7 @@ gsk_gpu_node_processor_add_images (GskGpuNodeProcessor *self,
while (desc != self->desc);
}
static void
static gboolean G_GNUC_WARN_UNUSED_RESULT
rect_round_to_pixels (const graphene_rect_t *src,
const graphene_vec2_t *pixel_scale,
const graphene_point_t *pixel_offset,
@@ -331,6 +331,8 @@ rect_round_to_pixels (const graphene_rect_t *src,
y * inv_yscale - pixel_offset->y,
(ceilf ((src->origin.x + pixel_offset->x + src->size.width) * xscale) - x) * inv_xscale,
(ceilf ((src->origin.y + pixel_offset->y + src->size.height) * yscale) - y) * inv_yscale);
return ceilf (xscale * dest->size.width) > 0 && ceilf (yscale * dest->size.height) > 0;
}
static GskGpuImage *
@@ -963,7 +965,9 @@ gsk_gpu_node_processor_get_node_as_image (GskGpuNodeProcessor *self,
if (!gsk_rect_intersection (clip_bounds, &node->bounds, &clip))
return NULL;
}
rect_round_to_pixels (&clip, &self->scale, &self->offset, &clip);
if (!rect_round_to_pixels (&clip, &self->scale, &self->offset, &clip))
return NULL;
image = gsk_gpu_get_node_as_image (self->frame,
&clip,
@@ -1020,7 +1024,8 @@ gsk_gpu_node_processor_blur_op (GskGpuNodeProcessor *self,
if (!gsk_rect_intersection (rect, &clip_rect, &intermediate_rect))
return;
rect_round_to_pixels (&intermediate_rect, &self->scale, &self->offset, &intermediate_rect);
if (!rect_round_to_pixels (&intermediate_rect, &self->scale, &self->offset, &intermediate_rect))
return;
intermediate = gsk_gpu_node_processor_init_draw (&other,
self->frame,
@@ -1083,7 +1088,8 @@ gsk_gpu_node_processor_add_fallback_node (GskGpuNodeProcessor *self,
if (!gsk_gpu_node_processor_clip_node_bounds (self, node, &clipped_bounds))
return;
rect_round_to_pixels (&clipped_bounds, &self->scale, &self->offset, &clipped_bounds);
if (!rect_round_to_pixels (&clipped_bounds, &self->scale, &self->offset, &clipped_bounds))
return;
gsk_gpu_node_processor_sync_globals (self, 0);
@@ -1439,7 +1445,9 @@ gsk_gpu_node_processor_add_rounded_clip_node_with_mask (GskGpuNodeProcessor *sel
if (!gsk_gpu_node_processor_clip_node_bounds (self, node, &clip_bounds))
return;
rect_round_to_pixels (&clip_bounds, &self->scale, &self->offset, &clip_bounds);
if (!rect_round_to_pixels (&clip_bounds, &self->scale, &self->offset, &clip_bounds))
return;
child_image = gsk_gpu_node_processor_get_node_as_image (self,
0,
@@ -2068,7 +2076,9 @@ gsk_gpu_node_processor_add_texture_scale_node (GskGpuNodeProcessor *self,
gsk_gpu_node_processor_get_clip_bounds (self, &clip_bounds);
/* first round to pixel boundaries, so we make sure the full pixels are covered */
rect_round_to_pixels (&clip_bounds, &self->scale, &self->offset, &clip_bounds);
if (!rect_round_to_pixels (&clip_bounds, &self->scale, &self->offset, &clip_bounds))
return;
/* then expand by half a pixel so that pixels needed for eventual linear
* filtering are available */
graphene_rect_inset (&clip_bounds, -0.5, -0.5);
@@ -2276,7 +2286,9 @@ gsk_gpu_node_processor_add_gradient_node (GskGpuNodeProcessor *self,
if (!gsk_gpu_node_processor_clip_node_bounds (self, node, &bounds))
return;
rect_round_to_pixels (&bounds, &self->scale, &self->offset, &bounds);
if (!rect_round_to_pixels (&bounds, &self->scale, &self->offset, &bounds))
return;
image = gsk_gpu_node_processor_init_draw (&other,
self->frame,
@@ -3581,7 +3593,9 @@ gsk_gpu_node_processor_add_fill_node (GskGpuNodeProcessor *self,
if (!gsk_gpu_node_processor_clip_node_bounds (self, node, &clip_bounds))
return;
rect_round_to_pixels (&clip_bounds, &self->scale, &self->offset, &clip_bounds);
if (!rect_round_to_pixels (&clip_bounds, &self->scale, &self->offset, &clip_bounds))
return;
child = gsk_fill_node_get_child (node);
@@ -3678,7 +3692,9 @@ gsk_gpu_node_processor_add_stroke_node (GskGpuNodeProcessor *self,
if (!gsk_gpu_node_processor_clip_node_bounds (self, node, &clip_bounds))
return;
rect_round_to_pixels (&clip_bounds, &self->scale, &self->offset, &clip_bounds);
if (!rect_round_to_pixels (&clip_bounds, &self->scale, &self->offset, &clip_bounds))
return;
child = gsk_stroke_node_get_child (node);
@@ -4111,15 +4127,17 @@ gsk_gpu_node_processor_create_node_pattern (GskGpuPatternWriter *self,
gsk_gpu_descriptors_set_size (self->desc, images_before, buffers_before);
}
rect_round_to_pixels (&GRAPHENE_RECT_INIT (
self->bounds.origin.x - self->offset.x,
self->bounds.origin.y - self->offset.y,
self->bounds.size.width,
self->bounds.size.height
),
&self->scale,
&self->offset,
&bounds);
if (!rect_round_to_pixels (&GRAPHENE_RECT_INIT (
self->bounds.origin.x - self->offset.x,
self->bounds.origin.y - self->offset.y,
self->bounds.size.width,
self->bounds.size.height
),
&self->scale,
&self->offset,
&bounds))
return TRUE;
image = gsk_gpu_get_node_as_image (self->frame,
&bounds,
&self->scale,

View File

@@ -1139,7 +1139,7 @@ gsk_vulkan_device_get_vk_pipeline (GskVulkanDevice *self,
format);
GSK_DEBUG (SHADERS,
"Create Vulkan pipeline (%s %s, %u/%s/%s/%u) for layout (%lu/%lu/%lu)",
"Create Vulkan pipeline (%s %s, %u/%s/%s/%u) for layout (%" G_GSIZE_FORMAT "/%" G_GSIZE_FORMAT "/%" G_GSIZE_FORMAT ")",
op_class->shader_name,
version_string + 1,
variation,

View File

@@ -2312,6 +2312,25 @@ parse_antialias (GtkCssParser *parser,
return TRUE;
}
static gboolean
parse_hint_metrics (GtkCssParser *parser,
Context *context,
gpointer out)
{
if (!parse_enum (parser, CAIRO_GOBJECT_TYPE_HINT_METRICS, out))
return FALSE;
if (*(cairo_hint_metrics_t *) out != CAIRO_HINT_METRICS_OFF &&
*(cairo_hint_metrics_t *) out != CAIRO_HINT_METRICS_ON)
{
gtk_css_parser_error_value (parser, "Unsupported value for enum \"%s\"",
g_type_name (CAIRO_GOBJECT_TYPE_HINT_METRICS));
return FALSE;
}
return TRUE;
}
static GskRenderNode *
parse_text_node (GtkCssParser *parser,
Context *context)
@@ -2322,6 +2341,7 @@ parse_text_node (GtkCssParser *parser,
PangoGlyphString *glyphs = NULL;
cairo_hint_style_t hint_style = CAIRO_HINT_STYLE_SLIGHT;
cairo_antialias_t antialias = CAIRO_ANTIALIAS_GRAY;
cairo_hint_metrics_t hint_metrics = CAIRO_HINT_METRICS_OFF;
PangoFont *hinted;
const Declaration declarations[] = {
{ "font", parse_font, clear_font, &font },
@@ -2330,6 +2350,7 @@ parse_text_node (GtkCssParser *parser,
{ "glyphs", parse_glyphs, clear_glyphs, &glyphs },
{ "hint-style", parse_hint_style, NULL, &hint_style },
{ "antialias", parse_antialias, NULL, &antialias },
{ "hint-metrics", parse_hint_metrics, NULL, &hint_metrics },
};
GskRenderNode *result;
@@ -2341,7 +2362,7 @@ parse_text_node (GtkCssParser *parser,
g_assert (font);
}
hinted = gsk_reload_font (font, 1.0, CAIRO_HINT_METRICS_OFF, hint_style, antialias);
hinted = gsk_reload_font (font, 1.0, hint_metrics, hint_style, antialias);
g_object_unref (font);
font = hinted;
@@ -3539,13 +3560,13 @@ append_texture_param (Printer *p,
case GDK_MEMORY_U8:
case GDK_MEMORY_U16:
bytes = gdk_texture_save_to_png_bytes (texture);
g_string_append (p->str, "url(\"data:image/png;base64,");
g_string_append (p->str, "url(\"data:image/png;base64,\\\n");
break;
case GDK_MEMORY_FLOAT16:
case GDK_MEMORY_FLOAT32:
bytes = gdk_texture_save_to_tiff_bytes (texture);
g_string_append (p->str, "url(\"data:image/tiff;base64,");
g_string_append (p->str, "url(\"data:image/tiff;base64,\\\n");
break;
default:
@@ -3604,7 +3625,7 @@ gsk_text_node_serialize_font (GskRenderNode *node,
b64 = base64_encode_with_linebreaks ((const guchar *) data, len);
g_string_append (p->str, " url(\"data:font/ttf;base64,");
g_string_append (p->str, " url(\"data:font/ttf;base64,\\\n");
append_escaping_newlines (p->str, b64);
g_string_append (p->str, "\")");
@@ -3623,11 +3644,13 @@ gsk_text_node_serialize_font_options (GskRenderNode *node,
cairo_font_options_t *options;
cairo_hint_style_t hint_style;
cairo_antialias_t antialias;
cairo_hint_metrics_t hint_metrics;
options = cairo_font_options_create ();
cairo_scaled_font_get_font_options (sf, options);
hint_style = cairo_font_options_get_hint_style (options);
antialias = cairo_font_options_get_antialias (options);
hint_metrics = cairo_font_options_get_hint_metrics (options);
cairo_font_options_destroy (options);
/* medium and full are identical in the absence of subpixel modes */
@@ -3643,6 +3666,12 @@ gsk_text_node_serialize_font_options (GskRenderNode *node,
*/
if (antialias == CAIRO_ANTIALIAS_NONE)
append_enum_param (p, "antialias", CAIRO_GOBJECT_TYPE_ANTIALIAS, antialias);
/* CAIRO_HINT_METRICS_ON is the only value we ever emit here, since off is the default,
* and we don't accept any other values.
*/
if (hint_metrics == CAIRO_HINT_METRICS_ON)
append_enum_param (p, "hint-metrics", CAIRO_GOBJECT_TYPE_HINT_METRICS, CAIRO_HINT_METRICS_ON);
}
void
@@ -4414,7 +4443,7 @@ render_node_print (Printer *p,
cairo_surface_write_to_png_stream (surface, cairo_write_array, array);
_indent (p);
g_string_append (p->str, "pixels: url(\"data:image/png;base64,");
g_string_append (p->str, "pixels: url(\"data:image/png;base64,\\\n");
b64 = base64_encode_with_linebreaks (array->data, array->len);
append_escaping_newlines (p->str, b64);
g_free (b64);
@@ -4434,7 +4463,7 @@ render_node_print (Printer *p,
if (cairo_script_from_recording_surface (script, surface) == CAIRO_STATUS_SUCCESS)
{
_indent (p);
g_string_append (p->str, "script: url(\"data:;base64,");
g_string_append (p->str, "script: url(\"data:;base64,\\\n");
b64 = base64_encode_with_linebreaks (array->data, array->len);
append_escaping_newlines (p->str, b64);
g_free (b64);

View File

@@ -184,10 +184,4 @@
</signal>
</interface>
<interface name="org.a11y.atspi.Event.Focus">
<signal name="Focus"><arg direction="in" type="(suuv)"/>
<annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
</signal>
</interface>
</node>

View File

@@ -720,6 +720,16 @@ handle_accessible_get_property (GDBusConnection *connection,
res = get_parent_context_ref (accessible);
else if (g_strcmp0 (property_name, "ChildCount") == 0)
res = g_variant_new_int32 (gtk_at_spi_context_get_child_count (self));
else if (g_strcmp0 (property_name, "HelpText"))
{
if (gtk_at_context_has_accessible_property (GTK_AT_CONTEXT (self), GTK_ACCESSIBLE_PROPERTY_HELP_TEXT))
{
GtkAccessibleValue *value = gtk_at_context_get_accessible_property (GTK_AT_CONTEXT (self), GTK_ACCESSIBLE_PROPERTY_HELP_TEXT);
res = g_variant_new_string (gtk_string_accessible_value_get (value));
}
else
res = g_variant_new_string ("");
}
else
g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
"Unknown property '%s'", property_name);
@@ -899,24 +909,6 @@ emit_children_changed (GtkAtSpiContext *self,
context_ref);
}
static void
emit_focus (GtkAtSpiContext *self,
gboolean focus_in)
{
if (self->connection == NULL)
return;
if (focus_in)
g_dbus_connection_emit_signal (self->connection,
NULL,
self->context_path,
"org.a11y.atspi.Event.Focus",
"Focus",
g_variant_new ("(siiva{sv})",
"", 0, 0, g_variant_new_string ("0"), NULL),
NULL);
}
static void
emit_window_event (GtkAtSpiContext *self,
const char *event_type)
@@ -1154,7 +1146,7 @@ gtk_at_spi_context_state_change (GtkATContext *ctx,
}
if (changed_properties & GTK_ACCESSIBLE_PROPERTY_CHANGE_DESCRIPTION)
{
{
char *label = gtk_at_context_get_description (GTK_AT_CONTEXT (self));
GVariant *v = g_variant_new_take_string (label);
emit_property_changed (self, "accessible-description", v);
@@ -1167,6 +1159,14 @@ gtk_at_spi_context_state_change (GtkATContext *ctx,
"accessible-value",
g_variant_new_double (gtk_number_accessible_value_get (value)));
}
if (changed_properties & GTK_ACCESSIBLE_PROPERTY_CHANGE_HELP_TEXT)
{
value = gtk_accessible_attribute_set_get_value (properties, GTK_ACCESSIBLE_PROPERTY_HELP_TEXT);
emit_property_changed (self,
"accessible-help-text",
g_variant_new_string (gtk_string_accessible_value_get (value)));
}
}
static void
@@ -1196,7 +1196,6 @@ gtk_at_spi_context_platform_change (GtkATContext *ctx,
gboolean state = gtk_accessible_get_platform_state (GTK_ACCESSIBLE (widget),
GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSED);
emit_state_changed (self, "focused", state);
emit_focus (self, state);
}
if (changed_platform & GTK_ACCESSIBLE_PLATFORM_CHANGE_ACTIVE)

View File

@@ -97,7 +97,7 @@ gtk_accessible_role_to_atspi_role (GtkAccessibleRole role)
return ATSPI_ROLE_FORM;
case GTK_ACCESSIBLE_ROLE_GENERIC:
return ATSPI_ROLE_FILLER;
return ATSPI_ROLE_PANEL;
case GTK_ACCESSIBLE_ROLE_GRID:
return ATSPI_ROLE_TABLE;
@@ -106,7 +106,7 @@ gtk_accessible_role_to_atspi_role (GtkAccessibleRole role)
return ATSPI_ROLE_TABLE_CELL;
case GTK_ACCESSIBLE_ROLE_GROUP:
return ATSPI_ROLE_PANEL;
return ATSPI_ROLE_GROUPING;
case GTK_ACCESSIBLE_ROLE_HEADING:
return ATSPI_ROLE_HEADING;

View File

@@ -808,6 +808,11 @@ static const GtkAccessibleCollect collect_props[] = {
.ctype = GTK_ACCESSIBLE_COLLECT_STRING,
.name = "valuetext"
},
[GTK_ACCESSIBLE_PROPERTY_HELP_TEXT] = {
.value = GTK_ACCESSIBLE_PROPERTY_HELP_TEXT,
.ctype = GTK_ACCESSIBLE_COLLECT_STRING,
.name = "helptext"
},
};
/* § 6.6.4 Relationship Attributes */
@@ -1662,7 +1667,7 @@ gtk_accessible_value_get_default_for_property (GtkAccessibleProperty property)
{
const GtkAccessibleCollect *cstate = &collect_props[property];
g_return_val_if_fail (property <= GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT, NULL);
g_return_val_if_fail (property <= GTK_ACCESSIBLE_PROPERTY_HELP_TEXT, NULL);
switch (cstate->value)
{
@@ -1692,6 +1697,7 @@ gtk_accessible_value_get_default_for_property (GtkAccessibleProperty property)
case GTK_ACCESSIBLE_PROPERTY_PLACEHOLDER:
case GTK_ACCESSIBLE_PROPERTY_ROLE_DESCRIPTION:
case GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT:
case GTK_ACCESSIBLE_PROPERTY_HELP_TEXT:
return gtk_undefined_accessible_value_new ();
/* Token properties */
@@ -1732,7 +1738,7 @@ gtk_accessible_value_collect_for_property (GtkAccessibleProperty property,
{
const GtkAccessibleCollect *cstate = &collect_props[property];
g_return_val_if_fail (property <= GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT, NULL);
g_return_val_if_fail (property <= GTK_ACCESSIBLE_PROPERTY_HELP_TEXT, NULL);
return gtk_accessible_value_collect_valist (cstate, error, args);
}
@@ -1760,7 +1766,7 @@ gtk_accessible_value_collect_for_property_value (GtkAccessibleProperty propert
{
const GtkAccessibleCollect *cstate = &collect_props[property];
g_return_val_if_fail (property <= GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT, NULL);
g_return_val_if_fail (property <= GTK_ACCESSIBLE_PROPERTY_HELP_TEXT, NULL);
return gtk_accessible_value_collect_value (cstate, value, error);
}
@@ -1773,7 +1779,7 @@ gtk_accessible_value_parse_for_property (GtkAccessibleProperty property,
{
const GtkAccessibleCollect *cstate = &collect_props[property];
g_return_val_if_fail (property <= GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT, NULL);
g_return_val_if_fail (property <= GTK_ACCESSIBLE_PROPERTY_HELP_TEXT, NULL);
return gtk_accessible_value_parse (cstate, str, len, error);
}
@@ -1794,7 +1800,7 @@ gtk_accessible_property_init_value (GtkAccessibleProperty property,
{
const GtkAccessibleCollect *cstate = &collect_props[property];
g_return_if_fail (property <= GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT);
g_return_if_fail (property <= GTK_ACCESSIBLE_PROPERTY_HELP_TEXT);
gtk_accessible_attribute_init_value (cstate, value);
}

View File

@@ -328,6 +328,7 @@ static const char *property_attrs[] = {
[GTK_ACCESSIBLE_PROPERTY_VALUE_MIN] = "valuemin",
[GTK_ACCESSIBLE_PROPERTY_VALUE_NOW] = "valuenow",
[GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT] = "valuetext",
[GTK_ACCESSIBLE_PROPERTY_HELP_TEXT] = "helptext",
};
/*< private >
@@ -342,7 +343,7 @@ const char *
gtk_accessible_property_get_attribute_name (GtkAccessibleProperty property)
{
g_return_val_if_fail (property >= GTK_ACCESSIBLE_PROPERTY_AUTOCOMPLETE &&
property <= GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT,
property <= GTK_ACCESSIBLE_PROPERTY_HELP_TEXT,
"<none>");
return property_attrs[property];

View File

@@ -47,7 +47,8 @@ typedef enum {
GTK_ACCESSIBLE_PROPERTY_CHANGE_VALUE_MAX = 1 << GTK_ACCESSIBLE_PROPERTY_VALUE_MAX,
GTK_ACCESSIBLE_PROPERTY_CHANGE_VALUE_MIN = 1 << GTK_ACCESSIBLE_PROPERTY_VALUE_MIN,
GTK_ACCESSIBLE_PROPERTY_CHANGE_VALUE_NOW = 1 << GTK_ACCESSIBLE_PROPERTY_VALUE_NOW,
GTK_ACCESSIBLE_PROPERTY_CHANGE_VALUE_TEXT = 1 << GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT
GTK_ACCESSIBLE_PROPERTY_CHANGE_VALUE_TEXT = 1 << GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT,
GTK_ACCESSIBLE_PROPERTY_CHANGE_HELP_TEXT = 1 << GTK_ACCESSIBLE_PROPERTY_HELP_TEXT,
} GtkAccessiblePropertyChange;
typedef enum {

View File

@@ -32,8 +32,12 @@
* `GtkBuilderListItemFactory` is a `GtkListItemFactory` that creates
* widgets by instantiating `GtkBuilder` UI templates.
*
* The templates must be extending `GtkListItem`, and typically use
* `GtkExpression`s to obtain data from the items in the model.
* The templates must extend the class that the parent widget expects.
* For example, a factory provided to [property@Gtk.ListView:factory] must have
* a template that extends [class@Gtk.ListItem].
*
* Templates typically use `GtkExpression`s to obtain data from the items
* in the model.
*
* Example:
* ```xml
@@ -203,7 +207,7 @@ gtk_builder_list_item_factory_set_property (GObject *object,
case PROP_RESOURCE:
{
GError *error = NULL;
GBytes *bytes;
GBytes *bytes;
const char *resource;
resource = g_value_get_string (value);

View File

@@ -861,6 +861,8 @@ gtk_column_view_class_init (GtkColumnViewClass *klass)
*
* The factory used for configuring rows.
*
* The factory must be for configuring [class@Gtk.ColumnViewRow] objects.
*
* Since: 4.12
*/
properties[PROP_ROW_FACTORY] =
@@ -926,6 +928,8 @@ gtk_column_view_class_init (GtkColumnViewClass *klass)
*
* Factory for creating header widgets.
*
* The factory must be for configuring [class@Gtk.ListHeader] objects.
*
* Since: 4.12
*/
properties[PROP_HEADER_FACTORY] =

View File

@@ -255,6 +255,8 @@ gtk_column_view_column_class_init (GtkColumnViewColumnClass *klass)
* GtkColumnViewColumn:factory: (attributes org.gtk.Property.get=gtk_column_view_column_get_factory org.gtk.Property.set=gtk_column_view_column_set_factory)
*
* Factory for populating list items.
*
* The factory must be for configuring [class@Gtk.ColumnViewCell] objects.
*/
properties[PROP_FACTORY] =
g_param_spec_object ("factory", NULL, NULL,
@@ -761,7 +763,7 @@ gtk_column_view_column_remove_from_sorter (GtkColumnViewColumn *self)
{
if (self->view == NULL)
return;
gtk_column_view_sorter_remove_column (GTK_COLUMN_VIEW_SORTER (gtk_column_view_get_sorter (self->view)), self);
}

View File

@@ -156,7 +156,7 @@ gtk_css_image_icon_theme_compute (GtkCssImage *image,
copy->icon_theme = gtk_icon_theme_get_for_display (display);
copy->serial = gtk_icon_theme_get_serial (copy->icon_theme);
copy->scale = gtk_style_provider_get_scale (provider);
gtk_icon_theme_lookup_symbolic_colors (style, copy->colors);
gtk_css_style_lookup_symbolic_colors (style, copy->colors);
return GTK_CSS_IMAGE (copy);
}

View File

@@ -29,6 +29,7 @@
#include "gtkcssinitialvalueprivate.h"
#include "gtkcssnumbervalueprivate.h"
#include "gtkcsscolorvalueprivate.h"
#include "gtkcsspalettevalueprivate.h"
#include "gtkcssshorthandpropertyprivate.h"
#include "gtkcssstringvalueprivate.h"
#include "gtkcssfontvariationsvalueprivate.h"
@@ -750,6 +751,33 @@ gtk_css_style_get_pango_font (GtkCssStyle *style)
return description;
}
void
gtk_css_style_lookup_symbolic_colors (GtkCssStyle *style,
GdkRGBA color_out[4])
{
GtkCssValue *palette, *color;
const char *names[4] = {
[GTK_SYMBOLIC_COLOR_ERROR] = "error",
[GTK_SYMBOLIC_COLOR_WARNING] = "warning",
[GTK_SYMBOLIC_COLOR_SUCCESS] = "success"
};
color = style->core->color;
palette = style->core->icon_palette;
color_out[GTK_SYMBOLIC_COLOR_FOREGROUND] = *gtk_css_color_value_get_rgba (color);
for (gsize i = 1; i < 4; i++)
{
const GdkRGBA *lookup;
lookup = gtk_css_palette_value_get_color (palette, names[i]);
if (lookup)
color_out[i] = *lookup;
else
color_out[i] = color_out[GTK_SYMBOLIC_COLOR_FOREGROUND];
}
}
/* Refcounted value structs */
static const int values_size[] = {

View File

@@ -268,6 +268,9 @@ char * gtk_css_style_compute_font_features (GtkCssStyle
PangoAttrList * gtk_css_style_get_pango_attributes (GtkCssStyle *style);
PangoFontDescription * gtk_css_style_get_pango_font (GtkCssStyle *style);
void gtk_css_style_lookup_symbolic_colors (GtkCssStyle *style,
GdkRGBA color_out[4]);
GtkCssValues *gtk_css_values_new (GtkCssValuesType type);
GtkCssValues *gtk_css_values_ref (GtkCssValues *values);
void gtk_css_values_unref (GtkCssValues *values);

View File

@@ -1632,6 +1632,15 @@ typedef enum {
*
* The possible accessible properties of a [iface@Accessible].
*/
/**
* GTK_ACCESSIBLE_PROPERTY_HELP_TEXT:
*
* Defines a string value that provides a description of non-standard keyboard
* interactions of the current element. Value type: string
*
* Since: 4.16
*/
typedef enum {
GTK_ACCESSIBLE_PROPERTY_AUTOCOMPLETE,
GTK_ACCESSIBLE_PROPERTY_DESCRIPTION,
@@ -1651,7 +1660,8 @@ typedef enum {
GTK_ACCESSIBLE_PROPERTY_VALUE_MAX,
GTK_ACCESSIBLE_PROPERTY_VALUE_MIN,
GTK_ACCESSIBLE_PROPERTY_VALUE_NOW,
GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT
GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT,
GTK_ACCESSIBLE_PROPERTY_HELP_TEXT
} GtkAccessibleProperty;
/**

View File

@@ -1109,6 +1109,8 @@ gtk_grid_view_class_init (GtkGridViewClass *klass)
* GtkGridView:factory: (attributes org.gtk.Property.get=gtk_grid_view_get_factory org.gtk.Property.set=gtk_grid_view_set_factory)
*
* Factory for populating list items.
*
* The factory must be for configuring [class@Gtk.ListItem] objects.
*/
properties[PROP_FACTORY] =
g_param_spec_object ("factory", NULL, NULL,

View File

@@ -2533,34 +2533,6 @@ gtk_icon_theme_error_quark (void)
return g_quark_from_static_string ("gtk-icon-theme-error-quark");
}
void
gtk_icon_theme_lookup_symbolic_colors (GtkCssStyle *style,
GdkRGBA color_out[4])
{
GtkCssValue *palette, *color;
const char *names[4] = {
[GTK_SYMBOLIC_COLOR_ERROR] = "error",
[GTK_SYMBOLIC_COLOR_WARNING] = "warning",
[GTK_SYMBOLIC_COLOR_SUCCESS] = "success"
};
const GdkRGBA *lookup;
gsize i;
color = style->core->color;
palette = style->core->icon_palette;
color_out[GTK_SYMBOLIC_COLOR_FOREGROUND] = *gtk_css_color_value_get_rgba (color);
for (i = 1; i < 4; i++)
{
lookup = gtk_css_palette_value_get_color (palette, names[i]);
if (lookup)
color_out[i] = *lookup;
else
color_out[i] = color_out[GTK_SYMBOLIC_COLOR_FOREGROUND];
}
}
/**
* gtk_icon_theme_has_icon:
* @self: a `GtkIconTheme`

View File

@@ -26,8 +26,5 @@ const char *gtk_string_set_add (GtkStringSet *set,
#define IMAGE_MISSING_RESOURCE_PATH "/org/gtk/libgtk/icons/16x16/status/image-missing.png"
void gtk_icon_theme_lookup_symbolic_colors (GtkCssStyle *style,
GdkRGBA color_out[4]);
int gtk_icon_theme_get_serial (GtkIconTheme *self);

View File

@@ -117,7 +117,7 @@ static inline void
istring_prepend (IString *str,
IString *other)
{
if G_LIKELY (str->n_bytes + other->n_bytes < sizeof str->u.buf - 1)
if G_LIKELY (str->n_bytes + other->n_bytes <= (sizeof str->u.buf - 1))
{
memmove (str->u.buf + other->n_bytes, str->u.buf, str->n_bytes);
memcpy (str->u.buf, other->u.buf, other->n_bytes);

View File

@@ -881,6 +881,8 @@ gtk_list_view_class_init (GtkListViewClass *klass)
* GtkListView:factory: (attributes org.gtk.Property.get=gtk_list_view_get_factory org.gtk.Property.set=gtk_list_view_set_factory)
*
* Factory for populating list items.
*
* The factory must be for configuring [class@Gtk.ListItem] objects.
*/
properties[PROP_FACTORY] =
g_param_spec_object ("factory", NULL, NULL,
@@ -892,6 +894,8 @@ gtk_list_view_class_init (GtkListViewClass *klass)
*
* Factory for creating header widgets.
*
* The factory must be for configuring [class@Gtk.ListHeader] objects.
*
* Since: 4.12
*/
properties[PROP_HEADER_FACTORY] =
@@ -1355,7 +1359,7 @@ gtk_list_view_get_tab_behavior (GtkListView *self)
* @pos: position of the item
* @flags: actions to perform
* @scroll: (nullable) (transfer full): details of how to perform
* the scroll operation or %NULL to scroll into view
* the scroll operation or %NULL to scroll into view
*
* Scrolls to the item at the given position and performs the actions
* specified in @flags.

View File

@@ -21,6 +21,7 @@
#include "gtkrendericonprivate.h"
#include "gtkcsscolorvalueprivate.h"
#include "gtkcssfiltervalueprivate.h"
#include "gtkcssimagevalueprivate.h"
#include "gtkcssshadowvalueprivate.h"
@@ -116,7 +117,7 @@ gtk_css_style_snapshot_icon_paintable (GtkCssStyle *style,
is_symbolic_paintable = GTK_IS_SYMBOLIC_PAINTABLE (paintable);
if (is_symbolic_paintable)
{
gtk_icon_theme_lookup_symbolic_colors (style, colors);
gtk_css_style_lookup_symbolic_colors (style, colors);
if (gdk_rgba_is_clear (&colors[0]))
goto transparent;

View File

@@ -1774,6 +1774,10 @@ populate_event_properties (GListStore *store,
case GDK_KEY_RELEASE:
{
char *tmp;
tmp = modifier_names (gdk_key_event_get_consumed_modifiers (event));
add_text_row (store, "Consumed modifiers", "%s", tmp);
g_free (tmp);
add_int_row (store, "Keycode", gdk_key_event_get_keycode (event));
add_int_row (store, "Keyval", gdk_key_event_get_keyval (event));
tmp = key_event_string (event);

2956
po/pt.po

File diff suppressed because it is too large Load Diff

186
po/tr.po
View File

@@ -22,9 +22,9 @@ msgid ""
msgstr ""
"Project-Id-Version: gtk\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gtk/-/issues/\n"
"POT-Creation-Date: 2024-04-04 16:15+0000\n"
"PO-Revision-Date: 2024-04-06 17:31+0300\n"
"Last-Translator: Sabri Ünal <yakushabb@gmail.com>\n"
"POT-Creation-Date: 2024-05-01 15:18+0000\n"
"PO-Revision-Date: 2024-05-01 08:00+0300\n"
"Last-Translator: Emin Tufan Çetin <etcetin@gmail.com>\n"
"Language-Team: Türkçe <takim@gnome.org.tr>\n"
"Language: tr\n"
"MIME-Version: 1.0\n"
@@ -65,7 +65,7 @@ msgstr "İçerikler %s olarak sağlanamıyor"
msgid "The current backend does not support OpenGL"
msgstr "Şimdiki arka uç OpenGLi desteklemiyor"
#: gdk/gdkdisplay.c:1315 gdk/gdkvulkancontext.c:1600
#: gdk/gdkdisplay.c:1315 gdk/gdkvulkancontext.c:1618
msgid "Vulkan support disabled via GDK_DEBUG"
msgstr "Vulkan desteği GDK_DEBUG yoluyla devre dışı bırakılmış"
@@ -546,7 +546,7 @@ msgstr "JPEG resim dosyası yorumlanırken hata (%s)"
msgid "Unsupported JPEG colorspace (%d)"
msgstr "Desteklenmeyen JPEG renk uzayı (%d)"
#: gdk/loaders/gdkjpeg.c:203 gdk/loaders/gdkpng.c:286 gdk/loaders/gdktiff.c:472
#: gdk/loaders/gdkjpeg.c:203 gdk/loaders/gdkpng.c:289 gdk/loaders/gdktiff.c:472
#, c-format
msgid "Not enough memory for image size %ux%u"
msgstr "%ux%u resim boyutu için yeterli bellek yok"
@@ -556,17 +556,17 @@ msgstr "%ux%u resim boyutu için yeterli bellek yok"
msgid "Error reading png (%s)"
msgstr "PNG okunurken hata (%s)"
#: gdk/loaders/gdkpng.c:212
#: gdk/loaders/gdkpng.c:215
#, c-format
msgid "Unsupported depth %u in png image"
msgstr "Png resminde desteklenmeyen %u derinlik"
#: gdk/loaders/gdkpng.c:262
#: gdk/loaders/gdkpng.c:265
#, c-format
msgid "Unsupported color type %u in png image"
msgstr "Png resminde desteklenmeyen %u renk türü"
#: gdk/loaders/gdkpng.c:272
#: gdk/loaders/gdkpng.c:275
#, c-format
msgid "Image stride too large for image size %ux%u"
msgstr "%ux%u görüntü boyutu için görüntü adımı çok büyük"
@@ -2250,7 +2250,7 @@ msgstr "Bu adda dosya zaten var"
#: gtk/gtkmessagedialog.c:179 gtk/gtkmountoperation.c:608
#: gtk/print/gtkpagesetupunixdialog.c:282 gtk/print/gtkprintbackend.c:638
#: gtk/print/gtkprintunixdialog.c:682 gtk/print/gtkprintunixdialog.c:839
#: gtk/gtkwindow.c:6256 gtk/ui/gtkappchooserdialog.ui:48
#: gtk/gtkwindow.c:6257 gtk/ui/gtkappchooserdialog.ui:48
#: gtk/ui/gtkassistant.ui:52 gtk/ui/gtkcolorchooserdialog.ui:36
#: gtk/ui/gtkfontchooserdialog.ui:27
msgid "_Cancel"
@@ -2338,7 +2338,7 @@ msgid "If you delete an item, it will be permanently lost."
msgstr "Eğer bir öge silerseniz kalıcı olarak kaybolur."
#: gtk/gtkfilechooserwidget.c:1188 gtk/gtkfilechooserwidget.c:1786
#: gtk/gtklabel.c:5723 gtk/gtktext.c:6194 gtk/gtktextview.c:9099
#: gtk/gtklabel.c:5745 gtk/gtktext.c:6194 gtk/gtktextview.c:9099
msgid "_Delete"
msgstr "_Sil"
@@ -2666,7 +2666,7 @@ msgstr "Biçem Değişkeleri"
msgid "Character Variations"
msgstr "Karakter Değişkeleri"
#: gtk/gtkglarea.c:309
#: gtk/gtkglarea.c:316
msgid "OpenGL context creation failed"
msgstr "OpenGL içerik oluşturulması başarısız oldu"
@@ -2679,31 +2679,31 @@ msgstr "Kapat"
msgid "Close the infobar"
msgstr "Bilgi çubuğunu kapat"
#: gtk/gtklabel.c:5720 gtk/gtktext.c:6182 gtk/gtktextview.c:9087
#: gtk/gtklabel.c:5742 gtk/gtktext.c:6182 gtk/gtktextview.c:9087
msgid "Cu_t"
msgstr "Ke_s"
#: gtk/gtklabel.c:5721 gtk/gtktext.c:6186 gtk/gtktextview.c:9091
#: gtk/gtklabel.c:5743 gtk/gtktext.c:6186 gtk/gtktextview.c:9091
msgid "_Copy"
msgstr "_Kopyala"
#: gtk/gtklabel.c:5722 gtk/gtktext.c:6190 gtk/gtktextview.c:9095
#: gtk/gtklabel.c:5744 gtk/gtktext.c:6190 gtk/gtktextview.c:9095
msgid "_Paste"
msgstr "_Yapıştır"
#: gtk/gtklabel.c:5728 gtk/gtktext.c:6203 gtk/gtktextview.c:9120
#: gtk/gtklabel.c:5750 gtk/gtktext.c:6203 gtk/gtktextview.c:9120
msgid "Select _All"
msgstr "_Tümünü Seç"
#: gtk/gtklabel.c:5733
#: gtk/gtklabel.c:5755
msgid "_Open Link"
msgstr "Bağlantı _Aç"
#: gtk/gtklabel.c:5737
#: gtk/gtklabel.c:5759
msgid "Copy _Link Address"
msgstr "_Bağlantı Adresini Kopyala"
#: gtk/gtklabel.c:5781 gtk/gtktext.c:2723 gtk/gtktextview.c:9169
#: gtk/gtklabel.c:5803 gtk/gtktext.c:2723 gtk/gtktextview.c:9169
msgid "Context menu"
msgstr "Bağlamsal menü"
@@ -2711,7 +2711,7 @@ msgstr "Bağlamsal menü"
msgid "_Copy URL"
msgstr "URL _Kopyala"
#: gtk/gtklinkbutton.c:567
#: gtk/gtklinkbutton.c:589
msgid "Invalid URI"
msgstr "Geçersiz URI"
@@ -2774,7 +2774,7 @@ msgid "Play"
msgstr "Oynat"
#: gtk/gtkmessagedialog.c:162 gtk/gtkmessagedialog.c:180
#: gtk/print/gtkprintbackend.c:639 gtk/gtkwindow.c:6257
#: gtk/print/gtkprintbackend.c:639 gtk/gtkwindow.c:6258
msgid "_OK"
msgstr "_Tamam"
@@ -3648,12 +3648,12 @@ msgstr "_Geri Al"
msgid "_Redo"
msgstr "_Yinele"
#: gtk/gtkwindow.c:6245
#: gtk/gtkwindow.c:6246
#, c-format
msgid "Do you want to use GTK Inspector?"
msgstr "GTK Denetleyicisi kullanmak istiyor musunuz?"
#: gtk/gtkwindow.c:6247
#: gtk/gtkwindow.c:6248
#, c-format
msgid ""
"GTK Inspector is an interactive debugger that lets you explore and modify "
@@ -3664,7 +3664,7 @@ msgstr ""
"izin veren etkileşimli hata ayıklayıcıdır. Bunun kullanılması uygulamanın "
"kesilmesine ya da çökmesine neden olabilir."
#: gtk/gtkwindow.c:6252
#: gtk/gtkwindow.c:6253
msgid "Dont show this message again"
msgstr "Bu iletiyi yeniden gösterme"
@@ -3843,37 +3843,37 @@ msgstr "Biçem Sınıfları"
msgid "CSS Property"
msgstr "CSS Özelliği"
#: gtk/inspector/general.c:370
#: gtk/inspector/general.c:371
msgctxt "GL version"
msgid "None"
msgstr "Hiçbiri"
#: gtk/inspector/general.c:461
#: gtk/inspector/general.c:462
msgctxt "GL version"
msgid "Unknown"
msgstr "Bilinmeyen"
#: gtk/inspector/general.c:523
#: gtk/inspector/general.c:524
msgctxt "Vulkan device"
msgid "Disabled"
msgstr "Devre Dışı"
#: gtk/inspector/general.c:524 gtk/inspector/general.c:525
#: gtk/inspector/general.c:525 gtk/inspector/general.c:526
msgctxt "Vulkan version"
msgid "Disabled"
msgstr "Devre Dışı"
#: gtk/inspector/general.c:576
#: gtk/inspector/general.c:577
msgctxt "Vulkan device"
msgid "None"
msgstr "Hiçbiri"
#: gtk/inspector/general.c:577 gtk/inspector/general.c:578
#: gtk/inspector/general.c:578 gtk/inspector/general.c:579
msgctxt "Vulkan version"
msgid "None"
msgstr "Hiçbiri"
#: gtk/inspector/general.c:924
#: gtk/inspector/general.c:930
msgid "IM Context is hardcoded by GTK_IM_MODULE"
msgstr "IM Bağlamı GTK_IM_MODULE tarafından kodlanmış"
@@ -4183,7 +4183,7 @@ msgstr "Kaynak:"
msgid "Defined At"
msgstr "Şurada Tanımlanmış"
#: gtk/inspector/recorder.c:1941
#: gtk/inspector/recorder.c:1946
#, c-format
msgid "Saving RenderNode failed"
msgstr "RenderNode kaydetme başarısız"
@@ -4321,7 +4321,7 @@ msgstr "Hiyerarşi"
msgid "Implements"
msgstr "Sağladıkları"
#: gtk/inspector/visual.c:765 gtk/inspector/visual.c:784
#: gtk/inspector/visual.c:690 gtk/inspector/visual.c:708
msgid "Theme is hardcoded by GTK_THEME"
msgstr "Tema GTK_THEME ile kodlanmış"
@@ -4366,46 +4366,28 @@ msgid "Slowdown"
msgstr "Yavaşlama"
#: gtk/inspector/visual.ui:362
msgid "Antialiasing"
msgstr "Kenar Yumuşatma"
msgid "Rendering"
msgstr "Gerçekleme"
#: gtk/inspector/visual.ui:387
msgid "Hinting"
msgstr "Düzeltme"
#: gtk/inspector/visual.ui:377
msgctxt "Font rendering"
msgid "Automatic"
msgstr "Kendiliğinden"
#: gtk/inspector/visual.ui:402
msgctxt "Font hinting style"
msgid "None"
msgstr "Yok"
#: gtk/inspector/visual.ui:403
msgctxt "Font hinting style"
msgid "Slight"
msgstr "Hafif"
#: gtk/inspector/visual.ui:404
msgctxt "Font hinting style"
msgid "Medium"
msgstr "Orta"
#: gtk/inspector/visual.ui:378
msgctxt "Font rendering"
msgid "Manual"
msgstr "Elle"
#: gtk/inspector/visual.ui:405
msgctxt "Font hinting style"
msgid "Full"
msgstr "Tam"
#: gtk/inspector/visual.ui:422
msgid "Metrics Hinting"
msgstr "Metrik Düzeltme"
#: gtk/inspector/visual.ui:457
msgid "Show Framerate"
msgstr "Kare Hızını Göster"
#: gtk/inspector/visual.ui:482
#: gtk/inspector/visual.ui:430
msgid "Show Graphic Updates"
msgstr "Grafik Güncellemeleri Göster"
#: gtk/inspector/visual.ui:502
#: gtk/inspector/visual.ui:450
msgid ""
"Tints all the places where the current renderer uses Cairo instead of the "
"GPU."
@@ -4413,47 +4395,47 @@ msgstr ""
"Geçerli gerçekleyicinin Ekran Kartı yerine Cairo kullandığı tüm yerleri "
"renklendirir."
#: gtk/inspector/visual.ui:508
#: gtk/inspector/visual.ui:456
msgid "Show Cairo Rendering"
msgstr "Cairo Gerçeklemeyi Göster"
#: gtk/inspector/visual.ui:533
#: gtk/inspector/visual.ui:481
msgid "Show Baselines"
msgstr "Grafik Güncellemelerini Göster"
#: gtk/inspector/visual.ui:561
#: gtk/inspector/visual.ui:509
msgid "Show Layout Borders"
msgstr "Yerleşim Sınırlarını Göster"
#: gtk/inspector/visual.ui:618
#: gtk/inspector/visual.ui:566
msgid "CSS Padding"
msgstr "CSS Dolgu"
#: gtk/inspector/visual.ui:628
#: gtk/inspector/visual.ui:576
msgid "CSS Border"
msgstr "CSS Kenarlığı"
#: gtk/inspector/visual.ui:638
#: gtk/inspector/visual.ui:586
msgid "CSS Margin"
msgstr "CSS Boşluğu"
#: gtk/inspector/visual.ui:648
#: gtk/inspector/visual.ui:596
msgid "Widget Margin"
msgstr "Parçacık Boşluğu"
#: gtk/inspector/visual.ui:683
#: gtk/inspector/visual.ui:631
msgid "Show Focus"
msgstr "Odağı Göster"
#: gtk/inspector/visual.ui:708
#: gtk/inspector/visual.ui:656
msgid "Show Accessibility warnings"
msgstr "Erişilebilirlik uyarılarını göster"
#: gtk/inspector/visual.ui:733
#: gtk/inspector/visual.ui:681
msgid "Show Graphics Offload"
msgstr "Grafik Boşaltmaları Göster"
#: gtk/inspector/visual.ui:765
#: gtk/inspector/visual.ui:713
msgid "Inspect Inspector"
msgstr "Denetleyiciyi İncele"
@@ -7168,22 +7150,22 @@ msgstr "Çıktı cwd yerine bu dizine"
msgid "Generate debug output"
msgstr "Hata ayıklama çıktısı oluştur"
#: tools/encodesymbolic.c:92
#: tools/encodesymbolic.c:95
#, c-format
msgid "Invalid size %s\n"
msgstr "Geçersiz boyut %s\n"
#: tools/encodesymbolic.c:104 tools/encodesymbolic.c:113
#: tools/encodesymbolic.c:107 tools/encodesymbolic.c:116
#, c-format
msgid "Cant load file: %s\n"
msgstr "Dosya yüklenemedi: %s\n"
#: tools/encodesymbolic.c:141 tools/encodesymbolic.c:147
#: tools/encodesymbolic.c:144 tools/encodesymbolic.c:162
#, c-format
msgid "Cant save file %s: %s\n"
msgstr "%s dosyası kaydedilemedi: %s\n"
#: tools/encodesymbolic.c:153
#: tools/encodesymbolic.c:168
#, c-format
msgid "Cant close stream"
msgstr "Akış kapatılamadı"
@@ -7257,7 +7239,7 @@ msgstr "CSS dosyasından biçem kullan"
#: tools/gtk-builder-tool-preview.c:187 tools/gtk-builder-tool-screenshot.c:370
#: tools/gtk-builder-tool-validate.c:268
#: tools/gtk-rendernode-tool-benchmark.c:106
#: tools/gtk-rendernode-tool-render.c:203 tools/gtk-rendernode-tool-show.c:113
#: tools/gtk-rendernode-tool-render.c:262 tools/gtk-rendernode-tool-show.c:113
#, c-format
msgid "Could not initialize windowing system\n"
msgstr "Pencereleme sistemi ilklendirilemedi\n"
@@ -7303,13 +7285,13 @@ msgstr ""
"Üstüne yazmak için --force kullan.\n"
#: tools/gtk-builder-tool-screenshot.c:332
#: tools/gtk-rendernode-tool-render.c:171
#: tools/gtk-rendernode-tool-render.c:230
#, c-format
msgid "Output written to %s.\n"
msgstr "Çıktı şuna yazıldı: %s.\n"
#: tools/gtk-builder-tool-screenshot.c:336
#: tools/gtk-rendernode-tool-render.c:175
#: tools/gtk-rendernode-tool-render.c:234
#, c-format
msgid "Failed to save %s: %s\n"
msgstr "%s kaydedilemedi: %s\n"
@@ -7328,7 +7310,7 @@ msgstr "Var olan dosyanın üstüne yaz"
#: tools/gtk-builder-tool-screenshot.c:363
#: tools/gtk-rendernode-tool-benchmark.c:97
#: tools/gtk-rendernode-tool-render.c:196
#: tools/gtk-rendernode-tool-render.c:255
msgid "FILE…"
msgstr "DOSYA…"
@@ -7829,7 +7811,7 @@ msgstr "Gerçekleyiciyi kıyaslamaya ekle"
#: tools/gtk-rendernode-tool-benchmark.c:94
#: tools/gtk-rendernode-tool-compare.c:65
#: tools/gtk-rendernode-tool-render.c:195
#: tools/gtk-rendernode-tool-render.c:254
msgid "RENDERER"
msgstr "GERÇEKLEYİCİ"
@@ -7850,7 +7832,7 @@ msgid "Benchmark rendering of a .node file."
msgstr "Bir .node dosyasının gerçeklemesini kıyasla."
#: tools/gtk-rendernode-tool-benchmark.c:127
#: tools/gtk-rendernode-tool-info.c:236 tools/gtk-rendernode-tool-render.c:224
#: tools/gtk-rendernode-tool-info.c:236 tools/gtk-rendernode-tool-render.c:283
#: tools/gtk-rendernode-tool-show.c:134
#, c-format
msgid "No .node file specified\n"
@@ -7862,7 +7844,7 @@ msgid "Can only benchmark a single .node file\n"
msgstr "Yalnızca tek bir .node dosyasını kıyaslayabilir\n"
#: tools/gtk-rendernode-tool-compare.c:65
#: tools/gtk-rendernode-tool-render.c:195
#: tools/gtk-rendernode-tool-render.c:254
msgid "Renderer to use"
msgstr "Kullanılacak gerçekleyici"
@@ -7884,7 +7866,7 @@ msgid "Must specify two files\n"
msgstr "İki dosya belirtilmelidir\n"
#: tools/gtk-rendernode-tool-compare.c:102
#: tools/gtk-rendernode-tool-render.c:150
#: tools/gtk-rendernode-tool-render.c:209
#, c-format
msgid "Failed to create renderer: %s\n"
msgstr "Gerçekleyici oluşturulamadı: %s\n"
@@ -7943,7 +7925,7 @@ msgstr "Gerçekleme düğümüyle ilgili bilgi sağla."
msgid "Can only accept a single .node file\n"
msgstr "Yalnızca tek bir .node dosyasını kabul edebilir\n"
#: tools/gtk-rendernode-tool-render.c:123
#: tools/gtk-rendernode-tool-render.c:170
#, c-format
msgid ""
"File %s exists.\n"
@@ -7952,16 +7934,17 @@ msgstr ""
"%s dosyası var.\n"
"Üstüne yazmak için --force kullan.\n"
#: tools/gtk-rendernode-tool-render.c:137
#: tools/gtk-rendernode-tool-render.c:184
#: tools/gtk-rendernode-tool-render.c:196
#, c-format
msgid "Failed to generate SVG: %s\n"
msgstr "SVG oluşturulamadı: %s\n"
#: tools/gtk-rendernode-tool-render.c:211
#: tools/gtk-rendernode-tool-render.c:270
msgid "Render a .node file to an image."
msgstr "Bir .node dosyasını resme gerçekle."
#: tools/gtk-rendernode-tool-render.c:230
#: tools/gtk-rendernode-tool-render.c:289
#, c-format
msgid "Can only render a single .node file to a single output file\n"
msgstr ""
@@ -8098,6 +8081,31 @@ msgstr ""
"Eğer burada gerçekten bir simge önbelleği oluşturmak istiyorsanız, --ignore-"
"theme-indexʼi kullanın.\n"
#~ msgid "Antialiasing"
#~ msgstr "Kenar Yumuşatma"
#~ msgid "Hinting"
#~ msgstr "Düzeltme"
#~ msgctxt "Font hinting style"
#~ msgid "None"
#~ msgstr "Yok"
#~ msgctxt "Font hinting style"
#~ msgid "Slight"
#~ msgstr "Hafif"
#~ msgctxt "Font hinting style"
#~ msgid "Medium"
#~ msgstr "Orta"
#~ msgctxt "Font hinting style"
#~ msgid "Full"
#~ msgstr "Tam"
#~ msgid "Metrics Hinting"
#~ msgstr "Metrik Düzeltme"
#~ msgid "Font Scale"
#~ msgstr "Yazı Tipi Ölçeği"

View File

@@ -649,6 +649,7 @@ main (int argc, char *argv[])
g_test_add_data_func ("/a11y/property/value-min", GUINT_TO_POINTER (GTK_ACCESSIBLE_PROPERTY_VALUE_MIN), test_number_property);
g_test_add_data_func ("/a11y/property/value-now", GUINT_TO_POINTER (GTK_ACCESSIBLE_PROPERTY_VALUE_NOW), test_number_property);
g_test_add_data_func ("/a11y/property/value-text", GUINT_TO_POINTER (GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT), test_string_property);
g_test_add_data_func ("/a11y/property/help-text", GUINT_TO_POINTER (GTK_ACCESSIBLE_PROPERTY_HELP_TEXT), test_string_property);
g_test_add_func ("/a11y/property/update-multiple", test_update_multiple_properties);

View File

@@ -52,31 +52,3 @@ test('transition', transition,
suite: 'css'
)
if false and get_option ('profiler')
adwaita_env = csstest_env
adwaita_env.set('GTK_THEME', 'Adwaita')
test('performance-adwaita', test_performance,
args: [
'--mark', 'css validation',
'--name', 'performance-adwaita',
'--output', join_paths(meson.current_build_dir(), 'output'),
join_paths(meson.current_build_dir(), '../../demos/widget-factory/gtk4-widget-factory'),
],
env: adwaita_env,
suite: [ 'css' ],
)
empty_env = csstest_env
empty_env.set('GTK_THEME', 'Empty')
test('performance-empty', test_performance,
args: [
'--mark', 'css validation',
'--name', 'performance-empty',
'--output', join_paths(meson.current_build_dir(), 'output'),
join_paths(meson.current_build_dir(), '../../demos/widget-factory/gtk4-widget-factory'),
],
env: empty_env,
suite: [ 'css' ],
)
endif

View File

@@ -0,0 +1,41 @@
clip {
/* Numbers that trigger rounding errors at 125%:
9, 13, 18, 21, 26, 31, 36, 42, 47, 52, 57, 62, 67, 72, 77, 84, 89, 94, 99, ...
*/
clip: 0 0 9 13;
child: transform {
/* This is a typical fractional scale factor. It is 5/4.
The inverse is 4/5, and that number cannot be represented as
a float.
The renderer does however operate in the scaled coordinate system,
So this will translate the clip rect above to the scaled clip rect
0 0 7.20000029 10.4000006
*/
transform: scale(1.25);
child: container {
/* This color node exists just so that the bounds of the clipped node
are large enough. Otherwise the node bounds computation might end
up detecting that the clip is actually empty, because it scales
the other way: It multiplies by 1.25, not by 0.8.
*/
color {
color: black;
bounds: 0 0 50 50;
}
/* This node has bounds of 7.2 0 10 10 - which gets translated to
7.19999981 0 10.000001 10 during parsing of the path.
And because 7.19999981 < 7.20000029 this node might not be considered
fully clipped, even though it really should be.
*/
fill {
path: "M 7.2 0 l 10 0 l 0 10 l -10 0 z";
child: color {
color: red;
bounds: 0 0 50 50;
}
}
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 B

View File

@@ -73,6 +73,7 @@ compare_render_tests = [
'empty-shadow',
'empty-texture',
'empty-transform',
'empty-fallback',
'fill',
'fill2',
'fill-clipped-nogl',

View File

@@ -1,6 +1,7 @@
texture-scale {
bounds: 0 0 50 50;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAKUlEQVQYlWP8z3DmPwMaYGQwYUQX\
texture: url("data:image/png;base64,\
iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAKUlEQVQYlWP8z3DmPwMaYGQwYUQX\
Y0IXwAUGUCGGoxkYGBiweXAoeAYAz44F3e3U1xUAAAAASUVORK5CYII=\
");
}

View File

@@ -1,6 +1,7 @@
texture {
bounds: 0 0 50 50;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAKUlEQVQYlWP8z3DmPwMaYGQwYUQX\
texture: url("data:image/png;base64,\
iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAKUlEQVQYlWP8z3DmPwMaYGQwYUQX\
Y0IXwAUGUCGGoxkYGBiweXAoeAYAz44F3e3U1xUAAAAASUVORK5CYII=\
");
}

View File

@@ -1,5 +1,6 @@
text {
font: "text-mixed-color 10px" url("data:font/ttf;base64,AAEAAAAKAIAAAwAgQ09MUgATAEEAAAJ8AAAALENQQUwB/wATAAACqAAAABpjbWFwAHcAPQAAATwA\
font: "text-mixed-color 10px" url("data:font/ttf;base64,\
AAEAAAAKAIAAAwAgQ09MUgATAEEAAAJ8AAAALENQQUwB/wATAAACqAAAABpjbWFwAHcAPQAAATwA\
AAA0Z2x5Zu8g4kAAAAGEAAAA0mhlYWQmofyJAAAArAAAADZoaGVhDAEEAgAAAOQAAAAkaG10eAQA\
AQAAAAEoAAAAFGxvY2EAyAD5AAABcAAAABRtYXhwAAwACQAAAQgAAAAgbmFtZX7VdrQAAAJYAAAA\
IgABAAAAARmajs74k18PPPUAAggAAAAAAOHCPQAAAAAA4cpY+QAAAAAEAAgAAAAAAQACAAAAAAAA\

View File

@@ -1,5 +1,6 @@
text {
font: "text-mixed-color 10px" url("data:font/ttf;base64,AAEAAAAKAIAAAwAgQ09MUgATAEEAAAJ8AAAALENQQUwB/wATAAACqAAAABpjbWFwAHcAPQAAATwA\
font: "text-mixed-color 10px" url("data:font/ttf;base64,\
AAEAAAAKAIAAAwAgQ09MUgATAEEAAAJ8AAAALENQQUwB/wATAAACqAAAABpjbWFwAHcAPQAAATwA\
AAA0Z2x5Zu8g4kAAAAGEAAAA0mhlYWQmofyJAAAArAAAADZoaGVhDAEEAgAAAOQAAAAkaG10eAQA\
AQAAAAEoAAAAFGxvY2EAyAD5AAABcAAAABRtYXhwAAwACQAAAQgAAAAgbmFtZX7VdrQAAAJYAAAA\
IgABAAAAARmajs74k18PPPUAAggAAAAAAOHCPQAAAAAA4cpY+QAAAAAEAAgAAAAAAQACAAAAAAAA\

View File

@@ -1,6 +1,7 @@
texture {
bounds: 0 0 50 50;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAKUlEQVQYlWP8z3DmPwMaYGQwYUQX\
texture: url("data:image/png;base64,\
iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAKUlEQVQYlWP8z3DmPwMaYGQwYUQX\
Y0IXwAUGUCGGoxkYGBiweXAoeAYAz44F3e3U1xUAAAAASUVORK5CYII=\
");
}

View File

@@ -1,6 +1,7 @@
texture {
bounds: 0 0 1 1;
texture: "texture1" url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWP4z8DwHwAFAAH/q842\
texture: "texture1" url("data:image/png;base64,\
iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWP4z8DwHwAFAAH/q842\
iQAAAABJRU5ErkJggg==\
");
}

View File

@@ -1,26 +1,30 @@
texture-scale {
bounds: 0 0 50 50;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGElEQVQYlWP8z8Dwn4EIwESMolGF\
texture: url("data:image/png;base64,\
iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGElEQVQYlWP8z8Dwn4EIwESMolGF\
1FMIAD2cAhL1w47oAAAAAElFTkSuQmCC\
");
}
texture-scale {
bounds: 0 0 50 50;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGElEQVQYlWP8z8Dwn4EIwESMolGF\
texture: url("data:image/png;base64,\
iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGElEQVQYlWP8z8Dwn4EIwESMolGF\
1FMIAD2cAhL1w47oAAAAAElFTkSuQmCC\
");
}
texture-scale {
bounds: 0 0 50 50;
filter: nearest;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGElEQVQYlWP8z8Dwn4EIwESMolGF\
texture: url("data:image/png;base64,\
iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGElEQVQYlWP8z8Dwn4EIwESMolGF\
1FMIAD2cAhL1w47oAAAAAElFTkSuQmCC\
");
}
texture-scale {
bounds: 0 0 50 50;
filter: trilinear;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGElEQVQYlWP8z8Dwn4EIwESMolGF\
texture: url("data:image/png;base64,\
iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGElEQVQYlWP8z8Dwn4EIwESMolGF\
1FMIAD2cAhL1w47oAAAAAElFTkSuQmCC\
");
}

View File

@@ -1,6 +1,7 @@
texture-scale {
bounds: 0 0 50 50;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAKUlEQVQYlWP8z3DmPwMaYGQwYUQX\
texture: url("data:image/png;base64,\
iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAKUlEQVQYlWP8z3DmPwMaYGQwYUQX\
Y0IXwAUGUCGGoxkYGBiweXAoeAYAz44F3e3U1xUAAAAASUVORK5CYII=\
");
}

View File

@@ -277,27 +277,3 @@ make_pot = find_program ('make-pot', dirs: meson.project_source_root())
test('potfiles', make_pot,
workdir: meson.project_source_root(),
suite: ['gtk', 'translations' ])
if false and get_option ('profiler')
performance_env = test_env
performance_env.set('GTK_THEME', 'Empty')
test('performance-layout', test_performance,
args: [
'--mark', 'size allocation',
join_paths(meson.current_build_dir(), '../../demos/widget-factory/gtk4-widget-factory'),
],
env: performance_env,
suite: [ 'gtk' ],
)
test('performance-snapshot', test_performance,
args: [
'--mark', 'widget snapshot',
join_paths(meson.current_build_dir(), '../../demos/widget-factory/gtk4-widget-factory'),
],
env: performance_env,
suite: [ 'gtk' ],
)
endif