Compare commits

...

20 Commits

Author SHA1 Message Date
Matthias Clasen 6b87219df9 Extend debug var support
Make our debug variable parser handle key=value strings, provided
that a callback is provided for the key. This may be used in the
future to accept settings like

GDK_DEBUG=vsync=144fps
2024-01-22 21:08:46 -05:00
Benjamin Otte 3451c2e72c Merge branch 'wip/otte/for-main' into 'main'
gsk: Respect offscreen_for_opacity of first child

Closes #6350

See merge request GNOME/gtk!6800
2024-01-22 17:52:33 +00:00
Benjamin Otte 00be97e741 gsk: Respect offscreen_for_opacity of first child
The container node constructor forgot to initialize that value from the
first child.

Testcase included.

Fixes #6350
2024-01-22 18:22:50 +01:00
Matthias Clasen 9b9e8b385e Merge branch 'matthiasc/for-main' into 'main'
Tweak profiling strings

See merge request GNOME/gtk!6796
2024-01-22 13:46:52 +00:00
Emmanuele Bassi d3f30e73d0 Merge branch 'gtypes-doc-fix' into 'main'
droptarget: Fix GType in doc strings

See merge request GNOME/gtk!6798
2024-01-22 12:15:31 +00:00
Alexandre Franke 257706ba0a Update French translation
(cherry picked from commit 92862dfeec)
2024-01-22 12:09:29 +00:00
Guido Günther 2bc38e103d droptarget: Fix GType in doc strings
While we have several `GType`s the actual type name is still singular.
2024-01-22 12:30:56 +01:00
Benjamin Otte 60b3e5cac1 Merge branch 'wip/otte/for-main' into 'main'
gpu: Handle a full cache

See merge request GNOME/gtk!6797
2024-01-22 07:48:36 +00:00
Benjamin Otte d14932474b testsuite: clip the node
Clip from 1025px (which is what this test is about) to 1024px because the
GLES2 renderer in CI otherwise scales its repeat node offscreen for the
--repeat version of this test and that conveniently produces off-by-one
misrenderings everywhere.

However, we need to keep the image large enough so that all the glyphs
are actually rendered and not skipped which would not overflow the
cache.
2024-01-22 08:30:16 +01:00
Benjamin Otte f0982e2683 testsuite: Overflow slices of glyph cache
This test is specifically engineered to trigger an overflow in the glyph
renderer that was theorized on IRC with an earlier patchset.

If only one slice was available, and that slice was not high enough to
hold the glyph we were trying to put in there, it would allocate a slice
that was too small. The check for the size was missing.

So now add a test that fills up all the slices in the glyph cache apart
from one and than tries to add one final glyph that is too large for the
last slice.
2024-01-22 07:47:35 +01:00
Benjamin Otte d8fbaf5d4f testsuite: Add a test to exhaust the glyph cache
See previous commit.
2024-01-22 07:47:10 +01:00
Benjamin Otte 183d712252 gpu: Handle a full cache
Previously, we only checked if the cache had exhausted the maximum
number of slices.
But we also need to check that the height of the slices doesn't exceed
the height of the texture.
2024-01-22 07:47:10 +01:00
Benjamin Otte 3eb5447376 rendernodeparser: Improve error handling for font parsing
After the node-editor crashed on me once too often, I decided to take a
good hard look at the parsing code and add a bunch of weird corner
cases into the testsuite.

That meant redoing the parser so that the error paths cause neither
crashes nor duplicated or wrong error messages.
2024-01-22 07:47:10 +01:00
Benjamin Otte 976c5077b9 css: Add gtk_css_parser_has_url()
This function wasn't needed so far so I didn't add it.
The next commits will use it.

I made has_url() return TRUE for the BAD_URL token, even though a
BAD_URL is not a valid URL. But parsing code will almost always want to
treat these tokesn the same way it would treat otherwise bad urls, so
returning TRUE here makes it go own the right error path in calling
code.
2024-01-22 07:47:10 +01:00
Benjamin Otte 4e00384830 testsuite: Remove duplicate newline 2024-01-22 07:47:10 +01:00
Matthias Clasen f779832861 Tweak profiling strings
Capitalize our mark names, and use GTK as category.

The justification is: it looks better in sysprof.
2024-01-21 14:02:08 -05:00
Matthias Clasen a482cb5d25 Merge branch 'matthiasc/for-main' into 'main'
gl: Fix text carets going missing on NVidia

Closes #6348

See merge request GNOME/gtk!6795
2024-01-21 14:42:54 +00:00
Matthias Clasen f781039aa2 gsk: Add a testcase for underlines and carets
The gl renderer has an optimization where it uses the glyph atlas
to render color nodes that show up in the middle of text (e.g. for
underlines and carets). This adds a simple test for that scenario,
which hits this codepath.
2024-01-21 09:29:57 -05:00
Matthias Clasen 6e8a70ada1 Drop gdk_gl_context_has_bgra
This private api turned out to be more problematic than useful,
and it isn't used anymore.
2024-01-21 08:29:33 -05:00
Matthias Clasen c43294c837 gl: Fix text carets going missing on NVidia
Use the same logic for uploading the 'corner pixel' that we use
for uploading glyphs, since that works.

Fixes: #6348
2024-01-21 08:22:47 -05:00
51 changed files with 1110 additions and 255 deletions
+48 -13
View File
@@ -193,8 +193,7 @@ gdk_parse_debug_var (const char *variable,
guint i;
guint result = 0;
const char *string;
const char *p;
const char *q;
const char *p, *q, *s;
gboolean invert;
gboolean help;
@@ -222,19 +221,42 @@ gdk_parse_debug_var (const char *variable,
}
else
{
char *val = g_strndup (p, q - p);
s = strchr (p, '=');
if (!s || s > q)
s = q;
for (i = 0; i < nkeys; i++)
{
if (strlen (keys[i].key) == q - p &&
g_ascii_strncasecmp (keys[i].key, p, q - p) == 0)
if (strlen (keys[i].key) == s - p &&
g_ascii_strncasecmp (keys[i].key, p, s - p) == 0)
{
result |= keys[i].value;
break;
if (s == q)
{
if (keys[i].callback)
{
if (!keys[i].callback (&keys[i], NULL))
fprintf (stderr, "Setting value \"%.*s\" failed.", (int)(q - p), p);
}
else
result |= keys[i].value;
break;
}
else if (keys[i].callback)
{
char *val;
val = g_strndup (s + 1, q - (s + 1));
if (!keys[i].callback (&keys[i], val))
fprintf (stderr, "Setting value \"%.*s\" failed.", (int)(q - p), p);
g_free (val);
break;
}
}
}
if (i == nkeys)
fprintf (stderr, "Unrecognized value \"%s\". Try %s=help\n", val, variable);
g_free (val);
fprintf (stderr, "Unrecognized value \"%.*s\". Try %s=help\n", (int)(q - p), p, variable);
}
p = q;
@@ -246,13 +268,26 @@ gdk_parse_debug_var (const char *variable,
{
int max_width = 4;
for (i = 0; i < nkeys; i++)
max_width = MAX (max_width, strlen (keys[i].key));
{
int width = strlen (keys[i].key);
if (keys[i].callback)
width += strlen ("=VALUE");
max_width = MAX (max_width, width);
}
max_width += 4;
fprintf (stderr, "Supported %s values:\n", variable);
for (i = 0; i < nkeys; i++) {
fprintf (stderr, " %s%*s%s\n", keys[i].key, (int)(max_width - strlen (keys[i].key)), " ", keys[i].help);
}
for (i = 0; i < nkeys; i++)
{
int width = strlen (keys[i].key);
if (keys[i].callback)
width += strlen ("=VALUE");
fprintf (stderr, " %s%s%*s%s\n",
keys[i].key,
keys[i].callback ? "=VALUE" : "",
(int)(max_width - width), " ",
keys[i].help);
}
fprintf (stderr, " %s%*s%s\n", "all", max_width - 3, " ", "Enable all values. Other given values are subtracted");
fprintf (stderr, " %s%*s%s\n", "help", max_width - 4, " ", "Print this help");
fprintf (stderr, "\nMultiple values can be given, separated by : or space.\n");
+6 -3
View File
@@ -97,14 +97,17 @@ gdk_debug_message (const char *format, ...)
#define GDK_DEBUG_CHECK(type) GDK_DISPLAY_DEBUG_CHECK (NULL,type)
#define GDK_DEBUG(type,...) GDK_DISPLAY_DEBUG (NULL,type,__VA_ARGS__)
typedef struct
typedef struct _GdkDebugKey GdkDebugKey;
struct _GdkDebugKey
{
const char *key;
guint value;
const char *help;
} GdkDebugKey;
gboolean (* callback) (const GdkDebugKey *key,
const char *value);
};
guint gdk_parse_debug_var (const char *variable,
const GdkDebugKey *keys,
guint nkeys);
+3 -6
View File
@@ -1363,7 +1363,7 @@ gdk_display_init_gl (GdkDisplay *self)
return;
}
gdk_profiler_end_mark (before2, "realize OpenGL context", NULL);
gdk_profiler_end_mark (before2, "Realize OpenGL context", NULL);
/* Only assign after realize, so GdkGLContext::realize() can use
* gdk_display_get_gl_context() == NULL to differentiate between
@@ -1373,7 +1373,7 @@ gdk_display_init_gl (GdkDisplay *self)
gdk_gl_backend_use (GDK_GL_CONTEXT_GET_CLASS (context)->backend_type);
gdk_profiler_end_mark (before, "initialize OpenGL", NULL);
gdk_profiler_end_mark (before, "Init OpenGL", NULL);
}
/**
@@ -1768,7 +1768,6 @@ gdk_display_init_egl (GdkDisplay *self,
{
GdkDisplayPrivate *priv = gdk_display_get_instance_private (self);
G_GNUC_UNUSED gint64 start_time = GDK_PROFILER_CURRENT_TIME;
G_GNUC_UNUSED gint64 start_time2;
int major, minor;
if (!gdk_gl_backend_can_be_used (GDK_GL_EGL, error))
@@ -1795,7 +1794,6 @@ gdk_display_init_egl (GdkDisplay *self,
return FALSE;
}
start_time2 = GDK_PROFILER_CURRENT_TIME;
if (!eglInitialize (priv->egl_display, &major, &minor))
{
priv->egl_display = NULL;
@@ -1804,7 +1802,6 @@ gdk_display_init_egl (GdkDisplay *self,
_("Could not initialize EGL display"));
return FALSE;
}
gdk_profiler_end_mark (start_time2, "eglInitialize", NULL);
if (major < GDK_EGL_MIN_VERSION_MAJOR ||
(major == GDK_EGL_MIN_VERSION_MAJOR && minor < GDK_EGL_MIN_VERSION_MINOR))
@@ -1894,7 +1891,7 @@ gdk_display_init_egl (GdkDisplay *self,
g_free (ext);
}
gdk_profiler_end_mark (start_time, "init EGL", NULL);
gdk_profiler_end_mark (start_time, "Init EGL", NULL);
return TRUE;
}
+6 -6
View File
@@ -79,7 +79,7 @@ static guint signals[LAST_SIGNAL];
static guint fps_counter;
#define FRAME_HISTORY_MAX_LENGTH 128
#define FRAME_HISTORY_MAX_LENGTH 1000
struct _GdkFrameClockPrivate
{
@@ -687,7 +687,7 @@ _gdk_frame_clock_emit_update (GdkFrameClock *frame_clock)
g_signal_emit (frame_clock, signals[UPDATE], 0);
gdk_profiler_end_mark (before, "frameclock update", NULL);
gdk_profiler_end_mark (before, "Frameclock update", NULL);
}
void
@@ -699,7 +699,7 @@ _gdk_frame_clock_emit_layout (GdkFrameClock *frame_clock)
g_signal_emit (frame_clock, signals[LAYOUT], 0);
gdk_profiler_end_mark (before, "frameclock layout", NULL);
gdk_profiler_end_mark (before, "Frameclock layout", NULL);
}
void
@@ -711,7 +711,7 @@ _gdk_frame_clock_emit_paint (GdkFrameClock *frame_clock)
g_signal_emit (frame_clock, signals[PAINT], 0);
gdk_profiler_end_mark (before, "frameclock paint", NULL);
gdk_profiler_end_mark (before, "Frameclock paint", NULL);
}
void
@@ -811,12 +811,12 @@ _gdk_frame_clock_add_timings_to_profiler (GdkFrameClock *clock,
{
if (timings->drawn_time != 0)
{
gdk_profiler_add_mark (1000 * timings->drawn_time, 0, "drawn window", NULL);
gdk_profiler_add_mark (1000 * timings->drawn_time, 0, "Drawn window", NULL);
}
if (timings->presentation_time != 0)
{
gdk_profiler_add_mark (1000 * timings->presentation_time, 0, "presented window", NULL);
gdk_profiler_add_mark (1000 * timings->presentation_time, 0, "Presented window", NULL);
}
gdk_profiler_set_counter (fps_counter, gdk_frame_clock_get_fps (clock));
+1 -1
View File
@@ -694,7 +694,7 @@ gdk_frame_clock_paint_idle (void *data)
if (!gdk_frame_clock_idle_is_frozen (clock_idle))
priv->sleep_serial = get_sleep_serial ();
gdk_profiler_end_mark (before, "frameclock cycle", NULL);
gdk_profiler_end_mark (before, "Frameclock cycle", NULL);
return FALSE;
}
+2 -11
View File
@@ -386,7 +386,7 @@ gdk_gl_context_create_egl_context (GdkGLContext *context,
else if (epoxy_has_egl_extension (egl_display, "EGL_EXT_swap_buffers_with_damage"))
priv->eglSwapBuffersWithDamage = (gpointer) epoxy_eglGetProcAddress ("eglSwapBuffersWithDamageEXT");
gdk_profiler_end_mark (start_time, "realize GdkWaylandGLContext", NULL);
gdk_profiler_end_mark (start_time, "Create EGL context", NULL);
return api;
}
@@ -669,7 +669,7 @@ gdk_gl_context_real_end_frame (GdkDrawContext *draw_context,
egl_surface = gdk_surface_get_egl_surface (surface);
gdk_profiler_add_mark (GDK_PROFILER_CURRENT_TIME, 0, "EGL", "swap buffers");
gdk_profiler_add_mark (GDK_PROFILER_CURRENT_TIME, 0, "EGL swap buffers", NULL);
if (priv->eglSwapBuffersWithDamage)
{
@@ -2042,15 +2042,6 @@ gdk_gl_context_has_sync (GdkGLContext *self)
return priv->has_sync;
}
/* Return if GL_BGRA works with glTexImage2D */
gboolean
gdk_gl_context_has_bgra (GdkGLContext *self)
{
GdkGLContextPrivate *priv = gdk_gl_context_get_instance_private (self);
return priv->has_bgra;
}
/* Return if glGenVertexArrays, glBindVertexArray and glDeleteVertexArrays
* can be used
*/
-2
View File
@@ -171,8 +171,6 @@ gboolean gdk_gl_context_has_vertex_half_float (GdkGLContext
gboolean gdk_gl_context_has_sync (GdkGLContext *self) G_GNUC_PURE;
gboolean gdk_gl_context_has_bgra (GdkGLContext *self) G_GNUC_PURE;
gboolean gdk_gl_context_has_vertex_arrays (GdkGLContext *self) G_GNUC_PURE;
double gdk_gl_context_get_scale (GdkGLContext *self);
+7 -6
View File
@@ -32,6 +32,7 @@
#include "version/gdkversionmacros.h"
#include "gdkframeclockprivate.h"
#define CATEGORY "GTK"
gboolean
gdk_profiler_is_running (void)
@@ -50,7 +51,7 @@ void
const char *message)
{
#ifdef HAVE_SYSPROF
sysprof_collector_mark (begin_time, duration, "gtk", name, message);
sysprof_collector_mark (begin_time, duration, CATEGORY, name, message);
#endif
}
@@ -60,7 +61,7 @@ void
const char *message)
{
#ifdef HAVE_SYSPROF
sysprof_collector_mark (begin_time, GDK_PROFILER_CURRENT_TIME - begin_time, "gtk", name, message);
sysprof_collector_mark (begin_time, GDK_PROFILER_CURRENT_TIME - begin_time, CATEGORY, name, message);
#endif
}
@@ -74,7 +75,7 @@ void
#ifdef HAVE_SYSPROF
va_list args;
va_start (args, message_format);
sysprof_collector_mark_vprintf (begin_time, duration, "gtk", name, message_format, args);
sysprof_collector_mark_vprintf (begin_time, duration, CATEGORY, name, message_format, args);
va_end (args);
#endif /* HAVE_SYSPROF */
}
@@ -88,7 +89,7 @@ void
#ifdef HAVE_SYSPROF
va_list args;
va_start (args, message_format);
sysprof_collector_mark_vprintf (begin_time, GDK_PROFILER_CURRENT_TIME - begin_time, "gtk", name, message_format, args);
sysprof_collector_mark_vprintf (begin_time, GDK_PROFILER_CURRENT_TIME - begin_time, CATEGORY, name, message_format, args);
va_end (args);
#endif /* HAVE_SYSPROF */
}
@@ -103,7 +104,7 @@ guint
counter.id = sysprof_collector_request_counters (1);
counter.type = SYSPROF_CAPTURE_COUNTER_DOUBLE;
counter.value.vdbl = 0.0;
g_strlcpy (counter.category, "gtk", sizeof counter.category);
g_strlcpy (counter.category, CATEGORY, sizeof counter.category);
g_strlcpy (counter.name, name, sizeof counter.name);
g_strlcpy (counter.description, description, sizeof counter.name);
@@ -125,7 +126,7 @@ guint
counter.id = sysprof_collector_request_counters (1);
counter.type = SYSPROF_CAPTURE_COUNTER_INT64;
counter.value.v64 = 0;
g_strlcpy (counter.category, "gtk", sizeof counter.category);
g_strlcpy (counter.category, CATEGORY, sizeof counter.category);
g_strlcpy (counter.name, name, sizeof counter.name);
g_strlcpy (counter.description, description, sizeof counter.name);
+2 -2
View File
@@ -2839,7 +2839,7 @@ add_event_mark (GdkEvent *event,
class = g_type_class_ref (GDK_TYPE_EVENT_TYPE);
value = g_enum_get_value (class, event_type);
g_type_class_unref (class);
kind = value ? value->value_nick : "event";
kind = value ? value->value_nick : "Event";
switch ((int) event_type)
{
@@ -2909,7 +2909,7 @@ add_event_mark (GdkEvent *event,
break;
}
gdk_profiler_add_mark (time, end_time - time, "event", message ? message : kind);
gdk_profiler_add_mark (time, end_time - time, "Event", message ? message : kind);
g_free (message);
#endif
+1 -1
View File
@@ -237,7 +237,7 @@ gdk_load_jpeg (GBytes *input_bytes,
g_bytes_unref (bytes);
gdk_profiler_end_mark (before, "jpeg load", NULL);
gdk_profiler_end_mark (before, "Load jpeg", NULL);
return texture;
}
+1 -1
View File
@@ -304,7 +304,7 @@ gdk_load_png (GBytes *bytes,
{
gint64 end = GDK_PROFILER_CURRENT_TIME;
if (end - before > 500000)
gdk_profiler_add_mark (before, end - before, "png load", NULL);
gdk_profiler_add_mark (before, end - before, "Load png", NULL);
}
return texture;
+1 -1
View File
@@ -504,7 +504,7 @@ gdk_load_tiff (GBytes *input_bytes,
{
gint64 end = GDK_PROFILER_CURRENT_TIME;
if (end - before > 500000)
gdk_profiler_add_mark (before, end - before, "tiff load", NULL);
gdk_profiler_add_mark (before, end - before, "Load tiff", NULL);
}
return texture;
+2 -2
View File
@@ -186,7 +186,7 @@ gdk_wayland_cairo_context_end_frame (GdkDrawContext *draw_context,
gdk_wayland_surface_attach_image (surface, self->paint_surface, painted);
gdk_wayland_surface_request_frame (surface);
gdk_profiler_add_mark (GDK_PROFILER_CURRENT_TIME, 0, "wayland", "surface commit");
gdk_profiler_add_mark (GDK_PROFILER_CURRENT_TIME, 0, "Wayland surface commit", NULL);
gdk_wayland_surface_commit (surface);
gdk_wayland_surface_notify_committed (surface);
@@ -206,7 +206,7 @@ gdk_wayland_cairo_context_empty_frame (GdkDrawContext *draw_context)
gdk_wayland_surface_sync (surface);
gdk_wayland_surface_request_frame (surface);
gdk_profiler_add_mark (GDK_PROFILER_CURRENT_TIME, 0, "wayland", "surface commit");
gdk_profiler_add_mark (GDK_PROFILER_CURRENT_TIME, 0, "Wayland surface commit", NULL);
gdk_wayland_surface_commit (surface);
gdk_wayland_surface_notify_committed (surface);
}
+1 -1
View File
@@ -1253,7 +1253,7 @@ _gdk_wayland_display_load_cursor_theme (GdkWaylandDisplay *display_wayland)
gdk_wayland_display_set_cursor_theme (GDK_DISPLAY (display_wayland), name, size);
g_value_unset (&v);
gdk_profiler_end_mark (before, "wayland", "load cursor theme");
gdk_profiler_end_mark (before, "Wayland cursor theme load", NULL);
}
+1 -1
View File
@@ -1012,7 +1012,7 @@ gdk_wayland_surface_create_xdg_popup (GdkWaylandPopup *wayland_popup,
}
}
gdk_profiler_add_mark (GDK_PROFILER_CURRENT_TIME, 0, "wayland", "surface commit");
gdk_profiler_add_mark (GDK_PROFILER_CURRENT_TIME, 0, "Wayland surface commit", NULL);
wl_surface_commit (impl->display_server.wl_surface);
if (GDK_IS_POPUP (surface))
+1 -1
View File
@@ -274,7 +274,7 @@ gdk_wayland_surface_frame_callback (GdkSurface *surface,
GdkFrameClock *clock = gdk_surface_get_frame_clock (surface);
GdkFrameTimings *timings;
gdk_profiler_add_mark (GDK_PROFILER_CURRENT_TIME, 0, "wayland", "frame event");
gdk_profiler_add_mark (GDK_PROFILER_CURRENT_TIME, 0, "Wayland frame event", NULL);
GDK_DISPLAY_DEBUG (GDK_DISPLAY (display_wayland), EVENTS, "frame %p", surface);
g_clear_pointer (&impl->frame_callback, wl_callback_destroy);
+1 -1
View File
@@ -830,7 +830,7 @@ gdk_wayland_surface_create_xdg_toplevel (GdkWaylandToplevel *wayland_toplevel)
maybe_set_gtk_surface_dbus_properties (wayland_toplevel);
maybe_set_gtk_surface_modal (wayland_toplevel);
gdk_profiler_add_mark (GDK_PROFILER_CURRENT_TIME, 0, "wayland", "surface commit");
gdk_profiler_add_mark (GDK_PROFILER_CURRENT_TIME, 0, "Wayland surface commit", NULL);
wl_surface_commit (wayland_surface->display_server.wl_surface);
}
+4 -4
View File
@@ -1608,8 +1608,8 @@ gsk_gl_command_queue_do_upload_texture_chunk (GskGLCommandQueue *self,
if (gdk_profiler_is_running ())
{
gdk_profiler_add_markf (start_time, GDK_PROFILER_CURRENT_TIME-start_time,
"Download Texture chunk",
gdk_profiler_end_markf (start_time,
"Download texture chunk",
"Tile %dx%d Size %dx%d", x, y, width, height);
start_time = GDK_PROFILER_CURRENT_TIME;
}
@@ -1654,8 +1654,8 @@ gsk_gl_command_queue_do_upload_texture_chunk (GskGLCommandQueue *self,
g_bytes_unref (bytes);
if (gdk_profiler_is_running ())
gdk_profiler_add_markf (start_time, GDK_PROFILER_CURRENT_TIME-start_time,
"Upload Texture chunk",
gdk_profiler_end_markf (start_time,
"Upload texture chunk",
"Tile %dx%d Size %dx%d", x, y, width, height);
}
+2 -2
View File
@@ -424,7 +424,7 @@ gsk_gl_driver_load_programs (GskGLDriver *self,
failure:
g_clear_object (&compiler);
gdk_profiler_end_mark (start_time, "load programs", NULL);
gdk_profiler_end_mark (start_time, "Load GL programs", NULL);
return ret;
}
@@ -477,7 +477,7 @@ gsk_gl_driver_new (GskGLCommandQueue *command_queue,
self->icons_library = gsk_gl_icon_library_new (self);
self->shadows_library = gsk_gl_shadow_library_new (self);
gdk_profiler_end_mark (before, "create GskGLDriver", NULL);
gdk_profiler_end_mark (before, "Create GL driver", NULL);
return g_steal_pointer (&self);
}
+2 -6
View File
@@ -119,11 +119,7 @@ gsk_gl_glyph_library_init_atlas (GskGLTextureLibrary *self,
memset (pixel_data, 255, sizeof pixel_data);
if (!gdk_gl_context_has_bgra (gdk_gl_context_get_current ())
#if G_BYTE_ORDER == G_BIG_ENDIAN
|| gdk_gl_context_get_use_es (gdk_gl_context_get_current ())
#endif
)
if (gdk_gl_context_get_use_es (gdk_gl_context_get_current ()))
{
gl_format = GL_RGBA;
gl_type = GL_UNSIGNED_BYTE;
@@ -380,7 +376,7 @@ gsk_gl_glyph_library_upload_glyph (GskGLGlyphLibrary *self,
{
char message[64];
g_snprintf (message, sizeof message, "Size %dx%d", width, height);
gdk_profiler_add_mark (start_time, GDK_PROFILER_CURRENT_TIME-start_time, "Upload Glyph", message);
gdk_profiler_add_mark (start_time, GDK_PROFILER_CURRENT_TIME-start_time, "Upload glyph", message);
}
}
+1 -1
View File
@@ -211,6 +211,6 @@ gsk_gl_icon_library_add (GskGLIconLibrary *self,
{
char message[64];
g_snprintf (message, sizeof message, "Size %dx%d", width, height);
gdk_profiler_add_mark (start_time, GDK_PROFILER_CURRENT_TIME-start_time, "Upload Icon", message);
gdk_profiler_add_mark (start_time, GDK_PROFILER_CURRENT_TIME-start_time, "Upload icon", message);
}
}
+2 -2
View File
@@ -4544,7 +4544,7 @@ gsk_gl_render_job_render (GskGLRenderJob *job,
gsk_gl_render_job_visit_node (job, root);
gdk_gl_context_pop_debug_group (job->command_queue->context);
gdk_profiler_add_mark (start_time, GDK_PROFILER_CURRENT_TIME-start_time, "Build GL command queue", "");
gdk_profiler_end_mark (start_time, "Build GL command queue", "");
#if 0
/* At this point the atlases have uploaded content while we processed
@@ -4562,7 +4562,7 @@ gsk_gl_render_job_render (GskGLRenderJob *job,
gdk_gl_context_push_debug_group (job->command_queue->context, "Executing command queue");
gsk_gl_command_queue_execute (job->command_queue, surface_height, scale, job->region, job->default_framebuffer);
gdk_gl_context_pop_debug_group (job->command_queue->context);
gdk_profiler_add_mark (start_time, GDK_PROFILER_CURRENT_TIME-start_time, "Execute GL command queue", "");
gdk_profiler_end_mark (start_time, "Execute GL command queue", "");
}
static int
+9 -3
View File
@@ -517,15 +517,21 @@ gsk_gpu_cached_atlas_allocate (GskGpuCachedAtlas *atlas,
if (best_slice >= i && i == atlas->n_slices)
{
gsize slice_height;
if (!can_add_slice)
return FALSE;
slice_height = round_up_atlas_size (MAX (height, 4));
if (slice_height > ATLAS_SIZE - y)
return FALSE;
atlas->n_slices++;
if (atlas->n_slices == MAX_SLICES_PER_ATLAS)
atlas->slices[i].height = ATLAS_SIZE - y;
else
atlas->slices[i].height = round_up_atlas_size (MAX (height, 4));
slice_height = ATLAS_SIZE - y;
atlas->slices[i].width = 0;
atlas->slices[i].height = slice_height;
best_y = y;
best_slice = i;
}
+1
View File
@@ -3335,6 +3335,7 @@ gsk_container_node_new (GskRenderNode **children,
self->children = g_malloc_n (n_children, sizeof (GskRenderNode *));
self->children[0] = gsk_render_node_ref (children[0]);
node->offscreen_for_opacity = children[0]->offscreen_for_opacity;
gsk_rect_init_from_rect (&bounds, &(children[0]->bounds));
node->preferred_depth = gdk_memory_depth_merge (node->preferred_depth,
gsk_render_node_get_preferred_depth (children[0]));
+97 -80
View File
@@ -981,7 +981,7 @@ ensure_fontmap (Context *context)
g_object_set_data_full (G_OBJECT (context->fontmap), "font-files", files, (GDestroyNotify) g_ptr_array_unref);
}
static void
static gboolean
add_font_from_file (Context *context,
const char *path,
GError **error)
@@ -997,7 +997,7 @@ add_font_from_file (Context *context,
GTK_CSS_PARSER_ERROR,
GTK_CSS_PARSER_ERROR_FAILED,
"Custom fonts are not implemented for %s", G_OBJECT_TYPE_NAME (context->fontmap));
return;
return FALSE;
}
config = pango_fc_font_map_get_config (PANGO_FC_FONT_MAP (context->fontmap));
@@ -1006,18 +1006,20 @@ add_font_from_file (Context *context,
{
g_set_error (error,
GTK_CSS_PARSER_ERROR,
GTK_CSS_PARSER_ERROR_FAILED,
"Failed to add %s to FcConfig", path);
return;
GTK_CSS_PARSER_ERROR_UNKNOWN_VALUE,
"Failed to load font");
return FALSE;
}
files = (GPtrArray *) g_object_get_data (G_OBJECT (context->fontmap), "font-files");
g_ptr_array_add (files, g_strdup (path));
pango_fc_font_map_config_changed (PANGO_FC_FONT_MAP (context->fontmap));
return TRUE;
}
static void
static gboolean
add_font_from_bytes (Context *context,
GBytes *bytes,
GError **error)
@@ -1025,10 +1027,11 @@ add_font_from_bytes (Context *context,
GFile *file;
GIOStream *iostream;
GOutputStream *ostream;
gboolean result;
file = g_file_new_tmp ("gtk4-font-XXXXXX.ttf", (GFileIOStream **) &iostream, error);
if (!file)
return;
return FALSE;
ostream = g_io_stream_get_output_stream (iostream);
if (g_output_stream_write_bytes (ostream, bytes, NULL, error) == -1)
@@ -1036,20 +1039,22 @@ add_font_from_bytes (Context *context,
g_object_unref (file);
g_object_unref (iostream);
return;
return FALSE;
}
g_io_stream_close (iostream, NULL, NULL);
g_object_unref (iostream);
add_font_from_file (context, g_file_peek_path (file), error);
result = add_font_from_file (context, g_file_peek_path (file), error);
g_object_unref (file);
return result;
}
#else /* !HAVE_PANGOFT */
static void
static gboolean
add_font_from_bytes (Context *context,
GBytes *bytes,
GError **error)
@@ -1058,6 +1063,7 @@ add_font_from_bytes (Context *context,
GTK_CSS_PARSER_ERROR,
GTK_CSS_PARSER_ERROR_FAILED,
"Not implemented");
return FALSE;
}
#endif
@@ -1068,94 +1074,105 @@ parse_font (GtkCssParser *parser,
gpointer out_font)
{
PangoFont *font = NULL;
char *s;
GtkCssLocation start_location;
PangoFontMap *fontmap;
char *font_name;
fontmap = pango_cairo_font_map_get_default ();
s = gtk_css_parser_consume_string (parser);
if (s == NULL)
font_name = gtk_css_parser_consume_string (parser);
if (font_name == NULL)
return FALSE;
start_location = *gtk_css_parser_get_start_location (parser);
if (context->fontmap)
font = font_from_string (context->fontmap, font_name);
if (gtk_css_parser_try_token (parser, GTK_CSS_TOKEN_URL) ||
gtk_css_parser_has_function (parser, "url"))
if (gtk_css_parser_has_url (parser))
{
char *url;
char *scheme;
GBytes *bytes = NULL;
GError *error = NULL;
/* If we have a url, it is a bug if the font already exists in our custom fontmap */
if (context->fontmap)
if (font != NULL)
{
font = font_from_string (context->fontmap, s);
if (font)
gtk_css_parser_error_value (parser, "A font with this name already exists.");
/* consume the url to avoid more errors */
url = gtk_css_parser_consume_url (parser);
g_free (url);
}
else
{
char *scheme;
GBytes *bytes;
GError *error = NULL;
GtkCssLocation start_location;
gboolean success = FALSE;
start_location = *gtk_css_parser_get_start_location (parser);
url = gtk_css_parser_consume_url (parser);
if (url != NULL)
{
g_object_unref (font);
gtk_css_parser_error_value (parser, "This font already exists.");
return FALSE;
scheme = g_uri_parse_scheme (url);
if (scheme && g_ascii_strcasecmp (scheme, "data") == 0)
{
bytes = gtk_css_data_url_parse (url, NULL, &error);
}
else
{
GFile *file;
file = g_file_new_for_uri (url);
bytes = g_file_load_bytes (file, NULL, NULL, &error);
g_object_unref (file);
}
g_free (scheme);
g_free (url);
if (bytes != NULL)
{
success = add_font_from_bytes (context, bytes, &error);
g_bytes_unref (bytes);
}
if (!success)
{
gtk_css_parser_emit_error (parser,
&start_location,
gtk_css_parser_get_end_location (parser),
error);
}
}
if (success)
{
font = font_from_string (context->fontmap, font_name);
if (!font)
{
gtk_css_parser_error (parser,
GTK_CSS_PARSER_ERROR_UNKNOWN_VALUE,
&start_location,
gtk_css_parser_get_end_location (parser),
"The given url does not define a font named \"%s\"",
font_name);
}
}
}
}
else
{
if (!font)
font = font_from_string (pango_cairo_font_map_get_default (), font_name);
url = gtk_css_parser_consume_url (parser);
scheme = g_uri_parse_scheme (url);
if (scheme && g_ascii_strcasecmp (scheme, "data") == 0)
{
bytes = gtk_css_data_url_parse (url, NULL, &error);
}
else
{
GFile *file;
file = g_file_new_for_uri (url);
bytes = g_file_load_bytes (file, NULL, NULL, &error);
g_object_unref (file);
}
g_free (scheme);
g_free (url);
if (bytes)
{
add_font_from_bytes (context, bytes, &error);
g_bytes_unref (bytes);
fontmap = context->fontmap;
}
else
{
g_assert (error != NULL);
gtk_css_parser_emit_error (parser,
&start_location,
gtk_css_parser_get_end_location (parser),
error);
g_clear_error (&error);
return FALSE;
}
if (!font)
gtk_css_parser_error_value (parser, "The font \"%s\" does not exist", font_name);
}
font = font_from_string (fontmap, s);
g_free (font_name);
if (!font && context->fontmap && fontmap != context->fontmap)
font = font_from_string (context->fontmap, s);
if (!font)
if (font)
{
*((PangoFont**)out_font) = font;
return TRUE;
}
else
{
gtk_css_parser_error_value (parser, "This font does not exist.");
return FALSE;
}
*((PangoFont**)out_font) = font;
g_free (s);
return TRUE;
}
static void
+8
View File
@@ -957,6 +957,14 @@ gtk_css_parser_parse_url_arg (GtkCssParser *parser,
return 1;
}
gboolean
gtk_css_parser_has_url (GtkCssParser *self)
{
return gtk_css_parser_has_token (self, GTK_CSS_TOKEN_URL)
|| gtk_css_parser_has_token (self, GTK_CSS_TOKEN_BAD_URL)
|| gtk_css_parser_has_function (self, "url");
}
/**
* gtk_css_parser_consume_url:
* @self: a `GtkCssParser`
+1
View File
@@ -116,6 +116,7 @@ gboolean gtk_css_parser_has_token (GtkCssParser
GtkCssTokenType token_type);
gboolean gtk_css_parser_has_ident (GtkCssParser *self,
const char *ident);
gboolean gtk_css_parser_has_url (GtkCssParser *self);
gboolean gtk_css_parser_has_number (GtkCssParser *self);
gboolean gtk_css_parser_has_integer (GtkCssParser *self);
gboolean gtk_css_parser_has_function (GtkCssParser *self,
+2 -2
View File
@@ -257,14 +257,14 @@ gtk_application_startup (GApplication *g_application)
before2 = GDK_PROFILER_CURRENT_TIME;
gtk_init ();
gdk_profiler_end_mark (before2, "gtk init", NULL);
gdk_profiler_end_mark (before2, "gtk_init", NULL);
priv->impl = gtk_application_impl_new (application, gdk_display_get_default ());
gtk_application_impl_startup (priv->impl, priv->register_session);
gtk_application_load_resources (application);
gdk_profiler_end_mark (before, "gtk application startup", NULL);
gdk_profiler_end_mark (before, "Application startup", NULL);
}
static void
+1 -1
View File
@@ -2251,7 +2251,7 @@ _gtk_builder_parser_parse_buffer (GtkBuilder *builder,
guint64 after = GDK_PROFILER_CURRENT_TIME;
if (after - before > 500000) /* half a millisecond */
{
gdk_profiler_add_mark (before, after - before, "builder load", filename);
gdk_profiler_add_mark (before, after - before, "Builder load", filename);
}
}
}
+1 -1
View File
@@ -1363,7 +1363,7 @@ gtk_css_node_validate (GtkCssNode *cssnode)
if (GDK_PROFILER_IS_RUNNING)
{
gdk_profiler_end_mark (before, "css validation", "");
gdk_profiler_end_mark (before, "Validate CSS", "");
gdk_profiler_set_int_counter (invalidated_nodes_counter, invalidated_nodes);
gdk_profiler_set_int_counter (created_styles_counter, created_styles);
invalidated_nodes = 0;
+2 -2
View File
@@ -1016,7 +1016,7 @@ gtk_css_provider_postprocess (GtkCssProvider *css_provider)
}
#endif
gdk_profiler_end_mark (before, "create selector tree", NULL);
gdk_profiler_end_mark (before, "Create CSS selector tree", NULL);
}
static void
@@ -1081,7 +1081,7 @@ gtk_css_provider_load_internal (GtkCssProvider *self,
if (GDK_PROFILER_IS_RUNNING)
{
char *uri = g_file_get_uri (file);
gdk_profiler_end_mark (before, "theme load", uri);
gdk_profiler_end_mark (before, "CSS theme load", uri);
g_free (uri);
}
}
+2 -2
View File
@@ -75,7 +75,7 @@
*
* // This widget accepts two types of drop types: GFile objects
* // and GdkPixbuf objects
* gtk_drop_target_set_gtypes (target, (GTypes [2]) {
* gtk_drop_target_set_gtypes (target, (GType [2]) {
* G_TYPE_FILE,
* GDK_TYPE_PIXBUF,
* }, 2);
@@ -935,7 +935,7 @@ gtk_drop_target_get_formats (GtkDropTarget *self)
* that can be dropped on the target
* @n_types: number of @types
*
* Sets the supported `GTypes` for this drop target.
* Sets the supported `GType`s for this drop target.
*/
void
gtk_drop_target_set_gtypes (GtkDropTarget *self,
+2 -2
View File
@@ -761,7 +761,7 @@ populate_emoji_chooser (gpointer data)
now = g_get_monotonic_time ();
if (now > start + 200) /* 2 ms */
{
gdk_profiler_add_mark (start * 1000, (now - start) * 1000, "emojichooser", "populate");
gdk_profiler_add_mark (start * 1000, (now - start) * 1000, "Emojichooser populate", NULL);
return G_SOURCE_CONTINUE;
}
}
@@ -771,7 +771,7 @@ populate_emoji_chooser (gpointer data)
chooser->box = NULL;
chooser->populate_idle = 0;
gdk_profiler_end_mark (start, "emojichooser", "populate (finish)");
gdk_profiler_end_mark (start, "Emojichooser populate (finish)", NULL);
return G_SOURCE_REMOVE;
}
+2 -2
View File
@@ -2069,7 +2069,7 @@ ensure_valid_themes (GtkIconTheme *self,
load_themes (self);
gdk_profiler_end_mark (before, "icon theme load", self->current_theme);
gdk_profiler_end_mark (before, "Icon theme load", self->current_theme);
if (was_valid)
queue_theme_changed (self);
@@ -3822,7 +3822,7 @@ icon_ensure_texture__locked (GtkIconPaintable *icon,
/* Don't report quick (< 0.5 msec) parses */
if (end - before > 500000 || !in_thread)
{
gdk_profiler_add_markf (before, (end - before), in_thread ? "icon load (thread)" : "icon load" ,
gdk_profiler_add_markf (before, (end - before), in_thread ? "Icon load (thread)" : "Icon load" ,
"%s size %d@%d", icon->filename, icon->desired_size, icon->desired_scale);
}
}
+1 -1
View File
@@ -353,7 +353,7 @@ init_compose_table_thread_cb (GTask *task,
g_task_return_boolean (task, TRUE);
gdk_profiler_end_mark (before, "im compose table load (thread)", NULL);
gdk_profiler_end_mark (before, "Compose table load (thread)", NULL);
}
static void
+3 -3
View File
@@ -549,7 +549,7 @@ do_post_parse_initialization (void)
gsk_render_node_init_types ();
_gtk_ensure_resources ();
gdk_profiler_end_mark (before, "basic initialization", NULL);
gdk_profiler_end_mark (before, "Basic initialization", NULL);
gtk_initialized = TRUE;
@@ -559,13 +559,13 @@ do_post_parse_initialization (void)
#endif
gtk_im_modules_init ();
gtk_media_file_extension_init ();
gdk_profiler_end_mark (before, "init modules", NULL);
gdk_profiler_end_mark (before, "Init modules", NULL);
before = GDK_PROFILER_CURRENT_TIME;
display_manager = gdk_display_manager_get ();
if (gdk_display_manager_get_default_display (display_manager) != NULL)
default_display_notify_cb (display_manager);
gdk_profiler_end_mark (before, "create display", NULL);
gdk_profiler_end_mark (before, "Create display", NULL);
g_signal_connect (display_manager, "notify::default-display",
G_CALLBACK (default_display_notify_cb),
+2 -2
View File
@@ -11956,7 +11956,7 @@ gtk_widget_render (GtkWidget *widget,
if (GDK_PROFILER_IS_RUNNING)
{
before_render = GDK_PROFILER_CURRENT_TIME;
gdk_profiler_add_mark (before_snapshot, (before_render - before_snapshot), "widget snapshot", "");
gdk_profiler_add_mark (before_snapshot, (before_render - before_snapshot), "Widget snapshot", "");
}
if (root != NULL)
@@ -11972,7 +11972,7 @@ gtk_widget_render (GtkWidget *widget,
gsk_render_node_unref (root);
gdk_profiler_end_mark (before_render, "widget render", "");
gdk_profiler_end_mark (before_render, "Widget render", "");
}
}
+86 -78
View File
@@ -22,9 +22,9 @@ msgid ""
msgstr ""
"Project-Id-Version: gtk master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gtk/-/issues/\n"
"POT-Creation-Date: 2023-09-19 01:36+0000\n"
"POT-Creation-Date: 2023-11-18 03:13+0000\n"
"PO-Revision-Date: 2023-09-19 18:38+0200\n"
"Last-Translator: Guillaume Bernard <associations@guillaume-bernard.fr>\n"
"Last-Translator: AesirIvy <aesir.ivy@gmx.com>\n"
"Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
@@ -61,59 +61,59 @@ msgstr "Impossible de fournir le contenu comme « %s »"
msgid "Cannot provide contents as %s"
msgstr "Impossible de fournir le contenu comme %s"
#: gdk/gdkdisplay.c:156 gdk/gdkglcontext.c:442
#: gdk/gdkdisplay.c:156 gdk/gdkglcontext.c:443
msgid "The current backend does not support OpenGL"
msgstr "Le moteur actuel ne gère pas OpenGL"
#: gdk/gdkdisplay.c:1245 gdk/gdksurface.c:1252
#: gdk/gdkdisplay.c:1244 gdk/gdksurface.c:1252
msgid "Vulkan support disabled via GDK_DEBUG"
msgstr "Prise en charge de Vulkan désactivée via GDK_DEBUG"
#: gdk/gdkdisplay.c:1277
#: gdk/gdkdisplay.c:1276
msgid "GL support disabled via GDK_DEBUG"
msgstr "Prise en charge de GL désactivée via GDK_DEBUG"
#: gdk/gdkdisplay.c:1575
#: gdk/gdkdisplay.c:1574
msgid "No EGL configuration available"
msgstr "Aucune configuration EGL disponible"
#: gdk/gdkdisplay.c:1583
#: gdk/gdkdisplay.c:1582
msgid "Failed to get EGL configurations"
msgstr "Impossible dobtenir les configurations EGL"
#: gdk/gdkdisplay.c:1613
#: gdk/gdkdisplay.c:1612
msgid "No EGL configuration with required features found"
msgstr ""
"Aucune configuration EGL avec les fonctionnalités requises na été trouvée"
#: gdk/gdkdisplay.c:1620
#: gdk/gdkdisplay.c:1619
msgid "No perfect EGL configuration found"
msgstr "Aucune configuration EGL idéale trouvée"
#: gdk/gdkdisplay.c:1662
#: gdk/gdkdisplay.c:1661
#, c-format
msgid "EGL implementation is missing extension %s"
msgid_plural "EGL implementation is missing %2$d extensions: %1$s"
msgstr[0] "Lextension %s manque dans limplémentation EGL"
msgstr[1] "%2$d extensions manquent dans limplémentation EGL : %1$s"
#: gdk/gdkdisplay.c:1695
#: gdk/gdkdisplay.c:1694
msgid "libEGL not available in this sandbox"
msgstr "libEGL nest pas disponible dans ce bac à sable"
#: gdk/gdkdisplay.c:1696
#: gdk/gdkdisplay.c:1695
msgid "libEGL not available"
msgstr "libEGL non disponible"
#: gdk/gdkdisplay.c:1706
#: gdk/gdkdisplay.c:1705
msgid "Failed to create EGL display"
msgstr "Impossible de créer laffichage EGL"
#: gdk/gdkdisplay.c:1716
#: gdk/gdkdisplay.c:1715
msgid "Could not initialize EGL display"
msgstr "Impossible dinitialiser laffichage EGL"
#: gdk/gdkdisplay.c:1727
#: gdk/gdkdisplay.c:1726
#, c-format
msgid "EGL version %d.%d is too old. GTK requires %d.%d"
msgstr "La version %d.%d dEGL est trop ancienne. GTK requiert %d.%d"
@@ -127,33 +127,33 @@ msgstr ""
msgid "No compatible formats to transfer contents."
msgstr "Aucun format compatible pour le transfert du contenu."
#: gdk/gdkglcontext.c:401 gdk/x11/gdkglcontext-glx.c:642
#: gdk/gdkglcontext.c:402 gdk/x11/gdkglcontext-glx.c:642
msgid "No GL API allowed."
msgstr "Aucune API GL autorisée."
#: gdk/gdkglcontext.c:425 gdk/win32/gdkglcontext-win32-wgl.c:387
#: gdk/gdkglcontext.c:426 gdk/win32/gdkglcontext-win32-wgl.c:387
#: gdk/win32/gdkglcontext-win32-wgl.c:530
#: gdk/win32/gdkglcontext-win32-wgl.c:574 gdk/x11/gdkglcontext-glx.c:691
msgid "Unable to create a GL context"
msgstr "Impossible de créer un contexte GL"
#: gdk/gdkglcontext.c:1280
#: gdk/gdkglcontext.c:1281
msgid "Anything but OpenGL ES disabled via GDK_DEBUG"
msgstr "Tout sauf OpenGL ES est désactivé via GTK_DEBUG"
#: gdk/gdkglcontext.c:1289
#: gdk/gdkglcontext.c:1290
#, c-format
msgid "Application does not support %s API"
msgstr "Lapplication ne prend pas en charge lAPI %s"
#. translators: This is about OpenGL backend names, like
#. * "Trying to use X11 GLX, but EGL is already in use"
#: gdk/gdkglcontext.c:1864
#: gdk/gdkglcontext.c:1899
#, c-format
msgid "Trying to use %s, but %s is already in use"
msgstr "Tentative dutilisation de %s, mais %s est déjà utilisé"
#: gdk/gdktexture.c:528
#: gdk/gdktexture.c:530
msgid "Unknown image format."
msgstr "Format dimage inconnu."
@@ -752,8 +752,7 @@ msgstr "Aucune implémentation GL disponible"
#: gdk/win32/gdkglcontext-win32-wgl.c:396
#, c-format
msgid "WGL version %d.%d is too low, need at least %d.%d"
msgstr ""
"La version %d.%d dEGL est trop basse, elle doit être au moins à %d.%d"
msgstr "La version %d.%d dEGL est trop basse, elle doit être au moins à %d.%d"
#: gdk/win32/gdkglcontext-win32-wgl.c:414
#, c-format
@@ -1084,18 +1083,18 @@ msgctxt "progress bar label"
msgid "%d%%"
msgstr "%d %%"
#: gtk/deprecated/gtkcolorbutton.c:183 gtk/deprecated/gtkcolorbutton.c:311
#: gtk/deprecated/gtkcolorbutton.c:183 gtk/deprecated/gtkcolorbutton.c:314
#: gtk/gtkcolordialog.c:411
msgid "Pick a Color"
msgstr "Choisissez une couleur"
#: gtk/deprecated/gtkcolorbutton.c:502 gtk/gtkcolorchooserwidget.c:313
#: gtk/deprecated/gtkcolorbutton.c:505 gtk/gtkcolorchooserwidget.c:313
#: gtk/gtkcolordialogbutton.c:335
#, c-format
msgid "Red %d%%, Green %d%%, Blue %d%%, Alpha %d%%"
msgstr "Rouge %d%%, Vert %d%%, Bleu %d%%, Alpha %d%%"
#: gtk/deprecated/gtkcolorbutton.c:508 gtk/gtkcolorchooserwidget.c:319
#: gtk/deprecated/gtkcolorbutton.c:511 gtk/gtkcolorchooserwidget.c:319
#: gtk/gtkcolordialogbutton.c:341
#, c-format
msgid "Red %d%%, Green %d%%, Blue %d%%"
@@ -1105,17 +1104,17 @@ msgstr "Rouge %d%%, Vert %d%%, Bleu %d%%"
msgid "Sans 12"
msgstr "Sans 12"
#: gtk/deprecated/gtkfontbutton.c:507 gtk/deprecated/gtkfontbutton.c:621
#: gtk/deprecated/gtkfontbutton.c:507 gtk/deprecated/gtkfontbutton.c:624
#: gtk/gtkfontdialog.c:596
msgid "Pick a Font"
msgstr "Choisissez une police"
#: gtk/deprecated/gtkfontbutton.c:597 gtk/gtkfilechooserwidget.c:3871
#: gtk/deprecated/gtkfontbutton.c:600 gtk/gtkfilechooserwidget.c:3871
#: gtk/gtkfontdialogbutton.c:126 gtk/inspector/visual.ui:169
msgid "Font"
msgstr "Police"
#: gtk/deprecated/gtkfontbutton.c:1152 gtk/gtkfontdialogbutton.c:652
#: gtk/deprecated/gtkfontbutton.c:1155 gtk/gtkfontdialogbutton.c:652
msgctxt "font"
msgid "None"
msgstr "Aucune"
@@ -2179,7 +2178,7 @@ msgstr "_Droite :"
msgid "Paper Margins"
msgstr "Marges du papier"
#: gtk/gtkentry.c:3673
#: gtk/gtkentry.c:3685
msgid "Insert Emoji"
msgstr "Insérer un émoji"
@@ -2249,7 +2248,7 @@ msgstr "Un fichier avec ce nom existe déjà"
#: gtk/gtkmessagedialog.c:179 gtk/gtkmountoperation.c:608
#: gtk/print/gtkpagesetupunixdialog.c:282 gtk/print/gtkprintbackend.c:638
#: gtk/print/gtkprintunixdialog.c:682 gtk/print/gtkprintunixdialog.c:839
#: gtk/gtkwindow.c:6242 gtk/ui/gtkappchooserdialog.ui:48
#: gtk/gtkwindow.c:6233 gtk/ui/gtkappchooserdialog.ui:48
#: gtk/ui/gtkassistant.ui:52 gtk/ui/gtkcolorchooserdialog.ui:36
#: gtk/ui/gtkfontchooserdialog.ui:27
msgid "_Cancel"
@@ -2339,7 +2338,7 @@ msgid "If you delete an item, it will be permanently lost."
msgstr "Si vous supprimez un élément, il sera définitivement perdu."
#: gtk/gtkfilechooserwidget.c:1185 gtk/gtkfilechooserwidget.c:1815
#: gtk/gtklabel.c:5695 gtk/gtktext.c:6145 gtk/gtktextview.c:9018
#: gtk/gtklabel.c:5695 gtk/gtktext.c:6147 gtk/gtktextview.c:9018
msgid "_Delete"
msgstr "_Supprimer"
@@ -2465,6 +2464,7 @@ msgid "Yesterday"
msgstr "Hier"
#: gtk/gtkfilechooserwidget.c:3823
#, c-format
msgid "%-e %b"
msgstr "%-e %b"
@@ -2677,19 +2677,19 @@ msgstr "Fermer"
msgid "Close the infobar"
msgstr "Fermer la barre dinformation"
#: gtk/gtklabel.c:5692 gtk/gtktext.c:6133 gtk/gtktextview.c:9006
#: gtk/gtklabel.c:5692 gtk/gtktext.c:6135 gtk/gtktextview.c:9006
msgid "Cu_t"
msgstr "Co_uper"
#: gtk/gtklabel.c:5693 gtk/gtktext.c:6137 gtk/gtktextview.c:9010
#: gtk/gtklabel.c:5693 gtk/gtktext.c:6139 gtk/gtktextview.c:9010
msgid "_Copy"
msgstr "_Copier"
#: gtk/gtklabel.c:5694 gtk/gtktext.c:6141 gtk/gtktextview.c:9014
#: gtk/gtklabel.c:5694 gtk/gtktext.c:6143 gtk/gtktextview.c:9014
msgid "_Paste"
msgstr "C_oller"
#: gtk/gtklabel.c:5700 gtk/gtktext.c:6154 gtk/gtktextview.c:9039
#: gtk/gtklabel.c:5700 gtk/gtktext.c:6156 gtk/gtktextview.c:9039
msgid "Select _All"
msgstr "_Tout sélectionner"
@@ -2772,7 +2772,7 @@ msgid "Play"
msgstr "Lecture"
#: gtk/gtkmessagedialog.c:162 gtk/gtkmessagedialog.c:180
#: gtk/print/gtkprintbackend.c:639 gtk/gtkwindow.c:6243
#: gtk/print/gtkprintbackend.c:639 gtk/gtkwindow.c:6234
msgid "_OK"
msgstr "_Valider"
@@ -3377,8 +3377,8 @@ msgstr ""
#. window
#: gtk/print/gtkprintoperation-portal.c:264
#: gtk/print/gtkprintoperation-portal.c:584
#: gtk/print/gtkprintoperation-portal.c:653 gtk/print/gtkprintunixdialog.c:3008
#: gtk/print/gtkprintoperation-portal.c:594
#: gtk/print/gtkprintoperation-portal.c:663 gtk/print/gtkprintunixdialog.c:3008
msgid "Print"
msgstr "Imprimer"
@@ -3553,7 +3553,7 @@ msgstr ""
"Impossible de trouver une application enregistrée sous le nom « %s » pour "
"l’élément dont lURI est « %s »"
#: gtk/gtksearchentry.c:758
#: gtk/gtksearchentry.c:767
msgid "Clear Entry"
msgstr "Efface la saisie"
@@ -3644,7 +3644,7 @@ msgctxt "accessibility"
msgid "Sidebar"
msgstr "Panneau latéral"
#: gtk/gtktext.c:6159 gtk/gtktextview.c:9044
#: gtk/gtktext.c:6161 gtk/gtktextview.c:9044
msgid "Insert _Emoji"
msgstr "Insérer un _émoji"
@@ -3656,12 +3656,12 @@ msgstr "Ann_uler"
msgid "_Redo"
msgstr "_Rétablir"
#: gtk/gtkwindow.c:6231
#: gtk/gtkwindow.c:6222
#, c-format
msgid "Do you want to use GTK Inspector?"
msgstr "Voulez-vous utiliser lInspecteur GTK ?"
#: gtk/gtkwindow.c:6233
#: gtk/gtkwindow.c:6224
#, c-format
msgid ""
"GTK Inspector is an interactive debugger that lets you explore and modify "
@@ -3672,7 +3672,7 @@ msgstr ""
"modifier les éléments internes de toute application GTK. Son utilisation "
"peut causer une interruption ou un plantage de lapplication."
#: gtk/gtkwindow.c:6238
#: gtk/gtkwindow.c:6229
msgid "Dont show this message again"
msgstr "Ne plus afficher ce message"
@@ -4024,8 +4024,8 @@ msgid "Surface"
msgstr "Surface"
#: gtk/inspector/misc-info.ui:365 gtk/inspector/misc-info.ui:400
#: gtk/inspector/misc-info.ui:435 gtk/inspector/prop-editor.c:1150
#: gtk/inspector/prop-editor.c:1533 gtk/inspector/window.ui:396
#: gtk/inspector/misc-info.ui:435 gtk/inspector/prop-editor.c:1153
#: gtk/inspector/prop-editor.c:1536 gtk/inspector/window.ui:396
msgid "Properties"
msgstr "Propriétés"
@@ -4077,7 +4077,7 @@ msgstr "Pointeur : %p"
#. Translators: %s is a type name, for example
#. * GtkPropertyExpression with value \"2.5\"
#.
#: gtk/inspector/prop-editor.c:824
#: gtk/inspector/prop-editor.c:827
#, c-format
msgid "%s with value \"%s\""
msgstr "%s avec valeur « %s »"
@@ -4085,7 +4085,7 @@ msgstr "%s avec valeur « %s »"
#. Translators: Both %s are type names, for example
#. * GtkPropertyExpression with type GObject
#.
#: gtk/inspector/prop-editor.c:835
#: gtk/inspector/prop-editor.c:838
#, c-format
msgid "%s with type %s"
msgstr "%s de type %s"
@@ -4093,7 +4093,7 @@ msgstr "%s de type %s"
#. Translators: Both %s are type names, for example
#. * GtkObjectExpression for GtkStringObject 0x23456789
#.
#: gtk/inspector/prop-editor.c:848
#: gtk/inspector/prop-editor.c:851
#, c-format
msgid "%s for %s %p"
msgstr "%s pour %s %p"
@@ -4101,71 +4101,71 @@ msgstr "%s pour %s %p"
#. Translators: Both %s are type names, for example
#. * GtkPropertyExpression with value type: gchararray
#.
#: gtk/inspector/prop-editor.c:878
#: gtk/inspector/prop-editor.c:881
#, c-format
msgid "%s with value type %s"
msgstr "%s avec type de valeur %s"
#: gtk/inspector/prop-editor.c:1227
#: gtk/inspector/prop-editor.c:1230
#, c-format
msgid "Uneditable property type: %s"
msgstr "Type de propriété non éditable : %s"
#: gtk/inspector/prop-editor.c:1385
#: gtk/inspector/prop-editor.c:1388
msgctxt "column number"
msgid "None"
msgstr "Aucun"
#: gtk/inspector/prop-editor.c:1422
#: gtk/inspector/prop-editor.c:1425
msgid "Attribute:"
msgstr "Attribut :"
#: gtk/inspector/prop-editor.c:1425
#: gtk/inspector/prop-editor.c:1428
msgid "Model"
msgstr "Modèle"
#: gtk/inspector/prop-editor.c:1430
#: gtk/inspector/prop-editor.c:1433
msgid "Column:"
msgstr "Colonne :"
#. Translators: %s is a type name, for example
#. * Action from 0x2345678 (GtkApplicationWindow)
#.
#: gtk/inspector/prop-editor.c:1529
#: gtk/inspector/prop-editor.c:1532
#, c-format
msgid "Action from: %p (%s)"
msgstr "Action de : %p (%s)"
#: gtk/inspector/prop-editor.c:1584
#: gtk/inspector/prop-editor.c:1587
msgid "Reset"
msgstr "Réinitialiser"
#: gtk/inspector/prop-editor.c:1592
#: gtk/inspector/prop-editor.c:1595
msgctxt "GtkSettings source"
msgid "Default"
msgstr "Par défaut"
#: gtk/inspector/prop-editor.c:1595
#: gtk/inspector/prop-editor.c:1598
msgctxt "GtkSettings source"
msgid "Theme"
msgstr "Thème"
#: gtk/inspector/prop-editor.c:1598
#: gtk/inspector/prop-editor.c:1601
msgctxt "GtkSettings source"
msgid "XSettings"
msgstr "Paramètres X"
#: gtk/inspector/prop-editor.c:1602
#: gtk/inspector/prop-editor.c:1605
msgctxt "GtkSettings source"
msgid "Application"
msgstr "Application"
#: gtk/inspector/prop-editor.c:1605
#: gtk/inspector/prop-editor.c:1608
msgctxt "GtkSettings source"
msgid "Unknown"
msgstr "Inconnue"
#: gtk/inspector/prop-editor.c:1608
#: gtk/inspector/prop-editor.c:1611
msgid "Source:"
msgstr "Source :"
@@ -7228,7 +7228,7 @@ 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-rendernode-tool-info.c:200 tools/gtk-rendernode-tool-show.c:102
#: tools/gtk-rendernode-tool-info.c:202 tools/gtk-rendernode-tool-show.c:106
msgid "FILE"
msgstr "FICHIER"
@@ -7260,7 +7260,7 @@ msgid "Use style from CSS file"
msgstr "Utiliser le style dun fichier CSS"
#: tools/gtk-builder-tool-preview.c:187 tools/gtk-builder-tool-screenshot.c:370
#: tools/gtk-builder-tool-validate.c:268 tools/gtk-rendernode-tool-show.c:109
#: tools/gtk-builder-tool-validate.c:268 tools/gtk-rendernode-tool-show.c:113
#: tools/gtk-rendernode-tool-render.c:204
#, c-format
msgid "Could not initialize windowing system\n"
@@ -7515,47 +7515,50 @@ msgstr ""
" render Prendre une capture d’écran du nœud\n"
"\n"
#: tools/gtk-rendernode-tool-info.c:177
#: tools/gtk-rendernode-tool-info.c:179
#, c-format
msgid "Number of nodes: %u\n"
msgstr "Nombre de nœuds : %u\n"
#: tools/gtk-rendernode-tool-info.c:184
#: tools/gtk-rendernode-tool-info.c:186
#, c-format
msgid "Depth: %u\n"
msgstr "Profondeur : %u\n"
#: tools/gtk-rendernode-tool-info.c:187
#: tools/gtk-rendernode-tool-info.c:189
#, c-format
msgid "Bounds: %g x %g\n"
msgstr "Limites : %g × %g\n"
#: tools/gtk-rendernode-tool-info.c:188
#: tools/gtk-rendernode-tool-info.c:190
#, c-format
msgid "Origin: %g %g\n"
msgstr "Origine : %g %g\n"
#: tools/gtk-rendernode-tool-info.c:209
#: tools/gtk-rendernode-tool-info.c:211
msgid "Provide information about the render node."
msgstr "Fournir des informations sur le nœud de rendu."
#: tools/gtk-rendernode-tool-info.c:222 tools/gtk-rendernode-tool-show.c:130
#: tools/gtk-rendernode-tool-info.c:224 tools/gtk-rendernode-tool-show.c:134
#: tools/gtk-rendernode-tool-render.c:225
#, c-format
msgid "No .node file specified\n"
msgstr "Aucun fichier .node indiqué\n"
#: tools/gtk-rendernode-tool-info.c:228
#: tools/gtk-rendernode-tool-info.c:230
#, c-format
msgid "Can only accept a single .node file\n"
msgstr ""
"Naccepte quun unique fichier .node\n"
msgstr "Naccepte quun unique fichier .node\n"
#: tools/gtk-rendernode-tool-show.c:117
#: tools/gtk-rendernode-tool-show.c:105
msgid "Don't add a titlebar"
msgstr "Ne pas ajouter de barre de titre"
#: tools/gtk-rendernode-tool-show.c:121
msgid "Show the render node."
msgstr "Afficher le nœud de rendu."
#: tools/gtk-rendernode-tool-show.c:136
#: tools/gtk-rendernode-tool-show.c:140
#, c-format
msgid "Can only preview a single .node file\n"
msgstr "Ne peut afficher laperçu que dun unique fichier .node\n"
@@ -7590,14 +7593,19 @@ msgstr "Réaliser le rendu du fichier .node vers une image."
#, c-format
msgid "Can only render a single .node file to a single output file\n"
msgstr ""
"Ne peut effectuer le rendu que dun unique fichier .node vers un seul fichier "
"de sortie\n"
"Ne peut effectuer le rendu que dun unique fichier .node vers un seul "
"fichier de sortie\n"
#: tools/gtk-rendernode-tool-utils.c:51
#, c-format
msgid "Error at %s: %s\n"
msgstr "Erreur à %s : %s\n"
#: tools/gtk-rendernode-tool-utils.c:69
#, c-format
msgid "Failed to load node file: %s\n"
msgstr "Impossible de charger le fichier de nœud : %s\n"
#: tools/updateiconcache.c:1391
#, c-format
msgid "Failed to write header\n"
@@ -0,0 +1,15 @@
opacity {
opacity: 0.6;
child: container {
container {
color {
bounds: 0 0 40 40;
color: rgb(255,0,0);
}
color {
bounds: 10 10 40 40;
color: rgb(0,255,0);
}
}
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 175 B

@@ -0,0 +1,181 @@
clip {
clip: 0 -15 1024 1024;
child: container {
color {
color: black;
bounds: 0 -15 1024 1024;
}
text {
color: red;
font: "Font 13px" url("data://;base64,\
AAEAAAAIAIAAAwAAY21hcAAIAKUAAAIMAAAALGdseWZFxbN2AAACvAAABhZoZWFkvj7BOAAAAIwA\
AAA2aGhlYQFBAXIAAADEAAAAJGhtdHhMoAAAAAABCAAAAQRsb2NhMYAzCwAAAjgAAACEbWF4cABD\
AAUAAADoAAAAIG5hbWVuh0Z1AAAI1AAAABYAAQAAAAEZmoDtU+9fDzz1AAIAEAAAAAB8JbCAAAAA\
AOHTuggAAAAAATAAEAAAAAEAAgAAAAAAAAABAAAAEAAAAAABMAAAAAABMAABAAAAAAAAAAAAAAAA\
AAAAQQABAAAAQQAEAAEAAAAAAAEAAAAAAAAAAAAAAAAAAAAAATAAAAEwAAABMAAAATAAAAEwAAAB\
MAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEw\
AAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAA\
AAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAA\
ATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAAB\
MAAAATAAAACgAAAAAAABAAAAAwAAAAwABAAgAAAABAAEAAEAAABw//8AAAAw////0AABAAAAAAAA\
AAwAGAAkADAAPABIAFQAYABsAHgAhACQAJwAqAC0AMAAzADYAOQA8AD8AQgBFAEgASwBOAFEAVAB\
XAFoAXQBgAGMAZgBpAGwAbwByAHUAeAB7AH4AgQCEAIcAigCNAJAAkwCWAJkAnACfAKIApQCoAKs\
ArgCxALQAtwC6AL0AwADCwABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1\
IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAAB\
AAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAA\
AwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw\
/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAA\
AAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAA\
MSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQ\
AAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEw\
ABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1\
IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAAB\
AAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAA\
AwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw\
/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAA\
AAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAA\
MSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQ\
AAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEw\
ABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1\
IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAAB\
AAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAA\
AwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw\
/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAA\
AAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAA\
MSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQ\
AAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEw\
ABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1\
IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAAB\
AAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAA\
AwAAMSE1IQEw/tAQAAABAAAAAACgABAAAwAAMTM1I6CgEAAAAAAAAAEAEgABAAAAAAABAAQAAEZv\
bnQAAA==");
glyphs: 0 0 1 1, 1 0 257 1, 2 0 513 1, 3 0 769 1,
4 0 1 17, 5 0 257 17, 6 0 513 17, 7 0 769 17,
8 0 1 33, 9 0 257 33, 10 0 513 33, 11 0 769 33,
12 0 1 49, 13 0 257 49, 14 0 513 49, 15 0 769 49,
16 0 1 65, 17 0 257 65, 18 0 513 65, 19 0 769 65,
20 0 1 81, 21 0 257 81, 22 0 513 81, 23 0 769 81,
24 0 1 97, 25 0 257 97, 26 0 513 97, 27 0 769 97,
28 0 1 113, 29 0 257 113, 30 0 513 113, 31 0 769 113,
32 0 1 129, 33 0 257 129, 34 0 513 129, 35 0 769 129,
36 0 1 145, 37 0 257 145, 38 0 513 145, 39 0 769 145,
40 0 1 161, 41 0 257 161, 42 0 513 161, 43 0 769 161,
44 0 1 177, 45 0 257 177, 46 0 513 177, 47 0 769 177,
48 0 1 193, 49 0 257 193, 50 0 513 193, 51 0 769 193,
52 0 1 209, 53 0 257 209, 54 0 513 209, 55 0 769 209,
56 0 1 225, 57 0 257 225, 58 0 513 225, 59 0 769 225,
60 0 1 241, 61 0 257 241, 62 0 513 241, 63 0 769 241;
}
text {
color: red;
font: "Font 12px";
glyphs: 0 0 1 257, 1 0 257 257, 2 0 513 257, 3 0 769 257,
4 0 1 273, 5 0 257 273, 6 0 513 273, 7 0 769 273,
8 0 1 289, 9 0 257 289, 10 0 513 289, 11 0 769 289,
12 0 1 305, 13 0 257 305, 14 0 513 305, 15 0 769 305,
16 0 1 321, 17 0 257 321, 18 0 513 321, 19 0 769 321,
20 0 1 337, 21 0 257 337, 22 0 513 337, 23 0 769 337,
24 0 1 353, 25 0 257 353, 26 0 513 353, 27 0 769 353,
28 0 1 369, 29 0 257 369, 30 0 513 369, 31 0 769 369,
32 0 1 385, 33 0 257 385, 34 0 513 385, 35 0 769 385,
36 0 1 401, 37 0 257 401, 38 0 513 401, 39 0 769 401,
40 0 1 417, 41 0 257 417, 42 0 513 417, 43 0 769 417,
44 0 1 433, 45 0 257 433, 46 0 513 433, 47 0 769 433,
48 0 1 449, 49 0 257 449, 50 0 513 449, 51 0 769 449,
52 0 1 465, 53 0 257 465, 54 0 513 465, 55 0 769 465,
56 0 1 481, 57 0 257 481, 58 0 513 481, 59 0 769 481,
60 0 1 497, 61 0 257 497, 62 0 513 497, 63 0 769 497;
}
text {
color: red;
font: "Font 2 13px" url("data://;base64,\
AAEAAAAIAIAAAwAAY21hcAAIAKUAAAIMAAAALGdseWZFxbN2AAACvAAABhZoZWFkvj7C5QAAAIwA\
AAA2aGhlYQFBAXIAAADEAAAAJGhtdHhMoAAAAAABCAAAAQRsb2NhMYAzCwAAAjgAAACEbWF4cABD\
AAUAAADoAAAAIG5hbWVuh2apAAAI1AAAABgAAQAAAAEZmoDtECtfDzz1AAIAEAAAAAB8JbCAAAAA\
AOHTu7UAAAAAATAAEAAAAAEAAgAAAAAAAAABAAAAEAAAAAABMAAAAAABMAABAAAAAAAAAAAAAAAA\
AAAAQQABAAAAQQAEAAEAAAAAAAEAAAAAAAAAAAAAAAAAAAAAATAAAAEwAAABMAAAATAAAAEwAAAB\
MAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEw\
AAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAA\
AAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAA\
ATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAAB\
MAAAATAAAACgAAAAAAABAAAAAwAAAAwABAAgAAAABAAEAAEAAABw//8AAAAw////0AABAAAAAAAA\
AAwAGAAkADAAPABIAFQAYABsAHgAhACQAJwAqAC0AMAAzADYAOQA8AD8AQgBFAEgASwBOAFEAVAB\
XAFoAXQBgAGMAZgBpAGwAbwByAHUAeAB7AH4AgQCEAIcAigCNAJAAkwCWAJkAnACfAKIApQCoAKs\
ArgCxALQAtwC6AL0AwADCwABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1\
IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAAB\
AAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAA\
AwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw\
/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAA\
AAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAA\
MSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQ\
AAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEw\
ABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1\
IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAAB\
AAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAA\
AwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw\
/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAA\
AAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAA\
MSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQ\
AAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEw\
ABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1\
IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAAB\
AAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAA\
AwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw\
/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAA\
AAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAA\
MSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQ\
AAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEw\
ABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1\
IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAAB\
AAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAAAwAAMSE1IQEw/tAQAAABAAAAAAEwABAA\
AwAAMSE1IQEw/tAQAAABAAAAAACgABAAAwAAMTM1I6CgEAAAAAAAAAEAEgABAAAAAAABAAYAAEZv\
bnQgMg==");
glyphs: 0 0 1 513, 1 0 257 513, 2 0 513 513, 3 0 769 513,
4 0 1 529, 5 0 257 529, 6 0 513 529, 7 0 769 529,
8 0 1 545, 9 0 257 545, 10 0 513 545, 11 0 769 545,
12 0 1 561, 13 0 257 561, 14 0 513 561, 15 0 769 561,
16 0 1 577, 17 0 257 577, 18 0 513 577, 19 0 769 577,
20 0 1 593, 21 0 257 593, 22 0 513 593, 23 0 769 593,
24 0 1 609, 25 0 257 609, 26 0 513 609, 27 0 769 609,
28 0 1 625, 29 0 257 625, 30 0 513 625, 31 0 769 625,
32 0 1 641, 33 0 257 641, 34 0 513 641, 35 0 769 641,
36 0 1 657, 37 0 257 657, 38 0 513 657, 39 0 769 657,
40 0 1 673, 41 0 257 673, 42 0 513 673, 43 0 769 673,
44 0 1 689, 45 0 257 689, 46 0 513 689, 47 0 769 689,
48 0 1 705, 49 0 257 705, 50 0 513 705, 51 0 769 705,
52 0 1 721, 53 0 257 721, 54 0 513 721, 55 0 769 721,
56 0 1 737, 57 0 257 737, 58 0 513 737, 59 0 769 737,
60 0 1 753, 61 0 257 753, 62 0 513 753, 63 0 769 753;
}
text {
color: red;
font: "Font 2 12px";
glyphs: 0 0 1 769, 1 0 257 769, 2 0 513 769, 3 0 769 769,
4 0 1 785, 5 0 257 785, 6 0 513 785, 7 0 769 785,
8 0 1 801, 9 0 257 801, 10 0 513 801, 11 0 769 801,
12 0 1 817, 13 0 257 817, 14 0 513 817, 15 0 769 817,
16 0 1 833, 17 0 257 833, 18 0 513 833, 19 0 769 833,
20 0 1 849, 21 0 257 849, 22 0 513 849, 23 0 769 849,
24 0 1 865, 25 0 257 865, 26 0 513 865, 27 0 769 865,
28 0 1 881, 29 0 257 881, 30 0 513 881, 31 0 769 881,
32 0 1 897, 33 0 257 897, 34 0 513 897, 35 0 769 897,
36 0 1 913, 37 0 257 913, 38 0 513 913, 39 0 769 913,
40 0 1 929, 41 0 257 929, 42 0 513 929, 43 0 769 929,
44 0 1 945, 45 0 257 945, 46 0 513 945, 47 0 769 945,
48 0 1 961, 49 0 257 961, 50 0 513 961, 51 0 769 961,
52 0 1 977, 53 0 257 977, 54 0 513 977, 55 0 769 977,
56 0 1 993, 57 0 257 993, 58 0 513 993, 59 0 769 993;
}
text {
color: red;
font: "Font 15px";
glyphs: 64 0 0 1009;
}
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 630 B

@@ -0,0 +1,508 @@
text {
color: red;
font: "BlockBlockBlock 210px" url("data://;base64,\
AAEAAAAIAIAAAwAAY21hcAByAD0AAAEUAAAANGdseWY/ZsNsAAABVAAAAEhoZWFkJqsy2gAAAIwA\
AAA2aGhlYQwBBAIAAADEAAAAJGhtdHgEAAAAAAABCAAAAApsb2NhADAAGAAAAUgAAAAKbWF4cAAG\
AAUAAADoAAAAIG5hbWWJUoCNAAABnAAAACEAAQAAAAEZmmVCT9xfDzz1AAIIAAAAAADhwj0AAAAA\
AOHTj0oAAAAABAAIAAAAAAEAAgAAAAAAAAABAAAIAAAAAAAEAAAAAAAEAAABAAAAAAAAAAAAAAAA\
AAAAAQABAAAABAAEAAEAAAAAAAEAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAQAAAAMA\
AAAMAAQAKAAAAAYABAABAAIAIABD//8AAAAgAEH////g/8AAAQAAAAAAAAAAAAAADAAYACQAAAAB\
AAAAAAQACAAAAwAAMSERIQQA/AAIAAABAAAAAAQACAAAAwAAMSERIQQA/AAIAAABAAAAAAQACAAA\
AwAAMSERIQQA/AAIAAAAAAEAEgABAAAAAAABAA8AAEJsb2NrQmxvY2tCbG9jawAAAA==");
glyphs: 1 150, 2 150, 3 0;
}
text {
color: lime;
font: "BlockBlockBlock 208px";
glyphs: 1 150, 2 151, 3 0;
}
text {
color: blue;
font: "BlockBlockBlock 206px";
glyphs: 1 151, 2 151, 3 0;
}
text {
color: yellow;
font: "BlockBlockBlock 204px";
glyphs: 1 151, 2 152, 3 0;
}
text {
color: magenta;
font: "BlockBlockBlock 202px";
glyphs: 1 152, 2 152, 3 0;
}
text {
color: teal;
font: "BlockBlockBlock 200px";
glyphs: 1 152, 2 153, 3 0;
}
text {
color: red;
font: "BlockBlockBlock 198px";
glyphs: 1 153, 2 153, 3 0;
}
text {
color: lime;
font: "BlockBlockBlock 196px";
glyphs: 1 153, 2 154, 3 0;
}
text {
color: blue;
font: "BlockBlockBlock 194px";
glyphs: 1 154, 2 154, 3 0;
}
text {
color: yellow;
font: "BlockBlockBlock 192px";
glyphs: 1 154, 2 155, 3 0;
}
text {
color: magenta;
font: "BlockBlockBlock 190px";
glyphs: 1 155, 2 155, 3 0;
}
text {
color: teal;
font: "BlockBlockBlock 188px";
glyphs: 1 155, 2 156, 3 0;
}
text {
color: red;
font: "BlockBlockBlock 186px";
glyphs: 1 156, 2 156, 3 0;
}
text {
color: lime;
font: "BlockBlockBlock 184px";
glyphs: 1 156, 2 157, 3 0;
}
text {
color: blue;
font: "BlockBlockBlock 182px";
glyphs: 1 157, 2 157, 3 0;
}
text {
color: yellow;
font: "BlockBlockBlock 180px";
glyphs: 1 157, 2 158, 3 0;
}
text {
color: magenta;
font: "BlockBlockBlock 178px";
glyphs: 1 158, 2 158, 3 0;
}
text {
color: teal;
font: "BlockBlockBlock 176px";
glyphs: 1 158, 2 159, 3 0;
}
text {
color: red;
font: "BlockBlockBlock 174px";
glyphs: 1 159, 2 159, 3 0;
}
text {
color: lime;
font: "BlockBlockBlock 172px";
glyphs: 1 159, 2 160, 3 0;
}
text {
color: blue;
font: "BlockBlockBlock 170px";
glyphs: 1 160, 2 160, 3 0;
}
text {
color: yellow;
font: "BlockBlockBlock 168px";
glyphs: 1 160, 2 161, 3 0;
}
text {
color: magenta;
font: "BlockBlockBlock 166px";
glyphs: 1 161, 2 161, 3 0;
}
text {
color: teal;
font: "BlockBlockBlock 164px";
glyphs: 1 161, 2 162, 3 0;
}
text {
color: red;
font: "BlockBlockBlock 162px";
glyphs: 1 162, 2 162, 3 0;
}
text {
color: lime;
font: "BlockBlockBlock 160px";
glyphs: 1 162, 2 163, 3 0;
}
text {
color: blue;
font: "BlockBlockBlock 158px";
glyphs: 1 163, 2 163, 3 0;
}
text {
color: yellow;
font: "BlockBlockBlock 156px";
glyphs: 1 163, 2 164, 3 0;
}
text {
color: magenta;
font: "BlockBlockBlock 154px";
glyphs: 1 164, 2 164, 3 0;
}
text {
color: teal;
font: "BlockBlockBlock 152px";
glyphs: 1 164, 2 165, 3 0;
}
text {
color: red;
font: "BlockBlockBlock 150px";
glyphs: 1 165, 2 165, 3 0;
}
text {
color: lime;
font: "BlockBlockBlock 148px";
glyphs: 1 165, 2 166, 3 0;
}
text {
color: blue;
font: "BlockBlockBlock 146px";
glyphs: 1 166, 2 166, 3 0;
}
text {
color: yellow;
font: "BlockBlockBlock 144px";
glyphs: 1 166, 2 167, 3 0;
}
text {
color: magenta;
font: "BlockBlockBlock 142px";
glyphs: 1 167, 2 167, 3 0;
}
text {
color: teal;
font: "BlockBlockBlock 140px";
glyphs: 1 167, 2 168, 3 0;
}
text {
color: red;
font: "BlockBlockBlock 138px";
glyphs: 1 168, 2 168, 3 0;
}
text {
color: lime;
font: "BlockBlockBlock 136px";
glyphs: 1 168, 2 169, 3 0;
}
text {
color: blue;
font: "BlockBlockBlock 134px";
glyphs: 1 169, 2 169, 3 0;
}
text {
color: yellow;
font: "BlockBlockBlock 132px";
glyphs: 1 169, 2 170, 3 0;
}
text {
color: magenta;
font: "BlockBlockBlock 130px";
glyphs: 1 170, 2 170, 3 0;
}
text {
color: teal;
font: "BlockBlockBlock 128px";
glyphs: 1 170, 2 171, 3 0;
}
text {
color: red;
font: "BlockBlockBlock 126px";
glyphs: 1 171, 2 171, 3 0;
}
text {
color: lime;
font: "BlockBlockBlock 124px";
glyphs: 1 171, 2 172, 3 0;
}
text {
color: blue;
font: "BlockBlockBlock 122px";
glyphs: 1 172, 2 172, 3 0;
}
text {
color: yellow;
font: "BlockBlockBlock 120px";
glyphs: 1 172, 2 173, 3 0;
}
text {
color: magenta;
font: "BlockBlockBlock 118px";
glyphs: 1 173, 2 173, 3 0;
}
text {
color: teal;
font: "BlockBlockBlock 116px";
glyphs: 1 173, 2 174, 3 0;
}
text {
color: red;
font: "BlockBlockBlock 114px";
glyphs: 1 174, 2 174, 3 0;
}
text {
color: lime;
font: "BlockBlockBlock 112px";
glyphs: 1 174, 2 175, 3 0;
}
text {
color: blue;
font: "BlockBlockBlock 110px";
glyphs: 1 175, 2 175, 3 0;
}
text {
color: yellow;
font: "BlockBlockBlock 108px";
glyphs: 1 175, 2 176, 3 0;
}
text {
color: magenta;
font: "BlockBlockBlock 106px";
glyphs: 1 176, 2 176, 3 0;
}
text {
color: teal;
font: "BlockBlockBlock 104px";
glyphs: 1 176, 2 177, 3 0;
}
text {
color: red;
font: "BlockBlockBlock 102px";
glyphs: 1 177, 2 177, 3 0;
}
text {
color: lime;
font: "BlockBlockBlock 100px";
glyphs: 1 177, 2 178, 3 0;
}
text {
color: blue;
font: "BlockBlockBlock 98px";
glyphs: 1 178, 2 178, 3 0;
}
text {
color: yellow;
font: "BlockBlockBlock 96px";
glyphs: 1 178, 2 179, 3 0;
}
text {
color: magenta;
font: "BlockBlockBlock 94px";
glyphs: 1 179, 2 179, 3 0;
}
text {
color: teal;
font: "BlockBlockBlock 92px";
glyphs: 1 179, 2 180, 3 0;
}
text {
color: red;
font: "BlockBlockBlock 90px";
glyphs: 1 180, 2 180, 3 0;
}
text {
color: lime;
font: "BlockBlockBlock 88px";
glyphs: 1 180, 2 181, 3 0;
}
text {
color: blue;
font: "BlockBlockBlock 86px";
glyphs: 1 181, 2 181, 3 0;
}
text {
color: yellow;
font: "BlockBlockBlock 84px";
glyphs: 1 181, 2 182, 3 0;
}
text {
color: magenta;
font: "BlockBlockBlock 82px";
glyphs: 1 182, 2 182, 3 0;
}
text {
color: teal;
font: "BlockBlockBlock 80px";
glyphs: 1 182, 2 183, 3 0;
}
text {
color: red;
font: "BlockBlockBlock 78px";
glyphs: 1 183, 2 183, 3 0;
}
text {
color: lime;
font: "BlockBlockBlock 76px";
glyphs: 1 183, 2 184, 3 0;
}
text {
color: blue;
font: "BlockBlockBlock 74px";
glyphs: 1 184, 2 184, 3 0;
}
text {
color: yellow;
font: "BlockBlockBlock 72px";
glyphs: 1 184, 2 185, 3 0;
}
text {
color: magenta;
font: "BlockBlockBlock 70px";
glyphs: 1 185, 2 185, 3 0;
}
text {
color: teal;
font: "BlockBlockBlock 68px";
glyphs: 1 185, 2 186, 3 0;
}
text {
color: red;
font: "BlockBlockBlock 66px";
glyphs: 1 186, 2 186, 3 0;
}
text {
color: lime;
font: "BlockBlockBlock 64px";
glyphs: 1 186, 2 187, 3 0;
}
text {
color: blue;
font: "BlockBlockBlock 62px";
glyphs: 1 187, 2 187, 3 0;
}
text {
color: yellow;
font: "BlockBlockBlock 60px";
glyphs: 1 187, 2 188, 3 0;
}
text {
color: magenta;
font: "BlockBlockBlock 58px";
glyphs: 1 188, 2 188, 3 0;
}
text {
color: teal;
font: "BlockBlockBlock 56px";
glyphs: 1 188, 2 189, 3 0;
}
text {
color: red;
font: "BlockBlockBlock 54px";
glyphs: 1 189, 2 189, 3 0;
}
text {
color: lime;
font: "BlockBlockBlock 52px";
glyphs: 1 189, 2 190, 3 0;
}
text {
color: blue;
font: "BlockBlockBlock 50px";
glyphs: 1 190, 2 190, 3 0;
}
text {
color: yellow;
font: "BlockBlockBlock 48px";
glyphs: 1 190, 2 191, 3 0;
}
text {
color: magenta;
font: "BlockBlockBlock 46px";
glyphs: 1 191, 2 191, 3 0;
}
text {
color: teal;
font: "BlockBlockBlock 44px";
glyphs: 1 191, 2 192, 3 0;
}
text {
color: red;
font: "BlockBlockBlock 42px";
glyphs: 1 192, 2 192, 3 0;
}
text {
color: lime;
font: "BlockBlockBlock 40px";
glyphs: 1 192, 2 193, 3 0;
}
text {
color: blue;
font: "BlockBlockBlock 38px";
glyphs: 1 193, 2 193, 3 0;
}
text {
color: yellow;
font: "BlockBlockBlock 36px";
glyphs: 1 193, 2 194, 3 0;
}
text {
color: magenta;
font: "BlockBlockBlock 34px";
glyphs: 1 194, 2 194, 3 0;
}
text {
color: teal;
font: "BlockBlockBlock 32px";
glyphs: 1 194, 2 195, 3 0;
}
text {
color: red;
font: "BlockBlockBlock 30px";
glyphs: 1 195, 2 195, 3 0;
}
text {
color: lime;
font: "BlockBlockBlock 28px";
glyphs: 1 195, 2 196, 3 0;
}
text {
color: blue;
font: "BlockBlockBlock 26px";
glyphs: 1 196, 2 196, 3 0;
}
text {
color: yellow;
font: "BlockBlockBlock 24px";
glyphs: 1 196, 2 197, 3 0;
}
text {
color: magenta;
font: "BlockBlockBlock 22px";
glyphs: 1 197, 2 197, 3 0;
}
text {
color: teal;
font: "BlockBlockBlock 20px";
glyphs: 1 197, 2 198, 3 0;
}
text {
color: red;
font: "BlockBlockBlock 18px";
glyphs: 1 198, 2 198, 3 0;
}
text {
color: lime;
font: "BlockBlockBlock 16px";
glyphs: 1 198, 2 199, 3 0;
}
text {
color: blue;
font: "BlockBlockBlock 14px";
glyphs: 1 199, 2 199, 3 0;
}
text {
color: yellow;
font: "BlockBlockBlock 12px";
glyphs: 1 199, 2 200, 3 0;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

+21
View File
@@ -0,0 +1,21 @@
text {
font: "text-mixed-color-colrv1 15" url("data:font/ttf;base64,AAEAAAAKAIAAAwAgQ09MUhc9T40AAAI4AAAAe0NQQUwB/wATAAACtAAAABpjbWFwAHUAPQAAATgA\
AAA0Z2x5Zn7NhtgAAAF8AAAAkGhlYWQmof0NAAAArAAAADZoaGVhDAEEAgAAAOQAAAAkaG10eAQA\
AAAAAAEoAAAAEGxvY2EAbACQAAABbAAAABBtYXhwAAkABQAAAQgAAAAgbmFtZR9CFpQAAAIMAAAA\
KQABAAAAARmaAQnTZV8PPPUAAggAAAAAAOHCPQAAAAAA4cpZfQAAAAAEAAgAAAAAAQACAAAAAAAA\
AAEAAAgAAAAAAAQAAAAAAAQAAAEAAAAAAAAAAAAAAAAAAAABAAEAAAAHAAQAAQAAAAAAAQAAAAAA\
AAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAMAAQAKAAAAAYABAABAAIAIABG\
//8AAAAgAEH////g/8AAAQAAAAAAAAAAAAAADAAYACQAMAA8AEgAAQAAAAAEAAgAAAMAADEhESEE\
APwACAAAAQAAAAAEAAgAAAMAADEhESEEAPwACAAAAQAAAAAEAAgAAAMAADEhESEEAPwACAAAAQAA\
AAAEAAgAAAMAADEhESEEAPwACAAAAQAAAAAEAAgAAAMAADEhESEEAPwACAAAAQAAAAAEAAgAAAMA\
ADEhESEEAPwACAAAAAABABIAAQAAAAAAAQAXAAB0ZXh0LW1peGVkLWNvbG9yLWNvbHJ2MQAAAAAB\
AAAAAAAAAAAAAAAAAAAAIgAAAEoAAAAAAAAAAAAAAAAAAAADAAQAAAAWAAUAAAAcAAYAAAAiAQEA\
AAAAAQEAAAABAQEAAAACAAAAAwAAABAAAAAbAAAAJgoAAAYAAQIAAEAACgAABgACAgABQAAKAAAG\
AAMCAAJAAAAAAAADAAEAAwAAAA4AAAAA//8A/wD//wAA/wAA\
");
glyphs: 1 20;
}
color {
bounds: 0 5 20 5;
color: rgb(255,0,0);
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 113 B

+4
View File
@@ -45,6 +45,7 @@ compare_render_tests = [
'color-matrix-merge',
'color-matrix-parsing',
'conic-gradient-with-64-colorstops',
'container-single-child-offscreen-for-opacity',
'crossfade-clip-both-children',
'cross-fade-clipped-with-huge-children-nogl',
'cross-fade-in-opacity',
@@ -77,6 +78,8 @@ compare_render_tests = [
'fill-opacity',
'fill-scaled-up',
'fill-with-3d-contents-nogl-nocairo',
'glyph-cache-overflow',
'glyph-cache-overflow-slices',
'huge-height',
'huge-width',
'inset-shadow-multiple',
@@ -136,6 +139,7 @@ compare_render_tests = [
'stroke-fractional-translate-nogl',
'stroke-opacity',
'stroke-with-3d-contents-nogl-nocairo',
'text-color-mix',
'text-glyph-lsb',
'text-mixed-color-nocairo',
'text-mixed-color-colrv1',
+1 -1
View File
@@ -149,7 +149,7 @@ deserialize_error_func (const GskParseLocation *start,
append_error_value (errors, GTK_TYPE_CSS_PARSER_WARNING, error->code);
else
g_string_append_printf (errors,
"%s %u\n",
"%s %u",
g_quark_to_string (error->domain),
error->code);
@@ -1,2 +1,7 @@
<data>:21:32-36: error: GTK_CSS_PARSER_ERROR_UNKNOWN_VALUE
<data>:50:23-24: error: GTK_CSS_PARSER_ERROR_UNKNOWN_VALUE
<data>:55:24-69:3: error: GTK_CSS_PARSER_ERROR_UNKNOWN_VALUE
<data>:74:24-33: error: GTK_CSS_PARSER_ERROR_SYNTAX
<data>:79:24-38: error: g-io-error-quark 15
<data>:84:24-47: error: g-io-error-quark 1
<data>:89:24-62: error: GTK_CSS_PARSER_ERROR_UNKNOWN_VALUE
@@ -50,3 +50,42 @@ text {
font: "Demon Cat 11";
glyphs: "Hello";
}
text {
font: "Demon Cat 11" url("data:font/ttf;base64,\
AAEAAAAKAIAAAwAgQ09MUgATAEEAAAJ8AAAALENQQUwB/wATAAACqAAAABpjbWFwAHcAPQAAATwA\
AAA0Z2x5Zu8g4kAAAAGEAAAA0mhlYWQmofyJAAAArAAAADZoaGVhDAEEAgAAAOQAAAAkaG10eAQA\
AQAAAAEoAAAAFGxvY2EAyAD5AAABcAAAABRtYXhwAAwACQAAAQgAAAAgbmFtZX7VdrQAAAJYAAAA\
IgABAAAAARmajs74k18PPPUAAggAAAAAAOHCPQAAAAAA4cpY+QAAAAAEAAgAAAAAAQACAAAAAAAA\
AAEAAAgAAAAAAAQAAAAAAAQAAAEAAAAAAAAAAAAAAAAAAAABAAEAAAAJAAgAAgAAAAAAAQAAAAAA\
AAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAEAAAADAAAADAAEACgAAAAGAAQAAQAC\
ACAASP//AAAAIABB////4P/AAAEAAAAAAAAAAAAAAAwAGAAkADAAPABIAFwAaQABAAAAAAQACAAA\
AwAAMSERIQQA/AAIAAABAAAAAAQACAAAAwAAMSERIQQA/AAIAAABAAAAAAQACAAAAwAAMSERIQQA\
/AAIAAABAAAAAAQACAAAAwAAMSERIQQA/AAIAAABAAAAAAQACAAAAwAAMSERIQQA/AAIAAABAAAA\
AAQACAAAAwAAMSERIQQA/AAIAAACAAAAAAQACAAAAwAHAAAxIREhExEhEQQA/AAFA/YIAPgFB/b4\
CgAAAQEAAAADAAgAAAMAACEhESEBAAIA/gAIAAAAAAAAAQASAAEAAAAAAAEAEAAAdGV4dC1taXhl\
ZC1jb2xvcgAAAAAAAwAAAA4AAAAgAAMABAAAAAEABQABAAEABgACAAEAAgAAAAMAAQADAAIAAAAD\
AAEAAwAAAA4AAAAA//8A/wD//wAA/wAA\
");
glyphs: 7 10;
}
text {
font: "Demon Cat 11" url(url());
glyphs: 7 10;
}
text {
font: "Demon Cat 11" url(not-a-url);
glyphs: 7 10;
}
text {
font: "Demon Cat 11" url(file:///not-a-file);
glyphs: 7 10;
}
text {
font: "Demon Cat 11" url("data:font/ttf,Hello, I'm a Font");
glyphs: 7 10;
}
@@ -16,7 +16,7 @@ AAEAAwAAAA4AAAAA//8A/wD//wAA/wAA\
glyphs: 7 10;
}
text {
font: "Cantarell 11";
font: "text-mixed-color 7.5";
glyphs: 7 10;
}
text {
@@ -31,3 +31,23 @@ text {
font: "Cantarell 11";
glyphs: "Hello";
}
text {
font: "Cantarell 11";
glyphs: 7 10;
}
text {
font: "Cantarell 11";
glyphs: 7 10;
}
text {
font: "Cantarell 11";
glyphs: 7 10;
}
text {
font: "Cantarell 11";
glyphs: 7 10;
}
text {
font: "Cantarell 11";
glyphs: 7 10;
}