Skip to content

Commit b0559a2

Browse files
ShahzaibIbrahimfedejeanne
authored andcommitted
Scale Tree.INSET by zoom level instead of using fixed pixels
The Tree.INSET constant defines the spacing between an item's image and text. Previously, this was a fixed value of 3px, which looks correct at 100% zoom but causes the image and text to appear cramped on higher-DPI displays. This change defines INSET in points and converts it to pixels based on the current zoom level (e.g. 6px at 200%), ensuring consistent spacing across different monitor scales.
1 parent c6a29a9 commit b0559a2

File tree

2 files changed

+16
-17
lines changed

2 files changed

+16
-17
lines changed

bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -750,7 +750,7 @@ LRESULT CDDS_ITEMPOSTPAINT (NMTVCUSTOMDRAW nmcd, long wParam, long lParam) {
750750
}
751751
}
752752
}
753-
rect.left += INSET - 1;
753+
rect.left += Win32DPIUtils.pointToPixel(INSET - 1, zoom) ;
754754
if (drawImage) {
755755
Image image = null;
756756
if (index == 0) {
@@ -759,8 +759,8 @@ LRESULT CDDS_ITEMPOSTPAINT (NMTVCUSTOMDRAW nmcd, long wParam, long lParam) {
759759
Image [] images = item.images;
760760
if (images != null) image = images [index];
761761
}
762-
int inset = i != 0 ? INSET : 0;
763-
int offset = i != 0 ? INSET : INSET + 2;
762+
int inset = i != 0 ? Win32DPIUtils.pointToPixel(INSET, zoom) : 0;
763+
int offset = i != 0 ? Win32DPIUtils.pointToPixel(INSET, zoom) : Win32DPIUtils.pointToPixel(INSET + 2, zoom);
764764
if (image != null) {
765765
Rectangle bounds = image.getBounds (); // Points
766766
if (size == null) size = Win32DPIUtils.pixelToPoint (getImageSize (), zoom); // To Points
@@ -5488,7 +5488,7 @@ public void showColumn (TreeColumn column) {
54885488
SCROLLINFO info = new SCROLLINFO();
54895489
info.cbSize = SCROLLINFO.sizeof;
54905490
info.fMask = OS.SIF_POS;
5491-
info.nPos = Math.max(0, headerRect.left - Tree.INSET / 2);
5491+
info.nPos = Math.max(0, headerRect.left - Win32DPIUtils.pointToPixel(INSET / 2, getZoom()));
54925492
OS.SetScrollInfo(hwndParent, OS.SB_HORZ, info, true);
54935493
setScrollWidth();
54945494
} else if (scrollBecauseRight) {
@@ -5502,8 +5502,8 @@ public void showColumn (TreeColumn column) {
55025502
// info.nPos + wideRect = headerRect.left + wideHeader
55035503
// info.nPos = headerRect.left + wideHeader - wideRect
55045504
info.nPos = Math.max(0, wideHeader + headerRect.left - wideRect
5505-
- Tree.INSET / 2);
5506-
info.nPos = Math.min(rect.right - Tree.INSET / 2, info.nPos);
5505+
- Win32DPIUtils.pointToPixel(INSET / 2, getZoom()) );
5506+
info.nPos = Math.min(rect.right - Win32DPIUtils.pointToPixel(INSET / 2, getZoom()), info.nPos);
55075507

55085508
OS.SetScrollInfo(hwndParent, OS.SB_HORZ, info, true);
55095509
setScrollWidth();
@@ -7930,7 +7930,7 @@ LRESULT wmNotifyHeader (NMHDR hdr, long wParam, long lParam) {
79307930
}
79317931
}
79327932

7933-
int x = rects[i].left + INSET + 2;
7933+
int x = rects[i].left + Win32DPIUtils.pointToPixel(INSET + 2, getZoom());
79347934
if (columns[i].image != null) {
79357935
GCData data = new GCData();
79367936
data.device = display;
@@ -8248,7 +8248,7 @@ LRESULT wmNotifyToolTip (NMTTCUSTOMDRAW nmcd, long lParam) {
82488248
data.background = OS.GetBkColor (nmcd.hdc);
82498249
data.font = Font.win32_new (display, hFont);
82508250
GC gc = createNewGC(nmcd.hdc, data);
8251-
int x = cellRect [0].left + INSET;
8251+
int x = cellRect [0].left + Win32DPIUtils.pointToPixel(INSET, getZoom());
82528252
if (index [0] != 0) x -= gridWidth;
82538253
Image image = item [0].getImage (index [0]);
82548254
if (image != null || index [0] == 0) {
@@ -8259,11 +8259,11 @@ LRESULT wmNotifyToolTip (NMTTCUSTOMDRAW nmcd, long lParam) {
82598259
Rectangle rect = image.getBounds (); // Points
82608260
int zoom = getZoom();
82618261
gc.drawImage (image, rect.x, rect.y, rect.width, rect.height, DPIUtil.pixelToPoint(x, zoom), DPIUtil.pixelToPoint(imageRect.top, zoom), DPIUtil.pixelToPoint(size.x, zoom), DPIUtil.pixelToPoint(size.y, zoom));
8262-
x += INSET + (index [0] == 0 ? 1 : 0);
8262+
x += Win32DPIUtils.pointToPixel(INSET, getZoom()) + (index [0] == 0 ? 1 : 0);
82638263
}
82648264
x += size.x;
82658265
} else {
8266-
x += INSET;
8266+
x += Win32DPIUtils.pointToPixel(INSET, getZoom());
82678267
}
82688268
String string = item [0].getText (index [0]);
82698269
if (string != null) {

bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TreeItem.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,7 @@ RECT getBounds (int index, boolean getText, boolean getImage, boolean fullText,
444444
if (getImage && !fullImage) {
445445
if (OS.SendMessage (hwnd, OS.TVM_GETIMAGELIST, OS.TVSIL_NORMAL, 0) != 0) {
446446
Point size = parent.getImageSize ();
447-
rect.left -= size.x + Tree.INSET;
447+
rect.left -= size.x + Win32DPIUtils.pointToPixel(Tree.INSET, getZoom());
448448
if (!getText) rect.right = rect.left + size.x;
449449
} else {
450450
if (!getText) rect.right = rect.left;
@@ -496,7 +496,7 @@ RECT getBounds (int index, boolean getText, boolean getImage, boolean fullText,
496496
}
497497
if (getText) {
498498
if (fullText && clip) {
499-
rect.left = rect.right + Tree.INSET;
499+
rect.left = rect.right + Win32DPIUtils.pointToPixel(Tree.INSET, getZoom());
500500
rect.right = headerRect.right;
501501
} else {
502502
String string = index == 0 ? text : strings != null ? strings [index] : null;
@@ -517,10 +517,10 @@ RECT getBounds (int index, boolean getText, boolean getImage, boolean fullText,
517517
OS.ReleaseDC (hwnd, hNewDC);
518518
}
519519
if (getImage) {
520-
rect.right += textRect.right - textRect.left + Tree.INSET * 3;
520+
rect.right += textRect.right - textRect.left + Win32DPIUtils.pointToPixel(Tree.INSET * 3, getZoom());
521521
} else {
522-
rect.left = rect.right + Tree.INSET;
523-
rect.right = rect.left + (textRect.right - textRect.left) + Tree.INSET;
522+
rect.left = rect.right + Win32DPIUtils.pointToPixel(Tree.INSET, getZoom());
523+
rect.right = rect.left + (textRect.right - textRect.left) + Win32DPIUtils.pointToPixel(Tree.INSET, getZoom());
524524
}
525525
}
526526
}
@@ -918,9 +918,8 @@ public Rectangle getTextBounds (int index) {
918918
Rectangle getTextBoundsInPixels (int index) {
919919
if (!parent.checkData (this, true)) error (SWT.ERROR_WIDGET_DISPOSED);
920920
RECT rect = getBounds (index, true, false, true);
921-
if (index == 0) rect.left += Tree.INSET - 1;
922921
rect.left = Math.min (rect.left, rect.right);
923-
rect.right = rect.right - Tree.INSET + 1; // Add 1 px margin to avoid truncation of text seen with "Segoe UI" font
922+
rect.right = rect.right + Win32DPIUtils.pointToPixel(Tree.INSET, getZoom()); // Add INSET margin to avoid truncation of text seen with "Segoe UI" font
924923
int width = Math.max (0, rect.right - rect.left);
925924
int height = Math.max (0, rect.bottom - rect.top);
926925
return new Rectangle (rect.left, rect.top, width, height);

0 commit comments

Comments
 (0)