From 30d6e3abe2a0251b11513d66d15a59cd0705a828 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Mon, 27 May 2019 17:48:41 +0000 Subject: [PATCH 1/2] clutter-text: Fix selection color drawing Commit cabcad185 removed the call to cogl_set_source_color4ub() before cogl_fill_path(), so instead of the previously assigned selection color, the background is drawn with the last set source. In order to honour the newly added framebuffer parameter and still apply the correct color, switch from cogl_fill_path() to the (deprecated!) cogl_framebuffer_fill_path() method. https://gitlab.gnome.org/GNOME/mutter/issues/494 --- clutter/clutter/clutter-text.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/clutter/clutter/clutter-text.c b/clutter/clutter/clutter-text.c index fb9d926df..000bbbbd4 100644 --- a/clutter/clutter/clutter-text.c +++ b/clutter/clutter/clutter-text.c @@ -1975,6 +1975,7 @@ selection_paint (ClutterText *self, else { /* Paint selection background first */ + CoglPipeline *color_pipeline = cogl_pipeline_copy (default_color_pipeline); PangoLayout *layout = clutter_text_get_layout (self); CoglPath *selection_path = cogl_path_new (); CoglColor cogl_color = { 0, }; @@ -1987,11 +1988,19 @@ selection_paint (ClutterText *self, else color = &priv->text_color; + cogl_color_init_from_4ub (&cogl_color, + color->red, + color->green, + color->blue, + paint_opacity * color->alpha / 255); + cogl_color_premultiply (&cogl_color); + cogl_pipeline_set_color (color_pipeline, &cogl_color); + clutter_text_foreach_selection_rectangle_prescaled (self, add_selection_rectangle_to_path, selection_path); - cogl_path_fill (selection_path); + cogl_framebuffer_fill_path (fb, color_pipeline, selection_path); /* Paint selected text */ cogl_framebuffer_push_path_clip (fb, selection_path); -- 2.21.0 From 13a1624c1050c91cd4d8a298f7a10fafe56fe9e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Mon, 27 May 2019 22:40:47 +0000 Subject: [PATCH 2/2] cogl-path: Undeprecate framebuffer functions It looks like deprecating the functions with explicit framebuffer/pipeline arguments made it to (cogl) master by mistake: https://mail.gnome.org/archives/clutter-list/2016-April/msg00008.html We now use one of them, so this is a good time to undeprecate the lot. https://gitlab.gnome.org/GNOME/mutter/merge_requests/597 --- cogl/cogl-path/cogl-path-functions.h | 6 ------ cogl/cogl-path/cogl-path.c | 3 --- 2 files changed, 9 deletions(-) diff --git a/cogl/cogl-path/cogl-path-functions.h b/cogl/cogl-path/cogl-path-functions.h index d4ef328d2..318fed028 100644 --- a/cogl/cogl-path/cogl-path-functions.h +++ b/cogl/cogl-path/cogl-path-functions.h @@ -460,9 +460,7 @@ cogl_path_fill (CoglPath *path); * use while filling a path. * * Stability: unstable - * Deprecated: 1.16: Use cogl_path_fill() instead */ -COGL_DEPRECATED_FOR (cogl_path_fill) void cogl_framebuffer_fill_path (CoglFramebuffer *framebuffer, CoglPipeline *pipeline, @@ -492,9 +490,7 @@ cogl_path_stroke (CoglPath *path); * regardless of the current transformation matrix. * * Stability: unstable - * Deprecated: 1.16: Use cogl_path_stroke() instead */ -COGL_DEPRECATED_FOR (cogl_path_stroke) void cogl_framebuffer_stroke_path (CoglFramebuffer *framebuffer, CoglPipeline *pipeline, @@ -529,9 +525,7 @@ cogl_framebuffer_push_path_clip (CoglFramebuffer *framebuffer, * * Since: 1.8 * Stability: Unstable - * Deprecated: 1.16: Use cogl_framebuffer_push_path_clip() instead */ -COGL_DEPRECATED_FOR (cogl_framebuffer_push_path_clip) void cogl_clip_push_from_path (CoglPath *path); diff --git a/cogl/cogl-path/cogl-path.c b/cogl/cogl-path/cogl-path.c index 4d86c6fb5..8774406f8 100644 --- a/cogl/cogl-path/cogl-path.c +++ b/cogl/cogl-path/cogl-path.c @@ -1504,7 +1504,6 @@ cogl_framebuffer_push_path_clip (CoglFramebuffer *framebuffer, COGL_FRAMEBUFFER_STATE_CLIP; } -/* XXX: deprecated */ void cogl_clip_push_from_path (CoglPath *path) { @@ -1575,7 +1574,6 @@ _cogl_path_build_stroke_attribute_buffer (CoglPath *path) data->stroke_n_attributes = n_attributes; } -/* XXX: deprecated */ void cogl_framebuffer_fill_path (CoglFramebuffer *framebuffer, CoglPipeline *pipeline, @@ -1588,7 +1586,6 @@ cogl_framebuffer_fill_path (CoglFramebuffer *framebuffer, _cogl_path_fill_nodes (path, framebuffer, pipeline, 0 /* flags */); } -/* XXX: deprecated */ void cogl_framebuffer_stroke_path (CoglFramebuffer *framebuffer, CoglPipeline *pipeline, -- 2.21.0