Compare commits

..

39 Commits

Author SHA1 Message Date
Matthias Clasen dd06452b0f gsk: Add some inline vec2 apis
The gpu renderers are using a vec2 for their scale, and frequently
need to access the components. Avoid PLT overhead for this.
2024-03-12 22:08:28 -04:00
Matthias Clasen 4e166f39fe Merge branch 'matthiasc/for-main' into 'main'
Some small fixes and improvements

See merge request GNOME/gtk!7022
2024-03-12 20:52:48 +00:00
Matthias Clasen 5f79958716 gsk: Simplify some code
Just initialize the rect directly. This matches better what the
pattern variant of this method does, and it also has the nice
side-effect of eliminating the handling of negative scales in
gsk_rect_scale, which we don't need here, since our scales are

always positive.
2024-03-12 16:13:42 -04:00
Matthias Clasen aee0af34af filechooser: Assert that a string isn't NULL
It shouldn't ever be NULL, but lets make that explicit. since I've
been seeing crash reports that look like people are getting NULL
here.
2024-03-12 14:58:13 -04:00
Matthias Clasen 7e32eb2e98 entry: Add some tests for editable implementation
Test some of the editable api that is used in the filechooser
entry, since people are seeing crashes there.
2024-03-12 14:58:13 -04:00
Matthias Clasen 7ea7d5c390 Merge branch '6520_dont_drag_hidden_paned_handle' into 'main'
paned: don't claim drag-begin on invisible handle

Closes #6520

See merge request GNOME/gtk!7016
2024-03-12 15:46:53 +00:00
Matthias Clasen e3e9dda429 Merge branch 'macos_ci' into 'main'
Maintenance update for macOS Intel CI

See merge request GNOME/gtk!7005
2024-03-12 15:45:59 +00:00
Matthias Clasen a3ab25bf1d Merge branch 'wip/chergert/defer-cache-cleanup' into 'main'
gtk/textview: defer GtkTextLineDisplay finalization

See merge request GNOME/gtk!7019
2024-03-12 15:42:30 +00:00
Artur S0 095dec9238 Update Russian translation 2024-03-12 13:25:35 +00:00
Daniel Rusek 0e34365139 Update Czech translation 2024-03-12 12:40:43 +00:00
Matthias Clasen 88a62564f1 Merge branch 'matthiasc/for-main' into 'main'
Matthiasc/for main

See merge request GNOME/gtk!7020
2024-03-12 12:14:27 +00:00
Matthias Clasen 6ac94dc5c3 Post-release version bump 2024-03-12 08:12:52 -04:00
Matthias Clasen 5a9a0874bd 4.14.0 2024-03-12 07:52:13 -04:00
Matthias Clasen 91992111c3 Merge branch 'matthiasc/for-main' into 'main'
gsk: Rework font reloading again

See merge request GNOME/gtk!7018
2024-03-12 11:47:20 +00:00
Daniel Mustieles 120d874805 Update Spanish translation 2024-03-12 08:35:58 +00:00
Matthias Clasen 9454bad891 gsk: Rework font reloading again
Make a single gsk_reload_font helper that can tweak both
scale and font options, so we can ensure that our scaled
font has hint-metrics turned off (pango pays attention to
hint metrics when sizing and rendering hex boxes, and that
hurts us.
2024-03-12 00:45:14 -04:00
Christian Hergert 9cb410fd9b gtk/textview: defer GtkTextLineDisplay finalization
Defer the finalization of our GtkTextLineDisplay until we've completed
processing the current frame. Otherwise we risk doing additional work that
could cause us to miss our frame deadline.
2024-03-11 21:05:35 -07:00
Matthias Clasen 0f3fbed13c Merge branch 'wip/otte/for-main' into 'main'
Don't offscreen subsurface nodes

Closes #6499

See merge request GNOME/gtk!7009
2024-03-11 23:33:24 +00:00
Matthias Clasen 43ee9746bd Merge branch 'matthiasc/for-main' into 'main'
gsk: Avoid some roundf calls

See merge request GNOME/gtk!7017
2024-03-11 23:21:27 +00:00
Matthias Clasen 7283c5c22f gsk: Avoid some roundf calls
It seems that gcc has a hard time using intrinsics for round,
so help it out by using floor (x + .5).
2024-03-11 17:41:39 -04:00
Matthias Clasen 8b71fe4af6 Add an xfail for a rounded-clip test
This needs some changes in how we prevent offscreens from getting
too big. Filed as #6532.
2024-03-11 17:08:33 -04:00
René de Hesselle b627fb5970 ci: Install ninja from wheel for Big Sur runner
This avoids building it on the Big Sur Intel runner (because of
Python 3.8) which would require us to provide cmake.
2024-03-11 21:30:37 +01:00
Matthias Clasen be3ad1ef99 Merge branch 'wip/chergert/fix-6529' into 'main'
gtk/imcontext: fix ABI break via activate_osk_with_event

Closes #6529

See merge request GNOME/gtk!7015
2024-03-11 20:15:35 +00:00
g.willems 54264a9f78 paned: don't claim drag-begin on invisible handle
Paned handles are hidden when any of its children are hidden too,
but drag events were still accepted around the (virtual) handle position.

Instead, deny drag-begin when handle is hidden.

Fixes #6520
Closes #6520
2024-03-11 20:39:47 +01:00
Matthias Clasen 65380c66bd Merge branch 'matthiasc/for-main' into 'main'
label: Don't forget to clear select info

See merge request GNOME/gtk!7012
2024-03-11 19:35:51 +00:00
Matthias Clasen 8c96991ce0 Merge branch 'text-view-cursor-blink' into 'main'
textview: Match cursor blink behavior of GtkText

Closes #6515

See merge request GNOME/gtk!7014
2024-03-11 19:13:09 +00:00
Christian Hergert 07a44993ac gtk/imcontext: fix ABI break via activate_osk_with_event
Fixes #6529
2024-03-11 12:06:22 -07:00
Matthias Clasen 60d2d25463 Merge branch 'wip/public-activate-osk' into 'main'
gtkimcontext: Make gtk_im_context_activate_osk() public

See merge request GNOME/gtk!7013
2024-03-11 17:59:42 +00:00
Carlos Garnacho 907f99b176 gtkimcontextwayland: Drop the implicit gesture
Expect all users to call gtk_im_context_activate_osk() to get
on-screen keyboard features.
2024-03-11 18:04:16 +01:00
Carlos Garnacho ce6aa73c64 gtkimcontext: Make gtk_im_context_activate_osk() public
Make this API public so that foreign "text" widgets (e.g. VteTerminal)
have a chance to integrate this logic into their own event controllers,
without having to craft the behavior of their own gestures around the
built-in IM gesture.

In order to make it most useful for other backends, a GdkEvent argument
and a boolean return value were added. This might be useful information
for other platforms than Wayland, e.g. all investigation seems to hint
that on Windows only the a11y keyboard is available programmatically
via app launching, so the IM method implementation would need to set
up its own policies for showing up the OSK (e.g. on touch events).
2024-03-11 18:04:14 +01:00
Matthias Clasen 257bef85d0 textview: Match cursor blink behavior of GtkText
This makes the conditions in cursor_blinks() more similar to
what GtkText does, and fixes adds the same notify handler for
has-focus, so we start blinking when requires. Crucially, we
also no longer try to blink when unmapped, which should fix
a epiphany crash.

Fixes: #6515
2024-03-11 11:34:40 -04:00
Matthias Clasen a48df87a85 label: Don't forget to clear select info
This was showing up as crashes in the testsuite, where a later
test runs the mainloop, and that causes Wayland to claim the
primary selection on a widget that is already disposed.
2024-03-11 08:31:41 -04:00
Matthias Clasen fe4cd7cf0f Merge branch 'matthiasc/for-main' into 'main'
Add more offload tests

See merge request GNOME/gtk!7010
2024-03-11 02:31:13 +00:00
Matthias Clasen 229b34d478 Add more offload tests
These test various clip scenarios.
2024-03-10 22:08:44 -04:00
Benjamin Otte 1985f2c9ad gpu: Make intersecting rounded rect with NONE clip always succeed
This is a tricky topic, because it can make the clip bounds grow, so
previously we were trying to be careful.

However, this can cause perfectly trivial intersections to fail that are
caused by redraw diff regions.
And in the worst case, that means we offscreen in places where we
absolutely do not want to offscreen - in subtrees with subsurface nodes.

Fixes #6499
2024-03-11 01:39:40 +01:00
Benjamin Otte 01d57a7566 gpu: Initial clip is always NONE
We scissor the initial clip (which is why it's an integer rect that is
assigned to the scissor). And if we scissor, the result is a NONE clip.
2024-03-11 01:39:40 +01:00
Benjamin Otte 7a4b2c10c7 gpu: contained clip is a rectangular clip, too
So we can treat it like rect clip and promote it to NONE after a
successful scissor.
2024-03-11 01:39:40 +01:00
Benjamin Otte 208b2d37b6 gpu: Clarify clip types
CLIP_TYPE_NONE is valid if the clip is implemented by the scissor rect.

We always have a scissor rect and there's no way to draw outside of it.

In theory that means we can reset the clip to NONE at any point we
wish if we know nodes are contained inside a certain pixel-aligned
rectangle we can clip.
In practice that's probably quite hard...
2024-03-11 01:39:40 +01:00
Benjamin Otte ef98912779 nodeparser: Print subsurface nodes properly
The nodes actually end.

Tests included.
2024-03-11 01:39:40 +01:00
37 changed files with 730 additions and 526 deletions
+3 -1
View File
@@ -219,11 +219,13 @@ macos:
- if: $RUNNER == "macosintel"
variables:
SDKROOT: /opt/sdks/MacOSX10.13.4.sdk
NINJA_PKG: $CI_API_V4_URL/projects/30745/packages/generic/ninja_macos/v1.11.1.1+9/ninja-1.11.1.1-cp38-cp38-macosx_11_0_x86_64.whl
when: manual
allow_failure: true
- if: $RUNNER == "macosarm"
variables:
SDKROOT: /opt/sdks/MacOSX11.3.sdk
NINJA_PKG: ninja==1.11.1.1
stage: build
parallel:
matrix:
@@ -246,7 +248,7 @@ macos:
- curl -L $CI_API_V4_URL/projects/30437/packages/generic/pkgconfig/v0.29.2+10/pkg-config-0.29.2+10_$(uname -m).tar.xz | tar -C .venv -xJ
- curl -L $CI_API_V4_URL/projects/30438/packages/generic/bison/v3.8.2+3/bison-3.8.2+3_$(uname -m).tar.xz | tar -C .venv -xJ
- source .venv/bin/activate
- pip3 install meson==1.3.2 ninja==1.11.1.1
- pip3 install meson==1.3.2 $NINJA_PKG
# We're not setting up ccache here on purpose as it accelerates the build
# so much that it triggers race conditions in the gobject-introspection
# subproject.
+13 -1
View File
@@ -1,4 +1,8 @@
Overview of Changes in 4.14.0, xx-xx-xxxx
Overview of Changes in 4.14.1, xx-xx-xxxx
=========================================
Overview of Changes in 4.14.0, 12-03-2024
=========================================
Note: The new renderers and dmabuf support are using graphics drivers
@@ -9,6 +13,7 @@ recommended to use the latest mesa release (24.x) with the new renderers.
* GtkTextView:
- Don't snapshot children twice
- Don't blink the cursor when hidden
* GtkEmojiChooser:
- Fix presentation selector handling
@@ -16,6 +21,9 @@ recommended to use the latest mesa release (24.x) with the new renderers.
* GtkSnapshot:
- Fix wrong nodes with transformed shadows
* GtkIMContext:
- Make gtk_im_context_activate_osk public
* Accessibility:
- Implement get_contents_at for all our text widgets
- Add GtkAccessibleText.get_default_attributes
@@ -25,6 +33,8 @@ recommended to use the latest mesa release (24.x) with the new renderers.
- Round vertical glyph position to a device pixel position if the font is hinted
- Fix problems with clip handling
- Make vulkan and ngl match their font handling
- Fix some corner-cases with offloading and clips
- Fix problem with rendering of missing glyphs in hinted fonts
* MacOs:
- Implement cursor-from-texture
@@ -39,8 +49,10 @@ recommended to use the latest mesa release (24.x) with the new renderers.
Lithuanian
Norwegian Bokmål
Slovenian
Spanish
Turkish
Overview of Changes in 4.13.9, 02-03-2024
=========================================
+15
View File
@@ -30,6 +30,14 @@ gsk_gpu_clip_init_rect (GskGpuClip *clip,
gsk_rounded_rect_init_from_rect (&clip->rect, rect, 0);
}
static void
gsk_gpu_clip_init_rounded_rect (GskGpuClip *self,
const GskRoundedRect *rect)
{
self->type = GSK_GPU_CLIP_ROUNDED;
gsk_rounded_rect_init_copy (&self->rect, rect);
}
void
gsk_gpu_clip_init_copy (GskGpuClip *self,
const GskGpuClip *src)
@@ -129,6 +137,13 @@ gsk_gpu_clip_intersect_rounded_rect (GskGpuClip *dest,
break;
case GSK_GPU_CLIP_NONE:
res = gsk_rounded_rect_intersect_with_rect (rounded, &src->rect.bounds, &dest->rect);
if (gsk_gpu_clip_init_after_intersection (dest, res))
break;
/* XXX: This may grow the bounds quite substantially */
gsk_gpu_clip_init_rounded_rect (dest, rounded);
break;
case GSK_GPU_CLIP_CONTAINED:
case GSK_GPU_CLIP_RECT:
res = gsk_rounded_rect_intersect_with_rect (rounded, &src->rect.bounds, &dest->rect);
+1
View File
@@ -16,6 +16,7 @@ typedef enum {
GSK_GPU_CLIP_ALL_CLIPPED,
/* No clipping is necessary, but the clip rect is set
* to the actual bounds of the underlying framebuffer
* or handled via the scissor.
*/
GSK_GPU_CLIP_NONE,
/* The clip exists outside the rect, so clipping must
+7 -1
View File
@@ -918,7 +918,13 @@ gsk_gpu_device_lookup_glyph_image (GskGpuDevice *self,
return cache->image;
}
scaled_font = gsk_get_scaled_font (font, scale);
/* Note: we want to scale the font to the required size *and* ensure that
* metrics hinting is off. The latter is necessary since pango lets metrics
* hinting influence the rendering of hexboxes, and we get bad outcomes if
* that happens.
*/
scaled_font = gsk_reload_font (font, scale, CAIRO_HINT_METRICS_OFF, CAIRO_HINT_STYLE_DEFAULT, CAIRO_ANTIALIAS_DEFAULT);
subpixel_x = (flags & 3) / 4.f;
subpixel_y = ((flags >> 2) & 3) / 4.f;
pango_font_get_glyph_extents (scaled_font, glyph, &ink_rect, NULL);
+54 -45
View File
@@ -36,6 +36,7 @@
#include "gskdebugprivate.h"
#include "gskpath.h"
#include "gskrectprivate.h"
#include "gskvec2private.h"
#include "gskrendernodeprivate.h"
#include "gskroundedrectprivate.h"
#include "gskstrokeprivate.h"
@@ -184,20 +185,20 @@ gsk_gpu_node_processor_init (GskGpuNodeProcessor *self,
{
float scale_x = viewport->size.width / width;
float scale_y = viewport->size.height / height;
gsk_gpu_clip_init_rect (&self->clip,
&GRAPHENE_RECT_INIT (
scale_x * clip->x,
scale_y * clip->y,
scale_x * clip->width,
scale_y * clip->height
));
gsk_gpu_clip_init_empty (&self->clip,
&GRAPHENE_RECT_INIT (
scale_x * clip->x,
scale_y * clip->y,
scale_x * clip->width,
scale_y * clip->height
));
}
self->modelview = NULL;
gsk_gpu_image_get_projection_matrix (target, &self->projection);
graphene_vec2_init (&self->scale,
width / viewport->size.width,
height / viewport->size.height);
gsk_vec2_init (&self->scale,
width / viewport->size.width,
height / viewport->size.height);
self->offset = GRAPHENE_POINT_INIT (-viewport->origin.x,
-viewport->origin.y);
self->opacity = 1.0;
@@ -319,8 +320,8 @@ rect_round_to_pixels (const graphene_rect_t *src,
{
float x, y, xscale, yscale, inv_xscale, inv_yscale;
xscale = graphene_vec2_get_x (pixel_scale);
yscale = graphene_vec2_get_y (pixel_scale);
xscale = gsk_vec2_get_x (pixel_scale);
yscale = gsk_vec2_get_y (pixel_scale);
inv_xscale = 1.0f / xscale;
inv_yscale = 1.0f / yscale;
@@ -345,8 +346,8 @@ gsk_gpu_node_processor_init_draw (GskGpuNodeProcessor *self,
area.x = 0;
area.y = 0;
area.width = ceilf (graphene_vec2_get_x (scale) * viewport->size.width - EPSILON);
area.height = ceilf (graphene_vec2_get_y (scale) * viewport->size.height - EPSILON);
area.width = ceilf (gsk_vec2_get_x (scale) * viewport->size.width - EPSILON);
area.height = ceilf (gsk_vec2_get_y (scale) * viewport->size.height - EPSILON);
image = gsk_gpu_device_create_offscreen_image (gsk_gpu_frame_get_device (frame),
FALSE,
@@ -629,8 +630,8 @@ gsk_gpu_node_processor_rect_is_integer (GskGpuNodeProcessor *self,
cairo_rectangle_int_t *int_rect)
{
graphene_rect_t transformed_rect;
float scale_x = graphene_vec2_get_x (&self->scale);
float scale_y = graphene_vec2_get_y (&self->scale);
float scale_x = gsk_vec2_get_x (&self->scale);
float scale_y = gsk_vec2_get_y (&self->scale);
switch (gsk_transform_get_category (self->modelview))
{
@@ -1030,7 +1031,7 @@ gsk_gpu_node_processor_blur_op (GskGpuNodeProcessor *self,
gsk_gpu_node_processor_sync_globals (&other, 0);
graphene_vec2_init (&direction, blur_radius, 0.0f);
gsk_vec2_init (&direction, blur_radius, 0.0f);
gsk_gpu_blur_op (other.frame,
gsk_gpu_clip_get_shader_clip (&other.clip, &other.offset, &intermediate_rect),
source_desc,
@@ -1044,7 +1045,7 @@ gsk_gpu_node_processor_blur_op (GskGpuNodeProcessor *self,
real_offset = GRAPHENE_POINT_INIT (self->offset.x + shadow_offset->x,
self->offset.y + shadow_offset->y);
graphene_vec2_init (&direction, 0.0f, blur_radius);
gsk_vec2_init (&direction, 0.0f, blur_radius);
intermediate_descriptor = gsk_gpu_node_processor_add_image (self, intermediate, GSK_GPU_SAMPLER_TRANSPARENT);
if (shadow_color)
{
@@ -1328,7 +1329,7 @@ gsk_gpu_node_processor_add_node_clipped (GskGpuNodeProcessor *self,
gsk_gpu_clip_init_copy (&self->clip, &old_clip);
return;
}
else if (self->clip.type == GSK_GPU_CLIP_RECT &&
else if ((self->clip.type == GSK_GPU_CLIP_RECT || self->clip.type == GSK_GPU_CLIP_CONTAINED) &&
gsk_rect_contains_rect (&self->clip.rect.bounds, &clip))
{
self->clip.type = GSK_GPU_CLIP_NONE;
@@ -1581,8 +1582,8 @@ gsk_gpu_node_processor_add_transform_node (GskGpuNodeProcessor *self,
gsk_gpu_clip_scale (&self->clip, &old_clip, scale_x, scale_y);
self->offset.x = (self->offset.x + dx) / scale_x;
self->offset.y = (self->offset.y + dy) / scale_y;
graphene_vec2_init (&self->scale, fabs (scale_x), fabs (scale_y));
graphene_vec2_multiply (&self->scale, &old_scale, &self->scale);
gsk_vec2_init (&self->scale, fabs (scale_x), fabs (scale_y));
gsk_vec2_multiply (&self->scale, &old_scale, &self->scale);
self->modelview = gsk_transform_scale (self->modelview,
scale_x / fabs (scale_x),
scale_y / fabs (scale_y));
@@ -1642,15 +1643,15 @@ gsk_gpu_node_processor_add_transform_node (GskGpuNodeProcessor *self,
old_modelview = gsk_transform_ref (self->modelview);
self->modelview = gsk_transform_scale (self->modelview,
graphene_vec2_get_x (&self->scale),
graphene_vec2_get_y (&self->scale));
gsk_vec2_get_x (&self->scale),
gsk_vec2_get_y (&self->scale));
self->modelview = gsk_transform_transform (self->modelview, clip_transform);
gsk_transform_unref (clip_transform);
extract_scale_from_transform (self->modelview, &scale_x, &scale_y);
old_pixels = MAX (graphene_vec2_get_x (&old_scale) * old_clip.rect.bounds.size.width,
graphene_vec2_get_y (&old_scale) * old_clip.rect.bounds.size.height);
old_pixels = MAX (gsk_vec2_get_x (&old_scale) * old_clip.rect.bounds.size.width,
gsk_vec2_get_y (&old_scale) * old_clip.rect.bounds.size.height);
new_pixels = MAX (scale_x * self->clip.rect.bounds.size.width,
scale_y * self->clip.rect.bounds.size.height);
@@ -1663,7 +1664,7 @@ gsk_gpu_node_processor_add_transform_node (GskGpuNodeProcessor *self,
}
self->modelview = gsk_transform_scale (self->modelview, 1 / scale_x, 1 / scale_y);
graphene_vec2_init (&self->scale, scale_x, scale_y);
gsk_vec2_init (&self->scale, scale_x, scale_y);
self->offset = *graphene_point_zero ();
}
break;
@@ -1735,8 +1736,8 @@ gsk_gpu_node_processor_create_transform_pattern (GskGpuPatternWriter *self,
self->bounds.size.width *= inv_sx;
self->bounds.size.height *= inv_sy;
self->offset = GRAPHENE_POINT_INIT (0, 0);
graphene_vec2_init (&self->scale, fabs (sx), fabs (sy));
graphene_vec2_multiply (&self->scale, &old_scale, &self->scale);
gsk_vec2_init (&self->scale, fabs (sx), fabs (sy));
gsk_vec2_multiply (&self->scale, &old_scale, &self->scale);
}
break;
@@ -1820,8 +1821,8 @@ gsk_gpu_node_processor_add_color_node (GskGpuNodeProcessor *self,
return;
}
scale_x = graphene_vec2_get_x (&self->scale);
scale_y = graphene_vec2_get_y (&self->scale);
scale_x = gsk_vec2_get_x (&self->scale);
scale_y = gsk_vec2_get_y (&self->scale);
clipped = GRAPHENE_RECT_INIT (int_clipped.x / scale_x, int_clipped.y / scale_y,
int_clipped.width / scale_x, int_clipped.height / scale_y);
shader_clip = gsk_gpu_clip_get_shader_clip (&self->clip, graphene_point_zero(), &clipped);
@@ -1948,8 +1949,8 @@ gsk_gpu_node_processor_add_texture_node (GskGpuNodeProcessor *self,
}
if (gsk_gpu_frame_should_optimize (self->frame, GSK_GPU_OPTIMIZE_MIPMAP) &&
(gdk_texture_get_width (texture) > 2 * node->bounds.size.width * graphene_vec2_get_x (&self->scale) ||
gdk_texture_get_height (texture) > 2 * node->bounds.size.height * graphene_vec2_get_y (&self->scale)))
(gdk_texture_get_width (texture) > 2 * node->bounds.size.width * gsk_vec2_get_x (&self->scale) ||
gdk_texture_get_height (texture) > 2 * node->bounds.size.height * gsk_vec2_get_y (&self->scale)))
{
guint32 descriptor;
@@ -2015,8 +2016,8 @@ gsk_gpu_node_processor_create_texture_pattern (GskGpuPatternWriter *self,
}
if (gsk_gpu_frame_should_optimize (self->frame, GSK_GPU_OPTIMIZE_MIPMAP) &&
(gdk_texture_get_width (texture) > 2 * node->bounds.size.width * graphene_vec2_get_x (&self->scale) ||
gdk_texture_get_height (texture) > 2 * node->bounds.size.height * graphene_vec2_get_y (&self->scale)))
(gdk_texture_get_width (texture) > 2 * node->bounds.size.width * gsk_vec2_get_x (&self->scale) ||
gdk_texture_get_height (texture) > 2 * node->bounds.size.height * gsk_vec2_get_y (&self->scale)))
{
image = gsk_gpu_node_processor_ensure_image (self->frame,
image,
@@ -2060,7 +2061,7 @@ gsk_gpu_node_processor_add_texture_scale_node (GskGpuNodeProcessor *self,
gboolean need_mipmap, need_offscreen;
need_offscreen = self->modelview != NULL ||
!graphene_vec2_equal (&self->scale, graphene_vec2_one ());
gsk_vec2_equal (&self->scale, graphene_vec2_one ());
if (need_offscreen)
{
GskGpuImage *offscreen;
@@ -3021,7 +3022,7 @@ gsk_gpu_node_processor_add_glyph_node (GskGpuNodeProcessor *self,
offset.x += self->offset.x;
offset.y += self->offset.y;
scale = MAX (graphene_vec2_get_x (&self->scale), graphene_vec2_get_y (&self->scale));
scale = MAX (gsk_vec2_get_x (&self->scale), gsk_vec2_get_y (&self->scale));
inv_scale = 1.f / scale;
glyph_align = gsk_gpu_frame_should_optimize (self->frame, GSK_GPU_OPTIMIZE_GLYPH_ALIGN);
@@ -3043,15 +3044,15 @@ gsk_gpu_node_processor_add_glyph_node (GskGpuNodeProcessor *self,
/* Force glyph_origin.y to be device pixel aligned.
* The hinter expects that.
*/
glyph_origin.x = roundf (glyph_origin.x * scale * 4);
glyph_origin.x = floor (glyph_origin.x * scale * 4 + .5);
flags = ((int) glyph_origin.x & 3);
glyph_origin.x = 0.25 * inv_scale * glyph_origin.x;
glyph_origin.y = roundf (glyph_origin.y * scale) * inv_scale;
glyph_origin.y = floor (glyph_origin.y * scale + .5) * inv_scale;
}
else if (glyph_align)
{
glyph_origin.x = roundf (glyph_origin.x * scale * 4);
glyph_origin.y = roundf (glyph_origin.y * scale * 4);
glyph_origin.x = floor (glyph_origin.x * scale * 4 + .5);
glyph_origin.y = floor (glyph_origin.y * scale * 4 + .5);
flags = ((int) glyph_origin.x & 3) |
(((int) glyph_origin.y & 3) << 2);
glyph_origin.x = 0.25 * inv_scale * glyph_origin.x;
@@ -3059,8 +3060,8 @@ gsk_gpu_node_processor_add_glyph_node (GskGpuNodeProcessor *self,
}
else
{
glyph_origin.x = roundf (glyph_origin.x * scale) * inv_scale;
glyph_origin.y = roundf (glyph_origin.y * scale) * inv_scale;
glyph_origin.x = floor (glyph_origin.x * scale + .5) * inv_scale;
glyph_origin.y = floor (glyph_origin.y * scale + .5) * inv_scale;
flags = 0;
}
@@ -3073,11 +3074,19 @@ gsk_gpu_node_processor_add_glyph_node (GskGpuNodeProcessor *self,
&glyph_bounds,
&glyph_offset);
gsk_rect_scale (&GRAPHENE_RECT_INIT (-glyph_bounds.origin.x, -glyph_bounds.origin.y, gsk_gpu_image_get_width (image), gsk_gpu_image_get_height (image)), inv_scale, inv_scale, &glyph_tex_rect);
gsk_rect_scale (&GRAPHENE_RECT_INIT (0, 0, glyph_bounds.size.width, glyph_bounds.size.height), inv_scale, inv_scale, &glyph_bounds);
glyph_tex_rect = GRAPHENE_RECT_INIT (-glyph_bounds.origin.x * inv_scale,
-glyph_bounds.origin.y * inv_scale,
gsk_gpu_image_get_width (image) * inv_scale,
gsk_gpu_image_get_height (image) * inv_scale);
glyph_bounds = GRAPHENE_RECT_INIT (0,
0,
glyph_bounds.size.width * inv_scale,
glyph_bounds.size.height * inv_scale);
glyph_origin = GRAPHENE_POINT_INIT (glyph_origin.x - glyph_offset.x * inv_scale,
glyph_origin.y - glyph_offset.y * inv_scale);
descriptor = gsk_gpu_node_processor_add_image (self, image, GSK_GPU_SAMPLER_DEFAULT);
if (glyphs[i].attr.is_color)
gsk_gpu_texture_op (self->frame,
gsk_gpu_clip_get_shader_clip (&self->clip, &glyph_offset, &glyph_bounds),
@@ -3127,7 +3136,7 @@ gsk_gpu_node_processor_create_glyph_pattern (GskGpuPatternWriter *self,
offset.x += self->offset.x;
offset.y += self->offset.y;
scale = MAX (graphene_vec2_get_x (&self->scale), graphene_vec2_get_y (&self->scale));
scale = MAX (gsk_vec2_get_x (&self->scale), gsk_vec2_get_y (&self->scale));
inv_scale = 1.f / scale;
gsk_gpu_pattern_writer_append_uint (self, GSK_GPU_PATTERN_GLYPHS);
+3 -2
View File
@@ -14,6 +14,7 @@
#include "gdk/gdkglcontextprivate.h"
#include "gsk/gskdebugprivate.h"
#include "gskvec2private.h"
static GskGpuOp *
gsk_gpu_upload_op_gl_command_with_area (GskGpuOp *op,
@@ -465,8 +466,8 @@ gsk_gpu_upload_cairo_op (GskGpuFrame *frame,
self->image = gsk_gpu_device_create_upload_image (gsk_gpu_frame_get_device (frame),
FALSE,
GDK_MEMORY_DEFAULT,
ceil (graphene_vec2_get_x (scale) * viewport->size.width),
ceil (graphene_vec2_get_y (scale) * viewport->size.height));
ceil (gsk_vec2_get_x (scale) * viewport->size.width),
ceil (gsk_vec2_get_y (scale) * viewport->size.height));
self->viewport = *viewport;
self->func = func;
self->user_data = user_data;
+9 -21
View File
@@ -38,7 +38,7 @@ typedef struct
guint is_rectilinear : 1;
guint is_fully_contained : 1;
guint is_empty : 1;
guint is_complex : 1; /* Inside a non-representable clip, even if fully contained */
guint is_complex : 1;
} Clip;
struct _GskOffload
@@ -225,13 +225,10 @@ static void
push_rect_clip (GskOffload *self,
const GskRoundedRect *rect)
{
Clip *current_clip = self->clips->data;
Clip *clip = g_new0 (Clip, 1);
clip->rect = *rect;
clip->is_rectilinear = gsk_rounded_rect_is_rectilinear (rect);
clip->is_empty = (rect->bounds.size.width == 0 || rect->bounds.size.height == 0);
clip->is_complex = current_clip && current_clip->is_complex;
self->clips = g_slist_prepend (self->clips, clip);
self->current_clip = self->clips->data;
@@ -252,7 +249,6 @@ push_contained_clip (GskOffload *self)
clip->rect = current_clip->rect;
clip->is_rectilinear = TRUE;
clip->is_fully_contained = TRUE;
clip->is_complex = current_clip && current_clip->is_complex;
self->clips = g_slist_prepend (self->clips, clip);
self->current_clip = self->clips->data;
@@ -282,8 +278,6 @@ pop_clip (GskOffload *self)
self->clips = self->clips->next;
if (self->clips)
self->current_clip = self->clips->data;
else
self->current_clip = NULL;
g_slist_free_1 (l);
g_free (clip);
@@ -460,7 +454,7 @@ visit_node (GskOffload *self,
case GSK_MASK_NODE:
case GSK_FILL_NODE:
case GSK_STROKE_NODE:
break;
break;
case GSK_CLIP_NODE:
{
@@ -521,21 +515,21 @@ visit_node (GskOffload *self,
push_empty_clip (self);
else if (result == GSK_INTERSECTION_NONEMPTY)
push_rect_clip (self, &intersection);
else if (gsk_rounded_rect_contains_rect (&self->current_clip->rect, &transformed_clip.bounds))
push_rect_clip (self, &transformed_clip);
else
push_complex_clip (self);
goto complex_clip;
visit_node (self, gsk_rounded_clip_node_get_child (node));
pop_clip (self);
}
else
{
complex_clip:
if (gsk_rounded_rect_contains_rect (&self->current_clip->rect, &transformed_clip.bounds))
push_rect_clip (self, &transformed_clip);
else
push_complex_clip (self);
visit_node (self, gsk_rounded_clip_node_get_child (node));
pop_clip (self);
}
visit_node (self, gsk_rounded_clip_node_get_child (node));
pop_clip (self);
}
break;
@@ -572,12 +566,6 @@ visit_node (GskOffload *self,
"Can't offload subsurface %p: clipped",
subsurface);
}
else if (self->current_clip->is_complex)
{
GDK_DISPLAY_DEBUG (gdk_surface_get_display (self->surface), OFFLOAD,
"Can't offload subsurface %p: inside non-representable clip",
subsurface);
}
else if (self->transforms &&
gsk_transform_get_category ((GskTransform *)self->transforms->data) < GSK_TRANSFORM_CATEGORY_2D_AFFINE)
{
@@ -606,7 +594,7 @@ visit_node (GskOffload *self,
case GSK_NOT_A_RENDER_NODE:
default:
g_assert_not_reached ();
break;
break;
}
if (has_clip)
+38 -93
View File
@@ -22,103 +22,27 @@ gsk_ensure_resources (void)
}
/*< private >
* gsk_get_scaled_font:
* @font: a `PangoFont`
* @scale: the scale
*
* Returns a font that is just like @font, at a size that
* is multiplied by @scale.
*
* Returns: (transfer full): a scaled version of @font
*/
PangoFont *
gsk_get_scaled_font (PangoFont *font,
float scale)
{
if (scale == 1.0)
return g_object_ref (font);
#if PANGO_VERSION_CHECK (1, 52, 0)
return pango_font_map_reload_font (pango_font_get_font_map (font), font, scale, NULL, NULL);
#else
GHashTable *fonts;
int key;
PangoFont *font2;
PangoFontDescription *desc;
int size;
PangoFontMap *fontmap;
PangoContext *context;
cairo_scaled_font_t *sf;
cairo_font_options_t *options;
FcPattern *pattern;
double dpi;
key = (int) roundf (scale * PANGO_SCALE);
fonts = (GHashTable *) g_object_get_data (G_OBJECT (font), "gsk-scaled-fonts");
if (fonts)
{
font2 = g_hash_table_lookup (fonts, GINT_TO_POINTER (key));
if (font2)
return g_object_ref (font2);
}
else
{
fonts = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_object_unref);
g_object_set_data_full (G_OBJECT (font), "gsk-scaled-fonts",
fonts, (GDestroyNotify) g_hash_table_unref);
}
desc = pango_font_describe (font);
size = pango_font_description_get_size (desc);
if (pango_font_description_get_size_is_absolute (desc))
pango_font_description_set_absolute_size (desc, size * scale);
else
pango_font_description_set_size (desc, (int) roundf (size * scale));
fontmap = pango_font_get_font_map (font);
context = pango_font_map_create_context (fontmap);
sf = pango_cairo_font_get_scaled_font (PANGO_CAIRO_FONT (font));
options = cairo_font_options_create ();
cairo_scaled_font_get_font_options (sf, options);
pango_cairo_context_set_font_options (context, options);
cairo_font_options_destroy (options);
pattern = pango_fc_font_get_pattern (PANGO_FC_FONT (font));
if (FcPatternGetDouble (pattern, FC_DPI, 0, &dpi) == FcResultMatch)
pango_cairo_context_set_resolution (context, dpi);
font2 = pango_font_map_load_font (fontmap, context, desc);
pango_font_description_free (desc);
g_object_unref (context);
g_hash_table_insert (fonts, GINT_TO_POINTER (key), font2);
return g_object_ref (font2);
#endif
}
/*< private >
* gsk_get_hinted_font:
* gsk_reload_font:
* @font: a `PangoFont`
* @scale: the scale to apply
* @hint_metris: hint metrics to use or `CAIRO_HINT_METRICS_DEFAILT` to keep the
* hint metrics of the font unchanged
* @hint_style: hint style to use or `CAIRO_HINT_STYLE_DEFAULT` to keep the
* hint style of @font unchanged
* @antialias: antialiasing to use, or `CAIRO_ANTIALIAS_DEFAULT` to keep the
* antialias option of @font unchanged
*
* Returns a font that is just like @font, but uses the
* given hinting options for its glyphs and metrics.
* given scale and hinting options for its glyphs and metrics.
*
* Returns: (transfer full): the modified `PangoFont`
*/
PangoFont *
gsk_get_hinted_font (PangoFont *font,
cairo_hint_style_t hint_style,
cairo_antialias_t antialias)
gsk_reload_font (PangoFont *font,
float scale,
cairo_hint_metrics_t hint_metrics,
cairo_hint_style_t hint_style,
cairo_antialias_t antialias)
{
cairo_font_options_t *options;
cairo_scaled_font_t *sf;
@@ -127,24 +51,32 @@ gsk_get_hinted_font (PangoFont *font,
PangoFontDescription *desc;
FcPattern *pattern;
double dpi;
int size;
#endif
/* These requests often come in sequentially so keep the result
* around and re-use it if everything matches.
*/
static PangoFont *last_font;
static float last_scale;
static cairo_hint_metrics_t last_hint_metrics;
static cairo_hint_style_t last_hint_style;
static cairo_antialias_t last_antialias;
static PangoFont *last_result;
if (last_result != NULL &&
last_font == font &&
last_scale == scale &&
last_hint_metrics == hint_metrics &&
last_hint_style == hint_style &&
last_antialias == antialias)
return g_object_ref (last_result);
last_scale = scale;
last_hint_metrics = hint_metrics;
last_hint_style = hint_style;
last_antialias = antialias;
g_set_object (&last_font, font);
g_clear_object (&last_result);
@@ -152,15 +84,19 @@ gsk_get_hinted_font (PangoFont *font,
sf = pango_cairo_font_get_scaled_font (PANGO_CAIRO_FONT (font));
cairo_scaled_font_get_font_options (sf, options);
if (hint_metrics == CAIRO_HINT_METRICS_DEFAULT)
hint_metrics = cairo_font_options_get_hint_metrics (options);
if (hint_style == CAIRO_HINT_STYLE_DEFAULT)
hint_style = cairo_font_options_get_hint_style (options);
if (antialias == CAIRO_ANTIALIAS_DEFAULT)
antialias = cairo_font_options_get_antialias (options);
if (cairo_font_options_get_hint_style (options) == hint_style &&
if (1.0 == scale &&
cairo_font_options_get_hint_metrics (options) == hint_metrics &&
cairo_font_options_get_hint_style (options) == hint_style &&
cairo_font_options_get_antialias (options) == antialias &&
cairo_font_options_get_hint_metrics (options) == CAIRO_HINT_METRICS_OFF &&
cairo_font_options_get_subpixel_order (options) == CAIRO_SUBPIXEL_ORDER_DEFAULT)
{
last_result = g_object_ref (font);
@@ -168,9 +104,9 @@ gsk_get_hinted_font (PangoFont *font,
return g_object_ref (font);
}
cairo_font_options_set_hint_metrics (options, hint_metrics);
cairo_font_options_set_hint_style (options, hint_style);
cairo_font_options_set_antialias (options, antialias);
cairo_font_options_set_hint_metrics (options, CAIRO_HINT_METRICS_OFF);
cairo_font_options_set_subpixel_order (options, CAIRO_SUBPIXEL_ORDER_DEFAULT);
if (!context)
@@ -180,7 +116,7 @@ gsk_get_hinted_font (PangoFont *font,
cairo_font_options_destroy (options);
#if PANGO_VERSION_CHECK (1, 52, 0)
last_result = pango_font_map_reload_font (pango_font_get_font_map (font), font, 1.0, context, NULL);
last_result = pango_font_map_reload_font (pango_font_get_font_map (font), font, scale, context, NULL);
#else
pattern = pango_fc_font_get_pattern (PANGO_FC_FONT (font));
@@ -188,6 +124,13 @@ gsk_get_hinted_font (PangoFont *font,
pango_cairo_context_set_resolution (context, dpi);
desc = pango_font_describe (font);
size = pango_font_description_get_size (desc);
if (pango_font_description_get_size_is_absolute (desc))
pango_font_description_set_absolute_size (desc, size * scale);
else
pango_font_description_set_size (desc, (int) floor (size * scale + .5));
last_result = pango_font_map_load_font (pango_font_get_font_map (font), context, desc);
pango_font_description_free (desc);
#endif
@@ -213,9 +156,11 @@ gsk_get_unhinted_glyph_string_extents (PangoGlyphString *glyphs,
{
PangoFont *unhinted;
unhinted = gsk_get_hinted_font (font,
CAIRO_HINT_STYLE_NONE,
CAIRO_ANTIALIAS_DEFAULT);
unhinted = gsk_reload_font (font,
1.0,
CAIRO_HINT_METRICS_OFF,
CAIRO_HINT_STYLE_NONE,
CAIRO_ANTIALIAS_DEFAULT);
pango_glyph_string_extents (glyphs, unhinted, ink_rect, NULL);
+5 -6
View File
@@ -8,12 +8,11 @@ G_BEGIN_DECLS
void gsk_ensure_resources (void);
PangoFont *gsk_get_scaled_font (PangoFont *font,
float scale);
PangoFont *gsk_get_hinted_font (PangoFont *font,
cairo_hint_style_t hint_style,
cairo_antialias_t antialias);
PangoFont *gsk_reload_font (PangoFont *font,
float scale,
cairo_hint_metrics_t hint_metrics,
cairo_hint_style_t hint_style,
cairo_antialias_t antialias);
void gsk_get_unhinted_glyph_string_extents (PangoGlyphString *glyphs,
PangoFont *font,
+3 -1
View File
@@ -2345,7 +2345,7 @@ parse_text_node (GtkCssParser *parser,
g_assert (font);
}
hinted = gsk_get_hinted_font (font, hint_style, antialias);
hinted = gsk_reload_font (font, 1.0, CAIRO_HINT_METRICS_OFF, hint_style, antialias);
g_object_unref (font);
font = hinted;
@@ -4466,6 +4466,8 @@ render_node_print (Printer *p,
start_node (p, "subsurface", node_name);
append_node_param (p, "child", gsk_subsurface_node_get_child (node));
end_node (p);
}
break;
+43
View File
@@ -0,0 +1,43 @@
#pragma once
#include <graphene.h>
#include <math.h>
static inline float
gsk_vec2_get_x (const graphene_vec2_t *v)
{
return graphene_simd4f_get_x (v->__graphene_private_value);
}
static inline float
gsk_vec2_get_y (const graphene_vec2_t *v)
{
return graphene_simd4f_get_y (v->__graphene_private_value);
}
static inline graphene_vec2_t *
gsk_vec2_init (graphene_vec2_t *v,
float x,
float y)
{
v->__graphene_private_value = graphene_simd4f_init (x, y, 0.f, 0.f);
return v;
}
static inline void
gsk_vec2_multiply (const graphene_vec2_t *a,
const graphene_vec2_t *b,
graphene_vec2_t *res)
{
res->__graphene_private_value = graphene_simd4f_mul (a->__graphene_private_value,
b->__graphene_private_value);
}
static inline bool
gsk_vec2_equal (const graphene_vec2_t *v1,
const graphene_vec2_t *v2)
{
return graphene_simd4f_cmp_eq (v1->__graphene_private_value, v2->__graphene_private_value);
}
+1
View File
@@ -708,6 +708,7 @@ refresh_current_folder_and_file_part (GtkFileChooserEntry *chooser_entry)
old_file_part = chooser_entry->file_part;
text = gtk_file_chooser_entry_get_completion_text (chooser_entry);
g_return_if_fail (text != NULL);
last_slash = strrchr (text, G_DIR_SEPARATOR);
if (last_slash)
+24 -6
View File
@@ -18,7 +18,6 @@
#include "config.h"
#include <string.h>
#include "gtkimcontext.h"
#include "gtkimcontextprivate.h"
#include "gtkprivate.h"
#include "gtktypebuiltins.h"
#include "gtkmarshalers.h"
@@ -1007,11 +1006,30 @@ gtk_im_context_set_property (GObject *obj,
}
}
void
gtk_im_context_activate_osk (GtkIMContext *context)
/**
* gtk_im_context_activate_osk:
* @context: a `GtkIMContext`
* @event: (nullable): a [class@Gdk.Event]
*
* Requests the platform to show an on-screen keyboard for user input.
*
* This method will return %TRUE if this request was actually performed
* to the platform, other environmental factors may result in an on-screen
* keyboard effectively not showing up.
*
* Returns: %TRUE if an on-screen keyboard could be requested to the platform.
*
* Since: 4.14
**/
gboolean
gtk_im_context_activate_osk (GtkIMContext *context,
GdkEvent *event)
{
g_return_if_fail (GTK_IS_IM_CONTEXT (context));
g_return_val_if_fail (GTK_IS_IM_CONTEXT (context), FALSE);
g_return_val_if_fail (!event || GDK_IS_EVENT (event), FALSE);
if (GTK_IM_CONTEXT_GET_CLASS (context)->activate_osk)
GTK_IM_CONTEXT_GET_CLASS (context)->activate_osk (context);
if (!GTK_IM_CONTEXT_GET_CLASS (context)->activate_osk_with_event)
return FALSE;
return GTK_IM_CONTEXT_GET_CLASS (context)->activate_osk_with_event (context, event);
}
+6 -1
View File
@@ -96,9 +96,10 @@ struct _GtkIMContextClass
/*< private >*/
void (* activate_osk) (GtkIMContext *context);
gboolean (* activate_osk_with_event) (GtkIMContext *context,
GdkEvent *event);
/* Padding for future expansion */
void (*_gtk_reserved1) (void);
void (*_gtk_reserved2) (void);
void (*_gtk_reserved3) (void);
void (*_gtk_reserved4) (void);
@@ -168,6 +169,10 @@ gboolean gtk_im_context_delete_surrounding (GtkIMContext *context,
int offset,
int n_chars);
GDK_AVAILABLE_IN_4_14
gboolean gtk_im_context_activate_osk (GtkIMContext *context,
GdkEvent *event);
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkIMContext, g_object_unref)
G_END_DECLS
-23
View File
@@ -1,23 +0,0 @@
/* GTK - The GIMP Toolkit
* Copyright (C) 2022 Red Hat Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "gtkimcontext.h"
void gtk_im_context_activate_osk (GtkIMContext *context);
+6 -98
View File
@@ -71,10 +71,6 @@ struct _GtkIMContextWayland
GtkIMContextSimple parent_instance;
GtkWidget *widget;
GtkGesture *gesture;
double press_x;
double press_y;
struct {
char *text;
int cursor_idx;
@@ -521,7 +517,6 @@ gtk_im_context_wayland_finalize (GObject *object)
gtk_im_context_wayland_focus_out (GTK_IM_CONTEXT (context));
g_clear_object (&context->widget);
g_clear_object (&context->gesture);
g_free (context->surrounding.text);
g_free (context->current_preedit.text);
g_free (context->pending_preedit.text);
@@ -530,50 +525,6 @@ gtk_im_context_wayland_finalize (GObject *object)
G_OBJECT_CLASS (gtk_im_context_wayland_parent_class)->finalize (object);
}
static void
pressed_cb (GtkGestureClick *gesture,
int n_press,
double x,
double y,
GtkIMContextWayland *context)
{
if (n_press == 1)
{
context->press_x = x;
context->press_y = y;
}
}
static void
released_cb (GtkGestureClick *gesture,
int n_press,
double x,
double y,
GtkIMContextWayland *context)
{
GtkIMContextWaylandGlobal *global;
GtkInputHints hints;
global = gtk_im_context_wayland_get_global (context);
if (global == NULL)
return;
g_object_get (context, "input-hints", &hints, NULL);
if (global->focused &&
n_press == 1 &&
(hints & GTK_INPUT_HINT_INHIBIT_OSK) == 0 &&
!gtk_drag_check_threshold_double (context->widget,
context->press_x,
context->press_y,
x, y))
{
zwp_text_input_v3_enable (global->text_input);
notify_im_change (GTK_IM_CONTEXT_WAYLAND (context),
ZWP_TEXT_INPUT_V3_CHANGE_CAUSE_OTHER);
}
}
static void
gtk_im_context_wayland_set_client_widget (GtkIMContext *context,
GtkWidget *widget)
@@ -586,34 +537,7 @@ gtk_im_context_wayland_set_client_widget (GtkIMContext *context,
if (context_wayland->widget)
gtk_im_context_wayland_focus_out (context);
if (context_wayland->widget && context_wayland->gesture)
{
gtk_widget_remove_controller (context_wayland->widget,
GTK_EVENT_CONTROLLER (context_wayland->gesture));
context_wayland->gesture = NULL;
}
g_set_object (&context_wayland->widget, widget);
if (widget &&
!GTK_IS_TEXT (widget) &&
!GTK_IS_TEXT_VIEW (widget))
{
GtkGesture *gesture;
gesture = gtk_gesture_click_new ();
gtk_event_controller_set_static_name (GTK_EVENT_CONTROLLER (gesture), "wayland-im-context-click");
gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (gesture),
GTK_PHASE_CAPTURE);
g_signal_connect (gesture, "pressed",
G_CALLBACK (pressed_cb), context);
g_signal_connect (gesture, "released",
G_CALLBACK (released_cb), context);
gtk_widget_add_controller (context_wayland->widget,
GTK_EVENT_CONTROLLER (gesture));
context_wayland->gesture = gesture;
}
}
static void
@@ -847,9 +771,6 @@ gtk_im_context_wayland_focus_in (GtkIMContext *context)
if (!global->text_input)
return;
if (self->gesture)
gtk_event_controller_reset (GTK_EVENT_CONTROLLER (self->gesture));
if (global->focused)
enable (self, global);
}
@@ -884,7 +805,6 @@ gtk_im_context_wayland_set_cursor_location (GtkIMContext *context,
GdkRectangle *rect)
{
GtkIMContextWayland *context_wayland;
int side;
context_wayland = GTK_IM_CONTEXT_WAYLAND (context);
@@ -894,20 +814,6 @@ gtk_im_context_wayland_set_cursor_location (GtkIMContext *context,
context_wayland->cursor_rect.height == rect->height)
return;
/* Reset the gesture if the cursor changes too far (eg. clicking
* between disjoint positions in the text).
*
* Still Allow some jittering (a square almost double the cursor rect height
* on either side) as clicking on the exact same position between characters
* is hard.
*/
side = context_wayland->cursor_rect.height;
if (context_wayland->gesture &&
(ABS (rect->x - context_wayland->cursor_rect.x) >= side ||
ABS (rect->y - context_wayland->cursor_rect.y) >= side))
gtk_event_controller_reset (GTK_EVENT_CONTROLLER (context_wayland->gesture));
context_wayland->cursor_rect = *rect;
}
@@ -974,18 +880,20 @@ gtk_im_context_wayland_commit (GtkIMContext *context,
ZWP_TEXT_INPUT_V3_CHANGE_CAUSE_INPUT_METHOD);
}
static void
gtk_im_context_wayland_activate_osk (GtkIMContext *context)
static gboolean
gtk_im_context_wayland_activate_osk_with_event (GtkIMContext *context,
GdkEvent *event)
{
GtkIMContextWaylandGlobal *global;
global = gtk_im_context_wayland_get_global (GTK_IM_CONTEXT_WAYLAND (context));
if (global == NULL)
return;
return FALSE;
zwp_text_input_v3_enable (global->text_input);
notify_im_change (GTK_IM_CONTEXT_WAYLAND (context),
ZWP_TEXT_INPUT_V3_CHANGE_CAUSE_OTHER);
return TRUE;
}
static void
@@ -1007,7 +915,7 @@ gtk_im_context_wayland_class_init (GtkIMContextWaylandClass *klass)
im_context_class->set_surrounding_with_selection = gtk_im_context_wayland_set_surrounding;
im_context_class->get_surrounding_with_selection = gtk_im_context_wayland_get_surrounding;
im_context_class->commit = gtk_im_context_wayland_commit;
im_context_class->activate_osk = gtk_im_context_wayland_activate_osk;
im_context_class->activate_osk_with_event = gtk_im_context_wayland_activate_osk_with_event;
}
static void
+9 -6
View File
@@ -20,7 +20,6 @@
#include <string.h>
#include <locale.h>
#include "gtkimcontextprivate.h"
#include "gtkimmulticontext.h"
#include "gtkimmoduleprivate.h"
#include "gtklabel.h"
@@ -106,7 +105,8 @@ static gboolean gtk_im_multicontext_delete_surrounding_cb (GtkIMContext *
int offset,
int n_chars,
GtkIMMulticontext *multicontext);
static void gtk_im_multicontext_activate_osk (GtkIMContext *context);
static gboolean gtk_im_multicontext_activate_osk_with_event (GtkIMContext *context,
GdkEvent *event);
static void propagate_purpose (GtkIMMulticontext *context);
@@ -130,7 +130,7 @@ gtk_im_multicontext_class_init (GtkIMMulticontextClass *class)
im_context_class->set_use_preedit = gtk_im_multicontext_set_use_preedit;
im_context_class->set_surrounding_with_selection = gtk_im_multicontext_set_surrounding_with_selection;
im_context_class->get_surrounding_with_selection = gtk_im_multicontext_get_surrounding_with_selection;
im_context_class->activate_osk = gtk_im_multicontext_activate_osk;
im_context_class->activate_osk_with_event = gtk_im_multicontext_activate_osk_with_event;
gobject_class->finalize = gtk_im_multicontext_finalize;
}
@@ -516,14 +516,17 @@ gtk_im_multicontext_set_surrounding_with_selection (GtkIMContext *context,
gtk_im_context_set_surrounding_with_selection (delegate, text, len, cursor_index, anchor_index);
}
static void
gtk_im_multicontext_activate_osk (GtkIMContext *context)
static gboolean
gtk_im_multicontext_activate_osk_with_event (GtkIMContext *context,
GdkEvent *event)
{
GtkIMMulticontext *multicontext = GTK_IM_MULTICONTEXT (context);
GtkIMContext *delegate = gtk_im_multicontext_get_delegate (multicontext);
if (delegate)
gtk_im_context_activate_osk (delegate);
return gtk_im_context_activate_osk (delegate, event);
else
return FALSE;
}
static void
+1
View File
@@ -1523,6 +1523,7 @@ gtk_label_dispose (GObject *object)
GtkLabel *self = GTK_LABEL (object);
gtk_label_set_mnemonic_widget (self, NULL);
gtk_label_clear_select_info (self);
G_OBJECT_CLASS (gtk_label_parent_class)->dispose (object);
}
+8
View File
@@ -886,6 +886,14 @@ gesture_drag_begin_cb (GtkGestureDrag *gesture,
GdkDevice *device;
gboolean is_touch;
/* Only drag the handle when it's visible */
if (!gtk_widget_get_child_visible (paned->handle_widget))
{
gtk_gesture_set_state (GTK_GESTURE (gesture),
GTK_EVENT_SEQUENCE_DENIED);
return;
}
sequence = gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (gesture));
event = gtk_gesture_get_last_event (GTK_GESTURE (gesture), sequence);
device = gdk_event_get_device (event);
+3 -2
View File
@@ -44,7 +44,6 @@
#include "gtkgestureclick.h"
#include "gtkgesturesingle.h"
#include "gtkimageprivate.h"
#include "gtkimcontextprivate.h"
#include "gtkimcontextsimple.h"
#include "gtkimmulticontext.h"
#include "gtkjoinedmenuprivate.h"
@@ -2927,11 +2926,13 @@ gtk_text_click_gesture_released (GtkGestureClick *gesture,
GtkText *self)
{
GtkTextPrivate *priv = gtk_text_get_instance_private (self);
GdkEvent *event =
gtk_event_controller_get_current_event (GTK_EVENT_CONTROLLER (gesture));
if (n_press == 1 &&
!priv->in_drag &&
priv->current_pos == priv->selection_bound)
gtk_im_context_activate_osk (priv->im_context);
gtk_im_context_activate_osk (priv->im_context, event);
}
static char *
+53 -2
View File
@@ -50,6 +50,9 @@ struct _GtkTextLineDisplayCache
#endif
};
static GQueue purge_in_idle;
static guint purge_in_idle_source;
#if DEBUG_LINE_DISPLAY_CACHE
# define STAT_ADD(val,n) ((val) += n)
# define STAT_INC(val) STAT_ADD(val,1)
@@ -78,7 +81,7 @@ gtk_text_line_display_cache_new (void)
GtkTextLineDisplayCache *ret;
ret = g_new0 (GtkTextLineDisplayCache, 1);
ret->sorted_by_line = g_sequence_new ((GDestroyNotify)gtk_text_line_display_unref);
ret->sorted_by_line = g_sequence_new (NULL);
ret->line_to_display = g_hash_table_new (NULL, NULL);
ret->mru_size = DEFAULT_MRU_SIZE;
@@ -98,6 +101,8 @@ gtk_text_line_display_cache_free (GtkTextLineDisplayCache *cache)
gtk_text_line_display_cache_invalidate (cache);
g_assert (g_sequence_get_begin_iter (cache->sorted_by_line) == g_sequence_get_end_iter (cache->sorted_by_line));
g_clear_pointer (&cache->evict_source, g_source_destroy);
g_clear_pointer (&cache->sorted_by_line, g_sequence_free);
g_clear_pointer (&cache->line_to_display, g_hash_table_unref);
@@ -211,6 +216,31 @@ gtk_text_line_display_cache_take_display (GtkTextLineDisplayCache *cache,
}
}
static gboolean
purge_text_line_display_in_idle (gpointer data)
{
GQueue q = purge_in_idle;
purge_in_idle.head = NULL;
purge_in_idle.tail = NULL;
purge_in_idle.length = 0;
while (q.head)
{
GtkTextLineDisplay *display = q.head->data;
g_queue_unlink (&q, &display->mru_link);
gtk_text_line_display_unref (display);
}
if (purge_in_idle.head == NULL)
{
purge_in_idle_source = 0;
return G_SOURCE_REMOVE;
}
return G_SOURCE_CONTINUE;
}
/*
* gtk_text_line_display_cache_invalidate_display:
* @cache: a GtkTextLineDisplayCache
@@ -250,7 +280,28 @@ gtk_text_line_display_cache_invalidate_display (GtkTextLineDisplayCache *cache,
g_queue_unlink (&cache->mru, &display->mru_link);
if (iter != NULL)
g_sequence_remove (iter);
{
g_sequence_remove (iter);
g_queue_push_head_link (&purge_in_idle, &display->mru_link);
/* Purging a lot of GtkTextLineDisplay while processing a frame
* can increase the chances that we miss our frame deadline. Instead
* defer that work to right after the frame has completed. This can
* help situations where we have large, zoomed out TextView like
* those used in an overview map.
*/
if G_UNLIKELY (purge_in_idle_source == 0)
{
GSource *source;
purge_in_idle_source = g_idle_add_full (G_PRIORITY_LOW,
purge_text_line_display_in_idle,
NULL, NULL);
source = g_main_context_find_source_by_id (NULL, purge_in_idle_source);
g_source_set_static_name (source, "[gtk+ line-display-cache-gc]");
}
}
}
STAT_INC (cache->inval);
+36 -16
View File
@@ -40,7 +40,6 @@
#include "gtkdragsourceprivate.h"
#include "gtkdropcontrollermotion.h"
#include "gtkemojichooser.h"
#include "gtkimcontextprivate.h"
#include "gtkimmulticontext.h"
#include "gtkjoinedmenuprivate.h"
#include "gtkmagnifierprivate.h"
@@ -830,6 +829,17 @@ add_move_binding (GtkWidgetClass *widget_class,
"(iib)", step, count, TRUE);
}
static void
gtk_text_view_notify (GObject *object,
GParamSpec *pspec)
{
if (pspec->name == I_("has-focus"))
gtk_text_view_check_cursor_blink (GTK_TEXT_VIEW (object));
if (G_OBJECT_CLASS (gtk_text_view_parent_class)->notify)
G_OBJECT_CLASS (gtk_text_view_parent_class)->notify (object, pspec);
}
static void
gtk_text_view_class_init (GtkTextViewClass *klass)
{
@@ -842,6 +852,7 @@ gtk_text_view_class_init (GtkTextViewClass *klass)
gobject_class->get_property = gtk_text_view_get_property;
gobject_class->finalize = gtk_text_view_finalize;
gobject_class->dispose = gtk_text_view_dispose;
gobject_class->notify = gtk_text_view_notify;
widget_class->realize = gtk_text_view_realize;
widget_class->unrealize = gtk_text_view_unrealize;
@@ -5764,6 +5775,8 @@ gtk_text_view_click_gesture_released (GtkGestureClick *gesture,
double y,
GtkTextView *text_view)
{
GdkEvent *event =
gtk_event_controller_get_current_event (GTK_EVENT_CONTROLLER (gesture));
GtkTextViewPrivate *priv = text_view->priv;
GtkTextBuffer *buffer;
GtkTextIter start, end;
@@ -5773,7 +5786,7 @@ gtk_text_view_click_gesture_released (GtkGestureClick *gesture,
if (gtk_text_iter_compare (&start, &end) == 0 &&
gtk_text_iter_can_insert (&start, priv->editable))
gtk_im_context_activate_osk (priv->im_context);
gtk_im_context_activate_osk (priv->im_context, event);
}
static void
@@ -6069,28 +6082,35 @@ gtk_text_view_remove (GtkTextView *text_view,
static gboolean
cursor_blinks (GtkTextView *text_view)
{
GtkSettings *settings = gtk_widget_get_settings (GTK_WIDGET (text_view));
gboolean blink;
GtkRoot *root = gtk_widget_get_root (GTK_WIDGET (text_view));
#ifdef DEBUG_VALIDATION_AND_SCROLLING
return FALSE;
#endif
g_object_get (settings, "gtk-cursor-blink", &blink, NULL);
if (!blink)
return FALSE;
if (text_view->priv->editable)
if (gtk_widget_get_mapped (GTK_WIDGET (text_view)) &&
gtk_window_is_active (GTK_WINDOW (root)) &&
gtk_widget_has_focus (GTK_WIDGET (text_view)))
{
GtkTextMark *insert;
GtkTextIter iter;
GtkSettings *settings = gtk_widget_get_settings (GTK_WIDGET (text_view));
gboolean blink;
insert = gtk_text_buffer_get_insert (get_buffer (text_view));
gtk_text_buffer_get_iter_at_mark (get_buffer (text_view), &iter, insert);
g_object_get (settings, "gtk-cursor-blink", &blink, NULL);
if (gtk_text_iter_editable (&iter, text_view->priv->editable))
return blink;
if (!blink)
return FALSE;
if (text_view->priv->editable)
{
GtkTextMark *insert;
GtkTextIter iter;
insert = gtk_text_buffer_get_insert (get_buffer (text_view));
gtk_text_buffer_get_iter_at_mark (get_buffer (text_view), &iter, insert);
if (gtk_text_iter_editable (&iter, text_view->priv->editable))
return blink;
}
}
return FALSE;
+1 -1
View File
@@ -1,5 +1,5 @@
project('gtk', 'c',
version: '4.14.0',
version: '4.14.1',
default_options: [
'buildtype=debugoptimized',
'warning_level=1',
+148 -99
View File
@@ -19,8 +19,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gtk\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gtk/-/issues/\n"
"POT-Creation-Date: 2024-02-12 01:46+0000\n"
"PO-Revision-Date: 2024-02-14 02:02+0100\n"
"POT-Creation-Date: 2024-03-11 18:00+0000\n"
"PO-Revision-Date: 2024-03-12 13:38+0100\n"
"Last-Translator: Daniel Rusek <mail@asciiwolf.com>\n"
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
"Language: cs\n"
@@ -59,11 +59,11 @@ msgstr "Nezdařilo se poskytnout obsah jako „%s“"
msgid "Cannot provide contents as %s"
msgstr "Nezdařilo se poskytnout obsah jako %s"
#: gdk/gdkdisplay.c:176 gdk/gdkglcontext.c:462
#: gdk/gdkdisplay.c:176 gdk/gdkglcontext.c:459
msgid "The current backend does not support OpenGL"
msgstr "Aktuální podpůrná vrstva nepodporuje OpenGL"
#: gdk/gdkdisplay.c:1315 gdk/gdkvulkancontext.c:1596
#: gdk/gdkdisplay.c:1315 gdk/gdkvulkancontext.c:1601
msgid "Vulkan support disabled via GDK_DEBUG"
msgstr "Podpora technologie Vulkan je zakázána skrz GDK_DEBUG"
@@ -124,32 +124,32 @@ msgstr "„Táhni a upusť“ z jiné aplikace není podporováno."
msgid "No compatible formats to transfer contents."
msgstr "Není k dispozici žádný kompatibilní formát pro přenos obsahu."
#: gdk/gdkglcontext.c:422 gdk/x11/gdkglcontext-glx.c:645
#: gdk/gdkglcontext.c:419 gdk/x11/gdkglcontext-glx.c:645
msgid "No GL API allowed."
msgstr "Není povolené žádné GL API."
#: gdk/gdkglcontext.c:445 gdk/win32/gdkglcontext-win32-wgl.c:386
#: gdk/win32/gdkglcontext-win32-wgl.c:529
#: gdk/win32/gdkglcontext-win32-wgl.c:573 gdk/x11/gdkglcontext-glx.c:691
#: gdk/gdkglcontext.c:442 gdk/win32/gdkglcontext-win32-wgl.c:395
#: gdk/win32/gdkglcontext-win32-wgl.c:538
#: gdk/win32/gdkglcontext-win32-wgl.c:582 gdk/x11/gdkglcontext-glx.c:691
msgid "Unable to create a GL context"
msgstr "Nelze vytvořit kontext GL"
#: gdk/gdkglcontext.c:1306
#: gdk/gdkglcontext.c:1304
msgid "OpenGL ES disabled via GDK_DEBUG"
msgstr "OpenGL ES je zakázáno skrz GDK_DEBUG"
#: gdk/gdkglcontext.c:1318
#: gdk/gdkglcontext.c:1316
msgid "OpenGL disabled via GDK_DEBUG"
msgstr "OpenGL je zakázáno skrz GDK_DEBUG"
#: gdk/gdkglcontext.c:1329
#: gdk/gdkglcontext.c:1327
#, c-format
msgid "Application does not support %s API"
msgstr "Aplikace nepodporuje API %s"
#. translators: This is about OpenGL backend names, like
#. * "Trying to use X11 GLX, but EGL is already in use"
#: gdk/gdkglcontext.c:2115
#: gdk/gdkglcontext.c:2113
#, c-format
msgid "Trying to use %s, but %s is already in use"
msgstr "Zkouší se použít %s, ale již se používá %s"
@@ -744,21 +744,21 @@ msgstr "Selhalo volání IDataObject_GetData (0x%x), vrací se 0x%lx"
msgid "Failed to transmute DnD data W32 format 0x%x to %p (%s)"
msgstr "Selhala přeměna dat DnD ve formátu W32 0x%x na %p (%s)"
#: gdk/win32/gdkglcontext-win32-wgl.c:320
#: gdk/win32/gdkglcontext-win32-wgl.c:329
msgid "No GL implementation is available"
msgstr "Není k dispozici žádná implementace GL"
#: gdk/win32/gdkglcontext-win32-wgl.c:395
#: gdk/win32/gdkglcontext-win32-wgl.c:404
#, c-format
msgid "WGL version %d.%d is too low, need at least %d.%d"
msgstr "Verze WGL %d.%d je příliš stará, je třeba alespoň %d.%d"
#: gdk/win32/gdkglcontext-win32-wgl.c:413
#: gdk/win32/gdkglcontext-win32-wgl.c:422
#, c-format
msgid "GL implementation cannot share GL contexts"
msgstr "Implementace GL nemůže sdílet kontexty GL"
#: gdk/win32/gdkglcontext-win32-wgl.c:693
#: gdk/win32/gdkglcontext-win32-wgl.c:702
msgid "No available configurations for the given pixel format"
msgstr "Není dostupné žádné nastavení pro daný pixelový fotmát"
@@ -870,10 +870,14 @@ msgstr ""
"Implementace EGL %d.%d nepodporuje data vrcholů v plovoucí desetinné čárce s "
"poloviční přesností"
#: gsk/gpu/gskgldevice.c:245
#: gsk/gpu/gskgldevice.c:246
#, c-format
msgid "OpenGL ES 3.0 is not supported by this renderer."
msgstr ""
msgstr "OpenGL ES 3.0 není podporováno tímto vykreslováním."
#: gsk/gpu/gsknglrenderer.c:62
msgid "OpenGL 3.3 required"
msgstr "Vyžadováno OpenGL 3.3"
#: gtk/a11y/gtkatspiaction.c:239
msgctxt "accessibility"
@@ -1251,7 +1255,6 @@ msgid "Mozilla Public License 2.0"
msgstr "Mozilla Public License 2.0"
#: gtk/gtkaboutdialog.c:137
#| msgid "BSD 2-Clause License"
msgid "BSD Zero-Clause License"
msgstr "BSD Zero-Clause License"
@@ -1792,6 +1795,11 @@ msgctxt "accessibility"
msgid "comment"
msgstr "komentář"
#: gtk/gtkaccessible.c:874
msgctxt "accessibility"
msgid "terminal"
msgstr "terminál"
#: gtk/gtkalertdialog.c:668 gtk/print/gtkcustompaperunixdialog.c:322
#: gtk/gtkmessagedialog.c:166 gtk/ui/gtkassistant.ui:40
msgid "_Close"
@@ -2365,7 +2373,7 @@ msgid "If you delete an item, it will be permanently lost."
msgstr "Pokud smažete položku, bude natrvalo ztracena."
#: gtk/gtkfilechooserwidget.c:1188 gtk/gtkfilechooserwidget.c:1786
#: gtk/gtklabel.c:5702 gtk/gtktext.c:6147 gtk/gtktextview.c:9018
#: gtk/gtklabel.c:5711 gtk/gtktext.c:6194 gtk/gtktextview.c:9080
msgid "_Delete"
msgstr "_Smazat"
@@ -2575,7 +2583,7 @@ msgid "_Time"
msgstr "Č_as"
#: gtk/gtkfilechooserwidget.c:7375 gtk/gtkplacessidebar.c:2306
#: gtk/inspector/a11y.ui:43 gtk/inspector/actions.ui:19
#: gtk/inspector/a11y.ui:43 gtk/inspector/actions.ui:18
#: gtk/inspector/css-node-tree.ui:22 gtk/inspector/prop-list.ui:24
#: gtk/ui/gtkfilechooserwidget.ui:385 gtk/print/ui/gtkprintunixdialog.ui:80
msgid "Name"
@@ -2659,35 +2667,35 @@ msgctxt "Font feature value"
msgid "Enable"
msgstr "Zapnuto"
#: gtk/gtkfontchooserwidget.c:2457
#: gtk/gtkfontchooserwidget.c:2459
msgid "Default"
msgstr "Výchozí"
#: gtk/gtkfontchooserwidget.c:2519
#: gtk/gtkfontchooserwidget.c:2521
msgid "Ligatures"
msgstr "Slitky"
#: gtk/gtkfontchooserwidget.c:2520
#: gtk/gtkfontchooserwidget.c:2522
msgid "Letter Case"
msgstr "Velikost písmen"
#: gtk/gtkfontchooserwidget.c:2521
#: gtk/gtkfontchooserwidget.c:2523
msgid "Number Case"
msgstr "Velikost číslic"
#: gtk/gtkfontchooserwidget.c:2522
#: gtk/gtkfontchooserwidget.c:2524
msgid "Number Spacing"
msgstr "Rozestup číslic"
#: gtk/gtkfontchooserwidget.c:2523
#: gtk/gtkfontchooserwidget.c:2525
msgid "Fractions"
msgstr "Zlomky"
#: gtk/gtkfontchooserwidget.c:2524
#: gtk/gtkfontchooserwidget.c:2526
msgid "Style Variations"
msgstr "Vyrianty stylů"
#: gtk/gtkfontchooserwidget.c:2526
#: gtk/gtkfontchooserwidget.c:2528
msgid "Character Variations"
msgstr "Varianty znaků"
@@ -2704,31 +2712,31 @@ msgstr "Zavřít"
msgid "Close the infobar"
msgstr "Zavřít informační lištu"
#: gtk/gtklabel.c:5699 gtk/gtktext.c:6135 gtk/gtktextview.c:9006
#: gtk/gtklabel.c:5708 gtk/gtktext.c:6182 gtk/gtktextview.c:9068
msgid "Cu_t"
msgstr "_Vyjmout"
#: gtk/gtklabel.c:5700 gtk/gtktext.c:6139 gtk/gtktextview.c:9010
#: gtk/gtklabel.c:5709 gtk/gtktext.c:6186 gtk/gtktextview.c:9072
msgid "_Copy"
msgstr "_Kopírovat"
#: gtk/gtklabel.c:5701 gtk/gtktext.c:6143 gtk/gtktextview.c:9014
#: gtk/gtklabel.c:5710 gtk/gtktext.c:6190 gtk/gtktextview.c:9076
msgid "_Paste"
msgstr "V_ložit"
#: gtk/gtklabel.c:5707 gtk/gtktext.c:6156 gtk/gtktextview.c:9039
#: gtk/gtklabel.c:5716 gtk/gtktext.c:6203 gtk/gtktextview.c:9101
msgid "Select _All"
msgstr "Vybr_at vše"
#: gtk/gtklabel.c:5712
#: gtk/gtklabel.c:5721
msgid "_Open Link"
msgstr "_Otevřít odkaz"
#: gtk/gtklabel.c:5716
#: gtk/gtklabel.c:5725
msgid "Copy _Link Address"
msgstr "Ko_pírovat adresu odkazu"
#: gtk/gtklabel.c:5760 gtk/gtktext.c:2716 gtk/gtktextview.c:9088
#: gtk/gtklabel.c:5769 gtk/gtktext.c:2723 gtk/gtktextview.c:9150
msgid "Context menu"
msgstr "Kontextová nabídka"
@@ -3574,7 +3582,7 @@ msgid "No registered application with name “%s” for item with URI “%s” f
msgstr ""
"Nenalezena žádná registrovaná aplikace s názvem „%s“ pro položku s URI „%s“"
#: gtk/gtksearchentry.c:767
#: gtk/gtksearchentry.c:814
msgid "Clear Entry"
msgstr "Vymazat položku"
@@ -3665,15 +3673,15 @@ msgctxt "accessibility"
msgid "Sidebar"
msgstr "Postranní panel"
#: gtk/gtktext.c:6161 gtk/gtktextview.c:9044
#: gtk/gtktext.c:6208 gtk/gtktextview.c:9106
msgid "Insert _Emoji"
msgstr "Vložit _Emodži"
#: gtk/gtktextview.c:9026
#: gtk/gtktextview.c:9088
msgid "_Undo"
msgstr "_Zpět"
#: gtk/gtktextview.c:9030
#: gtk/gtktextview.c:9092
msgid "_Redo"
msgstr "Zn_ovu"
@@ -3871,37 +3879,37 @@ msgstr "Třídy stylů"
msgid "CSS Property"
msgstr "Vlastnost CSS"
#: gtk/inspector/general.c:363
#: gtk/inspector/general.c:370
msgctxt "GL version"
msgid "None"
msgstr "žádná"
#: gtk/inspector/general.c:441
#: gtk/inspector/general.c:461
msgctxt "GL version"
msgid "Unknown"
msgstr "Neznámé"
#: gtk/inspector/general.c:503
#: gtk/inspector/general.c:523
msgctxt "Vulkan device"
msgid "Disabled"
msgstr "zakázáno"
#: gtk/inspector/general.c:504 gtk/inspector/general.c:505
#: gtk/inspector/general.c:524 gtk/inspector/general.c:525
msgctxt "Vulkan version"
msgid "Disabled"
msgstr "zakázáno"
#: gtk/inspector/general.c:555
#: gtk/inspector/general.c:576
msgctxt "Vulkan device"
msgid "None"
msgstr "žádné"
#: gtk/inspector/general.c:556 gtk/inspector/general.c:557
#: gtk/inspector/general.c:577 gtk/inspector/general.c:578
msgctxt "Vulkan version"
msgid "None"
msgstr "žádná"
#: gtk/inspector/general.c:901
#: gtk/inspector/general.c:923
msgid "IM Context is hardcoded by GTK_IM_MODULE"
msgstr "Kontext IM je napevno nastaven pomocí GTK_IM_MODULE"
@@ -4272,27 +4280,27 @@ msgstr "Velikost:"
msgid "Trigger"
msgstr "Spouštěč"
#: gtk/inspector/size-groups.c:225
#: gtk/inspector/size-groups.c:228
msgctxt "sizegroup mode"
msgid "None"
msgstr "Žádný"
#: gtk/inspector/size-groups.c:226
#: gtk/inspector/size-groups.c:229
msgctxt "sizegroup mode"
msgid "Horizontal"
msgstr "Vodorovný"
#: gtk/inspector/size-groups.c:227
#: gtk/inspector/size-groups.c:230
msgctxt "sizegroup mode"
msgid "Vertical"
msgstr "Svislý"
#: gtk/inspector/size-groups.c:228
#: gtk/inspector/size-groups.c:231
msgctxt "sizegroup mode"
msgid "Both"
msgstr "Obojí"
#: gtk/inspector/size-groups.c:240
#: gtk/inspector/size-groups.c:243
msgid "Mode"
msgstr "Režim"
@@ -4349,14 +4357,10 @@ msgstr "Hierarchie"
msgid "Implements"
msgstr "Implementuje"
#: gtk/inspector/visual.c:674 gtk/inspector/visual.c:693
#: gtk/inspector/visual.c:672 gtk/inspector/visual.c:691
msgid "Theme is hardcoded by GTK_THEME"
msgstr "Motiv je napevno nastaven pomocí GTK_THEME"
#: gtk/inspector/visual.c:942
msgid "Backend does not support window scaling"
msgstr "Podpůrná vrstva nepodporuje škálování oken"
#: gtk/inspector/visual.ui:34
msgid "GTK Theme"
msgstr "Motiv GTK"
@@ -4377,93 +4381,87 @@ msgstr "Velikost kurzoru"
msgid "Icon Theme"
msgstr "Motiv ikon"
#: gtk/inspector/visual.ui:194
#: gtk/inspector/visual.ui:199
msgid "Font Scale"
msgstr "Škálování fontu"
#: gtk/inspector/visual.ui:239
#: gtk/inspector/visual.ui:244
msgid "Text Direction"
msgstr "Směr textu"
#: gtk/inspector/visual.ui:254
#: gtk/inspector/visual.ui:259
msgid "Left-to-Right"
msgstr "Zleva doprava"
#: gtk/inspector/visual.ui:255
#: gtk/inspector/visual.ui:260
msgid "Right-to-Left"
msgstr "Zprava doleva"
#: gtk/inspector/visual.ui:273
msgid "Window Scaling"
msgstr "Škálování oken"
#: gtk/inspector/visual.ui:306
#: gtk/inspector/visual.ui:277
msgid "Animations"
msgstr "Animace"
#: gtk/inspector/visual.ui:331
#: gtk/inspector/visual.ui:302
msgid "Slowdown"
msgstr "Zpomalení"
#: gtk/inspector/visual.ui:385
#: gtk/inspector/visual.ui:356
msgid "Show Framerate"
msgstr "Zobrazit snímkovou rychlost"
#: gtk/inspector/visual.ui:410
#: gtk/inspector/visual.ui:381
msgid "Show Graphic Updates"
msgstr "Zobrazovat aktualizace grafiky"
#: gtk/inspector/visual.ui:430
#: gtk/inspector/visual.ui:401
msgid ""
"Tints all the places where the current renderer uses Cairo instead of the "
"GPU."
msgstr ""
#: gtk/inspector/visual.ui:436
#, fuzzy
#| msgid "Show Fallback Rendering"
#: gtk/inspector/visual.ui:407
msgid "Show Cairo Rendering"
msgstr "Zobrazovat záložní vykreslování"
msgstr "Zobrazovat vykreslování Cairo"
#: gtk/inspector/visual.ui:461
#: gtk/inspector/visual.ui:432
msgid "Show Baselines"
msgstr "Zobrazovat účaří"
#: gtk/inspector/visual.ui:489
#: gtk/inspector/visual.ui:460
msgid "Show Layout Borders"
msgstr "Zobrazovat hranice rozvržení"
#: gtk/inspector/visual.ui:546
#: gtk/inspector/visual.ui:517
msgid "CSS Padding"
msgstr "Odsazení CSS"
#: gtk/inspector/visual.ui:556
#: gtk/inspector/visual.ui:527
msgid "CSS Border"
msgstr "Ohraničení CSS"
#: gtk/inspector/visual.ui:566
#: gtk/inspector/visual.ui:537
msgid "CSS Margin"
msgstr "Okraje CSS"
#: gtk/inspector/visual.ui:576
#: gtk/inspector/visual.ui:547
msgid "Widget Margin"
msgstr "Okraje widgetu"
#: gtk/inspector/visual.ui:611
#: gtk/inspector/visual.ui:582
msgid "Show Focus"
msgstr "Zobrazovat zaměření"
#: gtk/inspector/visual.ui:636
#: gtk/inspector/visual.ui:607
msgid "Show Accessibility warnings"
msgstr "Zobrazovat upozornění přístupnosti"
#: gtk/inspector/visual.ui:661
#: gtk/inspector/visual.ui:632
#, fuzzy
#| msgid "Show Graphic Updates"
msgid "Show Graphics Offload"
msgstr "Zobrazovat aktualizace grafiky"
#: gtk/inspector/visual.ui:693
#: gtk/inspector/visual.ui:664
msgid "Inspect Inspector"
msgstr "Prozkoumat inspektora"
@@ -7233,8 +7231,8 @@ msgstr ""
#: tools/gtk-builder-tool-enumerate.c:56 tools/gtk-builder-tool-preview.c:179
#: tools/gtk-builder-tool-preview.c:180 tools/gtk-builder-tool-screenshot.c:360
#: tools/gtk-builder-tool-simplify.c:2529 tools/gtk-builder-tool-validate.c:261
#: tools/gtk-path-tool-render.c:121 tools/gtk-rendernode-tool-info.c:214
#: tools/gtk-rendernode-tool-show.c:106
#: tools/gtk-path-tool-render.c:121 tools/gtk-rendernode-tool-compare.c:67
#: tools/gtk-rendernode-tool-info.c:214 tools/gtk-rendernode-tool-show.c:106
msgid "FILE"
msgstr "SOUBOR"
@@ -7644,10 +7642,8 @@ msgid "Background color"
msgstr "Barva pozadí"
#: tools/gtk-path-tool-render.c:124 tools/gtk-path-tool-show.c:146
#, fuzzy
#| msgid "Pick a Color"
msgid "Point color"
msgstr "Vybrat barvu"
msgstr "Barva bodu"
#: tools/gtk-path-tool-render.c:129 tools/gtk-path-tool-show.c:151
msgid "Fill rule (winding, even-odd)"
@@ -7828,6 +7824,7 @@ msgid ""
"\n"
"Commands:\n"
" benchmark Benchmark rendering of a node\n"
" compare Compare nodes or images\n"
" info Provide information about the node\n"
" show Show the node\n"
" render Take a screenshot of the node\n"
@@ -7851,6 +7848,7 @@ msgid "Add renderer to benchmark"
msgstr "Jaké vykreslování použít"
#: tools/gtk-rendernode-tool-benchmark.c:94
#: tools/gtk-rendernode-tool-compare.c:65
#: tools/gtk-rendernode-tool-render.c:195
msgid "RENDERER"
msgstr "VYKRESLOVÁNÍ"
@@ -7884,6 +7882,61 @@ msgstr "Není uveden žádný soubor .node\n"
msgid "Can only benchmark a single .node file\n"
msgstr "Je možné přijmout pouze jeden soubor .node\n"
#: tools/gtk-rendernode-tool-compare.c:65
#: tools/gtk-rendernode-tool-render.c:195
msgid "Renderer to use"
msgstr "Jaké vykreslování použít"
#: tools/gtk-rendernode-tool-compare.c:67
msgid "Output file"
msgstr "Výstupní soubor"
#: tools/gtk-rendernode-tool-compare.c:70
msgid "FILE1 FILE2"
msgstr "SOUBOR1 SOUBOR2"
#: tools/gtk-rendernode-tool-compare.c:82
msgid "Compare .node or .png files."
msgstr "Porovnat soubory .node nebo .png."
#: tools/gtk-rendernode-tool-compare.c:95
#, c-format
msgid "Must specify two files\n"
msgstr "Musí být určeny dva soubory\n"
#: tools/gtk-rendernode-tool-compare.c:102
#: tools/gtk-rendernode-tool-render.c:150
#, fuzzy, c-format
#| msgid "Failed to rewrite header\n"
msgid "Failed to create renderer: %s\n"
msgstr "Nezdařil se přepis záhlaví\n"
#: tools/gtk-rendernode-tool-compare.c:111
#, c-format
msgid "Failed to load %s: %s\n"
msgstr "Nezdařilo se načtení %s: %s\n"
#: tools/gtk-rendernode-tool-compare.c:122
#, fuzzy, c-format
#| msgid "Could not rename %s back to %s: %s.\n"
msgid "Could not save diff image to %s\n"
msgstr "%s nelze přejmenovat zpět na %s: %s.\n"
#: tools/gtk-rendernode-tool-compare.c:132
#, c-format
msgid "Differences witten to %s.\n"
msgstr "Rozdíly zapsány do %s.\n"
#: tools/gtk-rendernode-tool-compare.c:134
#, c-format
msgid "The images are different.\n"
msgstr "Obrázky se liší.\n"
#: tools/gtk-rendernode-tool-compare.c:137
#, c-format
msgid "No differences.\n"
msgstr "Žádné rozdíly.\n"
#: tools/gtk-rendernode-tool-info.c:191
#, c-format
msgid "Number of nodes: %u\n"
@@ -7927,16 +7980,6 @@ msgstr ""
msgid "Failed to generate SVG: %s\n"
msgstr "Nepodařilo se vygenerovat SVG: %s\n"
#: tools/gtk-rendernode-tool-render.c:150
#, fuzzy, c-format
#| msgid "Failed to rewrite header\n"
msgid "Failed to create renderer: %s\n"
msgstr "Nezdařil se přepis záhlaví\n"
#: tools/gtk-rendernode-tool-render.c:195
msgid "Renderer to use"
msgstr "Jaké vykreslování použít"
#: tools/gtk-rendernode-tool-render.c:211
msgid "Render a .node file to an image."
msgstr "Vykreslit soubor .node jako obrázek."
@@ -8078,6 +8121,12 @@ msgstr ""
"Pokud si zde opravdu přejete vytvořit mezipaměť ikon, použijte --ignore-"
"theme-index.\n"
#~ msgid "Backend does not support window scaling"
#~ msgstr "Podpůrná vrstva nepodporuje škálování oken"
#~ msgid "Window Scaling"
#~ msgstr "Škálování oken"
#, c-format
#~ msgid "Unspecified error decoding media"
#~ msgstr "Blíže neurčená chyba dekódování multimédia"
+146 -98
View File
@@ -11,20 +11,21 @@
# Francisco Javier F. Serrador <serrador@cvs.gnome.org>, 2003 - 2006.
# Jorge González <jorgegonz@svn.gnome.org>, 2007, 2008, 2009, 2010, 2011.
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2021-2024.
# Daniel Mustieles García <daniel.mustieles@gmail.com>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: gtk+.master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gtk/-/issues/\n"
"POT-Creation-Date: 2024-02-23 01:06+0000\n"
"PO-Revision-Date: 2024-02-26 16:25+0100\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"POT-Creation-Date: 2024-03-11 18:00+0000\n"
"PO-Revision-Date: 2024-03-12 09:34+0100\n"
"Last-Translator: Daniel Mustieles García <daniel.mustieles@gmail.com>\n"
"Language-Team: Spanish - Spain <gnome-es-list@gnome.org>\n"
"Language: es_ES\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Gtranslator 45.3\n"
"X-Generator: Gtranslator 42.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: gdk/broadway/gdkbroadway-server.c:135
@@ -60,7 +61,7 @@ msgstr "No se pudo proporcionar el contenido como %s"
msgid "The current backend does not support OpenGL"
msgstr "El «backend» actual no soporta OpenGL"
#: gdk/gdkdisplay.c:1315 gdk/gdkvulkancontext.c:1596
#: gdk/gdkdisplay.c:1315 gdk/gdkvulkancontext.c:1601
msgid "Vulkan support disabled via GDK_DEBUG"
msgstr "Soporte de Vulkan desactivado mediante GDK_DEBUG"
@@ -132,22 +133,22 @@ msgstr "No se permite la API de GL"
msgid "Unable to create a GL context"
msgstr "No se pudo crear un contexto GL"
#: gdk/gdkglcontext.c:1303
#: gdk/gdkglcontext.c:1304
msgid "OpenGL ES disabled via GDK_DEBUG"
msgstr "OpenGL ES desactivado mediante GDK_DEBUG"
#: gdk/gdkglcontext.c:1315
#: gdk/gdkglcontext.c:1316
msgid "OpenGL disabled via GDK_DEBUG"
msgstr "OpenGL mediante GDK_DEBUG"
#: gdk/gdkglcontext.c:1326
#: gdk/gdkglcontext.c:1327
#, c-format
msgid "Application does not support %s API"
msgstr "La aplicación no soporta la API %s"
#. translators: This is about OpenGL backend names, like
#. * "Trying to use X11 GLX, but EGL is already in use"
#: gdk/gdkglcontext.c:2112
#: gdk/gdkglcontext.c:2113
#, c-format
msgid "Trying to use %s, but %s is already in use"
msgstr "Intentando usar %s pero %s ya está en uso"
@@ -640,22 +641,22 @@ msgstr ""
#, c-format
msgid "Cannot set clipboard data. OpenClipboard() failed: 0x%lx."
msgstr ""
"No se pueden obtener los datos del portapapeles. OpenClipboard() falló: "
"0x%lx."
"No se pueden obtener los datos del portapapeles. OpenClipboard() falló: 0x"
"%lx."
#: gdk/win32/gdkclipdrop-win32.c:874
#, c-format
msgid "Cannot get clipboard data. GlobalLock(0x%p) failed: 0x%lx."
msgstr ""
"No se pueden obtener los datos del portapapeles. GlobalLock(0x%p) falló: "
"0x%lx."
"No se pueden obtener los datos del portapapeles. GlobalLock(0x%p) falló: 0x"
"%lx."
#: gdk/win32/gdkclipdrop-win32.c:885
#, c-format
msgid "Cannot get clipboard data. GlobalSize(0x%p) failed: 0x%lx."
msgstr ""
"No se pueden obtener los datos del portapapeles. GlobalSize(0x%p) falló: "
"0x%lx."
"No se pueden obtener los datos del portapapeles. GlobalSize(0x%p) falló: 0x"
"%lx."
#: gdk/win32/gdkclipdrop-win32.c:898
#, c-format
@@ -690,8 +691,8 @@ msgstr ""
#, c-format
msgid "Cannot get clipboard data. OpenClipboard() failed: 0x%lx."
msgstr ""
"No se pueden obtener los datos del portapapeles. OpenClipboard() falló: "
"0x%lx."
"No se pueden obtener los datos del portapapeles. OpenClipboard() falló: 0x"
"%lx."
#: gdk/win32/gdkclipdrop-win32.c:992
#, c-format
@@ -704,8 +705,8 @@ msgstr ""
#, c-format
msgid "Cannot get clipboard data. GetClipboardData() failed: 0x%lx."
msgstr ""
"No se pueden obtener los datos del portapapeles. GetClipboardData() falló: "
"0x%lx."
"No se pueden obtener los datos del portapapeles. GetClipboardData() falló: 0x"
"%lx."
#: gdk/win32/gdkdrop-win32.c:949
#, c-format
@@ -871,11 +872,15 @@ msgid "This GLES %d.%d implementation does not support half-float vertex data"
msgstr ""
"Esta implementación de GLES %d.%d no soporta datos de vértices semi-flotantes"
#: gsk/gpu/gskgldevice.c:245
#: gsk/gpu/gskgldevice.c:246
#, c-format
msgid "OpenGL ES 3.0 is not supported by this renderer."
msgstr "OpenGL ES 3.0 no está soportado por este renderizador."
#: gsk/gpu/gsknglrenderer.c:62
msgid "OpenGL 3.3 required"
msgstr "Se necesita OpenGL 3.3"
#: gtk/a11y/gtkatspiaction.c:239
msgctxt "accessibility"
msgid "Click"
@@ -2375,7 +2380,7 @@ msgid "If you delete an item, it will be permanently lost."
msgstr "Si elimina un elemento, se perderña definitivamente."
#: gtk/gtkfilechooserwidget.c:1188 gtk/gtkfilechooserwidget.c:1786
#: gtk/gtklabel.c:5712 gtk/gtktext.c:6193 gtk/gtktextview.c:9080
#: gtk/gtklabel.c:5711 gtk/gtktext.c:6194 gtk/gtktextview.c:9080
msgid "_Delete"
msgstr "_Eliminar"
@@ -2585,7 +2590,7 @@ msgid "_Time"
msgstr "_Hora"
#: gtk/gtkfilechooserwidget.c:7375 gtk/gtkplacessidebar.c:2306
#: gtk/inspector/a11y.ui:43 gtk/inspector/actions.ui:19
#: gtk/inspector/a11y.ui:43 gtk/inspector/actions.ui:18
#: gtk/inspector/css-node-tree.ui:22 gtk/inspector/prop-list.ui:24
#: gtk/ui/gtkfilechooserwidget.ui:385 gtk/print/ui/gtkprintunixdialog.ui:80
msgid "Name"
@@ -2669,35 +2674,35 @@ msgctxt "Font feature value"
msgid "Enable"
msgstr "Activar"
#: gtk/gtkfontchooserwidget.c:2457
#: gtk/gtkfontchooserwidget.c:2459
msgid "Default"
msgstr "Predeterminada"
#: gtk/gtkfontchooserwidget.c:2519
#: gtk/gtkfontchooserwidget.c:2521
msgid "Ligatures"
msgstr "Ligaduras"
#: gtk/gtkfontchooserwidget.c:2520
#: gtk/gtkfontchooserwidget.c:2522
msgid "Letter Case"
msgstr "Letter Case"
#: gtk/gtkfontchooserwidget.c:2521
#: gtk/gtkfontchooserwidget.c:2523
msgid "Number Case"
msgstr "Mayúsculas y minúsculas de números"
#: gtk/gtkfontchooserwidget.c:2522
#: gtk/gtkfontchooserwidget.c:2524
msgid "Number Spacing"
msgstr "Espaciado de números"
#: gtk/gtkfontchooserwidget.c:2523
#: gtk/gtkfontchooserwidget.c:2525
msgid "Fractions"
msgstr "Fracciones"
#: gtk/gtkfontchooserwidget.c:2524
#: gtk/gtkfontchooserwidget.c:2526
msgid "Style Variations"
msgstr "Variantes del estilo"
#: gtk/gtkfontchooserwidget.c:2526
#: gtk/gtkfontchooserwidget.c:2528
msgid "Character Variations"
msgstr "Variantes del carácter"
@@ -2714,31 +2719,31 @@ msgstr "Cerrar"
msgid "Close the infobar"
msgstr "Cerrar la barra de información"
#: gtk/gtklabel.c:5709 gtk/gtktext.c:6181 gtk/gtktextview.c:9068
#: gtk/gtklabel.c:5708 gtk/gtktext.c:6182 gtk/gtktextview.c:9068
msgid "Cu_t"
msgstr "Cor_tar"
#: gtk/gtklabel.c:5710 gtk/gtktext.c:6185 gtk/gtktextview.c:9072
#: gtk/gtklabel.c:5709 gtk/gtktext.c:6186 gtk/gtktextview.c:9072
msgid "_Copy"
msgstr "_Copiar"
#: gtk/gtklabel.c:5711 gtk/gtktext.c:6189 gtk/gtktextview.c:9076
#: gtk/gtklabel.c:5710 gtk/gtktext.c:6190 gtk/gtktextview.c:9076
msgid "_Paste"
msgstr "_Pegar"
#: gtk/gtklabel.c:5717 gtk/gtktext.c:6202 gtk/gtktextview.c:9101
#: gtk/gtklabel.c:5716 gtk/gtktext.c:6203 gtk/gtktextview.c:9101
msgid "Select _All"
msgstr "Seleccionar _todo"
#: gtk/gtklabel.c:5722
#: gtk/gtklabel.c:5721
msgid "_Open Link"
msgstr "_Abrir enlace"
#: gtk/gtklabel.c:5726
#: gtk/gtklabel.c:5725
msgid "Copy _Link Address"
msgstr "Copiar la dirección del _enlace"
#: gtk/gtklabel.c:5770 gtk/gtktext.c:2724 gtk/gtktextview.c:9150
#: gtk/gtklabel.c:5769 gtk/gtktext.c:2723 gtk/gtktextview.c:9150
msgid "Context menu"
msgstr "Menú contextual"
@@ -3584,7 +3589,7 @@ msgstr ""
"No se encontró ninguna aplicación registrada con el nombre «%s» para el "
"elemento con el URI «%s»"
#: gtk/gtksearchentry.c:810
#: gtk/gtksearchentry.c:814
msgid "Clear Entry"
msgstr "Limpiar entrada"
@@ -3675,7 +3680,7 @@ msgctxt "accessibility"
msgid "Sidebar"
msgstr "Barra lateral"
#: gtk/gtktext.c:6207 gtk/gtktextview.c:9106
#: gtk/gtktext.c:6208 gtk/gtktextview.c:9106
msgid "Insert _Emoji"
msgstr "Insertar _emoticono"
@@ -3916,7 +3921,7 @@ msgctxt "Vulkan version"
msgid "None"
msgstr "Ninguna"
#: gtk/inspector/general.c:922
#: gtk/inspector/general.c:923
msgid "IM Context is hardcoded by GTK_IM_MODULE"
msgstr "El contesto IM está codificado por GTK_IM_MODULE"
@@ -3986,19 +3991,19 @@ msgstr "Fabricante del «backend» GL"
#: gtk/inspector/general.ui:698
msgid "GL_VENDOR"
msgstr "FABRICANTE_GL"
msgstr "GL_VENDOR"
#: gtk/inspector/general.ui:727
msgid "GL_RENDERER"
msgstr "GL_RENDERIZADOR"
msgstr "GL_RENDERER"
#: gtk/inspector/general.ui:756
msgid "GL_VERSION"
msgstr "VERSION_GL"
msgstr "GL_VERSION"
#: gtk/inspector/general.ui:785
msgid "GL_SHADING_LANGUAGE_VERSION"
msgstr ""
msgstr "GL_SHADING_LANGUAGE_VERSION"
#: gtk/inspector/general.ui:813 gtk/inspector/general.ui:929
msgid "Extensions"
@@ -4289,27 +4294,27 @@ msgid "Trigger"
msgstr "Disparador"
# src/file-manager/fm-icon-text-window.c:85
#: gtk/inspector/size-groups.c:225
#: gtk/inspector/size-groups.c:228
msgctxt "sizegroup mode"
msgid "None"
msgstr "Ninguno"
#: gtk/inspector/size-groups.c:226
#: gtk/inspector/size-groups.c:229
msgctxt "sizegroup mode"
msgid "Horizontal"
msgstr "Horizontal"
#: gtk/inspector/size-groups.c:227
#: gtk/inspector/size-groups.c:230
msgctxt "sizegroup mode"
msgid "Vertical"
msgstr "Vertical"
#: gtk/inspector/size-groups.c:228
#: gtk/inspector/size-groups.c:231
msgctxt "sizegroup mode"
msgid "Both"
msgstr "Ambas"
#: gtk/inspector/size-groups.c:240
#: gtk/inspector/size-groups.c:243
msgid "Mode"
msgstr "Modo"
@@ -4366,14 +4371,10 @@ msgstr "Jerarquía"
msgid "Implements"
msgstr "Implementa"
#: gtk/inspector/visual.c:674 gtk/inspector/visual.c:693
#: gtk/inspector/visual.c:672 gtk/inspector/visual.c:691
msgid "Theme is hardcoded by GTK_THEME"
msgstr "El tema está codificado en GTK_THEME"
#: gtk/inspector/visual.c:942
msgid "Backend does not support window scaling"
msgstr "El «backend» no soporta el escalado de ventanas"
#: gtk/inspector/visual.ui:34
msgid "GTK Theme"
msgstr "Tema de GTK"
@@ -4394,43 +4395,39 @@ msgstr "Tamaño del cursor"
msgid "Icon Theme"
msgstr "Tema de iconos"
#: gtk/inspector/visual.ui:194
#: gtk/inspector/visual.ui:199
msgid "Font Scale"
msgstr "Escalado de tipografías"
#: gtk/inspector/visual.ui:239
#: gtk/inspector/visual.ui:244
msgid "Text Direction"
msgstr "Dirección del texto"
#: gtk/inspector/visual.ui:254
#: gtk/inspector/visual.ui:259
msgid "Left-to-Right"
msgstr "Izquierda a derecha"
#: gtk/inspector/visual.ui:255
#: gtk/inspector/visual.ui:260
msgid "Right-to-Left"
msgstr "Derecha a izquierda"
#: gtk/inspector/visual.ui:273
msgid "Window Scaling"
msgstr "Escalado de la ventana"
#: gtk/inspector/visual.ui:306
#: gtk/inspector/visual.ui:277
msgid "Animations"
msgstr "Animaciones"
#: gtk/inspector/visual.ui:331
#: gtk/inspector/visual.ui:302
msgid "Slowdown"
msgstr "Ralentizar"
#: gtk/inspector/visual.ui:385
#: gtk/inspector/visual.ui:356
msgid "Show Framerate"
msgstr "Mostrar tasa de fotogramas"
#: gtk/inspector/visual.ui:410
#: gtk/inspector/visual.ui:381
msgid "Show Graphic Updates"
msgstr "Mostrar actualizaciones de gráficos"
#: gtk/inspector/visual.ui:430
#: gtk/inspector/visual.ui:401
msgid ""
"Tints all the places where the current renderer uses Cairo instead of the "
"GPU."
@@ -4438,47 +4435,47 @@ msgstr ""
"Colorea todas las partes en las que el renderizador actual usa Cairo en "
"lugar de GPU."
#: gtk/inspector/visual.ui:436
#: gtk/inspector/visual.ui:407
msgid "Show Cairo Rendering"
msgstr "Mostrar renderizado Cairo"
#: gtk/inspector/visual.ui:461
#: gtk/inspector/visual.ui:432
msgid "Show Baselines"
msgstr "Mostrar líneas base"
#: gtk/inspector/visual.ui:489
#: gtk/inspector/visual.ui:460
msgid "Show Layout Borders"
msgstr "Mostrar bordes de la distribución"
#: gtk/inspector/visual.ui:546
#: gtk/inspector/visual.ui:517
msgid "CSS Padding"
msgstr "Espaciado CSS"
#: gtk/inspector/visual.ui:556
#: gtk/inspector/visual.ui:527
msgid "CSS Border"
msgstr "Borde CSS"
#: gtk/inspector/visual.ui:566
#: gtk/inspector/visual.ui:537
msgid "CSS Margin"
msgstr "Margen CSS"
#: gtk/inspector/visual.ui:576
#: gtk/inspector/visual.ui:547
msgid "Widget Margin"
msgstr "Anchura del widget"
#: gtk/inspector/visual.ui:611
#: gtk/inspector/visual.ui:582
msgid "Show Focus"
msgstr "Mostrar foco"
#: gtk/inspector/visual.ui:636
#: gtk/inspector/visual.ui:607
msgid "Show Accessibility warnings"
msgstr "Mostrar advertencias de accesibilidad"
#: gtk/inspector/visual.ui:661
#: gtk/inspector/visual.ui:632
msgid "Show Graphics Offload"
msgstr "Mostrar descarga de gráficos"
#: gtk/inspector/visual.ui:693
#: gtk/inspector/visual.ui:664
msgid "Inspect Inspector"
msgstr "Inspeccionar inspector"
@@ -7253,8 +7250,8 @@ msgstr ""
#: tools/gtk-builder-tool-enumerate.c:56 tools/gtk-builder-tool-preview.c:179
#: tools/gtk-builder-tool-preview.c:180 tools/gtk-builder-tool-screenshot.c:360
#: tools/gtk-builder-tool-simplify.c:2529 tools/gtk-builder-tool-validate.c:261
#: tools/gtk-path-tool-render.c:121 tools/gtk-rendernode-tool-info.c:214
#: tools/gtk-rendernode-tool-show.c:106
#: tools/gtk-path-tool-render.c:121 tools/gtk-rendernode-tool-compare.c:67
#: tools/gtk-rendernode-tool-info.c:214 tools/gtk-rendernode-tool-show.c:106
msgid "FILE"
msgstr "ARCHIVO"
@@ -7682,23 +7679,23 @@ msgstr "Anchura de línea (número)"
#: tools/gtk-path-tool-render.c:134 tools/gtk-path-tool-show.c:156
msgid "Line cap (butt, round, square)"
msgstr ""
msgstr "Límite de línea de línea (extremo, redonda, cuadrada)"
#: tools/gtk-path-tool-render.c:135 tools/gtk-path-tool-show.c:157
msgid "Line join (miter, miter-clip, round, bevel, arcs)"
msgstr ""
msgstr "Unión de líneas (inglete, clip de inglete, redondo, biselado, arcos)"
#: tools/gtk-path-tool-render.c:136 tools/gtk-path-tool-show.c:158
msgid "Miter limit (number)"
msgstr ""
msgstr "Límite de inglete (número)"
#: tools/gtk-path-tool-render.c:137 tools/gtk-path-tool-show.c:159
msgid "Dash pattern (comma-separated numbers)"
msgstr ""
msgstr "Patrón del tablero (números separados por comas)"
#: tools/gtk-path-tool-render.c:138 tools/gtk-path-tool-show.c:160
msgid "Dash offset (number)"
msgstr ""
msgstr "Desplazamiento del tablero (número)"
#: tools/gtk-path-tool-render.c:161 tools/gtk-path-tool-show.c:172
msgid "Could not initialize windowing system"
@@ -7738,11 +7735,11 @@ msgstr "regla de llenado"
#: tools/gtk-path-tool-render.c:255 tools/gtk-path-tool-show.c:226
msgid "line cap"
msgstr ""
msgstr "límite de línea"
#: tools/gtk-path-tool-render.c:256 tools/gtk-path-tool-show.c:227
msgid "line join"
msgstr ""
msgstr "unión de línea"
#: tools/gtk-path-tool-render.c:310
#, c-format
@@ -7853,6 +7850,7 @@ msgid "Add renderer to benchmark"
msgstr "Añadir renderizador al banco de pruebas"
#: tools/gtk-rendernode-tool-benchmark.c:94
#: tools/gtk-rendernode-tool-compare.c:65
#: tools/gtk-rendernode-tool-render.c:195
msgid "RENDERER"
msgstr "RENDERIZADOR"
@@ -7867,11 +7865,11 @@ msgstr "EJECUTA"
#: tools/gtk-rendernode-tool-benchmark.c:96
msgid "Dont download result/wait for GPU to finish"
msgstr ""
msgstr "No descargar resultado/esperar a que termine la GPU"
#: tools/gtk-rendernode-tool-benchmark.c:114
msgid "Benchmark rendering of a .node file."
msgstr ""
msgstr "Representación comparativa de un archivo .node."
#: tools/gtk-rendernode-tool-benchmark.c:127
#: tools/gtk-rendernode-tool-info.c:236 tools/gtk-rendernode-tool-render.c:224
@@ -7885,6 +7883,59 @@ msgstr "No se ha especificado ningún archivo .node\n"
msgid "Can only benchmark a single .node file\n"
msgstr "Sólo se puede probar un único archivo .node\n"
#: tools/gtk-rendernode-tool-compare.c:65
#: tools/gtk-rendernode-tool-render.c:195
msgid "Renderer to use"
msgstr "Renderizador que usar"
#: tools/gtk-rendernode-tool-compare.c:67
msgid "Output file"
msgstr "Archivo de salida"
#: tools/gtk-rendernode-tool-compare.c:70
msgid "FILE1 FILE2"
msgstr "ARCHIVO1 ARCHIVO2"
#: tools/gtk-rendernode-tool-compare.c:82
msgid "Compare .node or .png files."
msgstr "Comparar archivos .node o .png"
#: tools/gtk-rendernode-tool-compare.c:95
#, c-format
msgid "Must specify two files\n"
msgstr "Debe especificar dos archivos\n"
#: tools/gtk-rendernode-tool-compare.c:102
#: tools/gtk-rendernode-tool-render.c:150
#, c-format
msgid "Failed to create renderer: %s\n"
msgstr "Falló al crear el renderizador: %s\n"
#: tools/gtk-rendernode-tool-compare.c:111
#, c-format
msgid "Failed to load %s: %s\n"
msgstr "Falló al cargar %s: %s\n"
#: tools/gtk-rendernode-tool-compare.c:122
#, c-format
msgid "Could not save diff image to %s\n"
msgstr "No se pudieron guardar las diferencias de la imagen %s.\n"
#: tools/gtk-rendernode-tool-compare.c:132
#, c-format
msgid "Differences witten to %s.\n"
msgstr "Diferencias escritas en %s.\n"
#: tools/gtk-rendernode-tool-compare.c:134
#, c-format
msgid "The images are different.\n"
msgstr "Las imágenes son diferentes.\n"
#: tools/gtk-rendernode-tool-compare.c:137
#, c-format
msgid "No differences.\n"
msgstr "No hay diferencias.\n"
#: tools/gtk-rendernode-tool-info.c:191
#, c-format
msgid "Number of nodes: %u\n"
@@ -7928,15 +7979,6 @@ msgstr ""
msgid "Failed to generate SVG: %s\n"
msgstr "Falló al generar el SVG: %s\n"
#: tools/gtk-rendernode-tool-render.c:150
#, c-format
msgid "Failed to create renderer: %s\n"
msgstr "Falló al crear el renderizador: %s\n"
#: tools/gtk-rendernode-tool-render.c:195
msgid "Renderer to use"
msgstr "Renderizador que usar"
#: tools/gtk-rendernode-tool-render.c:211
msgid "Render a .node file to an image."
msgstr "Renderizar un archivo .node a una imagen."
@@ -8079,6 +8121,12 @@ msgstr ""
"Si realmente quiere crear un caché de iconos aquí, use --ignore-theme-"
"index.\n"
#~ msgid "Backend does not support window scaling"
#~ msgstr "El «backend» no soporta el escalado de ventanas"
#~ msgid "Window Scaling"
#~ msgstr "Escalado de la ventana"
#~ msgid "Show _Size Column"
#~ msgstr "Mostrar columna de _tamaño"
+3 -3
View File
@@ -22,8 +22,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gtk+.master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gtk/-/issues/\n"
"POT-Creation-Date: 2024-03-02 15:19+0000\n"
"PO-Revision-Date: 2024-03-02 20:40+0300\n"
"POT-Creation-Date: 2024-03-02 19:55+0000\n"
"PO-Revision-Date: 2024-03-03 19:39+0300\n"
"Last-Translator: Artur So <arturios2005@mail.ru>\n"
"Language-Team: Русский <gnome-cyr@gnome.org>\n"
"Language: ru\n"
@@ -2567,7 +2567,7 @@ msgstr "Не удалось послать запрос на поиск"
#: gtk/gtkfilechooserwidget.c:5986
msgid "Accessed"
msgstr "Доступ"
msgstr "Использовано"
#: gtk/gtkfilechooserwidget.c:7361
msgid "_Size"
+7
View File
@@ -224,6 +224,7 @@ compare_xfails = {
'radial-gradient-with-64-colorstops': ['clipped', 'colorflipped'],
'conic-gradient-with-64-colorstops': ['clipped', 'colorflipped'],
'blur-child-bounds-oversize-nogl': ['clipped'], # 6450
'rounded-clip-with-huge-bounds-nogl': ['plain','flipped','rotated','repeated','masked','replayed','clipped','colorflipped'], # 6532
},
'vulkan': {
'radial-gradient-with-64-colorstops': ['clipped', 'colorflipped'],
@@ -231,6 +232,7 @@ compare_xfails = {
'blur-child-bounds-oversize-nogl': ['clipped'], # 6450
'repeat-repeats-nested-nogl': ['clipped'], # 6522
'repeating-radial-gradient-edge-colors': ['colorflipped'],
'rounded-clip-with-huge-bounds-nogl': ['plain','flipped','rotated','repeated','masked','replayed','clipped','colorflipped'], # 6532
},
'gl': {
# 6525
@@ -359,6 +361,8 @@ node_parser_tests = [
'empty-shadow.ref.node',
'empty-stroke.node',
'empty-stroke.ref.node',
'empty-subsurface.node',
'empty-subsurface.ref.node',
'empty-text.node',
'empty-text.ref.node',
'empty-texture.node',
@@ -466,6 +470,9 @@ if os_linux
'stop_offloading.node',
'source.node',
'nested.node',
'clipped.node',
'not-clipped.node',
'complex-clip.node',
]
foreach test : offload_tests
@@ -0,0 +1,2 @@
subsurface {
}
@@ -0,0 +1,6 @@
subsurface {
child: color {
bounds: 0 0 50 50;
color: rgb(255,0,204);
}
}
+9
View File
@@ -0,0 +1,9 @@
clip {
clip: 10 10 10 10;
child: subsurface {
child: texture {
bounds: 0 0 20 20;
texture: url('data:image/svg+xml;utf-8,<svg width="20" height="20"></svg>');
}
}
}
+1
View File
@@ -0,0 +1 @@
0: not offloaded
+18
View File
@@ -0,0 +1,18 @@
rounded-clip {
clip: 0 0 50 50 / 20;
child: clip {
clip: 2 2 40 40;
child: container {
color {
color: white;
bounds: 0 0 50 50;
}
subsurface {
child: texture {
bounds: 10 10 20 20;
texture: url('data:image/svg+xml;utf-8,<svg width="20" height="20"></svg>');
}
}
}
}
}
@@ -0,0 +1 @@
0: not offloaded
+9
View File
@@ -0,0 +1,9 @@
clip {
clip: 0 0 50 50;
child: subsurface {
child: texture {
bounds: 0 0 20 20;
texture: url('data:image/svg+xml;utf-8,<svg width="20" height="20"></svg>');
}
}
}
@@ -0,0 +1 @@
0: offloaded, raised, above: -, texture: 20x20, source: 0 0 20 20, dest: 0 0 20 20
+37
View File
@@ -306,6 +306,42 @@ test_delete (void)
g_object_unref (entry);
}
static void
test_editable (void)
{
GtkWidget *entry;
int start, end;
gboolean res;
char *text;
entry = gtk_entry_new ();
g_object_ref_sink (entry);
res = gtk_editable_get_selection_bounds (GTK_EDITABLE (entry), &start, &end);
g_assert_false (res);
g_assert_cmpint (start, ==, end);
text = gtk_editable_get_chars (GTK_EDITABLE (entry), start, end);
g_assert_nonnull (text);
g_assert_cmpstr (text, ==, "");
g_free (text);
gtk_editable_set_text (GTK_EDITABLE (entry), "ABC");
gtk_editable_select_region (GTK_EDITABLE (entry), 1, 2);
res = gtk_editable_get_selection_bounds (GTK_EDITABLE (entry), &start, &end);
g_assert_true (res);
g_assert_cmpint (start, ==, 1);
g_assert_cmpint (end, ==, 2);
text = gtk_editable_get_chars (GTK_EDITABLE (entry), start, end);
g_assert_nonnull (text);
g_assert_cmpstr (text, ==, "B");
g_free (text);
g_object_unref (entry);
}
int
main (int argc,
char *argv[])
@@ -314,6 +350,7 @@ main (int argc,
g_test_add_func ("/entry/delete", test_delete);
g_test_add_func ("/entry/insert", test_insert);
g_test_add_func ("/entry/editable", test_editable);
return g_test_run();
}