diff options
author | Silenio Quarti | 2007-05-24 20:25:28 +0000 |
---|---|---|
committer | Silenio Quarti | 2007-05-24 20:25:28 +0000 |
commit | f08d8074284140ee75959f4376bf4271eed96de8 (patch) | |
tree | 471c6334891a90a322996c3ce5cebda121e5b383 | |
parent | 59c7194abace25530f6cc464daa22f94507e57c5 (diff) | |
download | eclipse.platform.swt-f08d8074284140ee75959f4376bf4271eed96de8.tar.gz eclipse.platform.swt-f08d8074284140ee75959f4376bf4271eed96de8.tar.xz eclipse.platform.swt-f08d8074284140ee75959f4376bf4271eed96de8.zip |
186722 - Foreground color not used from EraseItem callback
-rw-r--r-- | bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java | 14 | ||||
-rw-r--r-- | bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java | 14 |
2 files changed, 24 insertions, 4 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java index 3ae2e28da9..645942927b 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java @@ -72,6 +72,7 @@ public class Table extends Composite { ImageList imageList, headerImageList; boolean firstCustomDraw; int drawState, drawFlags; + GdkColor drawForeground; boolean ownerDraw, ignoreSize; static final int CHECKED_COLUMN = 0; @@ -2510,7 +2511,9 @@ int /*long*/ rendererRenderProc (int /*long*/ cell, int /*long*/ window, int /*l } if (hooks (SWT.EraseItem)) { + boolean wasSelected = false; if ((drawState & SWT.SELECTED) != 0) { + wasSelected = true; OS.gdk_window_clear_area (window, rect.x, rect.y, rect.width, rect.height); } GC gc = new GC (this); @@ -2533,7 +2536,7 @@ int /*long*/ rendererRenderProc (int /*long*/ cell, int /*long*/ window, int /*l event.height = rect.height; event.detail = drawState; sendEvent (SWT.EraseItem, event); - gc.dispose(); + drawForeground = null; drawState = event.doit ? event.detail : 0; drawFlags &= ~(OS.GTK_CELL_RENDERER_FOCUSED | OS.GTK_CELL_RENDERER_SELECTED); if ((drawState & SWT.SELECTED) != 0) drawFlags |= OS.GTK_CELL_RENDERER_SELECTED; @@ -2543,7 +2546,10 @@ int /*long*/ rendererRenderProc (int /*long*/ cell, int /*long*/ window, int /*l //TODO - parity and sorted byte[] detail = Converter.wcsToMbcs (null, "cell_odd", true); OS.gtk_paint_flat_box (style, window, OS.GTK_STATE_SELECTED, OS.GTK_SHADOW_NONE, rect, widget, detail, rect.x, rect.y, rect.width, rect.height); + } else { + if (wasSelected) drawForeground = gc.getForeground ().handle; } + gc.dispose(); } } } @@ -2560,6 +2566,9 @@ int /*long*/ rendererRenderProc (int /*long*/ cell, int /*long*/ window, int /*l int /*long*/ g_class = OS.g_type_class_peek_parent (OS.G_OBJECT_GET_CLASS (cell)); GtkCellRendererClass klass = new GtkCellRendererClass (); OS.memmove (klass, g_class); + if (drawForeground != null && OS.GTK_IS_CELL_RENDERER_TEXT (cell)) { + OS.g_object_set (cell, OS.foreground_gdk, drawForeground, 0); + } result = OS.call (klass.render, cell, window, handle, background_area, cell_area, expose_area, drawFlags); } if (item != null) { @@ -2588,7 +2597,8 @@ int /*long*/ rendererRenderProc (int /*long*/ cell, int /*long*/ window, int /*l gc.setForeground (display.getSystemColor (SWT.COLOR_LIST_SELECTION_TEXT)); } else { gc.setBackground (item.getBackground (columnIndex)); - gc.setForeground (item.getForeground (columnIndex)); + Color foreground = drawForeground != null ? Color.gtk_new (display, drawForeground) : item.getForeground (columnIndex); + gc.setForeground (foreground); } gc.setFont (item.getFont (columnIndex)); gc.setClipping (rect.x, rect.y, rect.width, rect.height); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java index 817616510e..caae424506 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java @@ -81,6 +81,7 @@ public class Tree extends Composite { boolean modelChanged; boolean expandAll; int drawState, drawFlags; + GdkColor drawForeground; boolean ownerDraw, ignoreSize; static final int ID_COLUMN = 0; @@ -2456,7 +2457,9 @@ int /*long*/ rendererRenderProc (int /*long*/ cell, int /*long*/ window, int /*l } if (hooks (SWT.EraseItem)) { + boolean wasSelected = false; if ((drawState & SWT.SELECTED) != 0) { + wasSelected = true; OS.gdk_window_clear_area (window, rect.x, rect.y, rect.width, rect.height); } GC gc = new GC (this); @@ -2479,7 +2482,7 @@ int /*long*/ rendererRenderProc (int /*long*/ cell, int /*long*/ window, int /*l event.height = rect.height; event.detail = drawState; sendEvent (SWT.EraseItem, event); - gc.dispose(); + drawForeground = null; drawState = event.doit ? event.detail : 0; drawFlags &= ~(OS.GTK_CELL_RENDERER_FOCUSED | OS.GTK_CELL_RENDERER_SELECTED); if ((drawState & SWT.SELECTED) != 0) drawFlags |= OS.GTK_CELL_RENDERER_SELECTED; @@ -2489,7 +2492,10 @@ int /*long*/ rendererRenderProc (int /*long*/ cell, int /*long*/ window, int /*l //TODO - parity and sorted byte[] detail = Converter.wcsToMbcs (null, "cell_odd", true); OS.gtk_paint_flat_box (style, window, OS.GTK_STATE_SELECTED, OS.GTK_SHADOW_NONE, rect, widget, detail, rect.x, rect.y, rect.width, rect.height); + } else { + if (wasSelected) drawForeground = gc.getForeground ().handle; } + gc.dispose(); } } } @@ -2506,6 +2512,9 @@ int /*long*/ rendererRenderProc (int /*long*/ cell, int /*long*/ window, int /*l int /*long*/ g_class = OS.g_type_class_peek_parent (OS.G_OBJECT_GET_CLASS (cell)); GtkCellRendererClass klass = new GtkCellRendererClass (); OS.memmove (klass, g_class); + if (drawForeground != null && OS.GTK_IS_CELL_RENDERER_TEXT (cell)) { + OS.g_object_set (cell, OS.foreground_gdk, drawForeground, 0); + } result = OS.call (klass.render, cell, window, handle, background_area, cell_area, expose_area, drawFlags); } if (item != null) { @@ -2543,7 +2552,8 @@ int /*long*/ rendererRenderProc (int /*long*/ cell, int /*long*/ window, int /*l gc.setForeground (display.getSystemColor (SWT.COLOR_LIST_SELECTION_TEXT)); } else { gc.setBackground (item.getBackground (columnIndex)); - gc.setForeground (item.getForeground (columnIndex)); + Color foreground = drawForeground != null ? Color.gtk_new (display, drawForeground) : item.getForeground (columnIndex); + gc.setForeground (foreground); } gc.setFont (item.getFont (columnIndex)); gc.setClipping (rect.x, rect.y, rect.width, rect.height); |