From 890f78d7f9b3d6a651e9b65641bd3762405ac6ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Sat, 14 May 2022 21:15:46 +0000 Subject: [PATCH] WorkspaceClone: draw stroke with Cairo (#1419) --- src/Widgets/WorkspaceClone.vala | 35 ++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/src/Widgets/WorkspaceClone.vala b/src/Widgets/WorkspaceClone.vala index 40a40662..c2751801 100644 --- a/src/Widgets/WorkspaceClone.vala +++ b/src/Widgets/WorkspaceClone.vala @@ -44,19 +44,36 @@ namespace Gala { public override void paint (Clutter.PaintContext context) { base.paint (context); - unowned Cogl.Framebuffer fb = context.get_framebuffer (); - - pipeline.set_color4ub (0, 0, 0, 100); - fb.push_rectangle_clip (0, 0, width, height); - fb.draw_rectangle (pipeline, 0, 0, width, height); - fb.pop_clip (); + var surface = new Cairo.ImageSurface (Cairo.Format.ARGB32, (int) width, (int) height); + + var ctx = new Cairo.Context (surface); + ctx.set_source_rgba (255, 255, 255, 255); + ctx.rectangle (0, 0, (int) width, (int) height); + ctx.set_operator (Cairo.Operator.SOURCE); + ctx.stroke (); + ctx.restore (); + ctx.paint (); + + try { + var texture = new Cogl.Texture2D.from_data ( + context.get_framebuffer ().get_context (), + (int) width, (int) height, + Cogl.PixelFormat.BGRA_8888_PRE, + surface.get_stride (), surface.get_data () + ); + + pipeline.set_layer_texture (0, texture); + } catch (Error e) { + debug (e.message); + } var color = Cogl.Color.from_4ub (255, 255, 255, 25); color.premultiply (); + pipeline.set_color (color); - fb.push_rectangle_clip (0.5f, 0.5f, width - 1, height - 1); - fb.draw_rectangle (pipeline, 0.5f, 0.5f, width - 1, height - 1); - fb.pop_clip (); + + unowned var fb = context.get_framebuffer (); + fb.draw_rectangle (pipeline, 0, 0, width, height); } #else public override void paint (Clutter.PaintContext context) {