Skip to content

Commit 0fdac1e

Browse files
ShahzaibIbrahimakoch-yatta
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 1ae0e18 commit 0fdac1e

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)