Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikita Nemkin2019-04-16 02:50:48 -0400
committerNiraj Modi2019-04-25 02:28:01 -0400
commitd90c79a64b1cb6d43c3a9cdcfafd27589651d4f3 (patch)
tree1b6b81edbdd533f016bb9564b47ea609e2d9d22e
parent94f39845cf864397fe21c51e7da66155724ab8bf (diff)
downloadeclipse.platform.swt-d90c79a64b1cb6d43c3a9cdcfafd27589651d4f3.tar.gz
eclipse.platform.swt-d90c79a64b1cb6d43c3a9cdcfafd27589651d4f3.tar.xz
eclipse.platform.swt-d90c79a64b1cb6d43c3a9cdcfafd27589651d4f3.zip
Bug 536621 - [Win32] Custom cell style on Table doesn't work
Only force custom background color if the widget is disabled. The regression was introduced in 15eb1ba with the fix for Bug 516365. Change-Id: Ib39f0b19303be7f6fbc934e8c83d2d9020156e80 Signed-off-by: Nikita Nemkin <nikita@nemkin.ru>
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Table.java95
1 files changed, 45 insertions, 50 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Table.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Table.java
index 93d32c4004..90f908fd0b 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Table.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Table.java
@@ -877,7 +877,7 @@ LRESULT CDDS_PREPAINT (NMLVCUSTOMDRAW nmcd, long /*int*/ wParam, long /*int*/ lP
OS.SetRect (rect, nmcd.left, nmcd.top, nmcd.right, nmcd.bottom);
if (explorerTheme && columnCount == 0) {
long /*int*/ hDC = nmcd.hdc;
- if (OS.IsWindowEnabled (handle) || findImageControl () != null || hasCustomBackground()) {
+ if (OS.IsWindowEnabled (handle) || findImageControl () != null) {
drawBackground (hDC, rect);
} else {
fillBackground (hDC, OS.GetSysColor (OS.COLOR_3DFACE), rect);
@@ -887,26 +887,25 @@ LRESULT CDDS_PREPAINT (NMLVCUSTOMDRAW nmcd, long /*int*/ wParam, long /*int*/ lP
if (control != null && control.backgroundImage != null) {
fillImageBackground (nmcd.hdc, control, rect, 0, 0);
} else {
- if ((int)/*64*/OS.SendMessage (handle, OS.LVM_GETBKCOLOR, 0, 0) == OS.CLR_NONE || hasCustomBackground()) {
- if (OS.IsWindowEnabled (handle) || hasCustomBackground()) {
- if (control == null) control = this;
- fillBackground (nmcd.hdc, control.getBackgroundPixel (), rect);
- if (OS.IsAppThemed ()) {
- if (sortColumn != null && sortDirection != SWT.NONE) {
- int index = indexOf (sortColumn);
- if (index != -1) {
- parent.forceResize ();
- int clrSortBk = getSortColumnPixel ();
- RECT columnRect = new RECT (), headerRect = new RECT ();
- OS.GetClientRect (handle, columnRect);
- long /*int*/ hwndHeader = OS.SendMessage (handle, OS.LVM_GETHEADER, 0, 0);
- if (OS.SendMessage (hwndHeader, OS.HDM_GETITEMRECT, index, headerRect) != 0) {
- OS.MapWindowPoints (hwndHeader, handle, headerRect, 2);
- columnRect.left = headerRect.left;
- columnRect.right = headerRect.right;
- if (OS.IntersectRect(columnRect, columnRect, rect)) {
- fillBackground (nmcd.hdc, clrSortBk, columnRect);
- }
+ final boolean enabled = OS.IsWindowEnabled (handle);
+ if (enabled && (int)/*64*/OS.SendMessage (handle, OS.LVM_GETBKCOLOR, 0, 0) == OS.CLR_NONE || !enabled && hasCustomBackground()) {
+ if (control == null) control = this;
+ fillBackground (nmcd.hdc, control.getBackgroundPixel (), rect);
+ if (OS.IsAppThemed ()) {
+ if (sortColumn != null && sortDirection != SWT.NONE) {
+ int index = indexOf (sortColumn);
+ if (index != -1) {
+ parent.forceResize ();
+ int clrSortBk = getSortColumnPixel ();
+ RECT columnRect = new RECT (), headerRect = new RECT ();
+ OS.GetClientRect (handle, columnRect);
+ long /*int*/ hwndHeader = OS.SendMessage (handle, OS.LVM_GETHEADER, 0, 0);
+ if (OS.SendMessage (hwndHeader, OS.HDM_GETITEMRECT, index, headerRect) != 0) {
+ OS.MapWindowPoints (hwndHeader, handle, headerRect, 2);
+ columnRect.left = headerRect.left;
+ columnRect.right = headerRect.right;
+ if (OS.IntersectRect(columnRect, columnRect, rect)) {
+ fillBackground (nmcd.hdc, clrSortBk, columnRect);
}
}
}
@@ -1016,8 +1015,8 @@ LRESULT CDDS_SUBITEMPREPAINT (NMLVCUSTOMDRAW nmcd, long /*int*/ wParam, long /*i
* image. The fix is emulate LVS_EX_FULLROWSELECT by
* drawing the selection.
*/
- final boolean isWindowEnabled = OS.IsWindowEnabled (handle);
- if (OS.IsWindowVisible (handle) && isWindowEnabled) {
+ final boolean enabled = OS.IsWindowEnabled (handle);
+ if (OS.IsWindowVisible (handle) && enabled) {
if (!explorerTheme && !ignoreDrawSelection && (style & SWT.FULL_SELECTION) != 0) {
int bits = (int)/*64*/OS.SendMessage (handle, OS.LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
if ((bits & OS.LVS_EX_FULLROWSELECT) == 0) {
@@ -1077,7 +1076,7 @@ LRESULT CDDS_SUBITEMPREPAINT (NMLVCUSTOMDRAW nmcd, long /*int*/ wParam, long /*i
if (hasAttributes) {
if (hFont == -1) hFont = OS.SendMessage (handle, OS.WM_GETFONT, 0, 0);
OS.SelectObject (hDC, hFont);
- if (isWindowEnabled) {
+ if (enabled) {
nmcd.clrText = clrText == -1 ? getForegroundPixel () : clrText;
if (clrTextBk == -1) {
nmcd.clrTextBk = OS.CLR_NONE;
@@ -1098,40 +1097,36 @@ LRESULT CDDS_SUBITEMPREPAINT (NMLVCUSTOMDRAW nmcd, long /*int*/ wParam, long /*i
code |= OS.CDRF_NEWFONT;
}
}
- if (isWindowEnabled || hasCustomBackground()) {
- /*
- * Feature in Windows. When there is a sort column, the sort column
- * color draws on top of the background color for an item. The fix
- * is to clear the sort column in CDDS_SUBITEMPREPAINT, and reset it
- * in CDDS_SUBITEMPOSTPAINT.
- *
- * Update region is saved and restored around LVM_SETSELECTEDCOLUMN
- * to prevent infinite WM_PAINT on Vista.
- */
- if (clrTextBk != -1 || hasCustomBackground()) {
- int oldColumn = (int)/*64*/OS.SendMessage (handle, OS.LVM_GETSELECTEDCOLUMN, 0, 0);
- if (oldColumn != -1 && oldColumn == nmcd.iSubItem) {
- long /*int*/ rgn = OS.CreateRectRgn (0, 0, 0, 0);
- int result = OS.GetUpdateRgn (handle, rgn, true);
- OS.SendMessage (handle, OS.LVM_SETSELECTEDCOLUMN, -1, 0);
- OS.ValidateRect (handle, null);
- if (result != OS.NULLREGION) OS.InvalidateRgn (handle, rgn, true);
- OS.DeleteObject (rgn);
- code |= OS.CDRF_NOTIFYPOSTPAINT;
- }
+ /*
+ * Feature in Windows. When there is a sort column, the sort column
+ * color draws on top of the background color for an item. The fix
+ * is to clear the sort column in CDDS_SUBITEMPREPAINT, and reset it
+ * in CDDS_SUBITEMPOSTPAINT.
+ *
+ * Update region is saved and restored around LVM_SETSELECTEDCOLUMN
+ * to prevent infinite WM_PAINT on Vista.
+ */
+ if ((enabled && clrTextBk != -1) || (!enabled && hasCustomBackground())) {
+ int oldColumn = (int)/*64*/OS.SendMessage (handle, OS.LVM_GETSELECTEDCOLUMN, 0, 0);
+ if (oldColumn != -1 && oldColumn == nmcd.iSubItem) {
+ long /*int*/ rgn = OS.CreateRectRgn (0, 0, 0, 0);
+ int result = OS.GetUpdateRgn (handle, rgn, true);
+ OS.SendMessage (handle, OS.LVM_SETSELECTEDCOLUMN, -1, 0);
+ OS.ValidateRect (handle, null);
+ if (result != OS.NULLREGION) OS.InvalidateRgn (handle, rgn, true);
+ OS.DeleteObject (rgn);
+ code |= OS.CDRF_NOTIFYPOSTPAINT;
}
}
- if (!isWindowEnabled || hasCustomBackground() || hasCustomForeground()) {
+ if (!enabled) {
/*
* Feature in Windows. When the table is disabled, it draws
* with a gray background but does not gray the text. The fix
* is to explicitly gray the text, but only, when it wasn't customized.
*/
- nmcd.clrText = isWindowEnabled ? getForegroundPixel() : OS.GetSysColor (OS.COLOR_GRAYTEXT);
- if (findImageControl () != null || hasCustomBackground() || isWindowEnabled) {
+ nmcd.clrText = OS.GetSysColor (OS.COLOR_GRAYTEXT);
+ if (findImageControl () != null || hasCustomBackground()) {
nmcd.clrTextBk = OS.CLR_NONE;
- } else {
- nmcd.clrTextBk = OS.GetSysColor (OS.COLOR_3DFACE);
}
nmcd.uItemState &= ~OS.CDIS_SELECTED;
OS.MoveMemory (lParam, nmcd, NMLVCUSTOMDRAW.sizeof);

Back to the top