Compare commits

...

34 Commits

Author SHA1 Message Date
Matthias Clasen
39d689a170 Add a reverse list model
This is a simple wrapper list model that reverses
the order of items in the child model.
2020-09-07 22:05:11 -04:00
Matthias Clasen
bab7092a69 Merge branch 'gl-linear' into 'master'
Gl: use linear interpolation

See merge request GNOME/gtk!2523
2020-09-07 21:27:09 +00:00
Matthias Clasen
3b6941b04b Add some tests for the axis-aligned check 2020-09-07 14:22:47 -04:00
Matthias Clasen
fe429ffc45 Merge branch 'matthiasc/for-master' into 'master'
Matthiasc/for master

See merge request GNOME/gtk!2541
2020-09-07 17:03:27 +00:00
Matthias Clasen
d595c6ab12 gsk: Complain if we fail to realize a renderer
The only likely place where this is going to happen
is if a renderer was explicitly requested with the
GSK_RENDERER environment variable, and in that case,
it is misleading to silently use a different renderer.
2020-09-07 11:18:45 -04:00
Matthias Clasen
2738d5bc93 gsk: Mention gl as valid value for GSK_RENDERER 2020-09-07 11:18:45 -04:00
Matthias Clasen
5a8267dfae text: Set the hotspot for the drag icon
This makes the drag icon align properly with the
dragged text at the beginning of the drag.
2020-09-07 11:18:45 -04:00
Marek Černocký
d03ce22446 Updated Czech translation 2020-09-07 14:34:07 +02:00
Gil Forcada
350051c56e Update Catalan translation 2020-09-07 10:31:39 +00:00
Daniel Mustieles
979ec828d2 Updated Spanish translation 2020-09-07 08:59:50 +02:00
Fran Dieguez
99ddb3c927 Update Galician translation 2020-09-06 23:22:39 +00:00
Fran Dieguez
770910e608 Update Galician translation 2020-09-06 23:20:08 +00:00
Matthias Clasen
7180bfc288 Merge branch 'matthiasc/for-master' into 'master'
Matthiasc/for master

Closes #3123

See merge request GNOME/gtk!2539
2020-09-06 21:39:08 +00:00
Matthias Clasen
bc80ed4240 aboutdialog: Disable text undo
The text buffers here are not editable, so it
does not make sense to have text undo enabled
for them.

Fixes: #3123
2020-09-06 17:02:00 -04:00
Matthias Clasen
4d45c2669c text history: Update state when enabled changes
This makes can-undo go FALSE when we disable the
text history, as it should.
2020-09-06 17:02:00 -04:00
Balázs Úr
dd8ca7259f Update Hungarian translation 2020-09-06 20:31:44 +00:00
Matthias Clasen
06c866f45e Merge branch 'matthiasc/for-master' into 'master'
Matthiasc/for master

See merge request GNOME/gtk!2538
2020-09-06 19:38:56 +00:00
Baurzhan Muftakhidinov
2bd7ed5ebd Update Kazakh translation 2020-09-06 17:36:39 +00:00
Matthias Clasen
adc9d91e0e text: Stop drag updates when a dnd starts
This prevents the selection from changing underneath
us, messing up move dnd operations.
2020-09-06 12:19:44 -04:00
Matthias Clasen
1150c23b0f Merge branch 'listwidgets-doc-fix' into 'master'
docs: Update list widgets docs

See merge request GNOME/gtk!2537
2020-09-06 15:53:59 +00:00
Matthias Clasen
9b8c175f23 textview: Fix dnd
When we start a dnd of the selection in the drag-update handler,
set the gesture state to denied. Otherwise, we get more drag-update
signals, and things get really confused, leading to no dnd and
sadness.
2020-09-06 11:48:10 -04:00
Andreas Persson
e0134aaf15 docs: Update list widgets docs
Removed sentence that claimed the view will wrap the model in a
GtkSingleSelection, as it's no longer true. Fixed the code example in
GtkListView for the same reason. Fixed a small typo in GtkDropDown docs.
2020-09-06 17:19:24 +02:00
Matthias Clasen
bd7aa1782c Merge branch 'matthiasc/for-master' into 'master'
Matthiasc/for master

See merge request GNOME/gtk!2535
2020-09-06 13:25:43 +00:00
Alexandre Franke
007c9c6218 Update French translation 2020-09-06 12:44:35 +00:00
Matthias Clasen
8c8baa9aa6 gtk-demo: Add some comments
Add some comments to the math in the transforms demo.
2020-09-06 08:43:58 -04:00
Asier Sarasua Garmendia
7ae0f56378 Update Basque translation 2020-09-06 09:01:32 +00:00
Kukuh Syafaat
3fcf7adb25 Update Indonesian translation 2020-09-06 05:16:58 +00:00
Matthias Clasen
8b38d1895c gtk-demo: Simplify the constraints demos
Give them all a close button in the header.
2020-09-05 22:54:16 -04:00
Matthias Clasen
a4ba25f0f8 inspector: Fix teardown of the general tab
We were connecting signal handlers to the display
and seats here, and never cleaning them up, leading
to crashes after the inspector is closed. This is
fairly easy to reproduce under Wayland, where the
scroll device is only created the first time we
create a scroll event.
2020-09-05 22:35:30 -04:00
Matthias Clasen
8a3621a125 Beef up transform testcase
Make this show 'paintings in paintings'.
2020-09-04 13:20:59 -04:00
Matthias Clasen
60e37d3368 Update gsk tests
Add a clip-coordinates-2d test that is similar
to clip-coordinates-3d, but actually uses a 2D
transform.
2020-09-04 13:19:01 -04:00
Matthias Clasen
e0cc7b5d86 Check for pixel-alignedness for interpolation
When rendering to an offscreen because of transforms,
check if transforming the bounds of the node results
in a non-axis-aligned quad. If it doesn't, we want
GL_NEAREST interpolation to get sharp edges. Otherwise,
we use GL_LINEAR to get better results for things
that are actually transformed.
2020-09-04 13:16:53 -04:00
Matthias Clasen
9843515736 gl: Reshuffle some code
Just rearrange the cases in this switch, no effective change.
2020-09-04 13:16:11 -04:00
Matthias Clasen
41497aeb8b Add gsk_matrix_transform_rect
This is a projecting version of the corresponding
graphene api. While we are at it, rewrite
gsk_matrix_transform_bounds() to use
gsk_matrix_transform_rect().
2020-09-04 13:15:21 -04:00
38 changed files with 7551 additions and 6842 deletions

View File

@@ -254,15 +254,11 @@ do_constraints (GtkWidget *do_widget)
if (!window)
{
GtkWidget *header, *box, *grid, *button;
GtkWidget *box, *grid;
window = gtk_window_new ();
gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget));
gtk_window_set_title (GTK_WINDOW (window), "Constraints");
header = gtk_header_bar_new ();
gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (header), FALSE);
gtk_window_set_titlebar (GTK_WINDOW (window), header);
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
@@ -272,12 +268,6 @@ do_constraints (GtkWidget *do_widget)
gtk_widget_set_hexpand (grid, TRUE);
gtk_widget_set_vexpand (grid, TRUE);
gtk_box_append (GTK_BOX (box), grid);
button = gtk_button_new_with_label ("Close");
gtk_box_append (GTK_BOX (box), button);
gtk_widget_set_hexpand (grid, TRUE);
g_signal_connect_swapped (button, "clicked",
G_CALLBACK (gtk_window_destroy), window);
}
if (!gtk_widget_get_visible (window))

View File

@@ -210,15 +210,11 @@ do_constraints2 (GtkWidget *do_widget)
if (!window)
{
GtkWidget *header, *box, *grid, *button;
GtkWidget *box, *grid;
window = gtk_window_new ();
gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget));
gtk_window_set_title (GTK_WINDOW (window), "Constraints");
header = gtk_header_bar_new ();
gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (header), FALSE);
gtk_window_set_titlebar (GTK_WINDOW (window), header);
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
@@ -228,12 +224,6 @@ do_constraints2 (GtkWidget *do_widget)
gtk_widget_set_hexpand (grid, TRUE);
gtk_widget_set_vexpand (grid, TRUE);
gtk_box_append (GTK_BOX (box), grid);
button = gtk_button_new_with_label ("Close");
gtk_box_append (GTK_BOX (box), button);
gtk_widget_set_hexpand (grid, TRUE);
g_signal_connect_swapped (button, "clicked",
G_CALLBACK (gtk_window_destroy), window);
}
if (!gtk_widget_get_visible (window))

View File

@@ -130,15 +130,11 @@ do_constraints3 (GtkWidget *do_widget)
if (!window)
{
GtkWidget *header, *box, *grid, *button;
GtkWidget *box, *grid;
window = gtk_window_new ();
gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget));
gtk_window_set_title (GTK_WINDOW (window), "Constraints");
header = gtk_header_bar_new ();
gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (header), FALSE);
gtk_window_set_titlebar (GTK_WINDOW (window), header);
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
@@ -148,12 +144,6 @@ do_constraints3 (GtkWidget *do_widget)
gtk_widget_set_hexpand (grid, TRUE);
gtk_widget_set_vexpand (grid, TRUE);
gtk_box_append (GTK_BOX (box), grid);
button = gtk_button_new_with_label ("Close");
gtk_box_append (GTK_BOX (box), button);
gtk_widget_set_hexpand (grid, TRUE);
g_signal_connect_swapped (button, "clicked",
G_CALLBACK (gtk_window_destroy), window);
}
if (!gtk_widget_get_visible (window))

View File

@@ -63,11 +63,15 @@ unit_to (graphene_point3d_t *p1,
graphene_matrix_multiply (&s, &u, m);
}
/* Make a 4x4 matrix that maps
/* Compute a 4x4 matrix m that maps
* p1 -> q1
* p2 -> q2
* p3 -> q3
* p4 -> q4
*
* This is not in general possible, because projective
* transforms preserve coplanarity. But in the cases we
* care about here, both sets of points are always coplanar.
*/
void
perspective_3d (graphene_point3d_t *p1,

View File

@@ -11,6 +11,20 @@
#define MAX_ITERATION_COUNT 30
/* Perform Householder reduction to bidiagonal form
*
* Input: Matrix A of size nrows x ncols
*
* Output: Matrices and vectors such that
* A = U*Bidiag(diagonal, superdiagonal)*Vt
*
* All matrices are allocated by the caller
*
* Sizes:
* A, U: nrows x ncols
* diagonal, superdiagonal: ncols
* V: ncols x ncols
*/
static void
householder_reduction (double *A,
int nrows,
@@ -160,6 +174,20 @@ householder_reduction (double *A,
}
}
/* Perform Givens reduction
*
* Input: Matrices such that
* A = U*Bidiag(diagonal,superdiagonal)*Vt
*
* Output: The same, with superdiagonal = 0
*
* All matrices are allocated by the caller
*
* Sizes:
* U: nrows x ncols
* diagonal, superdiagonal: ncols
* V: ncols x ncols
*/
static int
givens_reduction (int nrows,
int ncols,
@@ -298,6 +326,11 @@ givens_reduction (int nrows,
return 0;
}
/* Given a singular value decomposition
* of an nrows x ncols matrix A = U*Diag(S)*Vt,
* sort the values of S by decreasing value,
* permuting V to match.
*/
static void
sort_singular_values (int nrows,
int ncols,
@@ -339,6 +372,16 @@ sort_singular_values (int nrows,
}
}
/* Compute a singular value decomposition of A,
* A = U*Diag(S)*Vt
*
* All matrices are allocated by the caller
*
* Sizes:
* A, U: nrows x ncols
* S: ncols
* V: ncols x ncols
*/
int
singular_value_decomposition (double *A,
int nrows,
@@ -364,6 +407,18 @@ singular_value_decomposition (double *A,
return 0;
}
/*
* Given a singular value decomposition of A = U*Diag(S)*Vt,
* compute the best approximation x to A*x = B.
*
* All matrices are allocated by the caller
*
* Sizes:
* U: nrows x ncols
* S: ncols
* V: ncols x ncols
* B, x: ncols
*/
void
singular_value_decomposition_solve (double *U,
double *S,

View File

@@ -594,6 +594,8 @@ void
gsk_gl_driver_create_render_target (GskGLDriver *self,
int width,
int height,
int min_filter,
int mag_filter,
int *out_texture_id,
int *out_render_target_id)
{
@@ -604,7 +606,7 @@ gsk_gl_driver_create_render_target (GskGLDriver *self,
texture = create_texture (self, width, height);
gsk_gl_driver_bind_source_texture (self, texture->texture_id);
gsk_gl_driver_init_texture_empty (self, texture->texture_id, GL_NEAREST, GL_NEAREST);
gsk_gl_driver_init_texture_empty (self, texture->texture_id, min_filter, mag_filter);
glGenFramebuffers (1, &fbo_id);
glBindFramebuffer (GL_FRAMEBUFFER, fbo_id);

View File

@@ -45,6 +45,8 @@ int gsk_gl_driver_create_texture (GskGLDriver *driver
void gsk_gl_driver_create_render_target (GskGLDriver *driver,
int width,
int height,
int min_filter,
int mag_filter,
int *out_texture_id,
int *out_render_target_id);
void gsk_gl_driver_mark_texture_permanent (GskGLDriver *self,

View File

@@ -71,6 +71,7 @@ typedef enum
RESET_OPACITY = 1 << 2,
DUMP_FRAMEBUFFER = 1 << 3,
NO_CACHE_PLZ = 1 << 5,
LINEAR_FILTER = 1 << 6,
} OffscreenFlags;
static inline void
@@ -1000,6 +1001,38 @@ render_texture_node (GskGLRenderer *self,
}
}
/* Returns TRUE is applying transform to bounds
* yields an axis-aligned rectangle
*/
static gboolean
result_is_axis_aligned (GskTransform *transform,
const graphene_rect_t *bounds)
{
graphene_matrix_t m;
graphene_quad_t q;
graphene_rect_t b;
graphene_point_t b1, b2;
const graphene_point_t *p;
int i;
gsk_transform_to_matrix (transform, &m);
gsk_matrix_transform_rect (&m, bounds, &q);
graphene_quad_bounds (&q, &b);
graphene_rect_get_top_left (&b, &b1);
graphene_rect_get_bottom_right (&b, &b2);
for (i = 0; i < 4; i++)
{
p = graphene_quad_get_point (&q, i);
if (fabs (p->x - b1.x) > FLT_EPSILON && fabs (p->x - b2.x) > FLT_EPSILON)
return FALSE;
if (fabs (p->y - b1.y) > FLT_EPSILON && fabs (p->y - b2.y) > FLT_EPSILON)
return FALSE;
}
return TRUE;
}
static inline void
render_transform_node (GskGLRenderer *self,
GskRenderNode *node,
@@ -1035,11 +1068,10 @@ render_transform_node (GskGLRenderer *self,
}
break;
case GSK_TRANSFORM_CATEGORY_UNKNOWN:
case GSK_TRANSFORM_CATEGORY_ANY:
case GSK_TRANSFORM_CATEGORY_3D:
case GSK_TRANSFORM_CATEGORY_2D:
default:
case GSK_TRANSFORM_CATEGORY_3D:
case GSK_TRANSFORM_CATEGORY_ANY:
case GSK_TRANSFORM_CATEGORY_UNKNOWN:
{
TextureRegion region;
gboolean is_offscreen;
@@ -1050,29 +1082,42 @@ render_transform_node (GskGLRenderer *self,
gsk_gl_renderer_add_render_ops (self, child, builder);
ops_pop_modelview (builder);
}
else if (add_offscreen_ops (self, builder,
else
{
int filter_flag = 0;
if (!result_is_axis_aligned (node_transform, &child->bounds))
filter_flag = LINEAR_FILTER;
if (add_offscreen_ops (self, builder,
&child->bounds,
child,
&region, &is_offscreen,
RESET_CLIP | RESET_OPACITY))
{
/* For non-trivial transforms, we draw everything on a texture and then
* draw the texture transformed. */
/* TODO: We should compute a modelview containing only the "non-trivial"
* part (e.g. the rotation) and use that. We want to keep the scale
* for the texture.
*/
ops_push_modelview (builder, node_transform);
ops_set_texture (builder, region.texture_id);
ops_set_program (builder, &self->programs->blit_program);
RESET_CLIP | RESET_OPACITY | filter_flag))
{
/* For non-trivial transforms, we draw everything on a texture and then
* draw the texture transformed. */
/* TODO: We should compute a modelview containing only the "non-trivial"
* part (e.g. the rotation) and use that. We want to keep the scale
* for the texture.
*/
ops_push_modelview (builder, node_transform);
ops_set_texture (builder, region.texture_id);
ops_set_program (builder, &self->programs->blit_program);
load_vertex_data_with_region (ops_draw (builder, NULL),
child, builder,
&region,
is_offscreen);
ops_pop_modelview (builder);
load_vertex_data_with_region (ops_draw (builder, NULL),
child, builder,
&region,
is_offscreen);
ops_pop_modelview (builder);
}
}
}
break;
default:
g_assert_not_reached ();
break;
}
}
@@ -1451,10 +1496,12 @@ blur_texture (GskGLRenderer *self,
gsk_gl_driver_create_render_target (self->gl_driver,
texture_to_blur_width, texture_to_blur_height,
GL_NEAREST, GL_NEAREST,
&pass1_texture_id, &pass1_render_target);
gsk_gl_driver_create_render_target (self->gl_driver,
texture_to_blur_width, texture_to_blur_height,
GL_NEAREST, GL_NEAREST,
&pass2_texture_id, &pass2_render_target);
graphene_matrix_init_ortho (&item_proj,
@@ -1696,6 +1743,7 @@ render_inset_shadow_node (GskGLRenderer *self,
gsk_gl_driver_create_render_target (self->gl_driver,
texture_width, texture_height,
GL_NEAREST, GL_NEAREST,
&texture_id, &render_target);
graphene_matrix_init_ortho (&item_proj,
@@ -1869,7 +1917,9 @@ render_outset_shadow_node (GskGLRenderer *self,
graphene_rect_t prev_viewport;
graphene_matrix_t item_proj;
gsk_gl_driver_create_render_target (self->gl_driver, texture_width, texture_height,
gsk_gl_driver_create_render_target (self->gl_driver,
texture_width, texture_height,
GL_NEAREST, GL_NEAREST,
&texture_id, &render_target);
if (gdk_gl_context_has_debug (self->gl_context))
{
@@ -3349,6 +3399,7 @@ add_offscreen_ops (GskGLRenderer *self,
float prev_opacity = 1.0;
int texture_id = 0;
int max_texture_size;
int filter;
if (node_is_invisible (child_node))
{
@@ -3401,7 +3452,14 @@ add_offscreen_ops (GskGLRenderer *self,
width = ceilf (width * scale);
height = ceilf (height * scale);
gsk_gl_driver_create_render_target (self->gl_driver, width, height, &texture_id, &render_target);
if (flags & LINEAR_FILTER)
filter = GL_LINEAR;
else
filter = GL_NEAREST;
gsk_gl_driver_create_render_target (self->gl_driver,
width, height,
filter, filter,
&texture_id, &render_target);
if (gdk_gl_context_has_debug (self->gl_context))
{
gdk_gl_context_label_object_printf (self->gl_context, GL_TEXTURE, texture_id,

View File

@@ -510,6 +510,7 @@ get_renderer_for_name (const char *renderer_name)
#endif
g_print (" cairo - Use the Cairo fallback renderer\n");
g_print (" opengl - Use the default OpenGL renderer\n");
g_print (" gl - Same as opengl\n");
#ifdef GDK_RENDERING_VULKAN
g_print (" vulkan - Use the Vulkan renderer\n");
#else
@@ -636,11 +637,10 @@ gsk_renderer_new_for_surface (GdkSurface *surface)
return renderer;
}
GSK_RENDERER_NOTE (renderer, RENDERER,
g_message ("Failed to realize renderer of type '%s' for surface '%s': %s\n",
G_OBJECT_TYPE_NAME (renderer),
G_OBJECT_TYPE_NAME (surface),
error->message));
g_message ("Failed to realize renderer of type '%s' for surface '%s': %s\n",
G_OBJECT_TYPE_NAME (renderer),
G_OBJECT_TYPE_NAME (surface),
error->message);
g_object_unref (renderer);
g_clear_error (&error);
}

View File

@@ -2204,13 +2204,11 @@ gsk_matrix_transform_point3d (const graphene_matrix_t *m,
}
void
gsk_matrix_transform_bounds (const graphene_matrix_t *m,
const graphene_rect_t *r,
graphene_rect_t *res)
gsk_matrix_transform_rect (const graphene_matrix_t *m,
const graphene_rect_t *r,
graphene_quad_t *res)
{
graphene_point_t ret[4];
float min_x, min_y;
float max_x, max_y;
graphene_rect_t rr;
graphene_rect_normalize_r (r, &rr);
@@ -2233,12 +2231,15 @@ gsk_matrix_transform_bounds (const graphene_matrix_t *m,
#undef TRANSFORM_POINT
/* FIXME: graphene doesn't export a fast way to do this */
min_x = MIN (MIN (ret[0].x, ret[1].x), MIN (ret[2].x, ret[3].x));
min_y = MIN (MIN (ret[0].y, ret[1].y), MIN (ret[2].y, ret[3].y));
max_x = MAX (MAX (ret[0].x, ret[1].x), MAX (ret[2].x, ret[3].x));
max_y = MAX (MAX (ret[0].y, ret[1].y), MAX (ret[2].y, ret[3].y));
graphene_rect_init (res, min_x, min_y, max_x - min_x, max_y - min_y);
graphene_quad_init (res, &ret[0], &ret[1], &ret[2], &ret[3]);
}
void
gsk_matrix_transform_bounds (const graphene_matrix_t *m,
const graphene_rect_t *r,
graphene_rect_t *res)
{
graphene_quad_t q;
gsk_matrix_transform_rect (m, r, &q);
graphene_quad_bounds (&q, res);
}

View File

@@ -41,7 +41,9 @@ void gsk_matrix_transform_point3d (const graphene_matrix_t *m,
void gsk_matrix_transform_bounds (const graphene_matrix_t *m,
const graphene_rect_t *r,
graphene_rect_t *res);
void gsk_matrix_transform_rect (const graphene_matrix_t *m,
const graphene_rect_t *r,
graphene_quad_t *res);
G_END_DECLS

View File

@@ -205,6 +205,7 @@
#include <gtk/gtkrecentmanager.h>
#include <gtk/gtkrender.h>
#include <gtk/gtkrevealer.h>
#include <gtk/gtkreverselistmodel.h>
#include <gtk/gtkroot.h>
#include <gtk/gtkscale.h>
#include <gtk/gtkscalebutton.h>

View File

@@ -2042,6 +2042,8 @@ text_buffer_new (GtkAboutDialog *about,
gtk_text_buffer_get_end_iter (buffer, &end_iter);
gtk_text_buffer_apply_tag (buffer, tag, &start_iter, &end_iter);
gtk_text_buffer_set_enable_undo (buffer, FALSE);
return buffer;
}

View File

@@ -58,10 +58,9 @@
* separators between the rows or columns.
*
* GtkColumnView allows the user to select items according to the selection
* characteristics of the model. If the provided model is not a #GtkSelectionModel,
* GtkColumnView will wrap it in a #GtkSingleSelection. For models that allow
* multiple selected items, it is possible to turn on *rubberband selection*,
* using #GtkColumnView:enable-rubberband.
* characteristics of the model. For models that allow multiple selected items,
* it is possible to turn on *rubberband selection*, using
* #GtkColumnView:enable-rubberband.
*
* The column view supports sorting that can be customized by the user by
* clicking on column headers. To set this up, the #GtkSorter returned by

View File

@@ -909,7 +909,7 @@ gtk_drop_down_get_enable_search (GtkDropDown *self)
*
* Sets the expression that gets evaluated to obtain strings from items
* when searching in the popup. The expression must have a value type of
* #GTK_TYPE_STRING.
* #G_TYPE_STRING.
*/
void
gtk_drop_down_set_expression (GtkDropDown *self,

View File

@@ -55,10 +55,9 @@
* grid reflows vertically or horizontally.
*
* GtkGridView allows the user to select items according to the selection
* characteristics of the model. If the provided model is not a #GtkSelectionModel,
* GtkGridView will wrap it in a #GtkSingleSelection. For models that allow
* multiple selected items, it is possible to turn on _rubberband selection_,
* using #GtkGridView:enable-rubberband.
* characteristics of the model. For models that allow multiple selected items,
* it is possible to turn on _rubberband selection_, using
* #GtkGridView:enable-rubberband.
*
* To learn more about the list widget framework, see the [overview](#ListWidget).
*

View File

@@ -54,10 +54,9 @@
* between the rows.
*
* GtkListView allows the user to select items according to the selection
* characteristics of the model. If the provided model is not a #GtkSelectionModel,
* GtkListView will wrap it in a #GtkSingleSelection. For models that allow
* multiple selected items, it is possible to turn on _rubberband selection_,
* using #GtkListView:enable-rubberband.
* characteristics of the model. For models that allow multiple selected items,
* it is possible to turn on _rubberband selection_, using
* #GtkListView:enable-rubberband.
*
* If you need multiple columns with headers, see #GtkColumnView.
*
@@ -95,7 +94,7 @@
* {
* GAppInfo *app_info;
*
* app_info = g_list_model_get_item (gtk_list_view_get_model (list), position);
* app_info = g_list_model_get_item (G_LIST_MODEL (gtk_list_view_get_model (list)), position);
* g_app_info_launch (app_info, NULL, NULL, NULL);
* g_object_unref (app_info);
* }
@@ -108,7 +107,7 @@
* g_signal_connect (factory, "setup", G_CALLBACK (setup_listitem_cb), NULL);
* g_signal_connect (factory, "bind", G_CALLBACK (bind_listitem_cb), NULL);
*
* list = gtk_list_view_new (model, factory);
* list = gtk_list_view_new (GTK_SELECTION_MODEL (gtk_single_selection_new (model)), factory);
*
* g_signal_connect (list, "activate", G_CALLBACK (activate_cb), NULL);
*

290
gtk/gtkreverselistmodel.c Normal file
View File

@@ -0,0 +1,290 @@
/*
* Copyright © 2020 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.1 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/>.
*
* Authors: Matthias Clasen
*/
#include "config.h"
#include "gtkreverselistmodel.h"
#include "gtkintl.h"
#include "gtkprivate.h"
/**
* SECTION:gtkreverselistmodel
* @title: GtkReverseListModel
* @short_description: A list model that reverses the order of a list model
* @see_also: #GListModel
*
* #GtkReverseListModel is a list model that takes a list model and reverses
* the order of that model.
*/
enum {
PROP_0,
PROP_MODEL,
NUM_PROPERTIES
};
struct _GtkReverseListModel
{
GObject parent_instance;
GListModel *model;
};
struct _GtkReverseListModelClass
{
GObjectClass parent_class;
};
static GParamSpec *properties[NUM_PROPERTIES] = { NULL, };
static GType
gtk_reverse_list_model_get_item_type (GListModel *list)
{
return G_TYPE_OBJECT;
}
static guint
gtk_reverse_list_model_get_n_items (GListModel *list)
{
GtkReverseListModel *self = GTK_REVERSE_LIST_MODEL (list);
if (self->model == NULL)
return 0;
return g_list_model_get_n_items (self->model);
}
static gpointer
gtk_reverse_list_model_get_item (GListModel *list,
guint position)
{
GtkReverseListModel *self = GTK_REVERSE_LIST_MODEL (list);
guint n_items;
if (self->model == NULL)
return NULL;
n_items = g_list_model_get_n_items (self->model);
if (position >= n_items)
return NULL;
return g_list_model_get_item (self->model, n_items - 1 - position);
}
static void
gtk_reverse_list_model_model_init (GListModelInterface *iface)
{
iface->get_item_type = gtk_reverse_list_model_get_item_type;
iface->get_n_items = gtk_reverse_list_model_get_n_items;
iface->get_item = gtk_reverse_list_model_get_item;
}
G_DEFINE_TYPE_WITH_CODE (GtkReverseListModel, gtk_reverse_list_model, G_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE (G_TYPE_LIST_MODEL, gtk_reverse_list_model_model_init))
static void
gtk_reverse_list_model_items_changed_cb (GListModel *model,
guint position,
guint removed,
guint added,
GtkReverseListModel *self)
{
guint n_items;
guint position_before;
n_items = g_list_model_get_n_items (model);
position_before = (n_items - added + removed) - 1 - (position + removed - 1);
g_list_model_items_changed (G_LIST_MODEL (self), position_before, removed, added);
}
static void
gtk_reverse_list_model_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
GtkReverseListModel *self = GTK_REVERSE_LIST_MODEL (object);
switch (prop_id)
{
case PROP_MODEL:
gtk_reverse_list_model_set_model (self, g_value_get_object (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
gtk_reverse_list_model_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
GtkReverseListModel *self = GTK_REVERSE_LIST_MODEL (object);
switch (prop_id)
{
case PROP_MODEL:
g_value_set_object (value, self->model);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
gtk_reverse_list_model_clear_model (GtkReverseListModel *self)
{
if (self->model == NULL)
return;
g_signal_handlers_disconnect_by_func (self->model, gtk_reverse_list_model_items_changed_cb, self);
g_clear_object (&self->model);
}
static void
gtk_reverse_list_model_dispose (GObject *object)
{
GtkReverseListModel *self = GTK_REVERSE_LIST_MODEL (object);
gtk_reverse_list_model_clear_model (self);
G_OBJECT_CLASS (gtk_reverse_list_model_parent_class)->dispose (object);
};
static void
gtk_reverse_list_model_class_init (GtkReverseListModelClass *class)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (class);
gobject_class->set_property = gtk_reverse_list_model_set_property;
gobject_class->get_property = gtk_reverse_list_model_get_property;
gobject_class->dispose = gtk_reverse_list_model_dispose;
/**
* GtkReverseListModel:model:
*
* Child model to revert
*/
properties[PROP_MODEL] =
g_param_spec_object ("model",
P_("Model"),
P_("Child model to revert"),
G_TYPE_LIST_MODEL,
GTK_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
g_object_class_install_properties (gobject_class, NUM_PROPERTIES, properties);
}
static void
gtk_reverse_list_model_init (GtkReverseListModel *self)
{
}
/**
* gtk_reverse_list_model_new:
* @model: (transfer full) (allow-none): The model to use, or %NULL
*
* Creates a new model that presents the items from @model
* in reverse order
*
* Returns: A new #GtkReverseListModel
**/
GtkReverseListModel *
gtk_reverse_list_model_new (GListModel *model)
{
GtkReverseListModel *self;
g_return_val_if_fail (model == NULL || G_IS_LIST_MODEL (model), NULL);
self = g_object_new (GTK_TYPE_REVERSE_LIST_MODEL,
"model", model,
NULL);
/* consume the reference */
g_clear_object (&model);
return self;
}
/**
* gtk_reverse_list_model_set_model:
* @self: a #GtkReverseListModel
* @model: (allow-none): The model to be sliced
*
* Sets the model to revert. The model's item type must conform
* to @self's item type.
*
**/
void
gtk_reverse_list_model_set_model (GtkReverseListModel *self,
GListModel *model)
{
guint removed, added;
g_return_if_fail (GTK_IS_REVERSE_LIST_MODEL (self));
g_return_if_fail (model == NULL || G_IS_LIST_MODEL (model));
if (self->model == model)
return;
removed = g_list_model_get_n_items (G_LIST_MODEL (self));
gtk_reverse_list_model_clear_model (self);
if (model)
{
self->model = g_object_ref (model);
g_signal_connect (model, "items-changed", G_CALLBACK (gtk_reverse_list_model_items_changed_cb), self);
added = g_list_model_get_n_items (G_LIST_MODEL (self));
}
else
{
added = 0;
}
if (removed > 0 || added > 0)
g_list_model_items_changed (G_LIST_MODEL (self), 0, removed, added);
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_MODEL]);
}
/**
* gtk_reverse_list_model_get_model:
* @self: a #GtkReverseListModel
*
* Gets the model that is currently being used or %NULL if none.
*
* Returns: (nullable) (transfer none): The model in use
**/
GListModel *
gtk_reverse_list_model_get_model (GtkReverseListModel *self)
{
g_return_val_if_fail (GTK_IS_REVERSE_LIST_MODEL (self), NULL);
return self->model;
}

50
gtk/gtkreverselistmodel.h Normal file
View File

@@ -0,0 +1,50 @@
/*
* Copyright © 2020 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.1 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/>.
*
* Authors: Matthias Clasen
*/
#ifndef __GTK_REVERSE_LIST_MODEL_H__
#define __GTK_REVERSE_LIST_MODEL_H__
#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
#error "Only <gtk/gtk.h> can be included directly."
#endif
#include <gio/gio.h>
#include <gtk/gtkwidget.h>
G_BEGIN_DECLS
#define GTK_TYPE_REVERSE_LIST_MODEL (gtk_reverse_list_model_get_type ())
GDK_AVAILABLE_IN_ALL
G_DECLARE_FINAL_TYPE (GtkReverseListModel, gtk_reverse_list_model, GTK, REVERSE_LIST_MODEL, GObject)
GDK_AVAILABLE_IN_ALL
GtkReverseListModel * gtk_reverse_list_model_new (GListModel *model);
GDK_AVAILABLE_IN_ALL
void gtk_reverse_list_model_set_model (GtkReverseListModel *self,
GListModel *model);
GDK_AVAILABLE_IN_ALL
GListModel * gtk_reverse_list_model_get_model (GtkReverseListModel *self);
G_END_DECLS
#endif /* __GTK_REVERSE_LIST_MODEL_H__ */

View File

@@ -2910,6 +2910,16 @@ dnd_finished_cb (GdkDrag *drag,
priv->drag = NULL;
}
static void
dnd_cancel_cb (GdkDrag *drag,
GdkDragCancelReason reason,
GtkText *self)
{
GtkTextPrivate *priv = gtk_text_get_instance_private (self);
priv->drag = NULL;
}
static void
gtk_text_drag_gesture_update (GtkGestureDrag *gesture,
double offset_x,
@@ -2973,9 +2983,12 @@ gtk_text_drag_gesture_update (GtkGestureDrag *gesture,
g_object_unref (content);
g_signal_connect (drag, "dnd-finished", G_CALLBACK (dnd_finished_cb), self);
g_signal_connect (drag, "cancel", G_CALLBACK (dnd_cancel_cb), self);
paintable = gtk_text_util_create_drag_icon (widget, text, -1);
gtk_drag_icon_set_from_paintable (drag, paintable, ranges[0], 0);
gtk_drag_icon_set_from_paintable (drag, paintable,
(priv->drag_start_x - ranges[0]),
priv->drag_start_y);
g_clear_object (&paintable);
priv->drag = drag;
@@ -2986,6 +2999,9 @@ gtk_text_drag_gesture_update (GtkGestureDrag *gesture,
g_free (text);
priv->in_drag = FALSE;
/* Deny the gesture so we don't get further updates */
gtk_gesture_set_state (priv->drag_gesture, GTK_EVENT_SEQUENCE_DENIED);
}
}
else

View File

@@ -1037,6 +1037,8 @@ gtk_text_history_set_enabled (GtkTextHistory *self,
clear_action_queue (&self->undo_queue);
clear_action_queue (&self->redo_queue);
}
gtk_text_history_update_state (self);
}
}

View File

@@ -7188,11 +7188,11 @@ selection_data_free (SelectionData *data)
static gboolean
drag_gesture_get_text_surface_coords (GtkGestureDrag *gesture,
GtkTextView *text_view,
int *start_x,
int *start_y,
int *x,
int *y)
GtkTextView *text_view,
int *start_x,
int *start_y,
int *x,
int *y)
{
double sx, sy, ox, oy;
@@ -7262,6 +7262,10 @@ gtk_text_view_drag_gesture_update (GtkGestureDrag *gesture,
gtk_text_view_start_selection_dnd (text_view, &iter, event,
start_x, start_y);
/* Deny the gesture so we don't get further updates */
gtk_gesture_set_state (text_view->priv->drag_gesture,
GTK_EVENT_SEQUENCE_DENIED);
return;
}
else
@@ -7275,6 +7279,8 @@ gtk_text_view_drag_gesture_update (GtkGestureDrag *gesture,
return;
}
g_assert (data != NULL);
/* Text selection */
if (data->granularity == SELECT_CHARACTERS)
{
@@ -7782,6 +7788,14 @@ dnd_finished_cb (GdkDrag *drag,
self->priv->drag = NULL;
}
static void
dnd_cancel_cb (GdkDrag *drag,
GdkDragCancelReason reason,
GtkTextView *self)
{
self->priv->drag = NULL;
}
static void
gtk_text_view_start_selection_dnd (GtkTextView *text_view,
const GtkTextIter *iter,
@@ -7808,9 +7822,11 @@ gtk_text_view_start_selection_dnd (GtkTextView *text_view,
surface = gdk_event_get_surface (event);
device = gdk_event_get_device (event);
drag = gdk_drag_begin (surface, device, content, actions, x, y);
g_object_unref (content);
g_signal_connect (drag, "dnd-finished", G_CALLBACK (dnd_finished_cb), text_view);
g_signal_connect (drag, "cancel", G_CALLBACK (dnd_cancel_cb), text_view);
if (gtk_text_buffer_get_selection_bounds (buffer, &start, &end))
{

View File

@@ -817,6 +817,13 @@ add_seat (GtkInspectorGeneral *gen,
g_list_free (list);
}
static void
disconnect_seat (GtkInspectorGeneral *gen,
GdkSeat *seat)
{
g_signal_handlers_disconnect_by_func (seat, G_CALLBACK (populate_seats), gen);
}
static void
populate_seats (GtkInspectorGeneral *gen)
{
@@ -835,11 +842,28 @@ populate_seats (GtkInspectorGeneral *gen)
g_list_free (list);
}
static void
seat_added (GdkDisplay *display,
GdkSeat *seat,
GtkInspectorGeneral *gen)
{
populate_seats (gen);
}
static void
seat_removed (GdkDisplay *display,
GdkSeat *seat,
GtkInspectorGeneral *gen)
{
disconnect_seat (gen, seat);
populate_seats (gen);
}
static void
init_device (GtkInspectorGeneral *gen)
{
g_signal_connect_swapped (gen->display, "seat-added", G_CALLBACK (populate_seats), gen);
g_signal_connect_swapped (gen->display, "seat-removed", G_CALLBACK (populate_seats), gen);
g_signal_connect (gen->display, "seat-added", G_CALLBACK (seat_added), gen);
g_signal_connect (gen->display, "seat-removed", G_CALLBACK (seat_removed), gen);
populate_seats (gen);
}
@@ -911,9 +935,18 @@ static void
gtk_inspector_general_dispose (GObject *object)
{
GtkInspectorGeneral *gen = GTK_INSPECTOR_GENERAL (object);
GList *list, *l;
g_clear_pointer (&gen->swin, gtk_widget_unparent);
g_signal_handlers_disconnect_by_func (gen->display, G_CALLBACK (seat_added), gen);
g_signal_handlers_disconnect_by_func (gen->display, G_CALLBACK (seat_removed), gen);
list = gdk_display_list_seats (gen->display);
for (l = list; l; l = l->next)
disconnect_seat (gen, GDK_SEAT (l->data));
g_list_free (list);
G_OBJECT_CLASS (gtk_inspector_general_parent_class)->dispose (object);
}

View File

@@ -340,6 +340,7 @@ gtk_public_sources = files([
'gtkrendericon.c',
'gtkrendernodepaintable.c',
'gtkrevealer.c',
'gtkreverselistmodel.c',
'gtkroot.c',
'gtknative.c',
'gtkroundedbox.c',

View File

@@ -7,7 +7,7 @@
# Josep Puigdemont <josep.puigdemont@gmail.com>, 2005, 2006.
# David Planella <david.planella@gmail.com>, 2008, 2009, 2010.
# Jordi Serratosa <jordis@softcatala.cat>, 2012.
# Gil Forcada <gilforcada@guifi.net>, 2011-2014.
# Gil Forcada <gilforcada@guifi.net>, 2011-2020.
# Benet R.i Camps <benny@softcatala.org>, 2015
# Jordi Mas <jmas@softcatala.org>, 2015-2020
#
@@ -40,16 +40,16 @@ msgid ""
msgstr ""
"Project-Id-Version: gtk+ 2.3.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-27 00:10+0000\n"
"PO-Revision-Date: 2020-07-26 20:32+0200\n"
"Last-Translator: Jordi Serratosa <jordis@softcatala.cat>\n"
"POT-Creation-Date: 2020-09-06 13:26+0000\n"
"PO-Revision-Date: 2020-09-07 09:24+0200\n"
"Last-Translator: Gil Forcada <gilforcada@guifi.net>\n"
"Language-Team: Catalan <tradgnome@softcatala.org>\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Poedit 2.4\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"X-Generator: Gtranslator 3.36.0\n"
#: gdk/gdkapplaunchcontext.c:133 gdk/gdkdrawcontext.c:155 gdk/gdkseat.c:201
#: gdk/gdkseat.c:202 gdk/gdksurface.c:508 gdk/gdksurface.c:509
@@ -679,11 +679,11 @@ msgstr "Finestra activa"
msgid "The window which most recently had focus"
msgstr "L'última finestra que ha tingut el focus"
#: gtk/gtkapplicationwindow.c:677
#: gtk/gtkapplicationwindow.c:684
msgid "Show a menubar"
msgstr "Mostra la barra de menú"
#: gtk/gtkapplicationwindow.c:678
#: gtk/gtkapplicationwindow.c:685
msgid "TRUE if the window should show a menubar at the top of the window"
msgstr ""
"«TRUE» (cert) si la finestra hauria de mostrar una barra de menú a dalt de "
@@ -721,7 +721,7 @@ msgstr "Obeeix el fill"
msgid "Force aspect ratio to match that of the frames child"
msgstr "Força la proporció perquè coincideixi amb el marc del fill"
#: gtk/gtkaspectframe.c:173 gtk/gtkbutton.c:252 gtk/gtkcombobox.c:782
#: gtk/gtkaspectframe.c:173 gtk/gtkbutton.c:256 gtk/gtkcombobox.c:782
#: gtk/gtkdragicon.c:372 gtk/gtkexpander.c:366 gtk/gtkflowbox.c:509
#: gtk/gtkframe.c:191 gtk/gtklistbox.c:3467 gtk/gtklistitem.c:185
#: gtk/gtknotebook.c:567 gtk/gtkoverlay.c:319 gtk/gtkpopover.c:1670
@@ -731,7 +731,7 @@ msgstr "Força la proporció perquè coincideixi amb el marc del fill"
msgid "Child"
msgstr "Fill"
#: gtk/gtkaspectframe.c:174 gtk/gtkbutton.c:253 gtk/gtkexpander.c:367
#: gtk/gtkaspectframe.c:174 gtk/gtkbutton.c:257 gtk/gtkexpander.c:367
#: gtk/gtkflowbox.c:510 gtk/gtkframe.c:192 gtk/gtklistbox.c:3468
#: gtk/gtkoverlay.c:320 gtk/gtkpopover.c:1671 gtk/gtkrevealer.c:353
#: gtk/gtkscrolledwindow.c:757 gtk/gtksearchbar.c:325 gtk/gtkviewport.c:381
@@ -918,24 +918,24 @@ msgstr "recurs que conté la definició de la IU"
msgid "scope to use when instantiating listitems"
msgstr "àmbit a usar quan s'instancia la llista d'elements"
#: gtk/gtkbutton.c:224 gtk/gtkexpander.c:320 gtk/gtkframe.c:169
#: gtk/gtklabel.c:744 gtk/gtkmenubutton.c:399
#: gtk/gtkbutton.c:228 gtk/gtkcheckbutton.c:472 gtk/gtkexpander.c:320
#: gtk/gtkframe.c:169 gtk/gtklabel.c:744 gtk/gtkmenubutton.c:399
msgid "Label"
msgstr "Etiqueta"
#: gtk/gtkbutton.c:225
#: gtk/gtkbutton.c:229 gtk/gtkcheckbutton.c:473
msgid ""
"Text of the label widget inside the button, if the button contains a label "
"widget"
msgstr "Text de l'etiqueta dins del botó, si el botó conté una etiqueta"
#: gtk/gtkbutton.c:231 gtk/gtkexpander.c:328 gtk/gtklabel.c:765
#: gtk/gtkmenubutton.c:406 gtk/gtkstack.c:383
#: gtk/gtkbutton.c:235 gtk/gtkcheckbutton.c:486 gtk/gtkexpander.c:328
#: gtk/gtklabel.c:765 gtk/gtkmenubutton.c:406 gtk/gtkstack.c:383
msgid "Use underline"
msgstr "Utilitza subratllat"
#: gtk/gtkbutton.c:232 gtk/gtkexpander.c:329 gtk/gtklabel.c:766
#: gtk/gtkmenubutton.c:407
#: gtk/gtkbutton.c:236 gtk/gtkcheckbutton.c:487 gtk/gtkexpander.c:329
#: gtk/gtklabel.c:766 gtk/gtkmenubutton.c:407
msgid ""
"If set, an underline in the text indicates the next character should be used "
"for the mnemonic accelerator key"
@@ -943,21 +943,21 @@ msgstr ""
"Si s'habilita, un subratllat en el text indica que el caràcter següent "
"s'hauria d'utilitzar per a la tecla de drecera"
#: gtk/gtkbutton.c:238 gtk/gtkcombobox.c:669 gtk/gtkentry.c:469
#: gtk/gtkbutton.c:242 gtk/gtkcombobox.c:669 gtk/gtkentry.c:469
#: gtk/gtkscrolledwindow.c:638
msgid "Has Frame"
msgstr "Té marc"
#: gtk/gtkbutton.c:239 gtk/gtkmenubutton.c:414
#: gtk/gtkbutton.c:243 gtk/gtkmenubutton.c:414
msgid "Whether the button has a frame"
msgstr "Si el botó té un marc"
#: gtk/gtkbutton.c:245 gtk/gtkcellrendererpixbuf.c:209 gtk/gtkimage.c:211
#: gtk/gtkbutton.c:249 gtk/gtkcellrendererpixbuf.c:209 gtk/gtkimage.c:211
#: gtk/gtkmenubutton.c:392 gtk/gtkprinter.c:170 gtk/gtkwindow.c:822
msgid "Icon Name"
msgstr "Nom de la icona"
#: gtk/gtkbutton.c:246 gtk/gtkmenubutton.c:393
#: gtk/gtkbutton.c:250 gtk/gtkmenubutton.c:393
msgid "The name of the icon used to automatically populate the button"
msgstr ""
"El nom de la icona que s'utilitza automàticament per a emplenar el botó"
@@ -1427,8 +1427,9 @@ msgstr "Dígits"
msgid "The number of decimal places to display"
msgstr "El nombre de decimals a mostrar"
#: gtk/gtkcellrendererspinner.c:138 gtk/gtkmodelbutton.c:1130
#: gtk/gtkmodelbutton.c:1131 gtk/gtkswitch.c:528 gtk/gtktogglebutton.c:208
#: gtk/gtkcellrendererspinner.c:138 gtk/gtkcheckbutton.c:460
#: gtk/gtkmodelbutton.c:1130 gtk/gtkmodelbutton.c:1131 gtk/gtkswitch.c:528
#: gtk/gtktogglebutton.c:260
msgid "Active"
msgstr "Actiu"
@@ -1892,19 +1893,24 @@ msgstr "Model ajustat"
msgid "Whether to request enough space for every row in the model"
msgstr "Si s'ha de demanar l'espai necessari per a cada fila del model"
#: gtk/gtkcheckbutton.c:223
msgid "Draw Indicator"
msgstr "Indicador de dibuix"
#: gtk/gtkcheckbutton.c:461 gtk/gtktogglebutton.c:261
msgid "If the toggle button should be pressed in"
msgstr "Si el botó de commutació ha d'estar premut cap endins"
#: gtk/gtkcheckbutton.c:224
msgid "If the indicator part of the button is displayed"
msgstr "Si la part d'indicació del botó es visualitza"
#: gtk/gtkcheckbutton.c:466 gtk/gtktogglebutton.c:267
msgid "Group"
msgstr "Grup"
#: gtk/gtkcheckbutton.c:230
#: gtk/gtkcheckbutton.c:467
#| msgid "The radio button whose group this widget belongs to."
msgid "The check button whose group this widget belongs to."
msgstr "El botó de commutació al grup del qual pertany aquest giny."
#: gtk/gtkcheckbutton.c:479
msgid "Inconsistent"
msgstr "Inconsistent"
#: gtk/gtkcheckbutton.c:231
#: gtk/gtkcheckbutton.c:480
msgid "If the check button is in an “in between” state"
msgstr "Si el botó de commutació és en un estat «intermedi»"
@@ -4984,7 +4990,7 @@ msgstr "Paràmetres"
msgid "Printer settings"
msgstr "Paràmetres de la impressora"
#: gtk/gtkprintjob.c:171 gtk/gtkprintjob.c:172 gtk/gtkprintunixdialog.c:382
#: gtk/gtkprintjob.c:171 gtk/gtkprintjob.c:172 gtk/gtkprintunixdialog.c:381
msgid "Page Setup"
msgstr "Configuració de la pàgina"
@@ -5009,11 +5015,11 @@ msgstr "Configuració de la pàgina per defecte"
msgid "The GtkPageSetup used by default"
msgstr "El GtkPageSetup utilitzat per defecte"
#: gtk/gtkprintoperation.c:1093 gtk/gtkprintunixdialog.c:400
#: gtk/gtkprintoperation.c:1093 gtk/gtkprintunixdialog.c:399
msgid "Print Settings"
msgstr "Paràmetres de la impressora"
#: gtk/gtkprintoperation.c:1094 gtk/gtkprintunixdialog.c:401
#: gtk/gtkprintoperation.c:1094 gtk/gtkprintunixdialog.c:400
msgid "The GtkPrintSettings used for initializing the dialog"
msgstr "El GtkPrintSettings utilitzat per a inicialitzar el diàleg"
@@ -5033,11 +5039,11 @@ msgstr "Nombre de pàgines"
msgid "The number of pages in the document."
msgstr "El nombre de pàgines del document."
#: gtk/gtkprintoperation.c:1153 gtk/gtkprintunixdialog.c:390
#: gtk/gtkprintoperation.c:1153 gtk/gtkprintunixdialog.c:389
msgid "Current Page"
msgstr "Pàgina actual"
#: gtk/gtkprintoperation.c:1154 gtk/gtkprintunixdialog.c:391
#: gtk/gtkprintoperation.c:1154 gtk/gtkprintunixdialog.c:390
msgid "The current page in the document"
msgstr "La pàgina actual en el document"
@@ -5116,7 +5122,7 @@ msgstr "Etiqueta de pestanya personalitzada"
msgid "Label for the tab containing custom widgets."
msgstr "Etiqueta per a la pestanya que contingui ginys personalitzats."
#: gtk/gtkprintoperation.c:1330 gtk/gtkprintunixdialog.c:425
#: gtk/gtkprintoperation.c:1330 gtk/gtkprintunixdialog.c:424
msgid "Support Selection"
msgstr "Admet la selecció"
@@ -5126,7 +5132,7 @@ msgstr ""
"«TRUE» (cert) si l'operació d'impressió ha d'admetre la impressió de la "
"selecció."
#: gtk/gtkprintoperation.c:1345 gtk/gtkprintunixdialog.c:433
#: gtk/gtkprintoperation.c:1345 gtk/gtkprintunixdialog.c:432
msgid "Has Selection"
msgstr "Té selecció"
@@ -5134,11 +5140,11 @@ msgstr "Té selecció"
msgid "TRUE if a selection exists."
msgstr "«TRUE» (cert) si existeix una selecció."
#: gtk/gtkprintoperation.c:1359 gtk/gtkprintunixdialog.c:441
#: gtk/gtkprintoperation.c:1359 gtk/gtkprintunixdialog.c:440
msgid "Embed Page Setup"
msgstr "Incrusta la configuració de la pàgina"
#: gtk/gtkprintoperation.c:1360 gtk/gtkprintunixdialog.c:442
#: gtk/gtkprintoperation.c:1360 gtk/gtkprintunixdialog.c:441
msgid "TRUE if page setup combos are embedded in GtkPrintUnixDialog"
msgstr ""
"«TRUE» (cert) si els quadres combinats de la configuració de pàgina estan "
@@ -5152,31 +5158,31 @@ msgstr "Nombre de pàgines a imprimir"
msgid "The number of pages that will be printed."
msgstr "El nombre de pàgines que s'imprimiran."
#: gtk/gtkprintunixdialog.c:383
#: gtk/gtkprintunixdialog.c:382
msgid "The GtkPageSetup to use"
msgstr "El GtkPageSetup a utilitzar"
#: gtk/gtkprintunixdialog.c:408
#: gtk/gtkprintunixdialog.c:407
msgid "Selected Printer"
msgstr "Impressora seleccionada"
#: gtk/gtkprintunixdialog.c:409
#: gtk/gtkprintunixdialog.c:408
msgid "The GtkPrinter which is selected"
msgstr "La GtkPrinter seleccionada"
#: gtk/gtkprintunixdialog.c:416
#: gtk/gtkprintunixdialog.c:415
msgid "Manual Capabilities"
msgstr "Capacitats manuals"
#: gtk/gtkprintunixdialog.c:417
#: gtk/gtkprintunixdialog.c:416
msgid "Capabilities the application can handle"
msgstr "Capacitats que l'aplicació admet"
#: gtk/gtkprintunixdialog.c:426
#: gtk/gtkprintunixdialog.c:425
msgid "Whether the dialog supports selection"
msgstr "Si el diàleg admet la selecció"
#: gtk/gtkprintunixdialog.c:434
#: gtk/gtkprintunixdialog.c:433
msgid "Whether the application has a selection"
msgstr "Si l'aplicació té una selecció"
@@ -5234,14 +5240,6 @@ msgstr "Objecte"
msgid "The root object"
msgstr "L'objecte arrel"
#: gtk/gtkradiobutton.c:203
msgid "Group"
msgstr "Grup"
#: gtk/gtkradiobutton.c:204
msgid "The radio button whose group this widget belongs to."
msgstr "El botó de grup al grup del qual pertany aquest giny."
#: gtk/gtkrange.c:366
msgid "The GtkAdjustment that contains the current value of this range object"
msgstr "El GtkAdjustment que conté el valor actual d'aquest rang d'objectes"
@@ -7078,9 +7076,10 @@ msgstr "Tipus de finestra"
msgid "The GtkTextWindowType"
msgstr "El GtkTextWindowType"
#: gtk/gtktogglebutton.c:209
msgid "If the toggle button should be pressed in"
msgstr "Si el botó de commutació ha d'estar premut cap endins"
#: gtk/gtktogglebutton.c:268
#| msgid "The radio button whose group this widget belongs to."
msgid "The toggle button whose group this widget belongs to."
msgstr "El botó commutat al grup del qual pertany aquest giny."
#: gtk/gtktreeexpander.c:460
msgid "The child widget with the actual contents"
@@ -7898,6 +7897,12 @@ msgstr "Títol del perfil de color"
msgid "The title of the color profile to use"
msgstr "El títol del perfil de color a utilitzar"
#~ msgid "Draw Indicator"
#~ msgstr "Indicador de dibuix"
#~ msgid "If the indicator part of the button is displayed"
#~ msgstr "Si la part d'indicació del botó es visualitza"
#~ msgid "The text displayed next to the accelerator"
#~ msgstr "El text que es mostra al costat de l'accelerador"

File diff suppressed because it is too large Load Diff

View File

@@ -8,8 +8,8 @@
msgid ""
msgstr "Project-Id-Version: gtk+_properties master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-27 00:10+0000\n"
"PO-Revision-Date: 2020-08-30 10:00+0100\n"
"POT-Creation-Date: 2020-09-05 09:54+0000\n"
"PO-Revision-Date: 2020-09-06 10:00+0100\n"
"Last-Translator: Asier Sarasua Garmendia <asiersarasua@ni.eus>\n"
"Language-Team: Basque <librezale@librezale.eus>\n"
"Language: eu\n"
@@ -656,11 +656,11 @@ msgstr "Leiho aktiboa"
msgid "The window which most recently had focus"
msgstr "Azken aldian fokua daukan leihoa"
#: gtk/gtkapplicationwindow.c:677
#: gtk/gtkapplicationwindow.c:684
msgid "Show a menubar"
msgstr "Erakutsi menu-barra"
#: gtk/gtkapplicationwindow.c:678
#: gtk/gtkapplicationwindow.c:685
msgid "TRUE if the window should show a menubar at the top of the window"
msgstr "TRUE (egia) leihoak goian menu-barra erakutsi behar badu"
@@ -696,7 +696,7 @@ msgstr "Umeari obeditu"
msgid "Force aspect ratio to match that of the frames child"
msgstr "Behartu aspektu-erlazioa markoaren haurrarekin bat etor dadin"
#: gtk/gtkaspectframe.c:173 gtk/gtkbutton.c:252 gtk/gtkcombobox.c:782
#: gtk/gtkaspectframe.c:173 gtk/gtkbutton.c:256 gtk/gtkcombobox.c:782
#: gtk/gtkdragicon.c:372 gtk/gtkexpander.c:366 gtk/gtkflowbox.c:509
#: gtk/gtkframe.c:191 gtk/gtklistbox.c:3467 gtk/gtklistitem.c:185
#: gtk/gtknotebook.c:567 gtk/gtkoverlay.c:319 gtk/gtkpopover.c:1670
@@ -706,7 +706,7 @@ msgstr "Behartu aspektu-erlazioa markoaren haurrarekin bat etor dadin"
msgid "Child"
msgstr "Haurra"
#: gtk/gtkaspectframe.c:174 gtk/gtkbutton.c:253 gtk/gtkexpander.c:367
#: gtk/gtkaspectframe.c:174 gtk/gtkbutton.c:257 gtk/gtkexpander.c:367
#: gtk/gtkflowbox.c:510 gtk/gtkframe.c:192 gtk/gtklistbox.c:3468
#: gtk/gtkoverlay.c:320 gtk/gtkpopover.c:1671 gtk/gtkrevealer.c:353
#: gtk/gtkscrolledwindow.c:757 gtk/gtksearchbar.c:325 gtk/gtkviewport.c:381
@@ -895,44 +895,44 @@ msgstr "UI definizioa duen baliabidea"
msgid "scope to use when instantiating listitems"
msgstr "zerrenda-elementuak instantziatzean erabiliko den esparrua"
#: gtk/gtkbutton.c:224 gtk/gtkexpander.c:320 gtk/gtkframe.c:169
#: gtk/gtklabel.c:744 gtk/gtkmenubutton.c:399
#: gtk/gtkbutton.c:228 gtk/gtkcheckbutton.c:472 gtk/gtkexpander.c:320
#: gtk/gtkframe.c:169 gtk/gtklabel.c:744 gtk/gtkmenubutton.c:399
msgid "Label"
msgstr "Etiketa"
#: gtk/gtkbutton.c:225
#: gtk/gtkbutton.c:229 gtk/gtkcheckbutton.c:473
msgid ""
"Text of the label widget inside the button, if the button contains a label "
"widget"
msgstr "Etiketa-trepetaren testua botoi barruan, botoiak etiketa-trepeta badu"
#: gtk/gtkbutton.c:231 gtk/gtkexpander.c:328 gtk/gtklabel.c:765
#: gtk/gtkmenubutton.c:406 gtk/gtkstack.c:383
#: gtk/gtkbutton.c:235 gtk/gtkcheckbutton.c:486 gtk/gtkexpander.c:328
#: gtk/gtklabel.c:765 gtk/gtkmenubutton.c:406 gtk/gtkstack.c:383
msgid "Use underline"
msgstr "Erabili azpimarra"
#: gtk/gtkbutton.c:232 gtk/gtkexpander.c:329 gtk/gtklabel.c:766
#: gtk/gtkmenubutton.c:407
#: gtk/gtkbutton.c:236 gtk/gtkcheckbutton.c:487 gtk/gtkexpander.c:329
#: gtk/gtklabel.c:766 gtk/gtkmenubutton.c:407
msgid ""
"If set, an underline in the text indicates the next character should be used "
"for the mnemonic accelerator key"
msgstr "Ezartzen bada, testuko azpimarrak adierazten du hurrengo karakterea tekla bizkortzaile mnemoteknikorako erabili behar dela"
#: gtk/gtkbutton.c:238 gtk/gtkcombobox.c:669 gtk/gtkentry.c:469
#: gtk/gtkbutton.c:242 gtk/gtkcombobox.c:669 gtk/gtkentry.c:469
#: gtk/gtkscrolledwindow.c:638
msgid "Has Frame"
msgstr "Markoa dauka"
#: gtk/gtkbutton.c:239 gtk/gtkmenubutton.c:414
#: gtk/gtkbutton.c:243 gtk/gtkmenubutton.c:414
msgid "Whether the button has a frame"
msgstr "Botoiak markoa duen ala ez"
#: gtk/gtkbutton.c:245 gtk/gtkcellrendererpixbuf.c:209 gtk/gtkimage.c:211
#: gtk/gtkbutton.c:249 gtk/gtkcellrendererpixbuf.c:209 gtk/gtkimage.c:211
#: gtk/gtkmenubutton.c:392 gtk/gtkprinter.c:170 gtk/gtkwindow.c:822
msgid "Icon Name"
msgstr "Ikono-izena"
#: gtk/gtkbutton.c:246 gtk/gtkmenubutton.c:393
#: gtk/gtkbutton.c:250 gtk/gtkmenubutton.c:393
msgid "The name of the icon used to automatically populate the button"
msgstr "Ikonoaren izena botoia automatikoki betetzeko"
@@ -1400,8 +1400,9 @@ msgstr "Digituak"
msgid "The number of decimal places to display"
msgstr "Bistaratu beharreko dezimalen kopurua"
#: gtk/gtkcellrendererspinner.c:138 gtk/gtkmodelbutton.c:1130
#: gtk/gtkmodelbutton.c:1131 gtk/gtkswitch.c:528 gtk/gtktogglebutton.c:208
#: gtk/gtkcellrendererspinner.c:138 gtk/gtkcheckbutton.c:460
#: gtk/gtkmodelbutton.c:1130 gtk/gtkmodelbutton.c:1131 gtk/gtkswitch.c:528
#: gtk/gtktogglebutton.c:260
msgid "Active"
msgstr "Aktibo"
@@ -1863,22 +1864,26 @@ msgstr "Doitu eredua"
msgid "Whether to request enough space for every row in the model"
msgstr "Ereduan errenkada bakoitzarentzako nahiko leku eskatu edo ez"
#: gtk/gtkcheckbutton.c:223
msgid "Draw Indicator"
msgstr "Marrazki-adierazlea"
#: gtk/gtkcheckbutton.c:461 gtk/gtktogglebutton.c:261
msgid "If the toggle button should be pressed in"
msgstr "Txandakatze-botoiak sakatuta egon behar duen ala ez"
#: gtk/gtkcheckbutton.c:224
msgid "If the indicator part of the button is displayed"
msgstr "Botoiaren adierazle-zatia bistaratuta dagoen"
#: gtk/gtkcheckbutton.c:466 gtk/gtktogglebutton.c:267
msgid "Group"
msgstr "Taldea"
#: gtk/gtkcheckbutton.c:467
msgid "The check button whose group this widget belongs to."
msgstr "Trepeta honi dagokion taldearen kontrol-botoia."
#
#: gtk/gtkcheckbutton.c:230
#: gtk/gtkcheckbutton.c:479
msgid "Inconsistent"
msgstr "Sendotasunik gabea"
#: gtk/gtkcheckbutton.c:231
#: gtk/gtkcheckbutton.c:480
msgid "If the check button is in an “in between” state"
msgstr "Txandakatze-botoia “tarteko” egoeran dagoen"
msgstr "Kontrol-botoia “tarteko” egoeran dagoen"
#: gtk/gtkcolorbutton.c:158 gtk/gtkcolorchooser.c:83
msgid "Use alpha"
@@ -4921,7 +4926,7 @@ msgid "Printer settings"
msgstr "Inprimagailuaren ezarpenak"
#
#: gtk/gtkprintjob.c:171 gtk/gtkprintjob.c:172 gtk/gtkprintunixdialog.c:382
#: gtk/gtkprintjob.c:171 gtk/gtkprintjob.c:172 gtk/gtkprintunixdialog.c:381
msgid "Page Setup"
msgstr "Orrialdearen konfigurazioa"
@@ -4943,11 +4948,11 @@ msgstr "Orriaren konfigurazio lehenetsia"
msgid "The GtkPageSetup used by default"
msgstr "GtkPageSetup lehenespenez erabilita"
#: gtk/gtkprintoperation.c:1093 gtk/gtkprintunixdialog.c:400
#: gtk/gtkprintoperation.c:1093 gtk/gtkprintunixdialog.c:399
msgid "Print Settings"
msgstr "Inprimatze-ezarpenak"
#: gtk/gtkprintoperation.c:1094 gtk/gtkprintunixdialog.c:401
#: gtk/gtkprintoperation.c:1094 gtk/gtkprintunixdialog.c:400
msgid "The GtkPrintSettings used for initializing the dialog"
msgstr "GtkPrintSettings elkarrizketa-koadroa hasieratzeko erabilita"
@@ -4967,11 +4972,11 @@ msgstr "Orrialde kopurua"
msgid "The number of pages in the document."
msgstr "Dokumentuaren orrialde kopurua."
#: gtk/gtkprintoperation.c:1153 gtk/gtkprintunixdialog.c:390
#: gtk/gtkprintoperation.c:1153 gtk/gtkprintunixdialog.c:389
msgid "Current Page"
msgstr "Uneko orrialdea"
#: gtk/gtkprintoperation.c:1154 gtk/gtkprintunixdialog.c:391
#: gtk/gtkprintoperation.c:1154 gtk/gtkprintunixdialog.c:390
msgid "The current page in the document"
msgstr "Dokumentuaren uneko orrialdea"
@@ -5043,7 +5048,7 @@ msgstr "Fitxaren etiketa pertsonalizatua"
msgid "Label for the tab containing custom widgets."
msgstr "Trepeta pertsonalizatuak dituen fitxaren etiketa."
#: gtk/gtkprintoperation.c:1330 gtk/gtkprintunixdialog.c:425
#: gtk/gtkprintoperation.c:1330 gtk/gtkprintunixdialog.c:424
msgid "Support Selection"
msgstr "Hautapenaren euskarria"
@@ -5051,7 +5056,7 @@ msgstr "Hautapenaren euskarria"
msgid "TRUE if the print operation will support print of selection."
msgstr "TRUE (egia) inprimatzeko eragiketak hautapena inprimatzea onartzen badu."
#: gtk/gtkprintoperation.c:1345 gtk/gtkprintunixdialog.c:433
#: gtk/gtkprintoperation.c:1345 gtk/gtkprintunixdialog.c:432
msgid "Has Selection"
msgstr "Hautapena du"
@@ -5060,11 +5065,11 @@ msgid "TRUE if a selection exists."
msgstr "TRUE (egia) hautapena existitzen bada."
#
#: gtk/gtkprintoperation.c:1359 gtk/gtkprintunixdialog.c:441
#: gtk/gtkprintoperation.c:1359 gtk/gtkprintunixdialog.c:440
msgid "Embed Page Setup"
msgstr "Kapsulatutako orriaren konfigurazioa"
#: gtk/gtkprintoperation.c:1360 gtk/gtkprintunixdialog.c:442
#: gtk/gtkprintoperation.c:1360 gtk/gtkprintunixdialog.c:441
msgid "TRUE if page setup combos are embedded in GtkPrintUnixDialog"
msgstr "TRUE (egia) orria konfiguratzeko konbinazio-koadroak GtkPrintUnixDialog-en kapsulatuta badaude"
@@ -5076,31 +5081,31 @@ msgstr "Orrialde kopurua inprimatzeko"
msgid "The number of pages that will be printed."
msgstr "Inprimatuko diren orrialdeen kopurua."
#: gtk/gtkprintunixdialog.c:383
#: gtk/gtkprintunixdialog.c:382
msgid "The GtkPageSetup to use"
msgstr "GtkPageSetup erabiltzeko"
#: gtk/gtkprintunixdialog.c:408
#: gtk/gtkprintunixdialog.c:407
msgid "Selected Printer"
msgstr "Hautatutako inprimagailua"
#: gtk/gtkprintunixdialog.c:409
#: gtk/gtkprintunixdialog.c:408
msgid "The GtkPrinter which is selected"
msgstr "Hautatutako GtkPrinter"
#: gtk/gtkprintunixdialog.c:416
#: gtk/gtkprintunixdialog.c:415
msgid "Manual Capabilities"
msgstr "Eskuzko gaitasunak"
#: gtk/gtkprintunixdialog.c:417
#: gtk/gtkprintunixdialog.c:416
msgid "Capabilities the application can handle"
msgstr "Aplikazioak kudea ditzakeen gaitasunak"
#: gtk/gtkprintunixdialog.c:426
#: gtk/gtkprintunixdialog.c:425
msgid "Whether the dialog supports selection"
msgstr "Elkarrizketa-koadroak hautapena onartzen duen edo ez"
#: gtk/gtkprintunixdialog.c:434
#: gtk/gtkprintunixdialog.c:433
msgid "Whether the application has a selection"
msgstr "Aplikazioak hautapen bat duen edo ez"
@@ -5155,14 +5160,6 @@ msgstr "Objektua"
msgid "The root object"
msgstr "Erro-objektua"
#: gtk/gtkradiobutton.c:203
msgid "Group"
msgstr "Taldea"
#: gtk/gtkradiobutton.c:204
msgid "The radio button whose group this widget belongs to."
msgstr "Aukera-botoia (taldeari dagokion trepeta hau)."
#: gtk/gtkrange.c:366
msgid "The GtkAdjustment that contains the current value of this range object"
msgstr "Barruti-objektu honen uneko balioa duen GtkAdjustment"
@@ -6891,9 +6888,9 @@ msgstr "Leiho-mota"
msgid "The GtkTextWindowType"
msgstr "GtkTextWindowType"
#: gtk/gtktogglebutton.c:209
msgid "If the toggle button should be pressed in"
msgstr "Txandakatze-botoiak sakatuta egon behar duen ala ez"
#: gtk/gtktogglebutton.c:268
msgid "The toggle button whose group this widget belongs to."
msgstr "Trepeta honi dagokion taldearen txandakatze-botoia."
#: gtk/gtktreeexpander.c:460
msgid "The child widget with the actual contents"
@@ -7691,6 +7688,12 @@ msgstr "Kolore-profilaren titulua"
msgid "The title of the color profile to use"
msgstr "Erabiliko den kolore-profilaren titulua"
#~ msgid "Draw Indicator"
#~ msgstr "Marrazki-adierazlea"
#~ msgid "If the indicator part of the button is displayed"
#~ msgstr "Botoiaren adierazle-zatia bistaratuta dagoen"
#
#~ msgid "Device type"
#~ msgstr "Gailu mota"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -12,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gtk+-properties master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-28 10:27+0000\n"
"PO-Revision-Date: 2020-08-31 10:25+0700\n"
"POT-Creation-Date: 2020-09-05 09:54+0000\n"
"PO-Revision-Date: 2020-09-06 12:15+0700\n"
"Last-Translator: Kukuh Syafaat <kukuhsyafaat@gnome.org>\n"
"Language-Team: Indonesian <gnome@i15n.org>\n"
"Language: id\n"
@@ -655,11 +655,11 @@ msgstr "Jendela aktif"
msgid "The window which most recently had focus"
msgstr "Jendela yang terakhir kali memiliki fokus"
#: gtk/gtkapplicationwindow.c:677
#: gtk/gtkapplicationwindow.c:684
msgid "Show a menubar"
msgstr "Tampilkan bilah menu"
#: gtk/gtkapplicationwindow.c:678
#: gtk/gtkapplicationwindow.c:685
msgid "TRUE if the window should show a menubar at the top of the window"
msgstr ""
"TRUE jika jendela mesti menampilkan bilah menu di bagian puncak jendela"
@@ -696,7 +696,7 @@ msgstr "Obey child"
msgid "Force aspect ratio to match that of the frames child"
msgstr "Paksakan rasio aspek agar cocok dengan dengan bingkai anak"
#: gtk/gtkaspectframe.c:173 gtk/gtkbutton.c:252 gtk/gtkcombobox.c:782
#: gtk/gtkaspectframe.c:173 gtk/gtkbutton.c:256 gtk/gtkcombobox.c:782
#: gtk/gtkdragicon.c:372 gtk/gtkexpander.c:366 gtk/gtkflowbox.c:509
#: gtk/gtkframe.c:191 gtk/gtklistbox.c:3467 gtk/gtklistitem.c:185
#: gtk/gtknotebook.c:567 gtk/gtkoverlay.c:319 gtk/gtkpopover.c:1670
@@ -706,7 +706,7 @@ msgstr "Paksakan rasio aspek agar cocok dengan dengan bingkai anak"
msgid "Child"
msgstr "Anak"
#: gtk/gtkaspectframe.c:174 gtk/gtkbutton.c:253 gtk/gtkexpander.c:367
#: gtk/gtkaspectframe.c:174 gtk/gtkbutton.c:257 gtk/gtkexpander.c:367
#: gtk/gtkflowbox.c:510 gtk/gtkframe.c:192 gtk/gtklistbox.c:3468
#: gtk/gtkoverlay.c:320 gtk/gtkpopover.c:1671 gtk/gtkrevealer.c:353
#: gtk/gtkscrolledwindow.c:757 gtk/gtksearchbar.c:325 gtk/gtkviewport.c:381
@@ -891,25 +891,25 @@ msgstr "sumber daya yang berisi definisi UI"
msgid "scope to use when instantiating listitems"
msgstr "lingkup untuk digunakan saat instantiating listitems"
#: gtk/gtkbutton.c:224 gtk/gtkexpander.c:320 gtk/gtkframe.c:169
#: gtk/gtklabel.c:744 gtk/gtkmenubutton.c:399
#: gtk/gtkbutton.c:228 gtk/gtkcheckbutton.c:472 gtk/gtkexpander.c:320
#: gtk/gtkframe.c:169 gtk/gtklabel.c:744 gtk/gtkmenubutton.c:399
msgid "Label"
msgstr "Label"
#: gtk/gtkbutton.c:225
#: gtk/gtkbutton.c:229 gtk/gtkcheckbutton.c:473
msgid ""
"Text of the label widget inside the button, if the button contains a label "
"widget"
msgstr ""
"Tulisan pada widget label dalam tombol, (jika tombol berisi widget label"
#: gtk/gtkbutton.c:231 gtk/gtkexpander.c:328 gtk/gtklabel.c:765
#: gtk/gtkmenubutton.c:406 gtk/gtkstack.c:383
#: gtk/gtkbutton.c:235 gtk/gtkcheckbutton.c:486 gtk/gtkexpander.c:328
#: gtk/gtklabel.c:765 gtk/gtkmenubutton.c:406 gtk/gtkstack.c:383
msgid "Use underline"
msgstr "Gunakan garis bawah"
#: gtk/gtkbutton.c:232 gtk/gtkexpander.c:329 gtk/gtklabel.c:766
#: gtk/gtkmenubutton.c:407
#: gtk/gtkbutton.c:236 gtk/gtkcheckbutton.c:487 gtk/gtkexpander.c:329
#: gtk/gtklabel.c:766 gtk/gtkmenubutton.c:407
msgid ""
"If set, an underline in the text indicates the next character should be used "
"for the mnemonic accelerator key"
@@ -917,21 +917,21 @@ msgstr ""
"Jika ini diisi maka ada garis bawah pada teks yang menunjukkan bahwa huruf "
"tersebut berisi singkatan tombol jalan pintas"
#: gtk/gtkbutton.c:238 gtk/gtkcombobox.c:669 gtk/gtkentry.c:469
#: gtk/gtkbutton.c:242 gtk/gtkcombobox.c:669 gtk/gtkentry.c:469
#: gtk/gtkscrolledwindow.c:638
msgid "Has Frame"
msgstr "Memiliki bingkai"
#: gtk/gtkbutton.c:239 gtk/gtkmenubutton.c:414
#: gtk/gtkbutton.c:243 gtk/gtkmenubutton.c:414
msgid "Whether the button has a frame"
msgstr "Apakah tombol memiliki bingkai"
#: gtk/gtkbutton.c:245 gtk/gtkcellrendererpixbuf.c:209 gtk/gtkimage.c:211
#: gtk/gtkbutton.c:249 gtk/gtkcellrendererpixbuf.c:209 gtk/gtkimage.c:211
#: gtk/gtkmenubutton.c:392 gtk/gtkprinter.c:170 gtk/gtkwindow.c:822
msgid "Icon Name"
msgstr "Icon Name"
#: gtk/gtkbutton.c:246 gtk/gtkmenubutton.c:393
#: gtk/gtkbutton.c:250 gtk/gtkmenubutton.c:393
msgid "The name of the icon used to automatically populate the button"
msgstr "Nama ikon yang dipakai untuk mempopulasi tombol secara otomatis"
@@ -1398,8 +1398,9 @@ msgstr "Digit"
msgid "The number of decimal places to display"
msgstr "Jumlah tempat desimal yang ditampilkan"
#: gtk/gtkcellrendererspinner.c:138 gtk/gtkmodelbutton.c:1130
#: gtk/gtkmodelbutton.c:1131 gtk/gtkswitch.c:528 gtk/gtktogglebutton.c:208
#: gtk/gtkcellrendererspinner.c:138 gtk/gtkcheckbutton.c:460
#: gtk/gtkmodelbutton.c:1130 gtk/gtkmodelbutton.c:1131 gtk/gtkswitch.c:528
#: gtk/gtktogglebutton.c:260
msgid "Active"
msgstr "Aktif"
@@ -1859,19 +1860,23 @@ msgstr "Pas Model"
msgid "Whether to request enough space for every row in the model"
msgstr "Apakah meminta cukup ruang untuk setiap baris dalam model"
#: gtk/gtkcheckbutton.c:223
msgid "Draw Indicator"
msgstr "Indikator gambar"
#: gtk/gtkcheckbutton.c:461 gtk/gtktogglebutton.c:261
msgid "If the toggle button should be pressed in"
msgstr "Apakah tombol jungkit harus ditekan ke dalam"
#: gtk/gtkcheckbutton.c:224
msgid "If the indicator part of the button is displayed"
msgstr "Menentukan apakah bagian indikator tombol ditampilkan"
#: gtk/gtkcheckbutton.c:466 gtk/gtktogglebutton.c:267
msgid "Group"
msgstr "Grup"
#: gtk/gtkcheckbutton.c:230
#: gtk/gtkcheckbutton.c:467
msgid "The check button whose group this widget belongs to."
msgstr "Tombol cek tempat grup widget ini berada."
#: gtk/gtkcheckbutton.c:479
msgid "Inconsistent"
msgstr "Tidak konsisten"
#: gtk/gtkcheckbutton.c:231
#: gtk/gtkcheckbutton.c:480
msgid "If the check button is in an “in between” state"
msgstr "Menentukan apakah tombol centang ada dalam kondisi \"antara\""
@@ -4926,7 +4931,7 @@ msgstr "Pengaturan"
msgid "Printer settings"
msgstr "Tatanan pencetak"
#: gtk/gtkprintjob.c:171 gtk/gtkprintjob.c:172 gtk/gtkprintunixdialog.c:382
#: gtk/gtkprintjob.c:171 gtk/gtkprintjob.c:172 gtk/gtkprintunixdialog.c:381
msgid "Page Setup"
msgstr "Atur Halaman"
@@ -4950,11 +4955,11 @@ msgstr "Tatanan Halaman Baku"
msgid "The GtkPageSetup used by default"
msgstr "GtkPageSetup yang dipakai secara baku"
#: gtk/gtkprintoperation.c:1093 gtk/gtkprintunixdialog.c:400
#: gtk/gtkprintoperation.c:1093 gtk/gtkprintunixdialog.c:399
msgid "Print Settings"
msgstr "Tatanan Pencetakan"
#: gtk/gtkprintoperation.c:1094 gtk/gtkprintunixdialog.c:401
#: gtk/gtkprintoperation.c:1094 gtk/gtkprintunixdialog.c:400
msgid "The GtkPrintSettings used for initializing the dialog"
msgstr "GtkPrintSettings yang dipakai untuk menginisialisasi dialog"
@@ -4974,11 +4979,11 @@ msgstr "Cacah Halaman"
msgid "The number of pages in the document."
msgstr "Cacah halaman dalam dokumen."
#: gtk/gtkprintoperation.c:1153 gtk/gtkprintunixdialog.c:390
#: gtk/gtkprintoperation.c:1153 gtk/gtkprintunixdialog.c:389
msgid "Current Page"
msgstr "Halaman Kini"
#: gtk/gtkprintoperation.c:1154 gtk/gtkprintunixdialog.c:391
#: gtk/gtkprintoperation.c:1154 gtk/gtkprintunixdialog.c:390
msgid "The current page in the document"
msgstr "Halaman kini dalam dokumen"
@@ -5054,7 +5059,7 @@ msgstr "Label tab gubahan"
msgid "Label for the tab containing custom widgets."
msgstr "Label bagi tab yang memuat widget gubahan."
#: gtk/gtkprintoperation.c:1330 gtk/gtkprintunixdialog.c:425
#: gtk/gtkprintoperation.c:1330 gtk/gtkprintunixdialog.c:424
msgid "Support Selection"
msgstr "Mendukung Pilihan"
@@ -5062,7 +5067,7 @@ msgstr "Mendukung Pilihan"
msgid "TRUE if the print operation will support print of selection."
msgstr "TRUE bila operasi pencetakan akan mendukung pencetakan dari pilihan."
#: gtk/gtkprintoperation.c:1345 gtk/gtkprintunixdialog.c:433
#: gtk/gtkprintoperation.c:1345 gtk/gtkprintunixdialog.c:432
msgid "Has Selection"
msgstr "Memiliki Pilihan"
@@ -5070,11 +5075,11 @@ msgstr "Memiliki Pilihan"
msgid "TRUE if a selection exists."
msgstr "TRUE bila ada pilihan."
#: gtk/gtkprintoperation.c:1359 gtk/gtkprintunixdialog.c:441
#: gtk/gtkprintoperation.c:1359 gtk/gtkprintunixdialog.c:440
msgid "Embed Page Setup"
msgstr "Tanamkan Penyiapan Halaman"
#: gtk/gtkprintoperation.c:1360 gtk/gtkprintunixdialog.c:442
#: gtk/gtkprintoperation.c:1360 gtk/gtkprintunixdialog.c:441
msgid "TRUE if page setup combos are embedded in GtkPrintUnixDialog"
msgstr "TRUE bila kombo penyiapan halaman ditanamkan pada GtkPrintUnixDialog"
@@ -5086,31 +5091,31 @@ msgstr "Cacah Halaman Akan Dicetak"
msgid "The number of pages that will be printed."
msgstr "Cacah halaman yang akan dicetak."
#: gtk/gtkprintunixdialog.c:383
#: gtk/gtkprintunixdialog.c:382
msgid "The GtkPageSetup to use"
msgstr "GtkPageSetup yang akan dipakai"
#: gtk/gtkprintunixdialog.c:408
#: gtk/gtkprintunixdialog.c:407
msgid "Selected Printer"
msgstr "Pencetak Terpilih"
#: gtk/gtkprintunixdialog.c:409
#: gtk/gtkprintunixdialog.c:408
msgid "The GtkPrinter which is selected"
msgstr "GtkPrinter yang dipilih"
#: gtk/gtkprintunixdialog.c:416
#: gtk/gtkprintunixdialog.c:415
msgid "Manual Capabilities"
msgstr "Kapabilitas Manual"
#: gtk/gtkprintunixdialog.c:417
#: gtk/gtkprintunixdialog.c:416
msgid "Capabilities the application can handle"
msgstr "Kapabilitas yang dapat ditangani aplikasi"
#: gtk/gtkprintunixdialog.c:426
#: gtk/gtkprintunixdialog.c:425
msgid "Whether the dialog supports selection"
msgstr "Apakah dialog mendukung pilihan"
#: gtk/gtkprintunixdialog.c:434
#: gtk/gtkprintunixdialog.c:433
msgid "Whether the application has a selection"
msgstr "Apakah aplikasi memiliki pilihan"
@@ -5167,14 +5172,6 @@ msgstr "Objek"
msgid "The root object"
msgstr "Objek root"
#: gtk/gtkradiobutton.c:203
msgid "Group"
msgstr "Grup"
#: gtk/gtkradiobutton.c:204
msgid "The radio button whose group this widget belongs to."
msgstr "Tombol radio tempat Grup widget ini berada."
#: gtk/gtkrange.c:366
msgid "The GtkAdjustment that contains the current value of this range object"
msgstr "GtkAdjustment yang berisi nilai sekarang pada obyek jangkauan"
@@ -6956,9 +6953,9 @@ msgstr "Jenis Jendela"
msgid "The GtkTextWindowType"
msgstr "GtkTextWindowType"
#: gtk/gtktogglebutton.c:209
msgid "If the toggle button should be pressed in"
msgstr "Apakah tombol jungkit harus ditekan ke dalam"
#: gtk/gtktogglebutton.c:268
msgid "The toggle button whose group this widget belongs to."
msgstr "Tombol jungkitkan tempat grup widget ini berada."
#: gtk/gtktreeexpander.c:460
msgid "The child widget with the actual contents"
@@ -7763,3 +7760,9 @@ msgstr "Judul Profil Warna"
#: modules/printbackends/gtkprintercups.c:94
msgid "The title of the color profile to use"
msgstr "Judul profil warna yang akan dipakai"
#~ msgid "Draw Indicator"
#~ msgstr "Indikator gambar"
#~ msgid "If the indicator part of the button is displayed"
#~ msgstr "Menentukan apakah bagian indikator tombol ditampilkan"

2845
po/cs.po

File diff suppressed because it is too large Load Diff

3570
po/hu.po

File diff suppressed because it is too large Load Diff

451
po/kk.po

File diff suppressed because it is too large Load Diff

View File

@@ -36,6 +36,7 @@ int
main (int argc, char *argv[])
{
GtkWidget *window, *fixed, *button;
GtkWidget *fixed2, *frame;
gboolean done = FALSE;
GskTransform *transform;
@@ -52,8 +53,7 @@ main (int argc, char *argv[])
gtk_widget_set_vexpand (fixed, TRUE);
button = gtk_button_new ();
gtk_button_set_label (GTK_BUTTON (button), "Hello world");
//gtk_widget_set_size_request (button, 50, 50);
gtk_button_set_label (GTK_BUTTON (button), "Button");
g_signal_connect (button, "clicked", G_CALLBACK (hello), NULL);
gtk_fixed_put (GTK_FIXED (fixed), button, 0, 0);
@@ -62,11 +62,27 @@ main (int argc, char *argv[])
transform = gsk_transform_translate_3d (transform, &GRAPHENE_POINT3D_INIT (0, 0, 50));
transform = gsk_transform_perspective (transform, 170);
transform = gsk_transform_translate_3d (transform, &GRAPHENE_POINT3D_INIT (50, 0, 50));
transform = gsk_transform_rotate (transform, 30);
transform = gsk_transform_rotate_3d (transform, 30, graphene_vec3_y_axis ());
transform = gsk_transform_rotate (transform, 20);
transform = gsk_transform_rotate_3d (transform, 20, graphene_vec3_y_axis ());
gtk_fixed_set_child_transform (GTK_FIXED (fixed), button, transform);
gtk_window_set_child (GTK_WINDOW (window), fixed);
frame = gtk_frame_new ("Frame");
gtk_widget_add_css_class (frame, "view");
gtk_frame_set_child (GTK_FRAME (frame), fixed);
fixed2 = gtk_fixed_new ();
gtk_fixed_put (GTK_FIXED (fixed2), frame, 0, 0);
transform = NULL;
transform = gsk_transform_translate_3d (transform, &GRAPHENE_POINT3D_INIT (0, 0, 50));
transform = gsk_transform_perspective (transform, 170);
transform = gsk_transform_translate_3d (transform, &GRAPHENE_POINT3D_INIT (50, 0, 50));
transform = gsk_transform_rotate (transform, 20);
transform = gsk_transform_rotate_3d (transform, 20, graphene_vec3_y_axis ());
gtk_fixed_set_child_transform (GTK_FIXED (fixed2), frame, transform);
gtk_window_set_child (GTK_WINDOW (window), fixed2);
gtk_widget_show (window);

View File

@@ -0,0 +1,22 @@
/* This test checks that we get sharp clip boundaries
* for 2d transforms. Compare with clip-coordinates-3d.node,
* which uses a general transform and gets offscreen
* rendering with GL_LINEAR.
*/
transform {
transform: scale(2);
child: container {
color {
bounds: 0 0 50 50;
color: transparent;
}
clip {
clip: 10 10 30 30;
child: color {
bounds: 0 0 50 50;
color: red;
}
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 B

View File

@@ -22,6 +22,7 @@ node_parser = executable(
compare_render_tests = [
'blend-normal',
'blend-difference',
'clip-coordinates-2d',
'clip-coordinates-3d',
'clipped_rounded_clip',
'color-blur0',

View File

@@ -406,6 +406,122 @@ test_print_parse (void)
}
}
static void
gsk_matrix_transform_rect (const graphene_matrix_t *m,
const graphene_rect_t *r,
graphene_quad_t *res)
{
graphene_point_t ret[4];
graphene_rect_t rr;
graphene_rect_normalize_r (r, &rr);
#define TRANSFORM_POINT(matrix, rect, corner, out_p) do {\
graphene_vec4_t __s; \
graphene_point_t __p; \
float w; \
graphene_rect_get_ ## corner (rect, &__p); \
graphene_vec4_init (&__s, __p.x, __p.y, 0.f, 1.f); \
graphene_matrix_transform_vec4 (matrix, &__s, &__s); \
w = graphene_vec4_get_w (&__s); \
out_p.x = graphene_vec4_get_x (&__s) / w; \
out_p.y = graphene_vec4_get_y (&__s) / w; } while (0)
TRANSFORM_POINT (m, &rr, top_left, ret[0]);
TRANSFORM_POINT (m, &rr, top_right, ret[1]);
TRANSFORM_POINT (m, &rr, bottom_right, ret[2]);
TRANSFORM_POINT (m, &rr, bottom_left, ret[3]);
#undef TRANSFORM_POINT
graphene_quad_init (res, &ret[0], &ret[1], &ret[2], &ret[3]);
}
/* This is an auxiliary function used in the GL renderer to
* determine if transforming an axis-aligned rectangle produces
* axis-aligned output, to decide whether to use linear
* interpolation or not.
*
* Keep this in sync with gsk/gl/gskglrenderer.c
*/
static gboolean
result_is_axis_aligned (GskTransform *transform,
const graphene_rect_t *bounds)
{
graphene_matrix_t m;
graphene_quad_t q;
graphene_rect_t b;
graphene_point_t b1, b2;
const graphene_point_t *p;
int i;
gsk_transform_to_matrix (transform, &m);
gsk_matrix_transform_rect (&m, bounds, &q);
graphene_quad_bounds (&q, &b);
graphene_rect_get_top_left (&b, &b1);
graphene_rect_get_bottom_right (&b, &b2);
for (i = 0; i < 4; i++)
{
p = graphene_quad_get_point (&q, i);
if (fabs (p->x - b1.x) > FLT_EPSILON && fabs (p->x - b2.x) > FLT_EPSILON)
return FALSE;
if (fabs (p->y - b1.y) > FLT_EPSILON && fabs (p->y - b2.y) > FLT_EPSILON)
return FALSE;
}
return TRUE;
}
static void
test_axis_aligned (void)
{
graphene_rect_t r = GRAPHENE_RECT_INIT (0, 0, 10, 10);
GskTransform *transform = NULL;
transform = gsk_transform_translate (NULL, &GRAPHENE_POINT_INIT (10, 10));
g_assert_true (result_is_axis_aligned (transform, &r));
gsk_transform_unref (transform);
transform = gsk_transform_translate_3d (NULL, &GRAPHENE_POINT3D_INIT(0, 10, 10));
g_assert_true (result_is_axis_aligned (transform, &r));
gsk_transform_unref (transform);
transform = gsk_transform_rotate (NULL, 90);
g_assert_true (result_is_axis_aligned (transform, &r));
gsk_transform_unref (transform);
transform = gsk_transform_scale (NULL, 2, 3);
g_assert_true (result_is_axis_aligned (transform, &r));
gsk_transform_unref (transform);
/* rotating around the y axis does not affect axis alignedness,
* as long as we don't involve perspective
*/
transform = gsk_transform_rotate_3d (NULL, 45, graphene_vec3_y_axis ());
g_assert_true (result_is_axis_aligned (transform, &r));
gsk_transform_unref (transform);
/* rotating by 45 around the z axis, not axis aligned */
transform = gsk_transform_rotate (NULL, 45);
g_assert_false (result_is_axis_aligned (transform, &r));
gsk_transform_unref (transform);
/* perspective is harmless as long as we stay in the z=0 plane */
transform = gsk_transform_perspective (NULL, 100);
g_assert_true (result_is_axis_aligned (transform, &r));
gsk_transform_unref (transform);
/* a complex transform that makes things look '3d' */
transform = gsk_transform_translate_3d (NULL, &GRAPHENE_POINT3D_INIT (0, 0, 50));
transform = gsk_transform_perspective (transform, 170);
transform = gsk_transform_translate_3d (transform, &GRAPHENE_POINT3D_INIT (50, 0, 50));
transform = gsk_transform_rotate (transform, 20);
transform = gsk_transform_rotate_3d (transform, 20, graphene_vec3_y_axis ());
g_assert_false (result_is_axis_aligned (transform, &r));
gsk_transform_unref (transform);
}
int
main (int argc,
char *argv[])
@@ -418,6 +534,7 @@ main (int argc,
g_test_add_func ("/transform/identity-equal", test_identity_equal);
g_test_add_func ("/transform/invert", test_invert);
g_test_add_func ("/transform/print-parse", test_print_parse);
g_test_add_func ("/transform/check-axis-aligneness", test_axis_aligned);
return g_test_run ();
}