Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSilenio Quarti2007-05-24 20:25:28 +0000
committerSilenio Quarti2007-05-24 20:25:28 +0000
commitf08d8074284140ee75959f4376bf4271eed96de8 (patch)
tree471c6334891a90a322996c3ce5cebda121e5b383
parent59c7194abace25530f6cc464daa22f94507e57c5 (diff)
downloadeclipse.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.java14
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java14
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);

Back to the top