From 707e52bdffb764bb99eddfeb8960bcb79856c540 Mon Sep 17 00:00:00 2001 From: Jonah Graham Date: Tue, 25 Nov 2025 13:35:25 -0500 Subject: [PATCH] [GTK4] Set source color when doing difference on pixels in Caret With no source color explicitly set here, the difference is applied using whatever happens to have been the last set source color, or 0,0,0 if none have been set. See https://github.com/eclipse-platform/eclipse.platform.swt/issues/2812#issuecomment-3577428337 for a longer explanation. --- .../Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java index 250818d83b6..179180b6ec0 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java @@ -204,9 +204,7 @@ private void drawCaret(long cairo) { Cairo.cairo_save(cairo); if (caret.image != null && !caret.image.isDisposed() && caret.image.mask == 0) { - if (!GTK.GTK4) { - Cairo.cairo_set_source_rgb(cairo, 1, 1, 1); - } + Cairo.cairo_set_source_rgb(cairo, 1, 1, 1); Cairo.cairo_set_operator(cairo, Cairo.CAIRO_OPERATOR_DIFFERENCE); long surface = Cairo.cairo_get_target(cairo); int nWidth = 0; @@ -224,9 +222,7 @@ private void drawCaret(long cairo) { Cairo.cairo_set_source_surface(cairo, caret.image.surface, 0, 0); Cairo.cairo_paint(cairo); } else { - if (!GTK.GTK4) { - Cairo.cairo_set_source_rgb(cairo, 1, 1, 1); - } + Cairo.cairo_set_source_rgb(cairo, 1, 1, 1); Cairo.cairo_set_operator(cairo, Cairo.CAIRO_OPERATOR_DIFFERENCE); int nWidth = caret.width, nHeight = caret.height; if (nWidth <= 0) nWidth = Caret.DEFAULT_WIDTH;