From 8b6b89087ff80ba3f66773142906648740f7ccae Mon Sep 17 00:00:00 2001 From: Nicolai Timofeev Date: Sat, 19 Apr 2025 10:25:52 +0300 Subject: [PATCH 001/119] Support Native Image for Edge Also need add to jni-config.json: [ { "name": "org.eclipse.swt.browser.Edge$HandleCoreWebView2SwtCallback", "methods": [ { "name": "Invoke", "parameterTypes": ["long", "long"] } ] }, { "name": "org.eclipse.swt.browser.Edge$HandleCoreWebView2SwtHost", "methods": [ { "name": "CallJava", "parameterTypes": ["int", "long", "long"] } ] } ] --- .../win32/org/eclipse/swt/browser/Edge.java | 58 ++++++++++++------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/Edge.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/Edge.java index 0ce5bf07263..5ededadd2f8 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/Edge.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/Edge.java @@ -233,15 +233,24 @@ static void error(int code, int hr) { SWT.error(code, null, String.format(" [0x%08x]", hr)); } -static IUnknown newCallback(ICoreWebView2SwtCallback handler) { - long punk = COM.CreateSwtWebView2Callback((arg0, arg1) -> { +static class HandleCoreWebView2SwtCallback implements ICoreWebView2SwtCallback { + private final ICoreWebView2SwtCallback handler; + public HandleCoreWebView2SwtCallback(ICoreWebView2SwtCallback handler) { + this.handler = handler; + } + @Override + public int Invoke(long arg0, long arg1) { inCallback++; try { return handler.Invoke(arg0, arg1); } finally { inCallback--; } - }); + } +} + +static IUnknown newCallback(ICoreWebView2SwtCallback handler) { + long punk = COM.CreateSwtWebView2Callback(new HandleCoreWebView2SwtCallback(handler)); if (punk == 0) error(SWT.ERROR_NO_HANDLES, COM.E_OUTOFMEMORY); return new IUnknown(punk); } @@ -789,7 +798,7 @@ void setupBrowser(int hr, long pv) { handler.Release(); } - IUnknown hostDisp = newHostObject(this::handleCallJava); + IUnknown hostDisp = newHostObject(new HandleCoreWebView2SwtHost(this.functions)); long[] hostObj = { COM.VT_DISPATCH, hostDisp.getAddress(), 0 }; // VARIANT webView.AddHostObjectToScript("swt\0".toCharArray(), hostObj); hostDisp.Release(); @@ -1012,24 +1021,31 @@ int handleDocumentTitleChanged(long pView, long pArgs) { return COM.S_OK; } -long handleCallJava(int index, long bstrToken, long bstrArgsJson) { - Object result = null; - String token = bstrToString(bstrToken); - BrowserFunction function = functions.get(index); - if (function != null && token.equals (function.token)) { - inCallback++; - try { - String argsJson = bstrToString(bstrArgsJson); - Object args = JSON.parse(argsJson.toCharArray()); - result = function.function ((Object[]) args); - } catch (Throwable e) { - result = WebBrowser.CreateErrorString(e.getLocalizedMessage()); - } finally { - inCallback--; +static class HandleCoreWebView2SwtHost implements ICoreWebView2SwtHost { + private final Map functions; + public HandleCoreWebView2SwtHost(Map functions) { + this.functions = functions; + } + @Override + public long CallJava(int index, long bstrToken, long bstrArgsJson) { + Object result = null; + String token = bstrToString(bstrToken); + BrowserFunction function = functions.get(index); + if (function != null && token.equals (function.token)) { + inCallback++; + try { + String argsJson = bstrToString(bstrArgsJson); + Object args = JSON.parse(argsJson.toCharArray()); + result = function.function ((Object[]) args); + } catch (Throwable e) { + result = WebBrowser.CreateErrorString(e.getLocalizedMessage()); + } finally { + inCallback--; + } } - } - String json = JSON.stringify(result); - return COM.SysAllocStringLen(json.toCharArray(), json.length()); + String json = JSON.stringify(result); + return COM.SysAllocStringLen(json.toCharArray(), json.length()); + } } int handleFrameNavigationStarting(long pView, long pArgs) { From a439809910193a0d8293fec03c29ff996f499c88 Mon Sep 17 00:00:00 2001 From: Amartya Parijat Date: Mon, 14 Apr 2025 16:45:10 +0200 Subject: [PATCH 002/119] [Win32] Adjust tooltip to fit in one monitor #557 This commit contributes to fixing the infinite looping effect on painting a tooltip over a TreeItem on win32 when a tooltip spans over two monitors having more area on the other monitor than the one on which the cursor is placed. The fix makes sure that the tooltip is not drawn on the other monitors by shifting or adjusting the width. Fixes https://github.com/eclipse-platform/eclipse.platform.swt/issues/557 --- .../win32/org/eclipse/swt/widgets/Tree.java | 58 ++++++++++++++++++- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java index d85ed201706..6e7d8001a0f 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java @@ -8157,11 +8157,24 @@ LRESULT wmNotifyToolTip (NMHDR hdr, long wParam, long lParam) { if (findCell (pt.x, pt.y, item, index, cellRect, itemRect)) { RECT toolRect = toolTipRect (itemRect [0]); OS.MapWindowPoints (handle, 0, toolRect, 2); - int width = toolRect.right - toolRect.left; - int height = toolRect.bottom - toolRect.top; int flags = OS.SWP_NOACTIVATE | OS.SWP_NOZORDER | OS.SWP_NOSIZE; if (isCustomToolTip ()) flags &= ~OS.SWP_NOSIZE; - OS.SetWindowPos (itemToolTipHandle, 0, toolRect.left, toolRect.top, width, height, flags); + // Retrieve the monitor containing the cursor position, as tool tip placement + // must occur on the same monitor to avoid potential infinite loops. When a tool tip + // appears on a different monitor than the cursor, the operating system may + // attempt to re-scale it based on that monitor's settings. This re-scaling + // triggers additional display messages to SWT, creating an infinite loop + // of positioning and re-scaling events. + // Refer: https://github.com/eclipse-platform/eclipse.platform.swt/issues/557 + Point cursorLocation = display.getCursorLocation(); + Rectangle monitorBounds = cursorLocation instanceof MonitorAwarePoint monitorAwarePoint + ? getContainingMonitorBoundsInMultiZoomCoordinateSystem(monitorAwarePoint) + : getContainingMonitorBoundsInSingleZoomCoordinateSystem(cursorLocation); + if (monitorBounds == null) { + return null; + } + Rectangle adjustedTooltipBounds = fitTooltipBoundsIntoMonitor(toolRect, monitorBounds); + OS.SetWindowPos (itemToolTipHandle, 0, adjustedTooltipBounds.x, adjustedTooltipBounds.y, adjustedTooltipBounds.width, adjustedTooltipBounds.height, flags); return LRESULT.ONE; } return result; @@ -8170,6 +8183,45 @@ LRESULT wmNotifyToolTip (NMHDR hdr, long wParam, long lParam) { return null; } +/** + * Adjust the tool tip to fit in a single monitor either by shifting its position or by adjusting it's width. + */ +private Rectangle fitTooltipBoundsIntoMonitor(RECT tooltipBounds, Rectangle monitorBounds) { + int tooltipWidth = tooltipBounds.right - tooltipBounds.left; + int tooltipHeight = tooltipBounds.bottom - tooltipBounds.top; + if (tooltipBounds.left < monitorBounds.x) { + tooltipBounds.left = monitorBounds.x; + } + int monitorBoundsRightEnd = monitorBounds.x + monitorBounds.width; + if (tooltipBounds.right > monitorBoundsRightEnd) { + if (tooltipWidth <= monitorBounds.width) { + tooltipBounds.left = monitorBoundsRightEnd - tooltipWidth; + } else { + tooltipBounds.left = monitorBounds.x; + } + tooltipWidth = monitorBoundsRightEnd - tooltipBounds.left; + } + return new Rectangle(tooltipBounds.left, tooltipBounds.top, tooltipWidth, tooltipHeight); +} + +private Rectangle getContainingMonitorBoundsInSingleZoomCoordinateSystem(Point point) { + int zoom = getZoom(); + point = DPIUtil.scaleUp(point, zoom); + for (Monitor monitor : display.getMonitors()) { + Rectangle monitorBounds = DPIUtil.scaleUp(monitor.getBounds(), zoom); + if (monitorBounds.contains(point)) { + return monitorBounds; + } + } + return null; +} + +private Rectangle getContainingMonitorBoundsInMultiZoomCoordinateSystem(MonitorAwarePoint point) { + Monitor monitor = point.getMonitor(); + return new Rectangle(monitor.x, monitor.y, DPIUtil.scaleUp(monitor.width, monitor.zoom), + DPIUtil.scaleUp(monitor.height, monitor.zoom)); +} + LRESULT wmNotifyToolTip (NMTTCUSTOMDRAW nmcd, long lParam) { switch (nmcd.dwDrawStage) { case OS.CDDS_PREPAINT: { From 3d5149346b1db25a63042123549b2c3cd7cced38 Mon Sep 17 00:00:00 2001 From: Andreas Koch Date: Mon, 31 Mar 2025 11:11:29 +0200 Subject: [PATCH 003/119] [win32] Fix DnD across multiple monitors This commit addresses issues, when DnD across multiple monitors with monitors specific scaling is used. If the monitors have different zoom dragging into a table or tree on the second monitor will detect the wrong destination items depending on the zoom. To address this the zoom should always be inherited from the underlying control if available. --- .../win32/org/eclipse/swt/dnd/DropTarget.java | 38 ++++++++++++------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/DropTarget.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/DropTarget.java index 0d3f32e137e..2a804684a87 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/DropTarget.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/DropTarget.java @@ -14,6 +14,7 @@ package org.eclipse.swt.dnd; import org.eclipse.swt.*; +import org.eclipse.swt.graphics.*; import org.eclipse.swt.internal.*; import org.eclipse.swt.internal.ole.win32.*; import org.eclipse.swt.internal.win32.*; @@ -281,16 +282,14 @@ int DragEnter_64(long pDataObject, int grfKeyState, long pt, long pdwEffect) { } int DragEnter(long pDataObject, int grfKeyState, int pt_x, int pt_y, long pdwEffect) { - int zoom = DPIUtil.getZoomForAutoscaleProperty(nativeZoom); - pt_x = DPIUtil.scaleDown(pt_x, zoom);// To Points - pt_y = DPIUtil.scaleDown(pt_y, zoom);// To Points + Point location = convertPixelToPoint(pt_x, pt_y); selectedDataType = null; selectedOperation = DND.DROP_NONE; if (iDataObject != null) iDataObject.Release(); iDataObject = null; DNDEvent event = new DNDEvent(); - if (!setEventData(event, pDataObject, grfKeyState, pt_x, pt_y, pdwEffect)) { + if (!setEventData(event, pDataObject, grfKeyState, location.x, location.y, pdwEffect)) { OS.MoveMemory(pdwEffect, new int[] {COM.DROPEFFECT_NONE}, 4); return COM.S_FALSE; } @@ -349,14 +348,12 @@ int DragOver_64(int grfKeyState, long pt, long pdwEffect) { } int DragOver(int grfKeyState, int pt_x, int pt_y, long pdwEffect) { - int zoom = DPIUtil.getZoomForAutoscaleProperty(nativeZoom); - pt_x = DPIUtil.scaleDown(pt_x, zoom);// To Points - pt_y = DPIUtil.scaleDown(pt_y, zoom);// To Points + Point location = convertPixelToPoint(pt_x, pt_y); if (iDataObject == null) return COM.S_FALSE; int oldKeyOperation = keyOperation; DNDEvent event = new DNDEvent(); - if (!setEventData(event, iDataObject.getAddress(), grfKeyState, pt_x, pt_y, pdwEffect)) { + if (!setEventData(event, iDataObject.getAddress(), grfKeyState, location.x, location.y, pdwEffect)) { keyOperation = -1; OS.MoveMemory(pdwEffect, new int[] {COM.DROPEFFECT_NONE}, 4); return COM.S_FALSE; @@ -403,23 +400,38 @@ int Drop_64(long pDataObject, int grfKeyState, long pt, long pdwEffect) { return Drop(pDataObject, grfKeyState, point.x, point.y, pdwEffect); } +private Point convertPixelToPoint(int xInPixels, int yInPixels) { + if (this.control == null) { + // If there is no control for context, the behavior remains as before + int zoom = DPIUtil.getZoomForAutoscaleProperty(this.nativeZoom); + return DPIUtil.scaleDown(new Point(xInPixels, yInPixels), zoom); + } + int zoom = DPIUtil.getZoomForAutoscaleProperty(this.control.nativeZoom); + // There is no API to convert absolute values in pixels to display relative + // points. Therefor, the display relative pixel values are converted to control + // relative pixel values via Windows API. These values can be scaled down to points + POINT pt = new POINT (); + pt.x = xInPixels; pt.y = yInPixels; + OS.ScreenToClient (this.control.handle, pt); + Point p = DPIUtil.scaleDown(new Point (pt.x, pt.y), zoom); + return this.control.toDisplay(p); +} + int Drop(long pDataObject, int grfKeyState, int pt_x, int pt_y, long pdwEffect) { try { - int zoom = DPIUtil.getZoomForAutoscaleProperty(nativeZoom); - pt_x = DPIUtil.scaleDown(pt_x, zoom);// To Points - pt_y = DPIUtil.scaleDown(pt_y, zoom);// To Points + Point location = convertPixelToPoint(pt_x, pt_y); DNDEvent event = new DNDEvent(); event.widget = this; event.time = OS.GetMessageTime(); if (dropEffect != null) { - event.item = dropEffect.getItem(pt_x, pt_y); + event.item = dropEffect.getItem(location.x, location.y); } event.detail = DND.DROP_NONE; notifyListeners(DND.DragLeave, event); refresh(); event = new DNDEvent(); - if (!setEventData(event, pDataObject, grfKeyState, pt_x, pt_y, pdwEffect)) { + if (!setEventData(event, pDataObject, grfKeyState, location.x, location.y, pdwEffect)) { keyOperation = -1; OS.MoveMemory(pdwEffect, new int[] {COM.DROPEFFECT_NONE}, 4); return COM.S_FALSE; From 0a57c252fbd12c54c9e249a3d2431a6896f7c024 Mon Sep 17 00:00:00 2001 From: Aleksandar Kurtakov Date: Tue, 22 Apr 2025 10:19:01 +0300 Subject: [PATCH 004/119] Convert DPIUtilTests to JUnit 5 --- .../eclipse/swt/tests/junit/DPIUtilTests.java | 226 +++++++++--------- 1 file changed, 111 insertions(+), 115 deletions(-) diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/DPIUtilTests.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/DPIUtilTests.java index aa19d2c843f..a517ed9942b 100644 --- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/DPIUtilTests.java +++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/DPIUtilTests.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2024 Yatta Solutions + * Copyright (c) 2024, 2025 Yatta Solutions and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -13,18 +13,19 @@ *******************************************************************************/ package org.eclipse.swt.tests.junit; -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertSame; -import static org.junit.Assume.assumeFalse; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertSame; import org.eclipse.swt.graphics.Device; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.internal.DPIUtil; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledOnOs; /** * Automated Test Suite for class org.eclipse.swt.internal.DPIUtil @@ -32,18 +33,18 @@ * @see org.eclipse.swt.internal.DPIUtil */ @SuppressWarnings("restriction") +@DisabledOnOs(value = org.junit.jupiter.api.condition.OS.LINUX, disabledReason = "Linux uses Cairo auto scaling, thus DPIUtil scaling is disabled") public class DPIUtilTests { private int deviceZoom; - @Before + @BeforeEach public void setup() { - assumeFalse("Linux uses Cairo auto scaling, thus DPIUtil scaling is disabled", SwtTestUtil.isLinux); deviceZoom = DPIUtil.getDeviceZoom(); DPIUtil.setDeviceZoom(200); } - @After + @AfterEach public void tearDown() { DPIUtil.setDeviceZoom(deviceZoom); } @@ -55,24 +56,24 @@ public void scaleDownFloatArray() { float[] valueAt100 = new float[] { 1, 1.5f, 2 }; float[] scaledValue = DPIUtil.autoScaleDown(valueAt200); - assertArrayEquals(String.format("Scaling down float array from device zoom (%d) to 100 failed", - DPIUtil.getDeviceZoom()), valueAt100, scaledValue, .001f); + assertArrayEquals(valueAt100, scaledValue, .001f, String.format("Scaling down float array from device zoom (%d) to 100 failed", + DPIUtil.getDeviceZoom())); scaledValue = DPIUtil.autoScaleDown((Device) null, valueAt200); - assertArrayEquals(String.format("Scaling down float array from device zoom (%d) to 100 with device failed", - DPIUtil.getDeviceZoom()), valueAt100, scaledValue, .001f); + assertArrayEquals(valueAt100, scaledValue, .001f, String.format("Scaling down float array from device zoom (%d) to 100 with device failed", + DPIUtil.getDeviceZoom())); scaledValue = DPIUtil.scaleDown(valueAt200, 200); - assertArrayEquals("Scaling down float array from 200 failed", valueAt100, scaledValue, .001f); + assertArrayEquals(valueAt100, scaledValue, .001f, "Scaling down float array from 200 failed"); scaledValue = DPIUtil.scaleDown((Device) null, valueAt200, 200); - assertArrayEquals("Scaling down float array from 200 with device failed", valueAt100, scaledValue, .001f); + assertArrayEquals(valueAt100, scaledValue, .001f, "Scaling down float array from 200 with device failed"); scaledValue = DPIUtil.scaleDown(valueAt150, 150); - assertArrayEquals("Scaling down float array from 150 failed", valueAt100, scaledValue, .001f); + assertArrayEquals(valueAt100, scaledValue, .001f, "Scaling down float array from 150 failed"); scaledValue = DPIUtil.scaleDown((Device) null, valueAt150, 150); - assertArrayEquals("Scaling down float array from 150 with device failed", valueAt100, scaledValue, .001f); + assertArrayEquals(valueAt100, scaledValue, .001f, "Scaling down float array from 150 with device failed"); scaledValue = DPIUtil.scaleDown(valueAt100, 100); - assertSame("Scaling down float array without zoom change failed", valueAt100, scaledValue); + assertSame(valueAt100, scaledValue, "Scaling down float array without zoom change failed"); scaledValue = DPIUtil.scaleDown((Device) null, valueAt100, 100); - assertSame("Scaling down float array without zoom change with device failed", valueAt100, scaledValue); + assertSame(valueAt100, scaledValue, "Scaling down float array without zoom change with device failed"); } @Test @@ -83,24 +84,23 @@ public void scaleDownInteger() { int scaledValue = DPIUtil.autoScaleDown(valueAt200); assertEquals( - String.format("Scaling down integer from device zoom (%d) to 100 failed", DPIUtil.getDeviceZoom()), - valueAt100, scaledValue); + valueAt100, scaledValue, String.format("Scaling down integer from device zoom (%d) to 100 failed", DPIUtil.getDeviceZoom())); scaledValue = DPIUtil.autoScaleDown((Device) null, valueAt200); - assertEquals(String.format("Scaling down integer from device zoom (%d) to 100 with device failed", - DPIUtil.getDeviceZoom()), valueAt100, scaledValue); + assertEquals( + valueAt100, scaledValue, String.format("Scaling down integer from device zoom (%d) to 100 with device failed", DPIUtil.getDeviceZoom())); scaledValue = DPIUtil.scaleDown(valueAt200, 200); - assertEquals("Scaling down integer from 200 failed", valueAt100, scaledValue); + assertEquals(valueAt100, scaledValue, "Scaling down integer from 200 failed"); scaledValue = DPIUtil.scaleDown((Device) null, valueAt200, 200); - assertEquals("Scaling down integer from 200 with device failed", valueAt100, scaledValue); + assertEquals(valueAt100, scaledValue, "Scaling down integer from 200 with device failed"); scaledValue = DPIUtil.scaleDown(valueAt150, 150); - assertEquals("Scaling down integer from 150 failed", valueAt100, scaledValue); + assertEquals(valueAt100, scaledValue, "Scaling down integer from 150 failed"); scaledValue = DPIUtil.scaleDown((Device) null, valueAt150, 150); - assertEquals("Scaling down integer from 150 with device failed", valueAt100, scaledValue); + assertEquals(valueAt100, scaledValue, "Scaling down integer from 150 with device failed"); scaledValue = DPIUtil.scaleDown(valueAt100, 100); - assertSame("Scaling down integer without zoom change failed", valueAt100, scaledValue); + assertSame(valueAt100, scaledValue, "Scaling down integer without zoom change failed"); scaledValue = DPIUtil.scaleDown((Device) null, valueAt100, 100); - assertSame("Scaling down integer without zoom change with device failed", valueAt100, scaledValue); + assertSame(valueAt100, scaledValue, "Scaling down integer without zoom change with device failed"); } @Test @@ -110,25 +110,24 @@ public void scaleDownFloat() { float valueAt100 = 5f; float scaledValue = DPIUtil.autoScaleDown(valueAt200); - assertEquals( - String.format("Scaling down float from device zoom (%d) to 100 failed", DPIUtil.getDeviceZoom()), - valueAt100, scaledValue, .001f); + assertEquals(valueAt100, scaledValue, .001f, + String.format("Scaling down float from device zoom (%d) to 100 failed", DPIUtil.getDeviceZoom())); scaledValue = DPIUtil.autoScaleDown((Device) null, valueAt200); - assertEquals(String.format("Scaling down float from device zoom (%d) to 100 with device failed", - DPIUtil.getDeviceZoom()), valueAt100, scaledValue, .001f); + assertEquals(valueAt100, scaledValue, .001f, String + .format("Scaling down float from device zoom (%d) to 100 with device failed", DPIUtil.getDeviceZoom())); scaledValue = DPIUtil.scaleDown(valueAt200, 200); - assertEquals("Scaling down float from 200 failed", valueAt100, scaledValue, .001f); + assertEquals(valueAt100, scaledValue, .001f, "Scaling down float from 200 failed"); scaledValue = DPIUtil.scaleDown((Device) null, valueAt200, 200); - assertEquals("Scaling down float from 200 with device failed", valueAt100, scaledValue, .001f); + assertEquals(valueAt100, scaledValue, .001f, "Scaling down float from 200 with device failed"); scaledValue = DPIUtil.scaleDown(valueAt150, 150); - assertEquals("Scaling down float from 150 failed", valueAt100, scaledValue, .001f); + assertEquals(valueAt100, scaledValue, .001f, "Scaling down float from 150 failed"); scaledValue = DPIUtil.scaleDown((Device) null, valueAt150, 150); - assertEquals("Scaling down float from 150 with device failed", valueAt100, scaledValue, .001f); + assertEquals(valueAt100, scaledValue, .001f, "Scaling down float from 150 with device failed"); scaledValue = DPIUtil.scaleDown(valueAt100, 100); - assertEquals("Scaling down float without zoom change failed", valueAt100, scaledValue, .001f); + assertEquals(valueAt100, scaledValue, .001f, "Scaling down float without zoom change failed"); scaledValue = DPIUtil.scaleDown((Device) null, valueAt100, 100); - assertEquals("Scaling down float without zoom change with device failed", valueAt100, scaledValue, .001f); + assertEquals(valueAt100, scaledValue, .001f, "Scaling down float without zoom change with device failed"); } @Test @@ -138,25 +137,24 @@ public void scaleDownPoint() { Point valueAt100 = new Point(5, 7); Point scaledValue = DPIUtil.autoScaleDown(valueAt200); - assertEquals( - String.format("Scaling down Point from device zoom (%d) to 100 failed", DPIUtil.getDeviceZoom()), - valueAt100, scaledValue); + assertEquals(valueAt100, scaledValue, + String.format("Scaling down Point from device zoom (%d) to 100 failed", DPIUtil.getDeviceZoom())); scaledValue = DPIUtil.autoScaleDown((Device) null, valueAt200); - assertEquals(String.format("Scaling down Point from device zoom (%d) to 100 with device failed", - DPIUtil.getDeviceZoom()), valueAt100, scaledValue); + assertEquals(valueAt100, scaledValue, String + .format("Scaling down Point from device zoom (%d) to 100 with device failed", DPIUtil.getDeviceZoom())); scaledValue = DPIUtil.scaleDown(valueAt200, 200); - assertEquals("Scaling down Point from 200 failed", valueAt100, scaledValue); + assertEquals(valueAt100, scaledValue, "Scaling down Point from 200 failed"); scaledValue = DPIUtil.scaleDown((Device) null, valueAt200, 200); - assertEquals("Scaling down Point from 200 with device failed", valueAt100, scaledValue); + assertEquals(valueAt100, scaledValue, "Scaling down Point from 200 with device failed"); scaledValue = DPIUtil.scaleDown(valueAt150, 150); - assertEquals("Scaling down Point from 150 failed", valueAt100, scaledValue); + assertEquals(valueAt100, scaledValue, "Scaling down Point from 150 failed"); scaledValue = DPIUtil.scaleDown((Device) null, valueAt150, 150); - assertEquals("Scaling down Point from 150 with device failed", valueAt100, scaledValue); + assertEquals(valueAt100, scaledValue, "Scaling down Point from 150 with device failed"); scaledValue = DPIUtil.scaleDown(valueAt100, 100); - assertSame("Scaling down Point without zoom change failed", valueAt100, scaledValue); + assertSame(valueAt100, scaledValue, "Scaling down Point without zoom change failed"); scaledValue = DPIUtil.scaleDown((Device) null, valueAt100, 100); - assertSame("Scaling down Point without zoom change with device failed", valueAt100, scaledValue); + assertSame(valueAt100, scaledValue, "Scaling down Point without zoom change with device failed"); } @Test @@ -166,24 +164,24 @@ public void scaleDownRectangle() { Rectangle valueAt100 = new Rectangle(50, 75, 5, 7); Rectangle scaledValue = DPIUtil.autoScaleDown(valueAt200); - assertEquals(String.format("Scaling down Rectangle from device zoom (%d) to 100 failed", - DPIUtil.getDeviceZoom()), valueAt100, scaledValue); + assertEquals(valueAt100, scaledValue, + String.format("Scaling down Rectangle from device zoom (%d) to 100 failed", DPIUtil.getDeviceZoom())); scaledValue = DPIUtil.autoScaleDown((Device) null, valueAt200); - assertEquals(String.format("Scaling down Rectangle from device zoom (%d) to 100 with device failed", - DPIUtil.getDeviceZoom()), valueAt100, scaledValue); + assertEquals(valueAt100, scaledValue, String.format( + "Scaling down Rectangle from device zoom (%d) to 100 with device failed", DPIUtil.getDeviceZoom())); scaledValue = DPIUtil.scaleDown(valueAt200, 200); - assertEquals("Scaling down Rectangle from 200 failed", valueAt100, scaledValue); + assertEquals(valueAt100, scaledValue, "Scaling down Rectangle from 200 failed"); scaledValue = DPIUtil.scaleDown((Device) null, valueAt200, 200); - assertEquals("Scaling down Rectangle from 200 with device failed", valueAt100, scaledValue); + assertEquals(valueAt100, scaledValue, "Scaling down Rectangle from 200 with device failed"); scaledValue = DPIUtil.scaleDown(valueAt150, 150); - assertEquals("Scaling down Rectangle from 150 failed", valueAt100, scaledValue); + assertEquals(valueAt100, scaledValue, "Scaling down Rectangle from 150 failed"); scaledValue = DPIUtil.scaleDown((Device) null, valueAt150, 150); - assertEquals("Scaling down Rectangle from 150 with device failed", valueAt100, scaledValue); + assertEquals(valueAt100, scaledValue, "Scaling down Rectangle from 150 with device failed"); scaledValue = DPIUtil.scaleDown(valueAt100, 100); - assertSame("Scaling down Rectangle without zoom change failed", valueAt100, scaledValue); + assertSame(valueAt100, scaledValue, "Scaling down Rectangle without zoom change failed"); scaledValue = DPIUtil.scaleDown((Device) null, valueAt100, 100); - assertSame("Scaling down Rectangle without zoom change with device failed", valueAt100, scaledValue); + assertSame(valueAt100, scaledValue, "Scaling down Rectangle without zoom change with device failed"); } @Test @@ -193,25 +191,24 @@ public void scaleUpIntArray() { int[] valueAt100 = new int[] { 5, 6, 7 }; int[] scaledValue = DPIUtil.autoScaleUp(valueAt100); - assertArrayEquals( - String.format("Scaling up int array to device zoom (%d) to 100 failed", DPIUtil.getDeviceZoom()), - valueAt200, scaledValue); + assertArrayEquals(valueAt200, scaledValue, + String.format("Scaling up int array to device zoom (%d) to 100 failed", DPIUtil.getDeviceZoom())); scaledValue = DPIUtil.autoScaleUp((Device) null, valueAt100); - assertArrayEquals(String.format("Scaling up int array to device zoom (%d) to 100 with device failed", - DPIUtil.getDeviceZoom()), valueAt200, scaledValue); + assertArrayEquals(valueAt200, scaledValue, String + .format("Scaling up int array to device zoom (%d) to 100 with device failed", DPIUtil.getDeviceZoom())); scaledValue = DPIUtil.scaleUp(valueAt100, 200); - assertArrayEquals("Scaling up int array to 200 failed", valueAt200, scaledValue); + assertArrayEquals(valueAt200, scaledValue, "Scaling up int array to 200 failed"); scaledValue = DPIUtil.scaleUp((Device) null, valueAt100, 200); - assertArrayEquals("Scaling up int array to 200 with device failed", valueAt200, scaledValue); + assertArrayEquals(valueAt200, scaledValue, "Scaling up int array to 200 with device failed"); scaledValue = DPIUtil.scaleUp(valueAt100, 150); - assertArrayEquals("Scaling up int array to 150 failed", valueAt150, scaledValue); + assertArrayEquals(valueAt150, scaledValue, "Scaling up int array to 150 failed"); scaledValue = DPIUtil.scaleUp((Device) null, valueAt100, 150); - assertArrayEquals("Scaling up int array to 150 with device failed", valueAt150, scaledValue); + assertArrayEquals(valueAt150, scaledValue, "Scaling up int array to 150 with device failed"); scaledValue = DPIUtil.scaleUp(valueAt100, 100); - assertSame("Scaling up int array without zoom change failed", valueAt100, scaledValue); + assertSame(valueAt100, scaledValue, "Scaling up int array without zoom change failed"); scaledValue = DPIUtil.scaleUp((Device) null, valueAt100, 100); - assertSame("Scaling up int array without zoom change with device failed", valueAt100, scaledValue); + assertSame(valueAt100, scaledValue, "Scaling up int array without zoom change with device failed"); } @Test @@ -221,24 +218,24 @@ public void scaleUpInteger() { int valueAt100 = 5; int scaledValue = DPIUtil.autoScaleUp(valueAt100); - assertEquals(String.format("Scaling up integer to device zoom (%d) to 100 failed", DPIUtil.getDeviceZoom()), - valueAt200, scaledValue); + assertEquals(valueAt200, scaledValue, + String.format("Scaling up integer to device zoom (%d) to 100 failed", DPIUtil.getDeviceZoom())); scaledValue = DPIUtil.autoScaleUp((Device) null, valueAt100); - assertEquals(String.format("Scaling up integer to device zoom (%d) to 100 with device failed", - DPIUtil.getDeviceZoom()), valueAt200, scaledValue); + assertEquals(valueAt200, scaledValue, String + .format("Scaling up integer to device zoom (%d) to 100 with device failed", DPIUtil.getDeviceZoom())); scaledValue = DPIUtil.scaleUp(valueAt100, 200); - assertEquals("Scaling up integer to 200 failed", valueAt200, scaledValue); + assertEquals(valueAt200, scaledValue, "Scaling up integer to 200 failed"); scaledValue = DPIUtil.scaleUp((Device) null, valueAt100, 200); - assertEquals("Scaling up integer to 200 with device failed", valueAt200, scaledValue); + assertEquals(valueAt200, scaledValue, "Scaling up integer to 200 with device failed"); scaledValue = DPIUtil.scaleUp(valueAt100, 150); - assertEquals("Scaling up integer to 150 failed", valueAt150, scaledValue); + assertEquals(valueAt150, scaledValue, "Scaling up integer to 150 failed"); scaledValue = DPIUtil.scaleUp((Device) null, valueAt100, 150); - assertEquals("Scaling up integer to 150 with device failed", valueAt150, scaledValue); + assertEquals(valueAt150, scaledValue, "Scaling up integer to 150 with device failed"); scaledValue = DPIUtil.scaleUp(valueAt100, 100); - assertSame("Scaling up integer without zoom change failed", valueAt100, scaledValue); + assertSame(valueAt100, scaledValue, "Scaling up integer without zoom change failed"); scaledValue = DPIUtil.scaleUp((Device) null, valueAt100, 100); - assertSame("Scaling up integer without zoom change with device failed", valueAt100, scaledValue); + assertSame(valueAt100, scaledValue,"Scaling up integer without zoom change with device failed"); } @Test @@ -248,24 +245,24 @@ public void scaleUpFloat() { float valueAt100 = 5; float scaledValue = DPIUtil.autoScaleUp(valueAt100); - assertEquals(String.format("Scaling up integer to device zoom (%d) to 100 failed", DPIUtil.getDeviceZoom()), - valueAt200, scaledValue, 0.001f); + assertEquals(valueAt200, scaledValue, 0.001f, + String.format("Scaling up integer to device zoom (%d) to 100 failed", DPIUtil.getDeviceZoom())); scaledValue = DPIUtil.autoScaleUp((Device) null, valueAt100); - assertEquals(String.format("Scaling up integer to device zoom (%d) to 100 with device failed", - DPIUtil.getDeviceZoom()), valueAt200, scaledValue, 0.001f); + assertEquals(valueAt200, scaledValue, 0.001f, String + .format("Scaling up integer to device zoom (%d) to 100 with device failed", DPIUtil.getDeviceZoom())); scaledValue = DPIUtil.scaleUp(valueAt100, 200); - assertEquals("Scaling up integer to 200 failed", valueAt200, scaledValue, 0.001f); + assertEquals(valueAt200, scaledValue, 0.001f, "Scaling up integer to 200 failed"); scaledValue = DPIUtil.scaleUp((Device) null, valueAt100, 200); - assertEquals("Scaling up integer to 200 with device failed", valueAt200, scaledValue, 0.001f); + assertEquals(valueAt200, scaledValue, 0.001f, "Scaling up integer to 200 with device failed"); scaledValue = DPIUtil.scaleUp(valueAt100, 150); - assertEquals("Scaling up integer to 150 failed", valueAt150, scaledValue, 0.001f); + assertEquals(valueAt150, scaledValue, 0.001f, "Scaling up integer to 150 failed"); scaledValue = DPIUtil.scaleUp((Device) null, valueAt100, 150); - assertEquals("Scaling up integer to 150 with device failed", valueAt150, scaledValue, 0.001f); + assertEquals(valueAt150, scaledValue, 0.001f, "Scaling up integer to 150 with device failed"); scaledValue = DPIUtil.scaleUp(valueAt100, 100); - assertEquals("Scaling up integer without zoom change failed", valueAt100, scaledValue, 0.001f); + assertEquals(valueAt100, scaledValue, 0.001f, "Scaling up integer without zoom change failed"); scaledValue = DPIUtil.scaleUp((Device) null, valueAt100, 100); - assertEquals("Scaling up integer without zoom change with device failed", valueAt100, scaledValue, 0.001f); + assertEquals(valueAt100, scaledValue, 0.001f, "Scaling up integer without zoom change with device failed"); } @Test @@ -275,24 +272,24 @@ public void scaleUpPoint() { Point valueAt100 = new Point(5, 7); Point scaledValue = DPIUtil.autoScaleUp(valueAt100); - assertEquals(String.format("Scaling up Point to device zoom (%d) to 100 failed", DPIUtil.getDeviceZoom()), - valueAt200, scaledValue); + assertEquals(valueAt200, scaledValue, + String.format("Scaling up Point to device zoom (%d) to 100 failed", DPIUtil.getDeviceZoom())); scaledValue = DPIUtil.autoScaleUp((Device) null, valueAt100); - assertEquals(String.format("Scaling up Point to device zoom (%d) to 100 with device failed", - DPIUtil.getDeviceZoom()), valueAt200, scaledValue); + assertEquals(valueAt200, scaledValue, String + .format("Scaling up Point to device zoom (%d) to 100 with device failed", DPIUtil.getDeviceZoom())); scaledValue = DPIUtil.scaleUp(valueAt100, 200); - assertEquals("Scaling up Point to 200 failed", valueAt200, scaledValue); + assertEquals(valueAt200, scaledValue, "Scaling up Point to 200 failed"); scaledValue = DPIUtil.scaleUp((Device) null, valueAt100, 200); - assertEquals("Scaling up Point to 200 with device failed", valueAt200, scaledValue); + assertEquals(valueAt200, scaledValue, "Scaling up Point to 200 with device failed"); scaledValue = DPIUtil.scaleUp(valueAt100, 150); - assertEquals("Scaling up Point to 150 failed", valueAt150, scaledValue); + assertEquals(valueAt150, scaledValue, "Scaling up Point to 150 failed"); scaledValue = DPIUtil.scaleUp((Device) null, valueAt100, 150); - assertEquals("Scaling up Point to 150 with device failed", valueAt150, scaledValue); + assertEquals(valueAt150, scaledValue, "Scaling up Point to 150 with device failed"); scaledValue = DPIUtil.scaleUp(valueAt100, 100); - assertSame("Scaling up Point without zoom change failed", valueAt100, scaledValue); + assertSame(valueAt100, scaledValue, "Scaling up Point without zoom change failed"); scaledValue = DPIUtil.scaleUp((Device) null, valueAt100, 100); - assertSame("Scaling up Point without zoom change with device failed", valueAt100, scaledValue); + assertSame(valueAt100, scaledValue, "Scaling up Point without zoom change with device failed"); } @Test @@ -302,24 +299,23 @@ public void scaleUpRectangle() { Rectangle valueAt100 = new Rectangle(50, 75, 5, 7); Rectangle scaledValue = DPIUtil.autoScaleUp(valueAt100); - assertEquals( - String.format("Scaling up Rectangle to device zoom (%d) to 100 failed", DPIUtil.getDeviceZoom()), - valueAt200, scaledValue); + assertEquals(valueAt200, scaledValue, + String.format("Scaling up Rectangle to device zoom (%d) to 100 failed", DPIUtil.getDeviceZoom())); scaledValue = DPIUtil.autoScaleUp((Device) null, valueAt100); - assertEquals(String.format("Scaling up Rectangle to device zoom (%d) to 100 with device failed", - DPIUtil.getDeviceZoom()), valueAt200, scaledValue); + assertEquals(valueAt200, scaledValue, String + .format("Scaling up Rectangle to device zoom (%d) to 100 with device failed", DPIUtil.getDeviceZoom())); scaledValue = DPIUtil.scaleUp(valueAt100, 200); - assertEquals("Scaling up Rectangle to 200 failed", valueAt200, scaledValue); + assertEquals(valueAt200, scaledValue, "Scaling up Rectangle to 200 failed"); scaledValue = DPIUtil.scaleUp((Device) null, valueAt100, 200); - assertEquals("Scaling up Rectangle to 200 with device failed", valueAt200, scaledValue); + assertEquals(valueAt200, scaledValue, "Scaling up Rectangle to 200 with device failed"); scaledValue = DPIUtil.scaleUp(valueAt100, 150); - assertEquals("Scaling up Rectangle to 150 failed", valueAt150, scaledValue); + assertEquals(valueAt150, scaledValue, "Scaling up Rectangle to 150 failed"); scaledValue = DPIUtil.scaleUp((Device) null, valueAt100, 150); - assertEquals("Scaling up Rectangle to 150 with device failed", valueAt150, scaledValue); + assertEquals(valueAt150, scaledValue, "Scaling up Rectangle to 150 with device failed"); scaledValue = DPIUtil.scaleUp(valueAt100, 100); - assertSame("Scaling up Rectangle without zoom change failed", valueAt100, scaledValue); + assertSame(valueAt100, scaledValue, "Scaling up Rectangle without zoom change failed"); scaledValue = DPIUtil.scaleUp((Device) null, valueAt100, 100); - assertSame("Scaling up Rectangle without zoom change with device failed", valueAt100, scaledValue); + assertSame(valueAt100, scaledValue, "Scaling up Rectangle without zoom change with device failed"); } } From dd0e08fac6d808391f03778646fda6e0baf36dfc Mon Sep 17 00:00:00 2001 From: Andreas Koch Date: Wed, 16 Apr 2025 12:53:46 +0200 Subject: [PATCH 005/119] [win32] Wrapper for existing image handles This commit adds a wrapper for images created with an existing OS handle to ensure all existing image constructors are tied to a final wrapper instance. --- .../win32/org/eclipse/swt/graphics/Image.java | 82 +++++++++++++++---- 1 file changed, 65 insertions(+), 17 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java index 8e83e08b36c..d3b23074009 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java @@ -111,7 +111,7 @@ public final class Image extends Resource implements Drawable { /** * AbstractImageProvider to avail right ImageProvider (ImageDataProvider or ImageFileNameProvider) */ - private AbstractImageProviderWrapper imageProvider; + private final AbstractImageProviderWrapper imageProvider; /** * Style flag used to differentiate normal, gray-scale and disabled images based @@ -138,16 +138,13 @@ public final class Image extends Resource implements Drawable { private Map zoomLevelToImageHandle = new HashMap<>(); -/** - * Prevents uninitialized instances from being created outside the package. - */ -Image (Device device) { - this(device, DPIUtil.getNativeDeviceZoom()); -} - -private Image (Device device, int nativeZoom) { +private Image (Device device, int type, long handle, int nativeZoom) { super(device); initialNativeZoom = nativeZoom; + this.type = type; + this.imageProvider = new ExistingImageHandleProviderWrapper(handle, nativeZoom); + this.isInitialized = true; + this.device.registerResourceWithZoomSupport(this); } /** @@ -243,9 +240,7 @@ public Image(Device device, Image srcImage, int flag) { initialNativeZoom = srcImage.initialNativeZoom; Rectangle rect = srcImage.getBounds(getZoom()); this.type = srcImage.type; - if(srcImage.imageProvider != null) { - this.imageProvider = srcImage.imageProvider.createCopy(this); - } + this.imageProvider = srcImage.imageProvider.createCopy(this); this.styleFlag = srcImage.styleFlag | flag; long srcImageHandle = win32_getHandle(srcImage, getZoom()); switch (flag) { @@ -1916,11 +1911,7 @@ public String toString () { * @noreference This method is not intended to be referenced by clients. */ public static Image win32_new(Device device, int type, long handle, int nativeZoom) { - Image image = new Image(device, nativeZoom); - image.type = type; - image.new ImageHandle(handle, nativeZoom); - image.device.registerResourceWithZoomSupport(image); - return image; + return new Image(device, type, handle, nativeZoom); } private abstract class AbstractImageProviderWrapper { @@ -1940,6 +1931,63 @@ protected void destroy() { } } +private class ExistingImageHandleProviderWrapper extends AbstractImageProviderWrapper { + + private final int width; + private final int height; + private final long handle; + private final int zoomForHandle; + + public ExistingImageHandleProviderWrapper(long handle, int zoomForHandle) { + this.handle = handle; + this.zoomForHandle = zoomForHandle; + ImageHandle imageHandle = new ImageHandle(handle, zoomForHandle); + + ImageData baseData = imageHandle.getImageData(); + this.width = DPIUtil.scaleDown(baseData.width, zoomForHandle); + this.height = DPIUtil.scaleDown(baseData.height, zoomForHandle); + } + + @Override + protected Rectangle getBounds(int zoom) { + Rectangle rectangle = new Rectangle(0, 0, width, height); + return DPIUtil.scaleUp(rectangle, zoom); + } + + @Override + ImageData getImageData(int zoom) { + if (zoomLevelToImageHandle.isEmpty() || zoomLevelToImageHandle.containsKey(zoom)) { + return getImageMetadata(zoom).getImageData(); + } + + return getScaledImageData(zoom); + } + + @Override + ImageHandle getImageMetadata(int zoom) { + if (zoomLevelToImageHandle.containsKey(zoom)) { + return zoomLevelToImageHandle.get(zoom); + } else { + ImageData resizedData = getImageData(zoom); + ImageData newData = adaptImageDataIfDisabledOrGray(resizedData); + if (type == SWT.ICON && newData.getTransparencyType() != SWT.TRANSPARENCY_MASK) { + // If the original type was an icon with transparency mask and re-scaling leads + // to image data without transparency mask, this will create invalid images + // so this fallback will "repair" the image data by explicitly passing + // the transparency mask created from the scaled image data + return initIconHandle(device, newData, newData.getTransparencyMask(), zoom); + } else { + return init(newData, zoom); + } + } + } + + @Override + AbstractImageProviderWrapper createCopy(Image image) { + return image.new ExistingImageHandleProviderWrapper(handle, zoomForHandle); + } +} + private abstract class ImageFromImageDataProviderWrapper extends AbstractImageProviderWrapper { protected abstract ElementAtZoom loadImageData(int zoom); From 8d8eb966f24d15fedc4029e6889ae949c5ff0968 Mon Sep 17 00:00:00 2001 From: Aleksandar Kurtakov Date: Wed, 23 Apr 2025 08:43:34 +0300 Subject: [PATCH 006/119] Convert Printer* tests to JUnit 5 --- ...Test_org_eclipse_swt_printing_Printer.java | 94 +++++++------------ ..._org_eclipse_swt_printing_PrinterData.java | 6 +- .../META-INF/MANIFEST.MF | 1 + 3 files changed, 36 insertions(+), 65 deletions(-) diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_printing_Printer.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_printing_Printer.java index 7bc0e07dd54..0eba5c93641 100644 --- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_printing_Printer.java +++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_printing_Printer.java @@ -14,10 +14,12 @@ *******************************************************************************/ package org.eclipse.swt.tests.junit; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; import java.util.Arrays; import java.util.stream.Collectors; @@ -29,7 +31,7 @@ import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.printing.Printer; import org.eclipse.swt.printing.PrinterData; -import org.junit.Test; +import org.junit.jupiter.api.Test; /** * Automated Test Suite for class org.eclipse.swt.printing.Printer @@ -40,117 +42,87 @@ public class Test_org_eclipse_swt_printing_Printer { @Test public void test_Constructor() { - boolean exceptionThrown = false; - String detail = ""; if (Printer.getDefaultPrinterData() == null) { /* There aren't any printers, so verify that the * constructor throws an ERROR_NO_HANDLES SWTError. */ - try { - Printer printer = new Printer(); - printer.dispose(); - } catch (SWTError ex) { - if (ex.code == SWT.ERROR_NO_HANDLES) exceptionThrown = true; - } - assertTrue("ERROR_NO_HANDLES not thrown", exceptionThrown); + SWTError ex = assertThrows(SWTError.class, ()->new Printer()); + assertEquals(SWT.ERROR_NO_HANDLES, ex.code, "ERROR_NO_HANDLES not thrown"); } else { /* There is at least a default printer, so verify that * the constructor does not throw any exceptions. */ - try { - Printer printer = new Printer(); - printer.dispose(); - } catch (Throwable ex) { - exceptionThrown = true; - detail = ex.getMessage(); - } - assertFalse("Exception thrown: " + detail, exceptionThrown); + Printer printer = new Printer(); + assertNotNull(printer ); + printer.dispose(); } } @Test public void test_ConstructorLorg_eclipse_swt_printing_PrinterData() { - boolean exceptionThrown = false; - String detail = ""; PrinterData data = Printer.getDefaultPrinterData(); if (data == null) { /* There aren't any printers, so verify that the * constructor throws an ERROR_NO_HANDLES SWTError. */ - try { - Printer printer = new Printer(data); - printer.dispose(); - } catch (SWTError ex) { - if (ex.code == SWT.ERROR_NO_HANDLES) exceptionThrown = true; - } - assertTrue("ERROR_NO_HANDLES not thrown", exceptionThrown); + SWTError ex = assertThrows(SWTError.class, ()-> new Printer(data)); + assertEquals(SWT.ERROR_NO_HANDLES, ex.code, "ERROR_NO_HANDLES not thrown"); } else { /* There is at least a default printer, so verify that * the constructor does not throw any exceptions. */ - try { - Printer printer = new Printer(data); - printer.dispose(); - } catch (Throwable ex) { - exceptionThrown = true; - detail = ex.getMessage(); - } - assertFalse("Exception thrown: " + detail, exceptionThrown); + Printer printer = new Printer(data); + assertNotNull(printer); + printer.dispose(); } } @Test public void test_computeTrimIIII() { PrinterData data = Printer.getDefaultPrinterData(); - // if there aren't any printers, don't do this test - if (data == null) return; + assumeTrue (data != null, "if there aren't any printers, don't do this test"); Printer printer = new Printer(data); Rectangle trim = printer.computeTrim(0, 0, 10, 10); - assertTrue("trim width or height is incorrect", trim.width >= 10 && trim.height >= 10); + assertTrue(trim.width >= 10 && trim.height >= 10, "trim width or height is incorrect"); printer.dispose(); } @Test public void test_getBounds() { PrinterData data = Printer.getDefaultPrinterData(); - // if there aren't any printers, don't do this test - if (data == null) return; + assumeTrue (data != null, "if there aren't any printers, don't do this test"); Printer printer = new Printer(data); Rectangle bounds = printer.getBounds(); - assertTrue("bounds width or height is zero", bounds.width > 0 && bounds.height > 0); + assertTrue(bounds.width > 0 && bounds.height > 0, "bounds width or height is zero"); printer.dispose(); } @Test public void test_getClientArea() { PrinterData data = Printer.getDefaultPrinterData(); - // if there aren't any printers, don't do this test - if (data == null) return; + assumeTrue (data != null, "if there aren't any printers, don't do this test"); Printer printer = new Printer(data); Rectangle clientArea = printer.getClientArea(); - assertTrue("clientArea width or height is zero", clientArea.width > 0 && clientArea.height > 0); + assertTrue(clientArea.width > 0 && clientArea.height > 0, "clientArea width or height is zero"); printer.dispose(); } @Test public void test_getDPI() { PrinterData data = Printer.getDefaultPrinterData(); - // if there aren't any printers, don't do this test - if (data == null) return; + assumeTrue (data != null, "if there aren't any printers, don't do this test"); Printer printer = new Printer(data); Point dpi = printer.getDPI(); - assertTrue("dpi x or y is zero", dpi.x > 0 && dpi.y > 0); + assertTrue(dpi.x > 0 && dpi.y > 0, "dpi x or y is zero"); printer.dispose(); } @Test public void test_getPrinterData() { PrinterData data = Printer.getDefaultPrinterData(); - // if there aren't any printers, don't do this test - if (data == null) return; + assumeTrue (data != null, "if there aren't any printers, don't do this test"); Printer printer = new Printer(data); - assertTrue("getPrinterData != data used in constructor", - data == printer.getPrinterData()); + assertTrue(data == printer.getPrinterData(), "getPrinterData != data used in constructor"); printer.dispose(); } @@ -191,26 +163,24 @@ public void test_getPrinterList() { }); } PrinterData[] list = printerStream.toArray(PrinterData[]::new); - String printerNames = Arrays.stream(list).map(String::valueOf).collect(Collectors.joining(", ")); - assertEquals("printer list contains items even though there are no printers, printers from list are: "+printerNames, - 0 , list.length); + String printerNames = Arrays.stream(list).map(String::valueOf).collect(Collectors.joining(", ")); + assertEquals(0 , list.length, "printer list contains items even though there are no printers, printers from list are: "+printerNames); } else { /* If there is at least a default printer, verify * that the printer list is not empty. */ PrinterData list[] = Printer.getPrinterList(); - assertTrue("printer list is empty", list.length > 0); + assertTrue(list.length > 0, "printer list is empty"); } } @Test public void test_isAutoScalable() { PrinterData data = Printer.getDefaultPrinterData(); - // if there aren't any printers, don't do this test - if (data == null) return; + assumeTrue (data != null, "if there aren't any printers, don't do this test"); Printer printer = new Printer(data); boolean isAutoScalable = printer.isAutoScalable(); - assertFalse("SWT doesnot auto-scale for Printer devices", isAutoScalable); + assertFalse(isAutoScalable, "SWT doesnot auto-scale for Printer devices"); printer.dispose(); } } diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_printing_PrinterData.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_printing_PrinterData.java index b8d60fbe285..ea9dd4b09bd 100644 --- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_printing_PrinterData.java +++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_printing_PrinterData.java @@ -14,11 +14,11 @@ *******************************************************************************/ package org.eclipse.swt.tests.junit; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; import org.eclipse.swt.printing.PrinterData; -import org.junit.Test; +import org.junit.jupiter.api.Test; /** * Automated Test Suite for class org.eclipse.swt.printing.PrinterData diff --git a/tests/org.eclipse.swt.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.swt.tests/META-INF/MANIFEST.MF index bdf1f3bdb90..96ea2c1aadf 100644 --- a/tests/org.eclipse.swt.tests/META-INF/MANIFEST.MF +++ b/tests/org.eclipse.swt.tests/META-INF/MANIFEST.MF @@ -14,6 +14,7 @@ Require-Bundle: org.junit;bundle-version="4.13.2", junit-platform-suite-api;bundle-version="1.12.0", junit-platform-suite-commons;bundle-version="1.12.0", junit-platform-suite-engine;bundle-version="1.12.0", + org.opentest4j;bundle-version="1.3.0", org.eclipse.swt;bundle-version="3.120.0", org.eclipse.test;bundle-version="3.6.200", org.eclipse.test.performance;bundle-version="3.13.0" From 792cc412a0ef0b05720531754361b73d478e4db6 Mon Sep 17 00:00:00 2001 From: Aleksandar Kurtakov Date: Wed, 23 Apr 2025 10:08:16 +0300 Subject: [PATCH 007/119] Release GtkPrinterOptionWidget Fixes https://github.com/eclipse-platform/eclipse.platform.swt/issues/1838 --- .../Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java index 41aea9b1e16..38c8895e490 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java @@ -4840,6 +4840,11 @@ void releaseDisplay () { OS.G_OBJECT_CLASS_SET_CONSTRUCTOR (pangoFontFaceClass, pangoFontFaceNewProc); OS.g_type_class_unref (pangoFontFaceClass); pangoFontFaceNewProc = 0; + long printerOptionWidgetType = GTK.gtk_printer_option_widget_get_type(); + long printerOptionWidgetClass = OS.g_type_class_ref (printerOptionWidgetType); + OS.G_OBJECT_CLASS_SET_CONSTRUCTOR (printerOptionWidgetClass, printerOptionWidgetNewProc); + OS.g_type_class_unref (printerOptionWidgetClass); + printerOptionWidgetNewProc = 0; } /* Release the sleep resources */ From bce8357cb47513f7b72eeac79be2f509215faa6f Mon Sep 17 00:00:00 2001 From: Andreas Koch Date: Wed, 16 Apr 2025 12:04:46 +0200 Subject: [PATCH 008/119] Preserved width/height on scaleUp/Down a Rectangle This commit extends the logic when a Rectangle is scaled up/down from points to pixels regarding width and height. Fixes https://github.com/eclipse-platform/eclipse.platform.swt/issues/2003 --- .../org/eclipse/swt/internal/DPIUtil.java | 21 +++++++++++++++++++ .../eclipse/swt/tests/junit/DPIUtilTests.java | 4 ++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/DPIUtil.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/DPIUtil.java index 5f1dd60f7af..3390c28e1c9 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/DPIUtil.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/DPIUtil.java @@ -257,6 +257,17 @@ public static Rectangle scaleDown(Rectangle rect, int zoom) { scaledRect.y = scaledTopLeft.y; scaledRect.width = scaledBottomRight.x - scaledTopLeft.x; scaledRect.height = scaledBottomRight.y - scaledTopLeft.y; + + int scaledDownWidth = DPIUtil.scaleDown(rect.width, zoom); + int scaledDownHeight = DPIUtil.scaleDown(rect.height, zoom); + + // It must be ensured, that a scaled down width or height + // based on Rectangle x or y is not bigger than directly + // scaling down the width or height. Therefore the min + // value is used + scaledRect.width = Math.min(scaledRect.width, scaledDownWidth); + scaledRect.height = Math.min(scaledRect.height, scaledDownHeight); + return scaledRect; } /** @@ -464,6 +475,16 @@ public static Rectangle scaleUp(Rectangle rect, int zoom) { scaledRect.y = scaledTopLeft.y; scaledRect.width = scaledBottomRight.x - scaledTopLeft.x; scaledRect.height = scaledBottomRight.y - scaledTopLeft.y; + + int scaledUpWidth = DPIUtil.scaleUp(rect.width, zoom); + int scaledUpHeight = DPIUtil.scaleUp(rect.height, zoom); + + // It must be ensured, that a scaled up width or height + // based on Rectangle x or y is not smaller that directly + // scaling up the width or height. Therefore the max + // value is used + scaledRect.width = Math.max(scaledRect.width, scaledUpWidth); + scaledRect.height = Math.max(scaledRect.height, scaledUpHeight); return scaledRect; } diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/DPIUtilTests.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/DPIUtilTests.java index a517ed9942b..d22a74cdbad 100644 --- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/DPIUtilTests.java +++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/DPIUtilTests.java @@ -160,7 +160,7 @@ public void scaleDownPoint() { @Test public void scaleDownRectangle() { Rectangle valueAt200 = new Rectangle(100, 150, 10, 14); - Rectangle valueAt150 = new Rectangle(75, 113, 7, 10); + Rectangle valueAt150 = new Rectangle(75, 113, 7, 11); Rectangle valueAt100 = new Rectangle(50, 75, 5, 7); Rectangle scaledValue = DPIUtil.autoScaleDown(valueAt200); @@ -295,7 +295,7 @@ public void scaleUpPoint() { @Test public void scaleUpRectangle() { Rectangle valueAt200 = new Rectangle(100, 150, 10, 14); - Rectangle valueAt150 = new Rectangle(75, 113, 8, 10); + Rectangle valueAt150 = new Rectangle(75, 113, 8, 11); Rectangle valueAt100 = new Rectangle(50, 75, 5, 7); Rectangle scaledValue = DPIUtil.autoScaleUp(valueAt100); From 11b4c404591ec773a54c9f3895043e3ddeb548bd Mon Sep 17 00:00:00 2001 From: Aleksandar Kurtakov Date: Thu, 24 Apr 2025 12:51:29 +0300 Subject: [PATCH 009/119] [GTK] Stop using DPIUtil (take 1) It's a noop on cairo for quite some time and allows cleaning up code. --- .../gtk/org/eclipse/swt/awt/SWT_AWT.java | 8 ++-- .../swt/accessibility/AccessibleObject.java | 6 +-- .../gtk/org/eclipse/swt/dnd/DropTarget.java | 4 +- .../swt/dnd/TableDropTargetEffect.java | 6 +-- .../eclipse/swt/dnd/TreeDropTargetEffect.java | 4 +- .../gtk/org/eclipse/swt/opengl/GLCanvas.java | 5 +-- .../gtk/org/eclipse/swt/browser/WebKit.java | 2 +- .../cairo/org/eclipse/swt/graphics/Path.java | 40 +------------------ .../org/eclipse/swt/graphics/Pattern.java | 7 +--- .../org/eclipse/swt/graphics/Transform.java | 21 +++++----- .../gtk/org/eclipse/swt/graphics/Device.java | 4 +- .../gtk/org/eclipse/swt/graphics/Region.java | 20 +++++----- .../gtk/org/eclipse/swt/widgets/Canvas.java | 5 +-- .../gtk/org/eclipse/swt/widgets/Caret.java | 14 +++---- .../gtk/org/eclipse/swt/widgets/Combo.java | 4 +- .../gtk/org/eclipse/swt/widgets/DateTime.java | 4 +- .../org/eclipse/swt/widgets/ExpandBar.java | 7 ++-- .../org/eclipse/swt/widgets/ExpandItem.java | 8 ++-- .../gtk/org/eclipse/swt/widgets/List.java | 4 +- .../gtk/org/eclipse/swt/widgets/Menu.java | 4 +- .../org/eclipse/swt/widgets/ScrollBar.java | 9 ++--- .../org/eclipse/swt/widgets/Scrollable.java | 8 ++-- .../org/eclipse/swt/widgets/TabFolder.java | 6 +-- .../gtk/org/eclipse/swt/widgets/TabItem.java | 4 +- .../org/eclipse/swt/widgets/TableColumn.java | 6 +-- .../org/eclipse/swt/widgets/TableItem.java | 8 ++-- .../gtk/org/eclipse/swt/widgets/Text.java | 4 +- .../gtk/org/eclipse/swt/widgets/ToolBar.java | 10 ++--- .../gtk/org/eclipse/swt/widgets/ToolItem.java | 14 +++---- .../gtk/org/eclipse/swt/widgets/ToolTip.java | 6 +-- .../gtk/org/eclipse/swt/widgets/Tracker.java | 16 +++----- .../org/eclipse/swt/widgets/TreeColumn.java | 6 +-- .../gtk/org/eclipse/swt/widgets/TreeItem.java | 10 ++--- 33 files changed, 113 insertions(+), 171 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT AWT/gtk/org/eclipse/swt/awt/SWT_AWT.java b/bundles/org.eclipse.swt/Eclipse SWT AWT/gtk/org/eclipse/swt/awt/SWT_AWT.java index ad34ca74296..8c6ef0ab432 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT AWT/gtk/org/eclipse/swt/awt/SWT_AWT.java +++ b/bundles/org.eclipse.swt/Eclipse SWT AWT/gtk/org/eclipse/swt/awt/SWT_AWT.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2019 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -231,7 +231,7 @@ public static Frame new_Frame (final Composite parent) { }); break; case SWT.Resize: - final Rectangle clientArea = DPIUtil.autoScaleUp(parent.getClientArea()); + final Rectangle clientArea = parent.getClientArea(); EventQueue.invokeLater(() -> frame[0].setSize (clientArea.width, clientArea.height)); break; } @@ -241,7 +241,7 @@ public static Frame new_Frame (final Composite parent) { parent.getDisplay().asyncExec(() -> { if (parent.isDisposed()) return; - final Rectangle clientArea = DPIUtil.autoScaleUp(parent.getClientArea()); + final Rectangle clientArea = parent.getClientArea(); EventQueue.invokeLater(() -> { frame[0].setSize (clientArea.width, clientArea.height); frame[0].validate (); @@ -285,7 +285,7 @@ public void componentResized (ComponentEvent e) { display.syncExec (() -> { if (shell.isDisposed()) return; Dimension dim = parent.getSize (); - shell.setSize (DPIUtil.autoScaleDown(new Point(dim.width, dim.height))); + shell.setSize (new Point(dim.width, dim.height)); }); } }; diff --git a/bundles/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/AccessibleObject.java b/bundles/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/AccessibleObject.java index 25f7ebe2a5d..e005005b048 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/AccessibleObject.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/AccessibleObject.java @@ -4534,10 +4534,8 @@ static long toDisplay (long gdkResource, long x, long y) { } else { GDK.gdk_window_get_origin (gdkResource, origin_x, origin_y); } - int scaledX = DPIUtil.autoScaleDown (origin_x [0]); - int scaledY = DPIUtil.autoScaleDown (origin_y [0]); - C.memmove (x, new int[] {scaledX}, 4); - C.memmove (y, new int[] {scaledY}, 4); + C.memmove (x, new int[] {origin_x [0]}, 4); + C.memmove (y, new int[] {origin_y [0]}, 4); return 0; } diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/DropTarget.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/DropTarget.java index 8830850b1cb..e82fbca3754 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/DropTarget.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/DropTarget.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2018 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -792,7 +792,7 @@ boolean setEventData(long context, int x, int y, int time, DNDEvent event) { long window = GTK3.gtk_widget_get_window (control.handle); GDK.gdk_window_get_origin(window, origin_x, origin_y); } - Point coordinates = DPIUtil.autoScaleDown(new Point(origin_x[0] + x, origin_y[0] + y)); + Point coordinates = new Point(origin_x[0] + x, origin_y[0] + y); event.widget = this; event.x = coordinates.x; diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/TableDropTargetEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/TableDropTargetEffect.java index 8b14b6f23b3..d224ab6c0d1 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/TableDropTargetEffect.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/TableDropTargetEffect.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2017 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -136,7 +136,7 @@ public void dragOver(DropTargetEvent event) { long handle = table.handle; int effect = checkEffect(event.feedback); Point coordinates = new Point(event.x, event.y); - coordinates = DPIUtil.autoScaleUp(table.toControl(coordinates)); + coordinates = table.toControl(coordinates); long [] path = new long [1]; GTK.gtk_tree_view_get_path_at_pos (handle, coordinates.x, coordinates.y, path, null, null, null); int index = -1; @@ -154,7 +154,7 @@ public void dragOver(DropTargetEvent event) { } else { if (index != -1 && scrollIndex == index && scrollBeginTime != 0) { if (System.currentTimeMillis() >= scrollBeginTime) { - if (coordinates.y < DPIUtil.autoScaleUp(table.getItemHeight())) { + if (coordinates.y < table.getItemHeight()) { GTK.gtk_tree_path_prev(path[0]); } else { GTK.gtk_tree_path_next(path[0]); diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/TreeDropTargetEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/TreeDropTargetEffect.java index 0f77fc07745..b252e0c5e5a 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/TreeDropTargetEffect.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/TreeDropTargetEffect.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2017 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -150,7 +150,7 @@ public void dragOver(DropTargetEvent event) { long handle = tree.handle; Point coordinates = new Point(event.x, event.y); - coordinates = DPIUtil.autoScaleUp(tree.toControl(coordinates)); + coordinates = tree.toControl(coordinates); long [] path = new long [1]; GTK.gtk_tree_view_get_path_at_pos (handle, coordinates.x, coordinates.y, path, null, null, null); int index = -1; diff --git a/bundles/org.eclipse.swt/Eclipse SWT OpenGL/gtk/org/eclipse/swt/opengl/GLCanvas.java b/bundles/org.eclipse.swt/Eclipse SWT OpenGL/gtk/org/eclipse/swt/opengl/GLCanvas.java index d7dd4873eba..4757b387f6c 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT OpenGL/gtk/org/eclipse/swt/opengl/GLCanvas.java +++ b/bundles/org.eclipse.swt/Eclipse SWT OpenGL/gtk/org/eclipse/swt/opengl/GLCanvas.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2018 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -15,7 +15,6 @@ import org.eclipse.swt.*; import org.eclipse.swt.graphics.*; -import org.eclipse.swt.internal.*; import org.eclipse.swt.internal.gtk.*; import org.eclipse.swt.internal.gtk3.*; import org.eclipse.swt.internal.opengl.glx.*; @@ -164,7 +163,7 @@ public GLCanvas (Composite parent, int style, GLData data) { GLX.glViewport (viewport [0],viewport [1],viewport [2],viewport [3]); break; case SWT.Resize: - Rectangle clientArea = DPIUtil.autoScaleUp(getClientArea()); + Rectangle clientArea = getClientArea(); GDK.gdk_window_move (glWindow, clientArea.x, clientArea.y); GDK.gdk_window_resize (glWindow, clientArea.width, clientArea.height); break; diff --git a/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java b/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java index 58913479f60..fdf74bf6e70 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java +++ b/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java @@ -1835,7 +1835,7 @@ void onDispose (Event e) { } void onResize (Event e) { - Rectangle rect = DPIUtil.autoScaleUp(browser.getClientArea ()); + Rectangle rect = browser.getClientArea (); if (webView == 0) return; GTK.gtk_widget_set_size_request (webView, rect.width, rect.height); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cairo/org/eclipse/swt/graphics/Path.java b/bundles/org.eclipse.swt/Eclipse SWT/cairo/org/eclipse/swt/graphics/Path.java index d7ca68d5136..e1b7ff54a0b 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/cairo/org/eclipse/swt/graphics/Path.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/cairo/org/eclipse/swt/graphics/Path.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2021 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -14,7 +14,6 @@ package org.eclipse.swt.graphics; import org.eclipse.swt.*; -import org.eclipse.swt.internal.*; import org.eclipse.swt.internal.cairo.*; /** @@ -219,10 +218,6 @@ public Path (Device device, PathData data) { public void addArc(float x, float y, float width, float height, float startAngle, float arcAngle) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); if (width == 0 || height == 0 || arcAngle == 0) return; - x = DPIUtil.autoScaleUp(x); - y = DPIUtil.autoScaleUp(y); - width = DPIUtil.autoScaleUp(width); - height = DPIUtil.autoScaleUp(height); addArcInPixels(x, y, width, height, startAngle, arcAngle); } @@ -292,10 +287,6 @@ public void addPath(Path path) { */ public void addRectangle(float x, float y, float width, float height) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - x = DPIUtil.autoScaleUp(x); - y = DPIUtil.autoScaleUp(y); - width = DPIUtil.autoScaleUp(width); - height = DPIUtil.autoScaleUp(height); addRectangleInPixels(x, y, width, height); } @@ -326,11 +317,8 @@ public void addString(String string, float x, float y, Font font) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); if (font == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); if (font.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT); - x = DPIUtil.autoScaleUp(x); - y = DPIUtil.autoScaleUp(y); // Scale up the font FontData fd = font.getFontData()[0]; - fd.setHeight(DPIUtil.autoScaleUp(fd.getHeight())); Font scaledFont = new Font(font.getDevice(), fd); addStringInPixels(string, x, y, scaledFont); scaledFont.dispose(); // Dispose the scaled up font @@ -384,8 +372,6 @@ public boolean contains(float x, float y, GC gc, boolean outline) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT); - x = DPIUtil.autoScaleUp(x); - y = DPIUtil.autoScaleUp(y); return containsInPixels(x, y, gc, outline); } boolean containsInPixels(float x, float y, GC gc, boolean outline) { @@ -423,12 +409,6 @@ boolean containsInPixels(float x, float y, GC gc, boolean outline) { */ public void cubicTo(float cx1, float cy1, float cx2, float cy2, float x, float y) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - cx1 = DPIUtil.autoScaleUp(cx1); - cy1 = DPIUtil.autoScaleUp(cy1); - cx2 = DPIUtil.autoScaleUp(cx2); - cy2 = DPIUtil.autoScaleUp(cy2); - x = DPIUtil.autoScaleUp(x); - y = DPIUtil.autoScaleUp(y); cubicToInPixels(cx1, cy1, cx2, cy2, x, y); } void cubicToInPixels(float cx1, float cy1, float cx2, float cy2, float x, float y) { @@ -462,9 +442,6 @@ public void getBounds(float[] bounds) { if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); if (bounds.length < 4) SWT.error(SWT.ERROR_INVALID_ARGUMENT); getBoundsInPixels(bounds); - for (int i = 0; i < bounds.length; i++) { - bounds [i] = DPIUtil.autoScaleDown(bounds[i]); - } } void getBoundsInPixels(float[] bounds) { long copy = Cairo.cairo_copy_path(handle); @@ -540,9 +517,6 @@ void getBoundsInPixels(float[] bounds) { public void getCurrentPoint(float[] point) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); getCurrentPointInPixels(point); - for (int i = 0; i < point.length; i++) { - point [i] = DPIUtil.autoScaleDown(point[i]); - } } void getCurrentPointInPixels(float[] point) { @@ -567,9 +541,7 @@ void getCurrentPointInPixels(float[] point) { */ public PathData getPathData() { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - PathData result = getPathDataInPixels(); - result.points = DPIUtil.autoScaleDown(result.points); - return result; + return getPathDataInPixels(); } PathData getPathDataInPixels() { @@ -647,8 +619,6 @@ PathData getPathDataInPixels() { */ public void lineTo(float x, float y) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - x = DPIUtil.autoScaleUp(x); - y = DPIUtil.autoScaleUp(y); lineToInPixels(x, y); } void lineToInPixels(float x, float y) { @@ -676,8 +646,6 @@ void lineToInPixels(float x, float y) { */ public void moveTo(float x, float y) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - x = DPIUtil.autoScaleUp(x); - y = DPIUtil.autoScaleUp(y); moveToInPixels(x, y); } void moveToInPixels(float x, float y) { @@ -707,10 +675,6 @@ void moveToInPixels(float x, float y) { */ public void quadTo(float cx, float cy, float x, float y) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - x = DPIUtil.autoScaleUp(x); - y = DPIUtil.autoScaleUp(y); - cx = DPIUtil.autoScaleUp(cx); - cy = DPIUtil.autoScaleUp(cy); quadToInPixels(cx, cy, x, y); } void quadToInPixels(float cx, float cy, float x, float y) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cairo/org/eclipse/swt/graphics/Pattern.java b/bundles/org.eclipse.swt/Eclipse SWT/cairo/org/eclipse/swt/graphics/Pattern.java index 91a15888442..165b48cbc33 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/cairo/org/eclipse/swt/graphics/Pattern.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/cairo/org/eclipse/swt/graphics/Pattern.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2016 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -14,7 +14,6 @@ package org.eclipse.swt.graphics; import org.eclipse.swt.*; -import org.eclipse.swt.internal.*; import org.eclipse.swt.internal.cairo.*; /** @@ -173,10 +172,6 @@ public Pattern(Device device, float x1, float y1, float x2, float y2, Color colo */ public Pattern(Device device, float x1, float y1, float x2, float y2, Color color1, int alpha1, Color color2, int alpha2) { super(device); - x1 = DPIUtil.autoScaleUp(x1); - y1 = DPIUtil.autoScaleUp(y1); - x2 = DPIUtil.autoScaleUp(x2); - y2 = DPIUtil.autoScaleUp(y2); if (color1 == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); if (color1.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT); if (color2 == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cairo/org/eclipse/swt/graphics/Transform.java b/bundles/org.eclipse.swt/Eclipse SWT/cairo/org/eclipse/swt/graphics/Transform.java index f9484fdba88..db1dd188f26 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/cairo/org/eclipse/swt/graphics/Transform.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/cairo/org/eclipse/swt/graphics/Transform.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2016 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -14,7 +14,6 @@ package org.eclipse.swt.graphics; import org.eclipse.swt.*; -import org.eclipse.swt.internal.*; import org.eclipse.swt.internal.cairo.*; /** @@ -147,7 +146,7 @@ public Transform (Device device, float m11, float m12, float m21, float m22, flo super(device); handle = new double[6]; if (handle == null) SWT.error(SWT.ERROR_NO_HANDLES); - Cairo.cairo_matrix_init(handle, m11, m12, m21, m22, DPIUtil.autoScaleUp(dx), DPIUtil.autoScaleUp(dy)); + Cairo.cairo_matrix_init(handle, m11, m12, m21, m22, dx, dy); init(); } @@ -184,8 +183,8 @@ public void getElements(float[] elements) { elements[1] = (float)handle[1]; elements[2] = (float)handle[2]; elements[3] = (float)handle[3]; - elements[4] = DPIUtil.autoScaleDown((float)handle[4]); - elements[5] = DPIUtil.autoScaleDown((float)handle[5]); + elements[4] = (float)handle[4]; + elements[5] = (float)handle[5]; } /** @@ -320,7 +319,7 @@ public void scale(float scaleX, float scaleY) { */ public void setElements(float m11, float m12, float m21, float m22, float dx, float dy) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - Cairo.cairo_matrix_init(handle, m11, m12, m21, m22, DPIUtil.autoScaleUp(dx), DPIUtil.autoScaleUp(dy)); + Cairo.cairo_matrix_init(handle, m11, m12, m21, m22, dx, dy); } /** @@ -362,11 +361,11 @@ public void transform(float[] pointArray) { double[] dx = new double[1], dy = new double[1]; int length = pointArray.length / 2; for (int i = 0, j = 0; i < length; i++, j += 2) { - dx[0] = DPIUtil.autoScaleUp(pointArray[j]); - dy[0] = DPIUtil.autoScaleUp(pointArray[j + 1]); + dx[0] = pointArray[j]; + dy[0] = pointArray[j + 1]; Cairo.cairo_matrix_transform_point(handle, dx, dy); - pointArray[j] = DPIUtil.autoScaleDown((float)dx[0]); - pointArray[j + 1] = DPIUtil.autoScaleDown((float)dy[0]); + pointArray[j] = (float)dx[0]; + pointArray[j + 1] = (float)dy[0]; } } @@ -383,7 +382,7 @@ public void transform(float[] pointArray) { */ public void translate(float offsetX, float offsetY) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - Cairo.cairo_matrix_translate(handle, DPIUtil.autoScaleUp(offsetX), DPIUtil.autoScaleUp(offsetY)); + Cairo.cairo_matrix_translate(handle, offsetX, offsetY); } /** diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Device.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Device.java index a397b63a3be..a46300f409d 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Device.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Device.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2018 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -367,7 +367,7 @@ protected void destroy () { */ public Rectangle getBounds () { checkDevice (); - return DPIUtil.autoScaleDown (getBoundsInPixels ()); + return getBoundsInPixels (); } private Rectangle getBoundsInPixels () { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Region.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Region.java index f33de0b3a9c..a4cd98057f9 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Region.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Region.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2018 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -15,7 +15,6 @@ import org.eclipse.swt.*; -import org.eclipse.swt.internal.*; import org.eclipse.swt.internal.cairo.*; import org.eclipse.swt.internal.gtk.*; @@ -156,7 +155,7 @@ static void cairo_region_get_rectangles(long region, long [] rectangles, int[] n public void add (int[] pointArray) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); if (pointArray == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); - addInPixels(DPIUtil.autoScaleUp(pointArray)); + addInPixels(pointArray); } void addInPixels (int[] pointArray) { /* @@ -187,7 +186,7 @@ void addInPixels (int[] pointArray) { public void add(Rectangle rect) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); if (rect == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); - addInPixels(DPIUtil.autoScaleUp(rect)); + addInPixels(rect); } void addInPixels(Rectangle rect) { addInPixels (rect.x, rect.y, rect.width, rect.height); @@ -285,7 +284,7 @@ boolean containsInPixels(int x, int y) { */ public boolean contains(Point pt) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - return containsInPixels(DPIUtil.autoScaleUp(pt)); + return containsInPixels(pt); } boolean containsInPixels(Point pt) { if (pt == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); @@ -328,7 +327,7 @@ public boolean equals(Object object) { */ public Rectangle getBounds() { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - return DPIUtil.autoScaleDown(getBoundsInPixels()); + return getBoundsInPixels(); } Rectangle getBoundsInPixels() { cairo_rectangle_int_t rect = new cairo_rectangle_int_t(); @@ -390,7 +389,7 @@ public int hashCode() { public void intersect(Rectangle rect) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); if (rect == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); - intersectInPixels(DPIUtil.autoScaleUp(rect)); + intersectInPixels(rect); } void intersectInPixels(Rectangle rect) { @@ -506,7 +505,7 @@ boolean intersectsInPixels (int x, int y, int width, int height) { public boolean intersects(Rectangle rect) { if (rect == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - return intersectsInPixels(DPIUtil.autoScaleUp(rect)); + return intersectsInPixels(rect); } boolean intersectsInPixels(Rectangle rect) { @@ -562,7 +561,7 @@ public boolean isEmpty() { public void subtract (int[] pointArray) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); if (pointArray == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); - subtractInPixels(DPIUtil.autoScaleUp(pointArray)); + subtractInPixels(pointArray); } void subtractInPixels (int[] pointArray) { @@ -595,7 +594,7 @@ void subtractInPixels (int[] pointArray) { public void subtract(Rectangle rect) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); if (rect == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); - subtractInPixels(DPIUtil.autoScaleUp(rect)); + subtractInPixels(rect); } void subtractInPixels(Rectangle rect) { @@ -701,7 +700,6 @@ void translateInPixels (int x, int y) { public void translate (Point pt) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); if (pt == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); - pt = DPIUtil.autoScaleUp(pt); translateInPixels(pt.x, pt.y); } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java index 3ee01839d18..c7ca70bca35 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java @@ -16,7 +16,6 @@ import org.eclipse.swt.*; import org.eclipse.swt.graphics.*; -import org.eclipse.swt.internal.*; import org.eclipse.swt.internal.cairo.*; import org.eclipse.swt.internal.gtk.*; @@ -318,8 +317,8 @@ public void scroll (int destX, int destY, int x, int y, int width, int height, b * as to why it's unneeded is left as a TODO. See bug 546274. */ if (GTK.GTK4) return; - Point destination = DPIUtil.autoScaleUp (new Point (destX, destY)); - Rectangle srcRect = DPIUtil.autoScaleUp (new Rectangle (x, y, width, height)); + Point destination = new Point (destX, destY); + Rectangle srcRect = new Rectangle (x, y, width, height); scrollInPixels(destination.x, destination.y, srcRect.x, srcRect.y, srcRect.width, srcRect.height, all); } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Caret.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Caret.java index 73b1c713a33..0472cce4956 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Caret.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Caret.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2019 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -16,7 +16,6 @@ import org.eclipse.swt.*; import org.eclipse.swt.graphics.*; -import org.eclipse.swt.internal.*; import org.eclipse.swt.internal.cairo.*; import org.eclipse.swt.internal.gtk.*; @@ -143,7 +142,7 @@ private void drawInCellEditor(long window) { */ public Rectangle getBounds () { checkWidget(); - return DPIUtil.autoScaleDown(getBoundsInPixels()); + return getBoundsInPixels(); } Rectangle getBoundsInPixels () { @@ -203,7 +202,7 @@ public Image getImage () { */ public Point getLocation () { checkWidget(); - return DPIUtil.autoScaleDown(getLocationInPixels()); + return getLocationInPixels(); } Point getLocationInPixels () { @@ -238,7 +237,7 @@ public Canvas getParent () { */ public Point getSize () { checkWidget(); - return DPIUtil.autoScaleDown(getSizeInPixels()); + return getSizeInPixels(); } Point getSizeInPixels () { @@ -379,7 +378,6 @@ void setBoundsInPixels (int x, int y, int width, int height) { */ public void setBounds (Rectangle rect) { checkWidget(); - rect = DPIUtil.autoScaleUp(rect); setBoundsInPixels(rect); } @@ -481,7 +479,7 @@ void setLocationInPixels (int x, int y) { */ public void setLocation (Point location) { checkWidget(); - setLocationInPixels (DPIUtil.autoScaleUp (location)); + setLocationInPixels (location); } void setLocationInPixels (Point location) { @@ -526,7 +524,7 @@ void setSizeInPixels (int width, int height) { */ public void setSize (Point size) { checkWidget(); - setSizeInPixels(DPIUtil.autoScaleUp (size)); + setSizeInPixels(size); } void setSizeInPixels (Point size) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java index 8742c6fa51b..db77f57fdd9 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java @@ -1081,7 +1081,7 @@ long eventSurface () { */ public Point getCaretLocation () { checkWidget (); - return DPIUtil.autoScaleDown(getCaretLocationInPixels()); + return getCaretLocationInPixels(); } @@ -1390,7 +1390,7 @@ String getText (int start, int stop) { */ public int getTextHeight () { checkWidget(); - return DPIUtil.autoScaleDown(getTextHeightInPixels()); + return getTextHeightInPixels(); } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java index 7db3b1084bc..090a33e9d55 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2018 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -627,7 +627,7 @@ void dropDownCalendar (boolean drop) { //To display popup calendar, we need to know where the parent is relative to the whole screen. Rectangle coordsRelativeToScreen = display.mapInPixels (getParent (), null, getBoundsInPixels ()); - Rectangle displayRect = DPIUtil.autoScaleUp(getMonitor ().getClientArea ()); + Rectangle displayRect = getMonitor ().getClientArea (); showPopupShell (containerBounds, calendarSize, coordsRelativeToScreen, displayRect); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandBar.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandBar.java index 8fc0e1a92e5..96b966c39d7 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandBar.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandBar.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2018 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -16,7 +16,6 @@ import org.eclipse.swt.*; import org.eclipse.swt.events.*; import org.eclipse.swt.graphics.*; -import org.eclipse.swt.internal.*; import org.eclipse.swt.internal.gtk.*; import org.eclipse.swt.internal.gtk3.*; import org.eclipse.swt.internal.gtk4.*; @@ -309,7 +308,7 @@ public int getItemCount () { */ public int getSpacing () { checkWidget (); - return DPIUtil.autoScaleDown(spacing); + return spacing; } @Override @@ -485,7 +484,7 @@ void setOrientation (boolean create) { */ public void setSpacing (int spacing) { checkWidget (); - setSpacingInPixels(DPIUtil.autoScaleUp(spacing)); + setSpacingInPixels(spacing); } void setSpacingInPixels (int spacing) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandItem.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandItem.java index 08e611ebee6..4d054a6df38 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandItem.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandItem.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2018 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -232,7 +232,7 @@ public boolean getExpanded() { */ public int getHeaderHeight () { checkWidget (); - return DPIUtil.autoScaleDown (getHeaderHeightInPixels ()); + return getHeaderHeightInPixels (); } int getHeaderHeightInPixels() { @@ -256,7 +256,7 @@ int getHeaderHeightInPixels() { */ public int getHeight() { checkWidget(); - return DPIUtil.autoScaleDown(height); + return height; } /** @@ -507,7 +507,7 @@ void setForegroundRGBA (GdkRGBA rgba) { */ public void setHeight (int height) { checkWidget (); - setHeightInPixels(DPIUtil.autoScaleUp(height)); + setHeightInPixels(height); } void setHeightInPixels (int height) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java index 9b352763ace..fdb35088057 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2018 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -536,7 +536,7 @@ public int getItemCount () { */ public int getItemHeight () { checkWidget(); - return DPIUtil.autoScaleDown(getItemHeightInPixels()); + return getItemHeightInPixels(); } int getItemHeightInPixels() { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java index 22bb51cdb4c..ce5a83fad8b 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2018 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -1235,7 +1235,7 @@ void setLocationInPixels (int x, int y) { */ public void setLocation (Point location) { checkWidget (); - setLocationInPixels (DPIUtil.autoScaleUp (location)); + setLocationInPixels (location); } void setLocationInPixels (Point location) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java index 1b6747bf801..bc1135926fd 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2016 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -17,7 +17,6 @@ import org.eclipse.swt.*; import org.eclipse.swt.events.*; import org.eclipse.swt.graphics.*; -import org.eclipse.swt.internal.*; import org.eclipse.swt.internal.gtk.*; import org.eclipse.swt.internal.gtk3.*; import org.eclipse.swt.internal.gtk4.*; @@ -290,7 +289,7 @@ public int getSelection () { */ public Point getSize () { checkWidget (); - return DPIUtil.autoScaleDown (getSizeInPixels ()); + return getSizeInPixels (); } Point getSizeInPixels () { @@ -333,7 +332,7 @@ public int getThumb () { */ public Rectangle getThumbBounds() { checkWidget(); - return DPIUtil.autoScaleDown(getThumbBoundsInPixels()); + return getThumbBoundsInPixels(); } Rectangle getThumbBoundsInPixels() { @@ -402,7 +401,7 @@ Rectangle getThumbBoundsInPixels() { */ public Rectangle getThumbTrackBounds () { checkWidget (); - return DPIUtil.autoScaleDown(getThumbTrackBoundsInPixels()); + return getThumbTrackBoundsInPixels(); } Rectangle getThumbTrackBoundsInPixels () { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scrollable.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scrollable.java index 71bc811137c..f462cef7922 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scrollable.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scrollable.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2017 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -16,7 +16,6 @@ import org.eclipse.swt.*; import org.eclipse.swt.graphics.*; -import org.eclipse.swt.internal.*; import org.eclipse.swt.internal.gtk.*; import org.eclipse.swt.internal.gtk3.*; import org.eclipse.swt.internal.gtk4.*; @@ -116,8 +115,7 @@ long clientHandle () { */ public Rectangle computeTrim (int x, int y, int width, int height) { checkWidget(); - Rectangle rect = DPIUtil.autoScaleUp(new Rectangle (x, y, width, height)); - return DPIUtil.autoScaleDown(computeTrimInPixels(rect.x, rect.y, rect.width, rect.height)); + return computeTrimInPixels(x, y, width, height); } Rectangle computeTrimInPixels (int x, int y, int width, int height) { @@ -246,7 +244,7 @@ int getBorderWidthInPixels () { */ public Rectangle getClientArea () { checkWidget (); - return DPIUtil.autoScaleDown(getClientAreaInPixels()); + return getClientAreaInPixels(); } Rectangle getClientAreaInPixels () { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabFolder.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabFolder.java index e3f7631a40c..34de4c1dd5d 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabFolder.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabFolder.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2018 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -666,7 +666,7 @@ Point minimumSize (int wHint, int hHint, boolean flushCache) { index++; } if (index == count) { - Rectangle rect = DPIUtil.autoScaleUp(child.getBounds ()); + Rectangle rect = child.getBounds (); width = Math.max (width, rect.x + rect.width); height = Math.max (height, rect.y + rect.height); } else { @@ -674,7 +674,7 @@ Point minimumSize (int wHint, int hHint, boolean flushCache) { * Since computeSize can be overridden by subclasses, we cannot * call computeSizeInPixels directly. */ - Point size = DPIUtil.autoScaleUp(child.computeSize (DPIUtil.autoScaleDown(wHint), DPIUtil.autoScaleDown(hHint), flushCache)); + Point size = child.computeSize (wHint, hHint, flushCache); width = Math.max (width, size.x); height = Math.max (height, size.y); } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabItem.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabItem.java index 64479c09e02..1ab01158f26 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabItem.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabItem.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2016 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -160,7 +160,7 @@ void destroyWidget () { */ public Rectangle getBounds () { checkWidget (); - return DPIUtil.autoScaleDown (getBoundsInPixels ()); + return getBoundsInPixels (); } Rectangle getBoundsInPixels () { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java index d44c0037a3b..df5bf3aae62 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2017 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -319,7 +319,7 @@ public String getToolTipText () { */ public int getWidth () { checkWidget (); - return DPIUtil.autoScaleDown(getWidthInPixels()); + return getWidthInPixels(); } int getWidthInPixels () { @@ -760,7 +760,7 @@ public void setToolTipText(String string) { */ public void setWidth (int width) { checkWidget (); - setWidthInPixels (DPIUtil.autoScaleUp (width)); + setWidthInPixels (width); } void setWidthInPixels (int width) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableItem.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableItem.java index b38fbe7e05a..eb67292a881 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableItem.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableItem.java @@ -288,7 +288,7 @@ public Color getBackground () { * @since 3.2 */ public Rectangle getBounds () { - return DPIUtil.autoScaleDown (getBoundsinPixels ()); + return getBoundsinPixels (); } /** @@ -394,7 +394,7 @@ public Color getBackground (int index) { */ public Rectangle getBounds (int index) { checkWidget (); - return DPIUtil.autoScaleDown (getBoundsInPixels (index)); + return getBoundsInPixels (index); } Rectangle getBoundsInPixels (int index) { @@ -602,7 +602,7 @@ public Image getImage (int index) { */ public Rectangle getImageBounds (int index) { checkWidget (); - return DPIUtil.autoScaleDown (getImageBoundsInPixels (index)); + return getImageBoundsInPixels (index); } Rectangle getImageBoundsInPixels (int index) { @@ -743,7 +743,7 @@ public String getText (int index) { */ public Rectangle getTextBounds (int index) { checkWidget (); - return DPIUtil.autoScaleDown (getTextBoundsInPixels (index)); + return getTextBoundsInPixels (index); } Rectangle getTextBoundsInPixels (int index) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java index a5470f9e08d..f5ff444987e 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java @@ -949,7 +949,7 @@ public int getCaretLineNumber () { */ public Point getCaretLocation () { checkWidget (); - return DPIUtil.autoScaleDown(getCaretLocationInPixels()); + return getCaretLocationInPixels(); } Point getCaretLocationInPixels () { @@ -1533,7 +1533,7 @@ public int getTopIndex () { */ public int getTopPixel () { checkWidget (); - return DPIUtil.autoScaleDown(getTopPixelInPixels()); + return getTopPixelInPixels(); } int getTopPixelInPixels () { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolBar.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolBar.java index be019ea0d78..4cbcad5e4e0 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolBar.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolBar.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2018 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -302,7 +302,7 @@ public ToolItem getItem (int index) { */ public ToolItem getItem (Point point) { checkWidget(); - return getItemInPixels(DPIUtil.autoScaleUp(point)); + return getItemInPixels(point); } @@ -504,9 +504,9 @@ long menuItemSelected (long widget, ToolItem item) { event.detail = SWT.ARROW; GtkAllocation allocation = new GtkAllocation (); GTK.gtk_widget_get_allocation (widget, allocation); - event.x = DPIUtil.autoScaleDown(allocation.x); - if ((style & SWT.MIRRORED) != 0) event.x = DPIUtil.autoScaleDown (getClientWidth () - allocation.width) - event.x; - event.y = DPIUtil.autoScaleDown(allocation.y + allocation.height); + event.x = allocation.x; + if ((style & SWT.MIRRORED) != 0) event.x = getClientWidth () - allocation.width - event.x; + event.y = allocation.y + allocation.height; break; case SWT.RADIO : if ((style & SWT.NO_RADIO_GROUP) == 0) item.selectRadio (); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolItem.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolItem.java index 60f566b5d20..77c849eef89 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolItem.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolItem.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2020 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -407,7 +407,7 @@ public Color getBackground () { */ public Rectangle getBounds () { checkWidget (); - return DPIUtil.autoScaleDown (getBoundsInPixels ()); + return getBoundsInPixels (); } Rectangle getBoundsInPixels () { @@ -607,7 +607,7 @@ public String getToolTipText () { */ public int getWidth () { checkWidget (); - return DPIUtil.autoScaleDown (getWidthInPixels ()); + return getWidthInPixels (); } int getWidthInPixels () { @@ -659,9 +659,9 @@ long gtk_clicked (long widget) { event.detail = SWT.ARROW; GtkAllocation allocation = new GtkAllocation (); GTK.gtk_widget_get_allocation (topHandle, allocation); - event.x = DPIUtil.autoScaleDown(allocation.x); - if ((style & SWT.MIRRORED) != 0) event.x = DPIUtil.autoScaleDown (parent.getClientWidth ()- allocation.width) - event.x; - event.y = DPIUtil.autoScaleDown(allocation.y + allocation.height); + event.x = allocation.x; + if ((style & SWT.MIRRORED) != 0) event.x = parent.getClientWidth ()- allocation.width - event.x; + event.y = allocation.y + allocation.height; } break; } @@ -1534,7 +1534,7 @@ public void setToolTipText(String string) { */ public void setWidth (int width) { checkWidget (); - setWidthInPixels(DPIUtil.autoScaleUp(width)); + setWidthInPixels(width); } void setWidthInPixels (int width) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java index 7e6ca1d03fc..940d67f9d07 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2018 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -286,7 +286,7 @@ void configure () { } GTK.gtk_widget_realize(handle); Region region = new Region (display); - region.add(DPIUtil.autoScaleDown(polyline)); + region.add(polyline); GTK3.gtk_widget_shape_combine_region (handle, region.handle); region.dispose (); } @@ -746,7 +746,7 @@ void setLocationInPixels (int x, int y) { */ public void setLocation (Point location) { checkWidget (); - setLocationInPixels(DPIUtil.autoScaleUp(location)); + setLocationInPixels(location); } void setLocationInPixels (Point location) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tracker.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tracker.java index 42723c9f4c7..c15797c3f7e 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tracker.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tracker.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2019 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -440,7 +440,7 @@ void drawRectangles (Rectangle [] rects) { Rectangle [] result = new Rectangle [rectangles.length]; for (int i = 0; i < rectangles.length; i++) { Rectangle current = rectangles [i]; - result [i] = DPIUtil.autoScaleDown (new Rectangle (current.x, current.y, current.width, current.height)); + result [i] = new Rectangle (current.x, current.y, current.width, current.height); } return result; } @@ -529,9 +529,9 @@ long gtk_key_press_event (long widget, long eventPtr) { } Event event = new Event (); Rectangle eventRect = new Rectangle (oldX + xChange, oldY + yChange, 0, 0); - event.setBounds (DPIUtil.autoScaleDown (eventRect)); + event.setBounds (eventRect); if (parent != null && (parent.style & SWT.MIRRORED) != 0) { - event.x = DPIUtil.autoScaleDown (parent.getClientWidth ()) - event.width - event.x; + event.x = parent.getClientWidth () - event.width - event.x; } if ((style & SWT.RESIZE) != 0) { resizeRectangles (xChange, yChange); @@ -659,11 +659,11 @@ long gtk_mouse (int eventType, long widget, long eventPtr) { Event event = new Event (); if (parent == null) { Rectangle eventRect = new Rectangle (newX [0], newY [0], 0, 0); - event.setBounds (DPIUtil.autoScaleDown (eventRect)); + event.setBounds (eventRect); } else { Point screenCoord = display.mapInPixels (parent, null, newX [0], newY [0]); Rectangle eventRect = new Rectangle (screenCoord.x, screenCoord.y, 0, 0); - event.setBounds (DPIUtil.autoScaleDown (eventRect)); + event.setBounds (eventRect); } if ((style & SWT.RESIZE) != 0) { resizeRectangles (newX [0] - oldX, newY [0] - oldY); @@ -1156,10 +1156,6 @@ public void setCursor (Cursor newCursor) { public void setRectangles (Rectangle [] rectangles) { checkWidget(); if (rectangles == null) error (SWT.ERROR_NULL_ARGUMENT); - int length = rectangles.length; - for (int i = 0; i < length; i++) { - rectangles [i] = DPIUtil.autoScaleUp (rectangles [i]); - } setRectanglesInPixels (rectangles); } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java index 7cb6c749d8c..608ccf9a2dd 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2016 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -321,7 +321,7 @@ public String getToolTipText () { */ public int getWidth () { checkWidget (); - return DPIUtil.autoScaleDown (getWidthInPixels ()); + return getWidthInPixels (); } int getWidthInPixels () { @@ -737,7 +737,7 @@ public void setToolTipText(String string) { */ public void setWidth(int width) { checkWidget(); - setWidthInPixels(DPIUtil.autoScaleUp(width)); + setWidthInPixels(width); } void setWidthInPixels(int width) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeItem.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeItem.java index d143e9699a2..d6e24d712d5 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeItem.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeItem.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2019 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -407,7 +407,7 @@ public Color getBackground (int index) { */ public Rectangle getBounds (int index) { checkWidget (); - return DPIUtil.autoScaleDown (getBoundsInPixels (index)); + return getBoundsInPixels (index); } Rectangle getBoundsInPixels (int index) { @@ -454,7 +454,7 @@ Rectangle getBoundsInPixels (int index) { */ public Rectangle getBounds () { checkWidget (); - return DPIUtil.autoScaleDown (getBoundsInPixels ()); + return getBoundsInPixels (); } Rectangle getBoundsInPixels () { @@ -694,7 +694,7 @@ public Image getImage (int index) { */ public Rectangle getImageBounds (int index) { checkWidget (); - return DPIUtil.autoScaleDown(getImageBoundsInPixels(index)); + return getImageBoundsInPixels(index); } Rectangle getImageBoundsInPixels (int index) { @@ -928,7 +928,7 @@ public String getText (int index) { */ public Rectangle getTextBounds (int index) { checkWidget (); - return DPIUtil.autoScaleDown(getTextBoundsInPixels(index)); + return getTextBoundsInPixels(index); } Rectangle getTextBoundsInPixels (int index) { From 09a8f9a51128e32672589d8bd10c19bcc02eea54 Mon Sep 17 00:00:00 2001 From: Aleksandar Kurtakov Date: Thu, 24 Apr 2025 13:36:52 +0300 Subject: [PATCH 010/119] [GTK] Stop using DPIUtil (take 2) Handles remaining widgets code. Continuation of https://github.com/eclipse-platform/eclipse.platform.swt/pull/2058 --- .../org/eclipse/swt/widgets/Composite.java | 20 +++---- .../gtk/org/eclipse/swt/widgets/Control.java | 59 ++++++++----------- .../gtk/org/eclipse/swt/widgets/Display.java | 41 +++++++------ .../gtk/org/eclipse/swt/widgets/Link.java | 28 ++++----- .../gtk/org/eclipse/swt/widgets/Sash.java | 41 +++++++------ .../gtk/org/eclipse/swt/widgets/Shell.java | 12 ++-- .../gtk/org/eclipse/swt/widgets/Table.java | 30 ++++------ .../gtk/org/eclipse/swt/widgets/Tree.java | 29 ++++----- 8 files changed, 118 insertions(+), 142 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java index 4beb8488ff0..aa74ec4453b 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2020 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -266,7 +266,7 @@ Point computeSizeInPixels (int wHint, int hHint, boolean changed) { if (layout != null) { if (wHint == SWT.DEFAULT || hHint == SWT.DEFAULT) { changed |= (state & LAYOUT_CHANGED) != 0; - size = DPIUtil.autoScaleUp(layout.computeSize (this, DPIUtil.autoScaleDown(wHint), DPIUtil.autoScaleDown(hHint), changed)); + size = layout.computeSize (this, wHint, hHint, changed); state &= ~LAYOUT_CHANGED; } else { size = new Point (wHint, hHint); @@ -278,7 +278,7 @@ Point computeSizeInPixels (int wHint, int hHint, boolean changed) { } if (wHint != SWT.DEFAULT) size.x = wHint; if (hHint != SWT.DEFAULT) size.y = hHint; - Rectangle trim = DPIUtil.autoScaleUp (computeTrim (0, 0, DPIUtil.autoScaleDown(size.x), DPIUtil.autoScaleDown(size.y))); + Rectangle trim = computeTrim (0, 0, size.x, size.y); return new Point (trim.width, trim.height); } @@ -550,9 +550,7 @@ void deregister () { */ public void drawBackground (GC gc, int x, int y, int width, int height, int offsetX, int offsetY) { checkWidget(); - Rectangle rect = DPIUtil.autoScaleUp(new Rectangle (x, y, width, height)); - offsetX = DPIUtil.autoScaleUp(offsetX); - offsetY = DPIUtil.autoScaleUp(offsetY); + Rectangle rect = new Rectangle (x, y, width, height); drawBackgroundInPixels(gc, rect.x, rect.y, rect.width, rect.height, offsetX, offsetY); } @@ -591,7 +589,7 @@ void drawBackgroundInPixels (GC gc, int x, int y, int width, int height, int off Cairo.cairo_fill (cairo); Cairo.cairo_restore (cairo); } else { - gc.fillRectangle(DPIUtil.autoScaleDown(new Rectangle(x, y, width, height))); + gc.fillRectangle(new Rectangle(x, y, width, height)); } } @@ -1427,10 +1425,10 @@ Point minimumSize (int wHint, int hHint, boolean changed) { * Since getClientArea can be overridden by subclasses, we cannot * call getClientAreaInPixels directly. */ - Rectangle clientArea = DPIUtil.autoScaleUp(getClientArea ()); + Rectangle clientArea = getClientArea (); int width = 0, height = 0; for (int i=0; i=0; --i) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java index 7d17ca0120e..e708d5b94eb 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java @@ -832,9 +832,7 @@ public Point computeSize (int wHint, int hHint, boolean changed) { checkWidget(); if (wHint != SWT.DEFAULT && wHint < 0) wHint = 0; if (hHint != SWT.DEFAULT && hHint < 0) hHint = 0; - wHint = DPIUtil.autoScaleUp(wHint); - hHint = DPIUtil.autoScaleUp(hHint); - return DPIUtil.autoScaleDown (computeSizeInPixels (wHint, hHint, changed)); + return computeSizeInPixels (wHint, hHint, changed); } Point computeSizeInPixels (int wHint, int hHint, boolean changed) { @@ -933,7 +931,7 @@ Accessible _getAccessible () { */ public Rectangle getBounds () { checkWidget(); - return DPIUtil.autoScaleDown(getBoundsInPixels()); + return getBoundsInPixels(); } Rectangle getBoundsInPixels () { @@ -975,7 +973,6 @@ Rectangle getBoundsInPixels () { public void setBounds (Rectangle rect) { checkWidget (); if (rect == null) error (SWT.ERROR_NULL_ARGUMENT); - rect = DPIUtil.autoScaleUp(rect); setBounds (rect.x, rect.y, Math.max (0, rect.width), Math.max (0, rect.height), true, true); } @@ -1015,7 +1012,7 @@ void setBoundsInPixels (Rectangle rect) { */ public void setBounds (int x, int y, int width, int height) { checkWidget(); - Rectangle rect = DPIUtil.autoScaleUp(new Rectangle (x, y, width, height)); + Rectangle rect = new Rectangle (x, y, width, height); setBounds (rect.x, rect.y, Math.max (0, rect.width), Math.max (0, rect.height), true, true); } @@ -1234,7 +1231,7 @@ int setBounds (int x, int y, int width, int height, boolean move, boolean resize */ public Point getLocation () { checkWidget(); - return DPIUtil.autoScaleDown(getLocationInPixels()); + return getLocationInPixels(); } Point getLocationInPixels () { @@ -1271,7 +1268,6 @@ Point getLocationInPixels () { public void setLocation (Point location) { checkWidget (); if (location == null) error (SWT.ERROR_NULL_ARGUMENT); - location = DPIUtil.autoScaleUp(location); setBounds (location.x, location.y, 0, 0, true, false); } @@ -1301,7 +1297,7 @@ void setLocationInPixels (Point location) { */ public void setLocation(int x, int y) { checkWidget(); - Point loc = DPIUtil.autoScaleUp(new Point (x, y)); + Point loc = new Point (x, y); setBounds (loc.x, loc.y, 0, 0, true, false); } @@ -1325,7 +1321,7 @@ void setLocationInPixels(int x, int y) { */ public Point getSize () { checkWidget(); - return DPIUtil.autoScaleDown(getSizeInPixels()); + return getSizeInPixels(); } Point getSizeInPixels () { @@ -1364,7 +1360,6 @@ Point getSizeInPixels () { public void setSize (Point size) { checkWidget (); if (size == null) error (SWT.ERROR_NULL_ARGUMENT); - size = DPIUtil.autoScaleUp(size); setBounds (0, 0, Math.max (0, size.x), Math.max (0, size.y), false, true); } @@ -1483,7 +1478,7 @@ void setRelations () { */ public void setSize (int width, int height) { checkWidget(); - Point size = DPIUtil.autoScaleUp(new Point (width, height)); + Point size = new Point (width, height); setBounds (0, 0, Math.max (0, size.x), Math.max (0, size.y), false, true); } @@ -1667,9 +1662,9 @@ public Point toControl(int x, int y) { GDK.gdk_window_get_origin(window, origin_x, origin_y); } - x -= DPIUtil.autoScaleDown(origin_x[0]); - y -= DPIUtil.autoScaleDown(origin_y[0]); - if ((style & SWT.MIRRORED) != 0) x = DPIUtil.autoScaleDown(getClientWidth()) - x; + x -= origin_x[0]; + y -= origin_y[0]; + if ((style & SWT.MIRRORED) != 0) x = getClientWidth() - x; return new Point(x, y); } @@ -1732,9 +1727,9 @@ public Point toDisplay(int x, int y) { GDK.gdk_window_get_origin(window, origin_x, origin_y); } - if ((style & SWT.MIRRORED) != 0) x = DPIUtil.autoScaleDown(getClientWidth()) - x; - x += DPIUtil.autoScaleDown(origin_x[0]); - y += DPIUtil.autoScaleDown(origin_y[0]); + if ((style & SWT.MIRRORED) != 0) x = getClientWidth() - x; + x += origin_x[0]; + y += origin_y[0]; return new Point(x, y); } @@ -3018,7 +3013,7 @@ GdkRGBA getBaseGdkRGBA () { * */ public int getBorderWidth () { - return DPIUtil.autoScaleDown(getBorderWidthInPixels()); + return getBorderWidthInPixels(); } int getBorderWidthInPixels () { @@ -3557,8 +3552,7 @@ long gtk_button_press_event (long widget, long event, boolean sendMouseDown) { // See comment in #dragDetect() if (OS.isX11()) { if (dragging) { - Point scaledEvent = DPIUtil.autoScaleDown(new Point((int)eventX[0], (int) eventY[0])); - sendDragEvent (eventButton[0], eventState[0], scaledEvent.x, scaledEvent.y, false); + sendDragEvent (eventButton[0], eventState[0], (int)eventX[0], (int)eventY[0], false); if (isDisposed ()) return 1; } } @@ -3885,8 +3879,8 @@ long gtk_draw (long widget, long cairo) { if (!hooksPaint ()) return 0; Event event = new Event (); event.count = 1; - Rectangle eventBounds = DPIUtil.autoScaleDown (new Rectangle (rect.x, rect.y, rect.width, rect.height)); - if ((style & SWT.MIRRORED) != 0) eventBounds.x = DPIUtil.autoScaleDown (getClientWidth ()) - eventBounds.width - eventBounds.x; + Rectangle eventBounds = new Rectangle (rect.x, rect.y, rect.width, rect.height); + if ((style & SWT.MIRRORED) != 0) eventBounds.x = getClientWidth () - eventBounds.width - eventBounds.x; event.setBounds (eventBounds); GCData data = new GCData (); /* @@ -4175,7 +4169,7 @@ long gtk_motion_notify_event (long widget, long event) { int eventType = GDK.gdk_event_get_event_type(event); if (eventType == GDK.GDK_3BUTTON_PRESS) return 0; - Point scaledEvent = DPIUtil.autoScaleDown(new Point((int)eventX[0], (int) eventY[0])); + Point scaledEvent = new Point((int)eventX[0], (int) eventY[0]); int [] eventButton = new int [1]; int [] eventState = new int [1]; @@ -4708,8 +4702,7 @@ void redraw (boolean all) { */ public void redraw (int x, int y, int width, int height, boolean all) { checkWidget(); - Rectangle rect = DPIUtil.autoScaleUp(new Rectangle(x, y, width, height)); - redrawInPixels(rect.x, rect.y, rect.width, rect.height, all); + redrawInPixels(x, y, width, height, all); } void redrawInPixels (int x, int y, int width, int height, boolean all) { @@ -4894,7 +4887,7 @@ boolean sendDragEvent (int button, int stateMask, int x, int y, boolean isStateM event.button = button; Rectangle eventRect = new Rectangle (x, y, 0, 0); event.setBounds (eventRect); - if ((style & SWT.MIRRORED) != 0) event.x = DPIUtil.autoScaleDown(getClientWidth ()) - event.x; + if ((style & SWT.MIRRORED) != 0) event.x = getClientWidth () - event.x; if (isStateMask) { event.stateMask = stateMask; } else { @@ -5062,7 +5055,7 @@ boolean sendMouseEvent (int type, int button, int count, int detail, boolean sen if (is_hint) { // coordinates are already window-relative, see #gtk_motion_notify_event(..) and bug 94502 Rectangle eventRect = new Rectangle ((int)x, (int)y, 0, 0); - event.setBounds (DPIUtil.autoScaleDown (eventRect)); + event.setBounds (eventRect); } else { int [] origin_x = new int [1], origin_y = new int [1]; Rectangle eventRect; @@ -5071,15 +5064,15 @@ boolean sendMouseEvent (int type, int button, int count, int detail, boolean sen // GDK.gdk_surface_get_origin (surface, origin_x, origin_y); // eventRect = new Rectangle ((int)x - origin_x [0], (int)y - origin_y [0], 0, 0); eventRect = new Rectangle ((int)x, (int)y, 0, 0); - event.setBounds (DPIUtil.autoScaleDown (eventRect)); + event.setBounds (eventRect); } else { long window = eventWindow (); GDK.gdk_window_get_origin (window, origin_x, origin_y); eventRect = new Rectangle ((int)x - origin_x [0], (int)y - origin_y [0], 0, 0); - event.setBounds (DPIUtil.autoScaleDown (eventRect)); + event.setBounds (eventRect); } } - if ((style & SWT.MIRRORED) != 0) event.x = DPIUtil.autoScaleDown (getClientWidth ()) - event.x; + if ((style & SWT.MIRRORED) != 0) event.x = getClientWidth () - event.x; setInputState (event, state); /** @@ -6309,7 +6302,7 @@ boolean showMenu (int x, int y) { boolean showMenu (int x, int y, int detail) { Event event = new Event (); Rectangle eventRect = new Rectangle (x, y, 0, 0); - event.setBounds (DPIUtil.autoScaleDown (eventRect)); + event.setBounds (eventRect); event.detail = detail; sendEvent (SWT.MenuDetect, event); //widget could be disposed at this point @@ -6332,7 +6325,7 @@ boolean showMenu (int x, int y, int detail) { return true; } else { - Rectangle rect = DPIUtil.autoScaleUp (event.getBounds ()); + Rectangle rect = event.getBounds (); if (rect.x != x || rect.y != y) { menu.setLocationInPixels (rect.x, rect.y); } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java index 38c8895e490..fdbc86d1589 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java @@ -1774,7 +1774,7 @@ public Shell getActiveShell () { @Override public Rectangle getBounds () { checkDevice (); - return DPIUtil.autoScaleDown (getBoundsInPixels ()); + return getBoundsInPixels (); } /** @@ -1985,7 +1985,7 @@ boolean filters (int eventType) { * */ public Point getCursorLocation() { - return DPIUtil.autoScaleDown(getCursorLocationInPixels()); + return getCursorLocationInPixels(); } Point getCursorLocationInPixels() { @@ -2649,7 +2649,7 @@ Rectangle getWorkArea() { public Monitor[] getMonitors() { checkDevice(); Monitor[] monitors = null; - Rectangle workArea = DPIUtil.autoScaleDown(getWorkArea ()); + Rectangle workArea = getWorkArea (); long display = GDK.gdk_display_get_default(); if (display != 0) { int monitorCount; @@ -2670,10 +2670,10 @@ public Monitor[] getMonitors() { Monitor monitor = new Monitor(); monitor.handle = gdkMonitor; - monitor.x = DPIUtil.autoScaleDown(geometry.x); - monitor.y = DPIUtil.autoScaleDown(geometry.y); - monitor.width = DPIUtil.autoScaleDown(geometry.width); - monitor.height = DPIUtil.autoScaleDown(geometry.height); + monitor.x = geometry.x; + monitor.y = geometry.y; + monitor.width = geometry.width; + monitor.height = geometry.height; if (!OS.isX11()) { int scaleFactor = (int) GDK.gdk_monitor_get_scale_factor(gdkMonitor); monitor.zoom = scaleFactor * 100; @@ -2685,10 +2685,10 @@ public Monitor[] getMonitors() { * since it takes into account per-monitor trim. Not available in GTK4. */ if (!GTK.GTK4) GDK.gdk_monitor_get_workarea(gdkMonitor, geometry); - monitor.clientX = DPIUtil.autoScaleDown(geometry.x); - monitor.clientY = DPIUtil.autoScaleDown(geometry.y); - monitor.clientWidth = DPIUtil.autoScaleDown(geometry.width); - monitor.clientHeight = DPIUtil.autoScaleDown(geometry.height); + monitor.clientX = geometry.x; + monitor.clientY = geometry.y; + monitor.clientWidth = geometry.width; + monitor.clientHeight = geometry.height; monitors[i] = monitor; } @@ -4016,16 +4016,16 @@ public Point map (Control from, Control to, int x, int y) { Point point = new Point (x, y); if (from == to) return point; if (from != null) { - Point origin = DPIUtil.autoScaleDown (GTK.GTK4 ? from.getSurfaceOrigin() : from.getWindowOrigin ()); - if ((from.style & SWT.MIRRORED) != 0) point.x = DPIUtil.autoScaleDown (from.getClientWidth ()) - point.x; + Point origin = GTK.GTK4 ? from.getSurfaceOrigin() : from.getWindowOrigin (); + if ((from.style & SWT.MIRRORED) != 0) point.x = from.getClientWidth () - point.x; point.x += origin.x; point.y += origin.y; } if (to != null) { - Point origin = DPIUtil.autoScaleDown (GTK.GTK4 ? to.getSurfaceOrigin() : to.getWindowOrigin ()); + Point origin = GTK.GTK4 ? to.getSurfaceOrigin() : to.getWindowOrigin (); point.x -= origin.x; point.y -= origin.y; - if ((to.style & SWT.MIRRORED) != 0) point.x = DPIUtil.autoScaleDown (to.getClientWidth ()) - point.x; + if ((to.style & SWT.MIRRORED) != 0) point.x = to.getClientWidth () - point.x; } return point; } @@ -4145,16 +4145,16 @@ public Rectangle map (Control from, Control to, int x, int y, int width, int hei if (from == to) return rect; boolean fromRTL = false, toRTL = false; if (from != null) { - Point origin = DPIUtil.autoScaleDown (GTK.GTK4 ? from.getSurfaceOrigin () : from.getWindowOrigin ()); - if (fromRTL = (from.style & SWT.MIRRORED) != 0) rect.x = DPIUtil.autoScaleDown (from.getClientWidth ()) - rect.x; + Point origin = GTK.GTK4 ? from.getSurfaceOrigin () : from.getWindowOrigin (); + if (fromRTL = (from.style & SWT.MIRRORED) != 0) rect.x = from.getClientWidth () - rect.x; rect.x += origin.x; rect.y += origin.y; } if (to != null) { - Point origin = DPIUtil.autoScaleDown (GTK.GTK4 ? to.getSurfaceOrigin() : to.getWindowOrigin ()); + Point origin = GTK.GTK4 ? to.getSurfaceOrigin() : to.getWindowOrigin (); rect.x -= origin.x; rect.y -= origin.y; - if (toRTL = (to.style & SWT.MIRRORED) != 0) rect.x = DPIUtil.autoScaleDown (to.getClientWidth ()) - rect.x; + if (toRTL = (to.style & SWT.MIRRORED) != 0) rect.x = to.getClientWidth () - rect.x; } if (fromRTL != toRTL) rect.x -= rect.width; @@ -4297,7 +4297,7 @@ public boolean post (Event event) { int type = event.type; if (type == SWT.MouseMove) { - Rectangle loc = DPIUtil.autoScaleUp(event.getBounds()); + Rectangle loc = event.getBounds(); setCursorLocationInPixels(new Point(loc.x, loc.y)); return true; } @@ -5287,7 +5287,6 @@ void setCursorLocationInPixels (Point location) { public void setCursorLocation (Point point) { checkDevice (); if (point == null) error (SWT.ERROR_NULL_ARGUMENT); - point = DPIUtil.autoScaleUp(point); setCursorLocationInPixels(point); } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Link.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Link.java index 099764719a6..4d61a21a360 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Link.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Link.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2018 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -18,7 +18,6 @@ import org.eclipse.swt.accessibility.*; import org.eclipse.swt.events.*; import org.eclipse.swt.graphics.*; -import org.eclipse.swt.internal.*; import org.eclipse.swt.internal.gtk.*; import org.eclipse.swt.internal.gtk3.*; import org.eclipse.swt.internal.gtk4.*; @@ -130,12 +129,12 @@ Point computeSizeInPixels (int wHint, int hHint, boolean changed) { //TEMPORARY CODE if (wHint == 0) { layout.setWidth (1); - Rectangle rect = DPIUtil.autoScaleUp(layout.getBounds ()); + Rectangle rect = layout.getBounds (); width = 0; height = rect.height; } else { - layout.setWidth (DPIUtil.autoScaleDown(wHint)); - Rectangle rect = DPIUtil.autoScaleUp(layout.getBounds ()); + layout.setWidth (wHint); + Rectangle rect = layout.getBounds (); width = rect.width; height = rect.height; } @@ -192,8 +191,7 @@ void drawWidget(GC gc) { layout.draw (gc, 0, 0, selStart, selEnd, null, null); if (hasFocus () && focusIndex != -1) { Rectangle [] rects = getRectanglesInPixels (focusIndex); - for (int i = 0; i < rects.length; i++) { - Rectangle rect = DPIUtil.autoScaleDown(rects [i]); + for (Rectangle rect : rects) { gc.drawFocus (rect.x, rect.y, rect.width, rect.height); } } @@ -303,13 +301,13 @@ String getNameText () { while (point.y > lineOffsets [lineEnd]) lineEnd++; int index = 0; if (lineStart == lineEnd) { - rects [index++] = DPIUtil.autoScaleUp (layout.getBounds (point.x, point.y)); + rects [index++] = layout.getBounds (point.x, point.y); } else { - rects [index++] = DPIUtil.autoScaleUp (layout.getBounds (point.x, lineOffsets [lineStart]-1)); - rects [index++] = DPIUtil.autoScaleUp (layout.getBounds (lineOffsets [lineEnd-1], point.y)); + rects [index++] = layout.getBounds (point.x, lineOffsets [lineStart]-1); + rects [index++] = layout.getBounds (lineOffsets [lineEnd-1], point.y); if (lineEnd - lineStart > 1) { for (int i = lineStart; i < lineEnd - 1; i++) { - rects [index++] = DPIUtil.autoScaleUp (layout.getLineBounds (i)); + rects [index++] = layout.getLineBounds (i); } } } @@ -365,7 +363,7 @@ long gtk_button_press_event (long widget, long event) { int x = (int) eventX[0]; int y = (int) eventY[0]; if ((style & SWT.MIRRORED) != 0) x = getClientWidth () - x; - int offset = DPIUtil.autoScaleUp(layout.getOffset (x, y, null)); + int offset = layout.getOffset (x, y, null); int oldSelectionX = selection.x; int oldSelectionY = selection.y; selection.x = offset; @@ -376,7 +374,7 @@ long gtk_button_press_event (long widget, long event) { oldSelectionX = oldSelectionY; oldSelectionY = temp; } - Rectangle rect = DPIUtil.autoScaleUp(layout.getBounds (oldSelectionX, oldSelectionY)); + Rectangle rect = layout.getBounds (oldSelectionX, oldSelectionY); redrawInPixels (rect.x, rect.y, rect.width, rect.height, false); } for (int j = 0; j < offsets.length; j++) { @@ -544,7 +542,7 @@ long gtk_motion_notify_event (long widget, long event) { if ((style & SWT.MIRRORED) != 0) x = getClientWidth () - x; if ((state[0] & GDK.GDK_BUTTON1_MASK) != 0) { int oldSelection = selection.y; - selection.y = DPIUtil.autoScaleUp(layout.getOffset (x, y, null)); + selection.y = layout.getOffset (x, y, null); if (selection.y != oldSelection) { int newSelection = selection.y; if (oldSelection > newSelection) { @@ -810,7 +808,7 @@ int parseMnemonics (char[] buffer, int start, int end, StringBuilder result) { int setBounds(int x, int y, int width, int height, boolean move, boolean resize) { int result = super.setBounds (x, y, width,height, move, resize); if ((result & RESIZED) != 0) { - layout.setWidth (DPIUtil.autoScaleDown((width > 0 ? width : -1))); + layout.setWidth ((width > 0 ? width : -1)); redraw (); } return result; diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Sash.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Sash.java index a8455f21b4c..914ef8f1635 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Sash.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Sash.java @@ -17,7 +17,6 @@ import org.eclipse.swt.*; import org.eclipse.swt.events.*; import org.eclipse.swt.graphics.*; -import org.eclipse.swt.internal.*; import org.eclipse.swt.internal.gtk.*; import org.eclipse.swt.internal.gtk3.*; import org.eclipse.swt.internal.gtk4.*; @@ -191,11 +190,11 @@ int gtk_gesture_press_event(long gesture, int n_press, double x, double y, long Event jEvent = new Event(); jEvent.time = GDK.gdk_event_get_time(event); Rectangle eventRect = new Rectangle(lastX, lastY, width, height); - jEvent.setBounds(DPIUtil.autoScaleDown(eventRect)); + jEvent.setBounds(eventRect); if ((style & SWT.SMOOTH) == 0) { jEvent.detail = SWT.DRAG; } - if ((parent.style & SWT.MIRRORED) != 0) jEvent.x = DPIUtil.autoScaleDown(parent.getClientWidth() - width) - jEvent.x; + if ((parent.style & SWT.MIRRORED) != 0) jEvent.x = parent.getClientWidth() - width - jEvent.x; sendSelectionEvent(SWT.Selection, jEvent, true); if (isDisposed()) return result; @@ -245,15 +244,15 @@ void gtk4_motion_event(long controller, double x, double y, long event) { Event jEvent = new Event(); jEvent.time = GDK.gdk_event_get_time(event); Rectangle eventRect = new Rectangle(newX, newY, width, height); - jEvent.setBounds(DPIUtil.autoScaleDown(eventRect)); + jEvent.setBounds(eventRect); if ((style & SWT.SMOOTH) == 0) { jEvent.detail = SWT.DRAG; } - if ((parent.style & SWT.MIRRORED) != 0) jEvent.x = DPIUtil.autoScaleDown(parent.getClientWidth() - width) - jEvent.x; + if ((parent.style & SWT.MIRRORED) != 0) jEvent.x = parent.getClientWidth() - width - jEvent.x; sendSelectionEvent(SWT.Selection, jEvent, true); if (isDisposed()) return; - Rectangle rect = DPIUtil.autoScaleUp(jEvent.getBounds()); + Rectangle rect = jEvent.getBounds(); if (jEvent.doit) { lastX = rect.x; lastY = rect.y; @@ -311,13 +310,13 @@ boolean gtk4_key_press_event(long controller, int keyval, int keycode, int state Event jEvent = new Event(); jEvent.time = GDK.gdk_event_get_time(event); Rectangle eventRect = new Rectangle(newX, newY, width, height); - jEvent.setBounds(DPIUtil.autoScaleDown(eventRect)); - if ((parent.style & SWT.MIRRORED) != 0) jEvent.x = DPIUtil.autoScaleDown(parent.getClientWidth() - width) - jEvent.x; + jEvent.setBounds(eventRect); + if ((parent.style & SWT.MIRRORED) != 0) jEvent.x = parent.getClientWidth() - width - jEvent.x; sendSelectionEvent(SWT.Selection, jEvent, true); if (isDisposed()) break; if (jEvent.doit) { - Rectangle rect = DPIUtil.autoScaleUp(jEvent.getBounds()); + Rectangle rect = jEvent.getBounds(); lastX = rect.x; lastY = rect.y; if ((parent.style & SWT.MIRRORED) != 0) lastX = parent.getClientWidth() - width - lastX; @@ -364,16 +363,16 @@ long gtk_button_press_event(long widget, long event) { Event jEvent = new Event(); jEvent.time = GDK.gdk_event_get_time(event); Rectangle eventRect = new Rectangle(lastX, lastY, width, height); - jEvent.setBounds(DPIUtil.autoScaleDown(eventRect)); + jEvent.setBounds(eventRect); if ((style & SWT.SMOOTH) == 0) { jEvent.detail = SWT.DRAG; } - if ((parent.style & SWT.MIRRORED) != 0) jEvent.x = DPIUtil.autoScaleDown(parent.getClientWidth() - width) - jEvent.x; + if ((parent.style & SWT.MIRRORED) != 0) jEvent.x = parent.getClientWidth() - width - jEvent.x; sendSelectionEvent(SWT.Selection, jEvent, true); if (isDisposed()) return 0; if (jEvent.doit) { dragging = true; - Rectangle rect = DPIUtil.autoScaleUp(jEvent.getBounds()); + Rectangle rect = jEvent.getBounds(); lastX = rect.x; lastY = rect.y; if ((parent.style & SWT.MIRRORED) != 0) lastX = parent.getClientWidth() - width - lastX; @@ -406,13 +405,13 @@ long gtk_button_release_event(long widget, long event) { Event jEvent = new Event(); jEvent.time = GDK.gdk_event_get_time(event); Rectangle eventRect = new Rectangle(lastX, lastY, width, height); - jEvent.setBounds(DPIUtil.autoScaleDown(eventRect)); - if ((parent.style & SWT.MIRRORED) != 0) jEvent.x = DPIUtil.autoScaleDown(parent.getClientWidth() - width) - jEvent.x; + jEvent.setBounds(eventRect); + if ((parent.style & SWT.MIRRORED) != 0) jEvent.x = parent.getClientWidth() - width - jEvent.x; sendSelectionEvent(SWT.Selection, jEvent, true); if (isDisposed()) return result; if (jEvent.doit) { if ((style & SWT.SMOOTH) != 0) { - Rectangle rect = DPIUtil.autoScaleUp(jEvent.getBounds()); + Rectangle rect = jEvent.getBounds(); setBoundsInPixels(rect.x, rect.y, width, height); // widget could be disposed at this point } @@ -501,14 +500,14 @@ long gtk_key_press_event(long widget, long eventPtr) { Event event = new Event(); event.time = GDK.gdk_event_get_time(eventPtr); Rectangle eventRect = new Rectangle(newX, newY, width, height); - event.setBounds(DPIUtil.autoScaleDown(eventRect)); - if ((parent.style & SWT.MIRRORED) != 0) event.x = DPIUtil.autoScaleDown(parent.getClientWidth() - width) - event.x; + event.setBounds(eventRect); + if ((parent.style & SWT.MIRRORED) != 0) event.x = parent.getClientWidth() - width - event.x; sendSelectionEvent(SWT.Selection, event, true); if (ptrGrabResult == GDK.GDK_GRAB_SUCCESS) gdk_pointer_ungrab(gdkResource, GDK.GDK_CURRENT_TIME); if (isDisposed()) break; if (event.doit) { - Rectangle rect = DPIUtil.autoScaleUp(event.getBounds()); + Rectangle rect = event.getBounds(); lastX = rect.x; lastY = rect.y; if ((parent.style & SWT.MIRRORED) != 0) lastX = parent.getClientWidth() - width - lastX; @@ -590,15 +589,15 @@ long gtk_motion_notify_event(long widget, long eventPtr) { Event event = new Event(); event.time = GDK.gdk_event_get_time(eventPtr); Rectangle eventRect = new Rectangle(newX, newY, width, height); - event.setBounds(DPIUtil.autoScaleDown(eventRect)); + event.setBounds(eventRect); if ((style & SWT.SMOOTH) == 0) { event.detail = SWT.DRAG; } - if ((parent.style & SWT.MIRRORED) != 0) event.x = DPIUtil.autoScaleDown(parent.getClientWidth() - width) - event.x; + if ((parent.style & SWT.MIRRORED) != 0) event.x = parent.getClientWidth() - width - event.x; sendSelectionEvent(SWT.Selection, event, true); if (isDisposed()) return 0; - Rectangle rect = DPIUtil.autoScaleUp(event.getBounds()); + Rectangle rect = event.getBounds(); if (event.doit) { lastX = rect.x; lastY = rect.y; diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java index 3ddb8bc2fa9..183bf9f9a2b 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java @@ -663,7 +663,7 @@ void center () { Rectangle parentRect = display.mapInPixels (parent, null, parent.getClientAreaInPixels()); int x = Math.max (parentRect.x, parentRect.x + (parentRect.width - rect.width) / 2); int y = Math.max (parentRect.y, parentRect.y + (parentRect.height - rect.height) / 2); - Rectangle monitorRect = DPIUtil.autoScaleUp(parent.getMonitor ().getClientArea()); + Rectangle monitorRect = parent.getMonitor ().getClientArea(); if (x + rect.width > monitorRect.x + monitorRect.width) { x = Math.max (monitorRect.x, monitorRect.x + monitorRect.width - rect.width); } else { @@ -1296,7 +1296,7 @@ public boolean getMaximized () { */ public Point getMinimumSize () { checkWidget (); - return DPIUtil.autoScaleDown (getMinimumSizeInPixels ()); + return getMinimumSizeInPixels (); } Point getMinimumSizeInPixels () { @@ -1323,7 +1323,7 @@ Point getMinimumSizeInPixels () { */ public Point getMaximumSize () { checkWidget (); - return DPIUtil.autoScaleDown (getMaximumSizeInPixels ()); + return getMaximumSizeInPixels (); } Point getMaximumSizeInPixels () { @@ -2701,7 +2701,7 @@ void setMinimumSizeInPixels (int width, int height) { */ public void setMinimumSize (Point size) { checkWidget (); - setMinimumSizeInPixels (DPIUtil.autoScaleUp (size)); + setMinimumSizeInPixels (size); } void setMinimumSizeInPixels (Point size) { @@ -2759,7 +2759,7 @@ public void setMaximumSize (int width, int height) { */ public void setMaximumSize (Point size) { checkWidget (); - setMaximumSizeInPixels (DPIUtil.autoScaleUp (size)); + setMaximumSizeInPixels (size); } void setMaximumSizeInPixels (Point size) { @@ -2860,7 +2860,7 @@ static Region mirrorRegion (Region region) { int [] nRects = new int [1]; long [] rects = new long [1]; gdk_region_get_rectangles (rgn, rects, nRects); - Rectangle bounds = DPIUtil.autoScaleUp(region.getBounds ()); + Rectangle bounds = region.getBounds (); cairo_rectangle_int_t rect = new cairo_rectangle_int_t(); for (int i = 0; i < nRects [0]; i++) { Cairo.memmove (rect, rects[0] + (i * GdkRectangle.sizeof), GdkRectangle.sizeof); 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 8f1deb5694d..062f150ac59 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 @@ -1434,7 +1434,7 @@ TableItem getFocusItem () { */ public int getGridLineWidth () { checkWidget (); - return DPIUtil.autoScaleDown (getGridLineWidthInPixels ()); + return getGridLineWidthInPixels (); } int getGridLineWidthInPixels () { @@ -1488,7 +1488,7 @@ public Color getHeaderForeground () { */ public int getHeaderHeight () { checkWidget (); - return DPIUtil.autoScaleDown (getHeaderHeightInPixels ()); + return getHeaderHeightInPixels (); } int getHeaderHeightInPixels () { @@ -1599,7 +1599,7 @@ public TableItem getItem (int index) { */ public TableItem getItem (Point point) { checkWidget(); - return getItemInPixels(DPIUtil.autoScaleUp(point)); + return getItemInPixels(point); } TableItem getItemInPixels (Point point) { @@ -1657,7 +1657,7 @@ public int getItemCount () { */ public int getItemHeight () { checkWidget (); - return DPIUtil.autoScaleDown (getItemHeightInPixels ()); + return getItemHeightInPixels (); } int getItemHeightInPixels () { @@ -2890,11 +2890,11 @@ void sendMeasureEvent (long cell, long width, long height) { event.index = columnIndex; event.gc = gc; Rectangle eventRect = new Rectangle (0, 0, contentWidth [0], contentHeight [0]); - event.setBounds (DPIUtil.autoScaleDown (eventRect)); + event.setBounds (eventRect); if (isSelected) event.detail = SWT.SELECTED; sendEvent (SWT.MeasureItem, event); gc.dispose (); - Rectangle rect = DPIUtil.autoScaleUp (event.getBounds ()); + Rectangle rect = event.getBounds (); contentWidth [0] = rect.width - imageWidth; if (contentHeight [0] < rect.height) contentHeight [0] = rect.height; if (width != 0) C.memmove (width, contentWidth, 4); @@ -3044,13 +3044,9 @@ void rendererRender (long cell, long cr, long snapshot, long widget, long backgr if (cr != 0) { GdkRectangle r = new GdkRectangle(); GDK.gdk_cairo_get_clip_rectangle(cr, r); - Rectangle rect2 = DPIUtil.autoScaleDown(rect); - // Caveat: rect2 is necessary because GC#setClipping(Rectangle) got broken by bug 446075 - gc.setClipping(rect2.x, rect2.y, rect2.width, rect2.height); + gc.setClipping(rect.x, rect.y, rect.width, rect.height); } else { - Rectangle rect2 = DPIUtil.autoScaleDown(rect); - // Caveat: rect2 is necessary because GC#setClipping(Rectangle) got broken by bug 446075 - gc.setClipping(rect2.x, rect2.y, rect2.width, rect2.height); + gc.setClipping(rect.x, rect.y, rect.width, rect.height); } @@ -3068,7 +3064,7 @@ void rendererRender (long cell, long cr, long snapshot, long widget, long backgr event.index = columnIndex; event.gc = gc; event.detail = drawState; - event.setBounds (DPIUtil.autoScaleDown (eventRect)); + event.setBounds (eventRect); sendEvent (SWT.EraseItem, event); } finally { Cairo.cairo_translate (cr, 0, y_offset); @@ -3102,7 +3098,7 @@ void rendererRender (long cell, long cr, long snapshot, long widget, long backgr if ((drawState & SWT.BACKGROUND) != 0 && (drawState & SWT.SELECTED) == 0) { GC gc = getGC(cr); gc.setBackground (item.getBackground (columnIndex)); - gc.fillRectangle (DPIUtil.autoScaleDown (rendererRect.toRectangle ())); + gc.fillRectangle (rendererRect.toRectangle ()); gc.dispose (); } if ((drawState & SWT.FOREGROUND) != 0 || GTK.GTK_IS_CELL_RENDERER_TOGGLE (cell)) { @@ -3166,9 +3162,7 @@ void rendererRender (long cell, long cr, long snapshot, long widget, long backgr gc.setFont (item.getFont (columnIndex)); if ((style & SWT.MIRRORED) != 0) rect.x = getClientWidth () - rect.width - rect.x; - Rectangle rect2 = DPIUtil.autoScaleDown(rect); - // Caveat: rect2 is necessary because GC#setClipping(Rectangle) got broken by bug 446075 - gc.setClipping(rect2.x, rect2.y, rect2.width, rect2.height); + gc.setClipping(rect.x, rect.y, rect.width, rect.height); // SWT.PaintItem/SWT.EraseItem often expect that event.y matches // what 'event.item.getBounds()' returns. The workaround is to @@ -3184,7 +3178,7 @@ void rendererRender (long cell, long cr, long snapshot, long widget, long backgr event.index = columnIndex; event.gc = gc; event.detail = drawState; - event.setBounds (DPIUtil.autoScaleDown (eventRect)); + event.setBounds (eventRect); sendEvent (SWT.PaintItem, event); } finally { Cairo.cairo_translate (cr, 0, y_offset); 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 7c66e9fd382..d81bdc0aa69 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 @@ -1602,7 +1602,7 @@ TreeItem getFocusItem () { */ public int getGridLineWidth () { checkWidget (); - return DPIUtil.autoScaleDown (getGridLineWidthInPixels ()); + return getGridLineWidthInPixels (); } int getGridLineWidthInPixels () { @@ -1656,7 +1656,7 @@ public Color getHeaderForeground () { */ public int getHeaderHeight () { checkWidget (); - return DPIUtil.autoScaleDown (getHeaderHeightInPixels ()); + return getHeaderHeightInPixels (); } int getHeaderHeightInPixels () { @@ -1771,7 +1771,7 @@ public TreeItem getItem (int index) { */ public TreeItem getItem (Point point) { checkWidget(); - return getItemInPixels(DPIUtil.autoScaleUp(point)); + return getItemInPixels(point); } TreeItem getItemInPixels (Point point) { @@ -1846,7 +1846,7 @@ public int getItemCount () { */ public int getItemHeight () { checkWidget (); - return DPIUtil.autoScaleDown (getItemHeightInPixels ()); + return getItemHeightInPixels (); } int getItemHeightInPixels () { @@ -3089,7 +3089,7 @@ void sendMeasureEvent (long cell, long width, long height) { event.index = columnIndex; event.gc = gc; Rectangle eventRect = new Rectangle (0, 0, contentWidth [0], contentHeight [0]); - event.setBounds (DPIUtil.autoScaleDown (eventRect)); + event.setBounds (eventRect); long path = GTK.gtk_tree_model_get_path (modelHandle, iter); long selection = GTK.gtk_tree_view_get_selection (handle); if (GTK.gtk_tree_selection_path_is_selected (selection, path)) { @@ -3098,7 +3098,7 @@ void sendMeasureEvent (long cell, long width, long height) { GTK.gtk_tree_path_free (path); sendEvent (SWT.MeasureItem, event); gc.dispose (); - Rectangle rect = DPIUtil.autoScaleUp (event.getBounds ()); + Rectangle rect = event.getBounds (); contentWidth [0] = rect.width - imageWidth; if (contentHeight [0] < rect.height) contentHeight [0] = rect.height; if (width != 0) C.memmove (width, contentWidth, 4); @@ -3248,12 +3248,9 @@ void rendererRender (long cell, long cr, long snapshot, long widget, long backgr if (cr != 0) { // Use the original rectangle, not the Cairo clipping for the y, width, and height values. // See bug 535124. - Rectangle rect2 = DPIUtil.autoScaleDown(rect); - gc.setClipping(rect2.x, rect2.y, rect2.width, rect2.height); + gc.setClipping(rect.x, rect.y, rect.width, rect.height); } else { - Rectangle rect2 = DPIUtil.autoScaleDown(rect); - // Caveat: rect2 is necessary because GC#setClipping(Rectangle) got broken by bug 446075 - gc.setClipping(rect2.x, rect2.y, rect2.width, rect2.height); + gc.setClipping(rect.x, rect.y, rect.width, rect.height); } // SWT.PaintItem/SWT.EraseItem often expect that event.y matches @@ -3270,7 +3267,7 @@ void rendererRender (long cell, long cr, long snapshot, long widget, long backgr event.index = columnIndex; event.gc = gc; event.detail = drawState; - event.setBounds (DPIUtil.autoScaleDown (eventRect)); + event.setBounds (eventRect); sendEvent (SWT.EraseItem, event); } finally { Cairo.cairo_translate (cr, 0, y_offset); @@ -3295,7 +3292,7 @@ void rendererRender (long cell, long cr, long snapshot, long widget, long backgr if ((drawState & SWT.BACKGROUND) != 0 && (drawState & SWT.SELECTED) == 0) { GC gc = getGC(cr); gc.setBackground (item.getBackground (columnIndex)); - gc.fillRectangle (DPIUtil.autoScaleDown (rendererRect.toRectangle ())); + gc.fillRectangle (rendererRect.toRectangle ()); gc.dispose (); } if ((drawState & SWT.FOREGROUND) != 0 || GTK.GTK_IS_CELL_RENDERER_TOGGLE (cell)) { @@ -3368,9 +3365,7 @@ void rendererRender (long cell, long cr, long snapshot, long widget, long backgr rect.x = getClientWidth () - rect.width - rect.x; } - Rectangle rect2 = DPIUtil.autoScaleDown(rect); - // Caveat: rect2 is necessary because GC#setClipping(Rectangle) got broken by bug 446075 - gc.setClipping(rect2.x, rect2.y, rect2.width, rect2.height); + gc.setClipping(rect.x, rect.y, rect.width, rect.height); // SWT.PaintItem/SWT.EraseItem often expect that event.y matches // what 'event.item.getBounds()' returns. The workaround is to @@ -3386,7 +3381,7 @@ void rendererRender (long cell, long cr, long snapshot, long widget, long backgr event.index = columnIndex; event.gc = gc; event.detail = drawState; - event.setBounds (DPIUtil.autoScaleDown (eventRect)); + event.setBounds (eventRect); sendEvent (SWT.PaintItem, event); } finally { Cairo.cairo_translate (cr, 0, y_offset); From d27e8c6dd6a84be5c87d7a0b2b81277fa3628d69 Mon Sep 17 00:00:00 2001 From: Heiko Klare Date: Wed, 23 Apr 2025 21:49:10 +0200 Subject: [PATCH 011/119] Use proper classloader for finding SVGRasterizer #1965 #2049 When initializing the SVGFileFormat class for loading SVGs, the current context classloader is used by the ServiceLoader to find an SVGRasterizer implementation. This classloader may be incorrect in some cases, i.e., it may not be the plain system classloader or an according OSGi classloader but, e.g., some specific classloader for test execution. This change makes the ServiceLoader use the same classloader for finding an SVGRasterizer implementation than the classloader of the SVGFileFormat class containing the rasterizer reference itself. Fixes https://github.com/eclipse-platform/eclipse.platform.swt/issues/1965 Fixes https://github.com/eclipse-platform/eclipse.platform.swt/issues/2049 --- .../common/org/eclipse/swt/internal/image/SVGFileFormat.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/SVGFileFormat.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/SVGFileFormat.java index 001b9b6828d..78d8abebcb6 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/SVGFileFormat.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/SVGFileFormat.java @@ -31,7 +31,8 @@ public class SVGFileFormat extends FileFormat { /** The instance of the registered {@link SVGRasterizer}. */ - private static final SVGRasterizer RASTERIZER = ServiceLoader.load(SVGRasterizer.class).findFirst().orElse(null); + private static final SVGRasterizer RASTERIZER = ServiceLoader + .load(SVGRasterizer.class, SVGFileFormat.class.getClassLoader()).findFirst().orElse(null); @Override boolean isFileFormat(LEDataInputStream stream) throws IOException { From 7f26590a3a5b42e7b26f32929f28b42a5ab057a0 Mon Sep 17 00:00:00 2001 From: Andreas Koch Date: Thu, 17 Apr 2025 17:34:02 +0200 Subject: [PATCH 012/119] [win32] Refactoring as Image#imageProvider != null This commit refactors Image in the win32 implementation as Image#imageProvider is final and always != null now. With this the handling and creation of new handles and ImageData was unified. --- .../win32/org/eclipse/swt/graphics/Image.java | 188 ++++++------------ 1 file changed, 65 insertions(+), 123 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java index d3b23074009..7eaaaa9d36b 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java @@ -780,23 +780,7 @@ private ImageHandle getImageMetadata(int zoom) { if (zoomLevelToImageHandle.get(zoom) != null) { return zoomLevelToImageHandle.get(zoom); } - if (imageProvider != null) { - return imageProvider.getImageMetadata(zoom); - } else { - ImageData resizedData = getImageData(zoom); - ImageData newData = adaptImageDataIfDisabledOrGray(resizedData); - if (type == SWT.ICON && newData.getTransparencyType() != SWT.TRANSPARENCY_MASK) { - // If the original type was an icon with transparency mask and re-scaling leads - // to image data without transparency mask, this will create invalid images - // so this fallback will "repair" the image data by explicitly passing - // the transparency mask created from the scaled image data - initIconHandle(this.device, newData, newData.getTransparencyMask(), zoom); - } else { - init(newData, zoom); - } - init(); - } - return zoomLevelToImageHandle.get(zoom); + return imageProvider.newImageHandle(zoom); } @@ -999,9 +983,7 @@ public static long win32_getHandle (Image image, int zoom) { void destroy () { device.deregisterResourceWithZoomSupport(this); if (memGC != null) memGC.dispose(); - if (this.imageProvider != null) { - this.imageProvider.destroy(); - } + this.imageProvider.destroy(); destroyHandle(); memGC = null; } @@ -1055,11 +1037,7 @@ public boolean equals (Object object) { if (!(object instanceof Image)) return false; Image image = (Image) object; if (device != image.device || transparentPixel != image.transparentPixel || getZoom() != image.getZoom()) return false; - if (imageProvider != null && image.imageProvider != null) { - return (styleFlag == image.styleFlag) && imageProvider.equals(image.imageProvider); - } else { - return win32_getHandle(this, getZoom()) == win32_getHandle(image, getZoom()); - } + return (styleFlag == image.styleFlag) && imageProvider.equals(image.imageProvider); } /** @@ -1156,13 +1134,8 @@ Rectangle getBounds(int zoom) { ImageHandle imageMetadata = zoomLevelToImageHandle.get(zoom); Rectangle rectangle = new Rectangle(0, 0, imageMetadata.width, imageMetadata.height); return DPIUtil.scaleBounds(rectangle, zoom, imageMetadata.zoom); - } else if (this.imageProvider != null) { - return this.imageProvider.getBounds(zoom); - } else { - ImageHandle imageMetadata = zoomLevelToImageHandle.values().iterator().next(); - Rectangle rectangle = new Rectangle(0, 0, imageMetadata.width, imageMetadata.height); - return DPIUtil.scaleBounds(rectangle, zoom, imageMetadata.zoom); } + return this.imageProvider.getBounds(zoom); } /** @@ -1236,25 +1209,7 @@ public ImageData getImageData() { */ public ImageData getImageData (int zoom) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - if (zoomLevelToImageHandle.containsKey(zoom)) { - return zoomLevelToImageHandle.get(zoom).getImageData(); - } - if (imageProvider != null) { - return imageProvider.getImageData(zoom); - } - - return getScaledImageData(zoom); -} - -private ImageData getScaledImageData (int zoom) { - // if a GC is initialized with an Image (memGC != null), the image data must not be resized, because it would - // be a destructive operation. Therefor, always the current image data must be returned - if (memGC != null) { - return getImageDataAtCurrentZoom(); - } - TreeSet availableZooms = new TreeSet<>(zoomLevelToImageHandle.keySet()); - int closestZoom = Optional.ofNullable(availableZooms.higher(zoom)).orElse(availableZooms.lower(zoom)); - return scaleImageData(getImageMetadata(closestZoom).getImageData(), zoom, closestZoom); + return imageProvider.getImageData(zoom); } @@ -1294,10 +1249,7 @@ public ImageData getImageDataAtCurrentZoom() { */ @Override public int hashCode () { - if(imageProvider != null) { - return imageProvider.hashCode(); - } - return (int)win32_getHandle(this, getZoom()); + return imageProvider.hashCode(); } static long createDIB(int width, int height, int depth) { @@ -1794,10 +1746,7 @@ public void internal_dispose_GC (long hDC, GCData data) { */ @Override public boolean isDisposed() { - if (this.imageProvider != null) { - return this.imageProvider.isDisposed(); - } - return zoomLevelToImageHandle.isEmpty(); + return this.imageProvider.isDisposed(); } /** @@ -1918,10 +1867,42 @@ private abstract class AbstractImageProviderWrapper { private boolean isDestroyed; protected abstract Rectangle getBounds(int zoom); - abstract ImageData getImageData(int zoom); - abstract ImageHandle getImageMetadata(int zoom); + + protected final ImageData getImageData(int zoom) { + if (zoomLevelToImageHandle.containsKey(zoom)) { + return zoomLevelToImageHandle.get(zoom).getImageData(); + } + return newImageData(zoom); + } + + abstract ImageData newImageData(int zoom); + abstract AbstractImageProviderWrapper createCopy(Image image); + ImageData getScaledImageData (int zoom) { + // if a GC is initialized with an Image (memGC != null), the image data must not be resized, because it would + // be a destructive operation. Therefor, always the current image data must be returned + if (memGC != null) { + return getImageDataAtCurrentZoom(); + } + TreeSet availableZooms = new TreeSet<>(zoomLevelToImageHandle.keySet()); + int closestZoom = Optional.ofNullable(availableZooms.higher(zoom)).orElse(availableZooms.lower(zoom)); + return scaleImageData(getImageMetadata(closestZoom).getImageData(), zoom, closestZoom); + } + + protected ImageHandle newImageHandle(int zoom) { + ImageData resizedData = getImageData(zoom); + if (type == SWT.ICON && resizedData.getTransparencyType() != SWT.TRANSPARENCY_MASK) { + // If the original type was an icon with transparency mask and re-scaling leads + // to image data without transparency mask, this will create invalid images + // so this fallback will "repair" the image data by explicitly passing + // the transparency mask created from the scaled image data + return initIconHandle(device, resizedData, resizedData.getTransparencyMask(), zoom); + } else { + return init(resizedData, zoom); + } + } + protected boolean isDisposed() { return !isInitialized || isDestroyed; } @@ -1955,33 +1936,10 @@ protected Rectangle getBounds(int zoom) { } @Override - ImageData getImageData(int zoom) { - if (zoomLevelToImageHandle.isEmpty() || zoomLevelToImageHandle.containsKey(zoom)) { - return getImageMetadata(zoom).getImageData(); - } - + ImageData newImageData(int zoom) { return getScaledImageData(zoom); } - @Override - ImageHandle getImageMetadata(int zoom) { - if (zoomLevelToImageHandle.containsKey(zoom)) { - return zoomLevelToImageHandle.get(zoom); - } else { - ImageData resizedData = getImageData(zoom); - ImageData newData = adaptImageDataIfDisabledOrGray(resizedData); - if (type == SWT.ICON && newData.getTransparencyType() != SWT.TRANSPARENCY_MASK) { - // If the original type was an icon with transparency mask and re-scaling leads - // to image data without transparency mask, this will create invalid images - // so this fallback will "repair" the image data by explicitly passing - // the transparency mask created from the scaled image data - return initIconHandle(device, newData, newData.getTransparencyMask(), zoom); - } else { - return init(newData, zoom); - } - } - } - @Override AbstractImageProviderWrapper createCopy(Image image) { return image.new ExistingImageHandleProviderWrapper(handle, zoomForHandle); @@ -2001,26 +1959,13 @@ void initImage() { } @Override - ImageData getImageData(int zoom) { - if (zoomLevelToImageHandle.containsKey(zoom)) { - return zoomLevelToImageHandle.get(zoom).getImageData(); - } + ImageData newImageData(int zoom) { if (!zoomLevelToImageHandle.isEmpty()) { return getScaledImageData(zoom); } ElementAtZoom loadedImageData = loadImageData(zoom); - return DPIUtil.scaleImageData(device, loadedImageData, zoom); - } - - @Override - ImageHandle getImageMetadata(int zoom) { - if (zoomLevelToImageHandle.containsKey(zoom)) { - return zoomLevelToImageHandle.get(zoom); - } else { - ImageData scaledImageData = getImageData(zoom); - ImageHandle imageHandle = init(scaledImageData, zoom); - return imageHandle; - } + ImageData scaledImageData = DPIUtil.scaleImageData(device, loadedImageData, zoom); + return adaptImageDataIfDisabledOrGray(scaledImageData); } } @@ -2133,29 +2078,26 @@ protected Rectangle getBounds(int zoom) { } @Override - ImageData getImageData(int zoom) { - if (zoomLevelToImageHandle.isEmpty() || zoomLevelToImageHandle.containsKey(zoom)) { - return getImageMetadata(zoom).getImageData(); + ImageData newImageData(int zoom) { + if (zoomLevelToImageHandle.isEmpty()) { + return createBaseHandle(zoom).getImageData(); } - return getScaledImageData(zoom); } @Override - ImageHandle getImageMetadata(int zoom) { + protected ImageHandle newImageHandle(int zoom) { if (zoomLevelToImageHandle.isEmpty()) { - long handle = initBaseHandle(zoom); - ImageHandle imageHandle = new ImageHandle(handle, zoom); - zoomLevelToImageHandle.put(zoom, imageHandle); - return imageHandle; - } else if(zoomLevelToImageHandle.containsKey(zoom)) { - return zoomLevelToImageHandle.get(zoom); - } else { - ImageData resizedData = getImageData(zoom); - ImageData newData = adaptImageDataIfDisabledOrGray(resizedData); - init(newData, zoom); - return zoomLevelToImageHandle.get(zoom); + return createBaseHandle(zoom); } + return super.newImageHandle(zoom); + } + + private ImageHandle createBaseHandle(int zoom) { + long handle = initBaseHandle(zoom); + ImageHandle imageHandle = new ImageHandle(handle, zoom); + zoomLevelToImageHandle.put(zoom, imageHandle); + return imageHandle; } private long initBaseHandle(int zoom) { @@ -2233,7 +2175,7 @@ Object getProvider() { } @Override - final ImageData getImageData(int zoom) { + ImageData newImageData(int zoom) { Function imageDataRetrival = zoomToRetrieve -> { ImageHandle handle = initializeHandleFromSource(zoomToRetrieve); ImageData data = handle.getImageData(); @@ -2243,8 +2185,9 @@ final ImageData getImageData(int zoom) { return cachedImageData.computeIfAbsent(zoom, imageDataRetrival); } + @Override - final ImageHandle getImageMetadata(int zoom) { + protected ImageHandle newImageHandle(int zoom) { ImageData cachedData = cachedImageData.remove(zoom); if (cachedData != null) { return init(cachedData, zoom); @@ -2280,7 +2223,7 @@ protected ElementAtZoom loadImageData(int zoom) { // Load at appropriate zoom via loader if (fileForZoom.zoom() != zoom && ImageDataLoader.canLoadAtZoom(fileForZoom.element(), fileForZoom.zoom(), zoom)) { ElementAtZoom imageDataAtZoom = ImageDataLoader.load(fileForZoom.element(), fileForZoom.zoom(), zoom); - return new ElementAtZoom<>(adaptImageDataIfDisabledOrGray(imageDataAtZoom.element()), zoom); + return new ElementAtZoom<>(imageDataAtZoom.element(), zoom); } // Load at file zoom (native or via loader) and rescale @@ -2539,12 +2482,12 @@ protected Rectangle getBounds(int zoom) { } @Override - ImageData getImageData(int zoom) { + ImageData newImageData(int zoom) { return getImageMetadata(zoom).getImageData(); } @Override - ImageHandle getImageMetadata(int zoom) { + protected ImageHandle newImageHandle(int zoom) { initialNativeZoom = zoom; Image image = new Image(device, width, height, zoom); GC gc = new GC(image, drawer.getGcStyle()); @@ -2554,12 +2497,11 @@ ImageHandle getImageMetadata(int zoom) { ImageData imageData = image.getImageMetadata(zoom).getImageData(); drawer.postProcess(imageData); ImageData newData = adaptImageDataIfDisabledOrGray(imageData); - init(newData, zoom); + return init(newData, zoom); } finally { gc.dispose(); image.dispose(); } - return zoomLevelToImageHandle.get(zoom); } @Override From cd7e03b820f8eca6fe5f39faed04cc72fba71353 Mon Sep 17 00:00:00 2001 From: Andreas Koch Date: Wed, 2 Apr 2025 17:38:14 +0200 Subject: [PATCH 013/119] [win32] Use consistent font zoom retrieval This commit unifies the extraction of the target zoom of a font to be affected by the zoom context of the underlying Widget. Before there were different strategies like getting it from the Shell. --- .../win32/org/eclipse/swt/widgets/Caret.java | 5 ++--- .../win32/org/eclipse/swt/widgets/Composite.java | 2 +- .../win32/org/eclipse/swt/widgets/Control.java | 10 +++++----- .../win32/org/eclipse/swt/widgets/TableItem.java | 8 +++----- .../win32/org/eclipse/swt/widgets/TreeItem.java | 9 +++------ .../win32/org/eclipse/swt/widgets/Widget.java | 4 ++++ 6 files changed, 18 insertions(+), 20 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Caret.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Caret.java index 4f0af0d4603..44e6175eddb 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Caret.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Caret.java @@ -152,7 +152,7 @@ public Font getFont () { checkWidget(); if (font == null) { long hFont = defaultFont (); - return Font.win32_new (display, hFont, getZoom()); + return Font.win32_new (display, hFont, getNativeZoom()); } return font; } @@ -478,8 +478,7 @@ public void setFont (Font font) { if (font != null && font.isDisposed ()) { error (SWT.ERROR_INVALID_ARGUMENT); } - Shell shell = parent.getShell(); - this.font = font == null ? null : Font.win32_new(font, shell.nativeZoom); + this.font = font == null ? null : Font.win32_new(font, getNativeZoom()); if (hasFocus ()) setIMEFont (); } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Composite.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Composite.java index f360f696dd5..dad215d6cd6 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Composite.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Composite.java @@ -1525,7 +1525,7 @@ LRESULT WM_PAINT (long wParam, long lParam) { Control control = findBackgroundControl (); if (control == null) control = this; data.background = control.getBackgroundPixel (); - data.font = Font.win32_new(display, OS.SendMessage (handle, OS.WM_GETFONT, 0, 0), nativeZoom); + data.font = Font.win32_new(display, OS.SendMessage (handle, OS.WM_GETFONT, 0, 0), getNativeZoom()); data.uiState = (int)OS.SendMessage (handle, OS.WM_QUERYUISTATE, 0, 0); if ((style & SWT.NO_BACKGROUND) != 0) { /* This code is intentionally commented because it may be slow to copy bits from the screen */ diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java index 8ba482a4713..aa7e156e95b 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java @@ -721,7 +721,7 @@ int defaultBackground () { } long defaultFont() { - return display.getSystemFont(getShell().nativeZoom).handle; + return display.getSystemFont(getNativeZoom()).handle; } int defaultForeground () { @@ -1315,7 +1315,7 @@ public Font getFont () { if (font != null) return font; long hFont = OS.SendMessage (handle, OS.WM_GETFONT, 0, 0); if (hFont == 0) hFont = defaultFont (); - return Font.win32_new (display, hFont, getShell().nativeZoom); + return Font.win32_new (display, hFont, getNativeZoom()); } /** @@ -3330,7 +3330,7 @@ public void setCursor (Cursor cursor) { } void setDefaultFont () { - long hFont = display.getSystemFont (getShell().nativeZoom).handle; + long hFont = display.getSystemFont (getNativeZoom()).handle; OS.SendMessage (handle, OS.WM_SETFONT, hFont, 0); } @@ -3432,7 +3432,7 @@ public void setFont (Font font) { Font newFont = font; if (newFont != null) { if (newFont.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT); - newFont = Font.win32_new(newFont, getShell().nativeZoom); + newFont = Font.win32_new(newFont, getNativeZoom()); } long hFont = 0; if (newFont != null) { @@ -5869,7 +5869,7 @@ private static void handleDPIChange(Widget widget, int newZoom, float scalingFac if (!(widget instanceof Control control)) { return; } - resizeFont(control, control.getShell().nativeZoom); + resizeFont(control, control.getNativeZoom()); Image image = control.backgroundImage; if (image != null) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TableItem.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TableItem.java index 13f029f9a0f..157bd962cb7 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TableItem.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TableItem.java @@ -870,8 +870,7 @@ public void setFont (Font font){ error (SWT.ERROR_INVALID_ARGUMENT); } Font oldFont = this.font; - Shell shell = parent.getShell(); - Font newFont = (font == null ? font : Font.win32_new(font, shell.nativeZoom)); + Font newFont = (font == null ? font : Font.win32_new(font, getNativeZoom())); if (oldFont == newFont) return; this.font = newFont; if (oldFont != null && oldFont.equals (newFont)) return; @@ -936,7 +935,7 @@ public void setFont (int index, Font font) { } Font oldFont = cellFont [index]; if (oldFont == font) return; - cellFont [index] = font == null ? font : Font.win32_new(font, nativeZoom); + cellFont [index] = font == null ? font : Font.win32_new(font, getNativeZoom()); if (oldFont != null && oldFont.equals (font)) return; if (font != null) parent.setCustomDraw (true); if ((parent.style & SWT.VIRTUAL) != 0) cached = true; @@ -1282,10 +1281,9 @@ private static void handleDPIChange(Widget widget, int newZoom, float scalingFac } Font[] cellFonts = tableItem.cellFont; if (cellFonts != null) { - Shell shell = tableItem.parent.getShell(); for (int index = 0; index < cellFonts.length; index++) { Font cellFont = cellFonts[index]; - cellFonts[index] = cellFont == null ? null : Font.win32_new(cellFont, shell.nativeZoom); + cellFonts[index] = cellFont == null ? null : Font.win32_new(cellFont, tableItem.getNativeZoom()); } } } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TreeItem.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TreeItem.java index 148468585c0..022ee7b1bd0 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TreeItem.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TreeItem.java @@ -1388,8 +1388,7 @@ public void setFont (Font font){ error (SWT.ERROR_INVALID_ARGUMENT); } Font oldFont = this.font; - Shell shell = parent.getShell(); - Font newFont = (font == null ? font : Font.win32_new(font, shell.nativeZoom)); + Font newFont = (font == null ? font : Font.win32_new(font, getNativeZoom())); if (oldFont == newFont) return; this.font = newFont; if (oldFont != null && oldFont.equals (font)) return; @@ -1445,8 +1444,7 @@ public void setFont (int index, Font font) { } Font oldFont = cellFont [index]; if (oldFont == font) return; - Shell shell = parent.getShell(); - cellFont [index] = font == null ? font : Font.win32_new(font, shell.nativeZoom); + cellFont [index] = font == null ? font : Font.win32_new(font, getNativeZoom()); if (oldFont != null && oldFont.equals (font)) return; if (font != null) parent.customDraw = true; if ((parent.style & SWT.VIRTUAL) != 0) cached = true; @@ -1828,10 +1826,9 @@ private static void handleDPIChange(Widget widget, int newZoom, float scalingFac } Font[] cellFonts = treeItem.cellFont; if (cellFonts != null) { - Shell shell = treeItem.parent.getShell(); for (int index = 0; index < cellFonts.length; index++) { Font cellFont = cellFonts[index]; - cellFonts[index] = cellFont == null ? null : Font.win32_new(cellFont, shell.nativeZoom); + cellFonts[index] = cellFont == null ? null : Font.win32_new(cellFont, treeItem.getNativeZoom()); } } for (TreeItem item : treeItem.getItems()) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Widget.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Widget.java index 490c84087d7..605afbf781a 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Widget.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Widget.java @@ -2690,6 +2690,10 @@ GC createNewGC(long hDC, GCData data) { return GC.win32_new(hDC, data); } +int getNativeZoom() { + return nativeZoom; +} + int getZoom() { return DPIUtil.getZoomForAutoscaleProperty(nativeZoom); } From a827f9e9980389309506ffce2bb4f0c20175af7d Mon Sep 17 00:00:00 2001 From: Amartya Parijat Date: Tue, 22 Apr 2025 16:41:03 +0200 Subject: [PATCH 014/119] Move ImageData scaling logic to Image #62 This commit contributes to moving the logic for scaling the ImageData using GC from DPIUtil to Image for each platform and DPIUtil calls the platform specific code from the method DPIUtil:autoScaleImageData. contributes to https://github.com/eclipse-platform/eclipse.platform.swt/issues/62 and https://github.com/eclipse-platform/eclipse.platform.swt/issues/127 --- .../cocoa/org/eclipse/swt/graphics/Image.java | 23 ++++++++ .../org/eclipse/swt/internal/DPIUtil.java | 6 +- .../gtk/org/eclipse/swt/graphics/Image.java | 23 ++++++++ .../win32/org/eclipse/swt/graphics/Image.java | 58 +++++++------------ 4 files changed, 69 insertions(+), 41 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Image.java index 4ecc29fbcb6..7d0ff95942d 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Image.java @@ -1801,5 +1801,28 @@ public String toString () { return "Image {" + handle + "}"; } +/** + * IMPORTANT: This method is not part of the public + * API for Image. It is marked public only so that it + * can be shared within the packages provided by SWT. + * + * Draws a scaled image using the GC by another image. + * + * @param gc the GC to draw on the resulting image + * @param original the image which is supposed to be scaled and drawn on the resulting image + * @param width the width of the original image + * @param height the height of the original image + * @param scaleFactor the factor with which the image is supposed to be scaled + * + * @noreference This method is not intended to be referenced by clients. + */ +public static void drawScaled(GC gc, Image original, int width, int height, float scaleFactor) { + gc.drawImage (original, 0, 0, DPIUtil.autoScaleDown (width), DPIUtil.autoScaleDown (height), + /* E.g. destWidth here is effectively DPIUtil.autoScaleDown (scaledWidth), but avoiding rounding errors. + * Nevertheless, we still have some rounding errors due to the point-based API GC#drawImage(..). + */ + 0, 0, Math.round (DPIUtil.autoScaleDown (width * scaleFactor)), Math.round (DPIUtil.autoScaleDown (height * scaleFactor))); +} + } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/DPIUtil.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/DPIUtil.java index 3390c28e1c9..10a60eb0048 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/DPIUtil.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/DPIUtil.java @@ -312,11 +312,7 @@ private static ImageData autoScaleImageData (Device device, final ImageData imag Image resultImage = new Image (device, (ImageDataProvider) zoom -> resultData); GC gc = new GC (resultImage); gc.setAntialias (SWT.ON); - gc.drawImage (original, 0, 0, autoScaleDown (width), autoScaleDown (height), - /* E.g. destWidth here is effectively DPIUtil.autoScaleDown (scaledWidth), but avoiding rounding errors. - * Nevertheless, we still have some rounding errors due to the point-based API GC#drawImage(..). - */ - 0, 0, Math.round (autoScaleDown (width * scaleFactor)), Math.round (autoScaleDown (height * scaleFactor))); + Image.drawScaled(gc, original, width, height, scaleFactor); gc.dispose (); original.dispose (); ImageData result = resultImage.getImageData (getDeviceZoom ()); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java index dd8581c1348..c73e4dfe873 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java @@ -1551,4 +1551,27 @@ public String toString () { return "Image {" + surface + "}"; } +/** + * IMPORTANT: This method is not part of the public + * API for Image. It is marked public only so that it + * can be shared within the packages provided by SWT. + * + * Draws a scaled image using the GC by another image. + * + * @param gc the GC to draw on the resulting image + * @param original the image which is supposed to be scaled and drawn on the resulting image + * @param width the width of the original image + * @param height the height of the original image + * @param scaleFactor the factor with which the image is supposed to be scaled + * + * @noreference This method is not intended to be referenced by clients. + */ +public static void drawScaled(GC gc, Image original, int width, int height, float scaleFactor) { + gc.drawImage (original, 0, 0, DPIUtil.autoScaleDown (width), DPIUtil.autoScaleDown (height), + /* E.g. destWidth here is effectively DPIUtil.autoScaleDown (scaledWidth), but avoiding rounding errors. + * Nevertheless, we still have some rounding errors due to the point-based API GC#drawImage(..). + */ + 0, 0, Math.round (DPIUtil.autoScaleDown (width * scaleFactor)), Math.round (DPIUtil.autoScaleDown (height * scaleFactor))); +} + } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java index 7eaaaa9d36b..d45c6a75bd3 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java @@ -807,6 +807,26 @@ public static long win32_getHandle (Image image, int zoom) { return image.getImageMetadata(zoom).handle; } +/** + * IMPORTANT: This method is not part of the public + * API for Image. It is marked public only so that it + * can be shared within the packages provided by SWT. + * + * Draws a scaled image using the GC by another image. + * + * @param gc the GC to draw on the resulting image + * @param original the image which is supposed to be scaled and drawn on the resulting image + * @param width the width of the original image + * @param height the height of the original image + * @param scaleFactor the factor with which the image is supposed to be scaled + * + * @noreference This method is not intended to be referenced by clients. + */ +public static void drawScaled(GC gc, Image original, int width, int height, float scaleFactor) { + gc.drawImage (original, 0, 0, width, height, + 0, 0, Math.round (width * scaleFactor), Math.round (height * scaleFactor), false); +} + long [] createGdipImage() { return createGdipImage(this.getZoom()); } @@ -1793,40 +1813,6 @@ public void setBackground(Color color) { zoomLevelToImageHandle.values().forEach(imageHandle -> imageHandle.setBackground(backgroundColor)); } -private ImageData scaleImageData(final ImageData imageData, int targetZoom, int currentZoom) { - if (imageData == null || targetZoom == currentZoom || (device != null && !device.isAutoScalable())) return imageData; - float scaleFactor = (float) targetZoom / (float) currentZoom; - int width = imageData.width; - int height = imageData.height; - int scaledWidth = Math.round (width * scaleFactor); - int scaledHeight = Math.round (height * scaleFactor); - boolean useSmoothScaling = DPIUtil.isSmoothScalingEnabled() && imageData.getTransparencyType() != SWT.TRANSPARENCY_MASK; - if (useSmoothScaling) { - return scaleToUsingSmoothScaling(scaledWidth, scaledHeight, imageData); - } - return imageData.scaledTo (scaledWidth, scaledHeight); -} - -private ImageData scaleToUsingSmoothScaling(int width, int height, ImageData imageData) { - Image original = new Image (device, (ImageDataProvider) zoom -> imageData); - /* Create a 24 bit image data with alpha channel */ - final ImageData resultData = new ImageData (width, height, 24, new PaletteData (0xFF, 0xFF00, 0xFF0000)); - resultData.alphaData = new byte [width * height]; - Image resultImage = new Image (device, (ImageDataProvider) zoom -> resultData); - GC gc = new GC (resultImage); - gc.setAntialias (SWT.ON); - gc.drawImage (original, 0, 0, imageData.width, imageData.height, - /* E.g. destWidth here is effectively DPIUtil.autoScaleDown (scaledWidth), but avoiding rounding errors. - * Nevertheless, we still have some rounding errors due to the point-based API GC#drawImage(..). - */ - 0, 0, width, height, false); - gc.dispose (); - original.dispose (); - ImageData result = resultImage.getImageData (resultImage.getZoom()); - resultImage.dispose (); - return result; -} - private int getZoom() { return DPIUtil.getZoomForAutoscaleProperty(initialNativeZoom); } @@ -1887,7 +1873,7 @@ ImageData getScaledImageData (int zoom) { } TreeSet availableZooms = new TreeSet<>(zoomLevelToImageHandle.keySet()); int closestZoom = Optional.ofNullable(availableZooms.higher(zoom)).orElse(availableZooms.lower(zoom)); - return scaleImageData(getImageMetadata(closestZoom).getImageData(), zoom, closestZoom); + return DPIUtil.scaleImageData(device, getImageMetadata(closestZoom).getImageData(), zoom, closestZoom); } protected ImageHandle newImageHandle(int zoom) { @@ -2197,7 +2183,7 @@ protected ImageHandle newImageHandle(int zoom) { private ImageHandle initializeHandleFromSource(int zoom) { ElementAtZoom imageDataAtZoom = loadImageData(zoom); - ImageData imageData = scaleImageData(imageDataAtZoom.element(), zoom, imageDataAtZoom.zoom()); + ImageData imageData = DPIUtil.scaleImageData (device,imageDataAtZoom.element(), zoom, imageDataAtZoom.zoom()); imageData = adaptImageDataIfDisabledOrGray(imageData); return init(imageData, zoom); } From 08844dd3965ed79ff3601dfaa88ea6ed886ba66e Mon Sep 17 00:00:00 2001 From: Andreas Koch Date: Wed, 2 Apr 2025 17:43:10 +0200 Subject: [PATCH 015/119] [win32] Handle all scaled font via SWTFontProvider This commit extends the SWTFontProvider and the SWTFontRegistry to receive scaled variants of a font where only the handle is available. Common use case for this is OS.SendMessage (hwnd, OS.WM_GETFONT, 0, 0) to receive the handle of the current font of a handle. As at this point the correct zoom the handle was created is not yet know, it is better to retrieve and manage those fonts via the SWTFontRegistry expecially when monitor specific scaling is used. When the passed font handle is not already managed via the SWTFontRegistry it will create the SWT Font as it was create previously. --- .../win32/org/eclipse/swt/graphics/GC.java | 8 ++++---- .../swt/internal/DefaultSWTFontRegistry.java | 5 +++++ .../org/eclipse/swt/internal/SWTFontProvider.java | 15 +++++++++++++++ .../org/eclipse/swt/internal/SWTFontRegistry.java | 12 ++++++++++++ .../swt/internal/ScalingSWTFontRegistry.java | 10 ++++++++++ .../win32/org/eclipse/swt/widgets/Composite.java | 3 ++- .../win32/org/eclipse/swt/widgets/Control.java | 10 +++++++--- 7 files changed, 55 insertions(+), 8 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/GC.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/GC.java index 54b81968559..0fe325f075e 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/GC.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/GC.java @@ -3898,14 +3898,14 @@ void init(Drawable drawable, GCData data, long hDC) { data.background = OS.GetBkColor(hDC); } data.state &= ~(NULL_BRUSH | NULL_PEN); + if (data.nativeZoom == 0) { + data.nativeZoom = extractZoom(hDC); + } Font font = data.font; if (font != null) { data.state &= ~FONT; } else { - data.font = Font.win32_new(device, OS.GetCurrentObject(hDC, OS.OBJ_FONT)); - } - if (data.nativeZoom == 0) { - data.nativeZoom = extractZoom(hDC); + data.font = SWTFontProvider.getFont(device, OS.GetCurrentObject(hDC, OS.OBJ_FONT), data.nativeZoom); } Image image = data.image; if (image != null) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/DefaultSWTFontRegistry.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/DefaultSWTFontRegistry.java index ba47b8ce771..89a56015346 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/DefaultSWTFontRegistry.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/DefaultSWTFontRegistry.java @@ -71,6 +71,11 @@ public Font getFont(FontData fontData, int zoom) { return font; } + @Override + public Font getFont(long fontHandle, int zoom) { + return Font.win32_new(device, fontHandle, zoom); + } + private Font registerFont(FontData fontData, Font font) { FontData clonedFontData = new FontData(fontData.toString()); fontsMap.put(clonedFontData, font); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/SWTFontProvider.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/SWTFontProvider.java index 1f4cae17f0e..9588982ed75 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/SWTFontProvider.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/SWTFontProvider.java @@ -61,6 +61,21 @@ public static Font getFont(Device device, FontData fontData, int zoom) { return getFontRegistry(device).getFont(fontData, zoom); } + /** + * Returns the font with the given fontHandle for the given device at the + * specified zoom. + * + * Note: This operation is not thread-safe. It must thus always be called + * from the same thread for the same device, such as the display's UI thread. + * + * @param device the device to retrieve the font for, must not be {@code null} + * @param fontHandle the handle to an existing font + * @param zoom the zoom for which the font shall be scaled + */ + public static Font getFont(Device device, long fontHandle, int zoom) { + return getFontRegistry(device).getFont(fontHandle, zoom); + } + /** * Disposes the font registry for the given device, if one exists. * diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/SWTFontRegistry.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/SWTFontRegistry.java index 02a19ee2a1d..f045453bc9a 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/SWTFontRegistry.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/SWTFontRegistry.java @@ -46,6 +46,18 @@ public interface SWTFontRegistry { */ Font getFont(FontData fontData, int zoom); + + /** + * Provides a font optimally suited for the specified zoom. If the handle is yet unknown to + * the registry, the font will not be managed by the font registry. Only Fonts created in the + * font registry are managed by it and should not be disposed of externally. + * + * @param fontHandle the handle to an existing font + * @param zoom zoom in % of the standard resolution to determine the appropriate font + * @return the font best suited for the specified zoom + */ + Font getFont(long fontHandle, int zoom); + /** * Disposes all fonts managed by the font registry. */ diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/ScalingSWTFontRegistry.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/ScalingSWTFontRegistry.java index 435a7ddb934..fa67ea09f3b 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/ScalingSWTFontRegistry.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/ScalingSWTFontRegistry.java @@ -44,6 +44,7 @@ private Font getScaledFont(int zoom) { private Font createAndCacheFont(int zoom) { Font newFont = createFont(zoom); + customFontHandlesKeyMap.put(newFont.handle, this); scaledFonts.put(zoom, newFont); return newFont; } @@ -112,6 +113,7 @@ protected void dispose() { private ScaledFontContainer systemFontContainer; private Map customFontsKeyMap = new HashMap<>(); + private Map customFontHandlesKeyMap = new HashMap<>(); private Device device; ScalingSWTFontRegistry(Device device) { @@ -137,6 +139,14 @@ public Font getFont(FontData fontData, int zoom) { return container.getScaledFont(zoom); } + @Override + public Font getFont(long fontHandle, int zoom) { + if (customFontHandlesKeyMap.containsKey(fontHandle)) { + return customFontHandlesKeyMap.get(fontHandle).getScaledFont(zoom); + } + return Font.win32_new(device, fontHandle, zoom); + } + @Override public void dispose() { customFontsKeyMap.values().forEach(ScaledFontContainer::dispose); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Composite.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Composite.java index dad215d6cd6..1d727031dcc 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Composite.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Composite.java @@ -1525,7 +1525,6 @@ LRESULT WM_PAINT (long wParam, long lParam) { Control control = findBackgroundControl (); if (control == null) control = this; data.background = control.getBackgroundPixel (); - data.font = Font.win32_new(display, OS.SendMessage (handle, OS.WM_GETFONT, 0, 0), getNativeZoom()); data.uiState = (int)OS.SendMessage (handle, OS.WM_QUERYUISTATE, 0, 0); if ((style & SWT.NO_BACKGROUND) != 0) { /* This code is intentionally commented because it may be slow to copy bits from the screen */ @@ -1536,6 +1535,8 @@ LRESULT WM_PAINT (long wParam, long lParam) { drawBackground (phdc [0], rect); } GC gc = createNewGC(phdc [0], data); + data.font = SWTFontProvider.getFont(display, OS.SendMessage (handle, OS.WM_GETFONT, 0, 0), data.nativeZoom); + Event event = new Event (); event.gc = gc; event.setBounds(DPIUtil.scaleDown(new Rectangle(ps.left, ps.top, width, height), getZoom())); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java index aa7e156e95b..c7617eeb70a 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java @@ -1315,7 +1315,7 @@ public Font getFont () { if (font != null) return font; long hFont = OS.SendMessage (handle, OS.WM_GETFONT, 0, 0); if (hFont == 0) hFont = defaultFont (); - return Font.win32_new (display, hFont, getNativeZoom()); + return SWTFontProvider.getFont(display, hFont, getNativeZoom()); } /** @@ -1753,14 +1753,18 @@ public long internal_new_GC (GCData data) { } } data.device = display; - data.nativeZoom = nativeZoom; + data.nativeZoom = getNativeZoom(); int foreground = getForegroundPixel (); if (foreground != OS.GetTextColor (hDC)) data.foreground = foreground; Control control = findBackgroundControl (); if (control == null) control = this; int background = control.getBackgroundPixel (); if (background != OS.GetBkColor (hDC)) data.background = background; - data.font = font != null ? font : Font.win32_new (display, OS.SendMessage (hwnd, OS.WM_GETFONT, 0, 0)); + if (font != null) { + data.font = font; + } else { + data.font = SWTFontProvider.getFont(display, OS.SendMessage (hwnd, OS.WM_GETFONT, 0, 0), data.nativeZoom); + } data.uiState = (int)OS.SendMessage (hwnd, OS.WM_QUERYUISTATE, 0, 0); } return hDC; From 75c0bc29f71b6f20b855c2d539e608cc09f3c06f Mon Sep 17 00:00:00 2001 From: Heiko Klare Date: Thu, 3 Apr 2025 18:28:28 +0200 Subject: [PATCH 016/119] [Win32] Ensure consistent image data returned for data-based images Due to the on-demand creation of image handles, there is not necessarily a handles anymore from which image data is retrieved when requesting is via the getImageData(...) methods. This results in potentially different kinds of image data (including different anti-aliasing results) depending on whether a handle has already been created for an image at the given zoom or not. This change adapts the implementation of Image based on static ImageData and streams to always use the image data retrieved from a native handle. To this end, it temporarily creates a handle if necessary. In order to avoid repeated loading and handle creation for the same source of image, a cache for the already retrieved image data is introduced. Fixes https://github.com/eclipse-platform/eclipse.platform.swt/issues/2052 --- .../win32/org/eclipse/swt/graphics/Image.java | 43 ++++++++++++++----- .../Test_org_eclipse_swt_graphics_Image.java | 25 +++++++++++ 2 files changed, 57 insertions(+), 11 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java index d45c6a75bd3..f74612574d6 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java @@ -1878,14 +1878,18 @@ ImageData getScaledImageData (int zoom) { protected ImageHandle newImageHandle(int zoom) { ImageData resizedData = getImageData(zoom); - if (type == SWT.ICON && resizedData.getTransparencyType() != SWT.TRANSPARENCY_MASK) { + return newImageHandle(resizedData, zoom); + } + + protected final ImageHandle newImageHandle(ImageData data, int zoom) { + if (type == SWT.ICON && data.getTransparencyType() != SWT.TRANSPARENCY_MASK) { // If the original type was an icon with transparency mask and re-scaling leads // to image data without transparency mask, this will create invalid images // so this fallback will "repair" the image data by explicitly passing // the transparency mask created from the scaled image data - return initIconHandle(device, resizedData, resizedData.getTransparencyMask(), zoom); + return initIconHandle(device, data, data.getTransparencyMask(), zoom); } else { - return init(resizedData, zoom); + return init(data, zoom); } } @@ -1933,26 +1937,43 @@ AbstractImageProviderWrapper createCopy(Image image) { } private abstract class ImageFromImageDataProviderWrapper extends AbstractImageProviderWrapper { + private final Map cachedImageData = new HashMap<>(); protected abstract ElementAtZoom loadImageData(int zoom); void initImage() { // As the init call configured some Image attributes (e.g. type) // it must be called - ImageData imageDataAt100 = getImageData(100); - init(imageDataAt100, 100); - destroyHandleForZoom(100); + getImageData(100); } @Override ImageData newImageData(int zoom) { - if (!zoomLevelToImageHandle.isEmpty()) { - return getScaledImageData(zoom); + Function imageDataRetrieval = zoomToRetrieve -> { + ImageHandle handle = initializeHandleFromSource(zoomToRetrieve); + ImageData data = handle.getImageData(); + destroyHandleForZoom(zoomToRetrieve); + return data; + }; + return cachedImageData.computeIfAbsent(zoom, imageDataRetrieval); + } + + @Override + protected ImageHandle newImageHandle(int zoom) { + ImageData cachedData = cachedImageData.remove(zoom); + if (cachedData != null) { + return newImageHandle(cachedData, zoom); } - ElementAtZoom loadedImageData = loadImageData(zoom); - ImageData scaledImageData = DPIUtil.scaleImageData(device, loadedImageData, zoom); - return adaptImageDataIfDisabledOrGray(scaledImageData); + return initializeHandleFromSource(zoom); + } + + private ImageHandle initializeHandleFromSource(int zoom) { + ElementAtZoom imageDataAtZoom = loadImageData(zoom); + ImageData imageData = DPIUtil.scaleImageData(device, imageDataAtZoom.element(), zoom, imageDataAtZoom.zoom()); + imageData = adaptImageDataIfDisabledOrGray(imageData); + return newImageHandle(imageData, zoom); } + } private class PlainImageDataProviderWrapper extends ImageFromImageDataProviderWrapper { diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Image.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Image.java index 5bc9cc034c9..c18b01add6f 100644 --- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Image.java +++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Image.java @@ -1033,6 +1033,31 @@ public void test_imageDataSameViaDifferentProviders() { dataProviderImage.dispose(); } +@Test +public void test_imageDataSameViaProviderAndSimpleData() { + assumeFalse("Cocoa generates inconsistent image data", SwtTestUtil.isCocoa); + String imagePath = getPath("collapseall.png"); + ImageFileNameProvider imageFileNameProvider = __ -> { + return imagePath; + }; + ImageDataProvider dataProvider = __ -> { + try (InputStream imageStream = Files.newInputStream(Path.of(imagePath))) { + return new ImageData(imageStream); + } catch (IOException e) { + } + return null; + }; + Image fileNameProviderImage = new Image(display, imageFileNameProvider); + Image dataImage = new Image(display, dataProvider.getImageData(100)); + ImageData dataFromFileNameProviderImage = fileNameProviderImage.getImageData(100); + ImageData dataFromImageWithSimpleData = dataImage.getImageData(100); + assertEquals(0, imageDataComparator().compare(dataFromFileNameProviderImage, dataFromImageWithSimpleData)); + + fileNameProviderImage.dispose(); + dataImage.dispose(); +} + + private Comparator imageDataComparator() { return Comparator.comparingInt(d -> d.width) // .thenComparing(d -> d.height) // From 8b5f32bd1032c0df1acb683d57adce8d581fc024 Mon Sep 17 00:00:00 2001 From: Shahzaib Ibrahim Date: Tue, 8 Apr 2025 17:40:48 +0200 Subject: [PATCH 017/119] Replace usages of new Image(device, width, height) for Composite --- .../org/eclipse/swt/widgets/Composite.java | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Composite.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Composite.java index 1d727031dcc..da3cb78fa75 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Composite.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Composite.java @@ -1554,8 +1554,6 @@ LRESULT WM_PAINT (long wParam, long lParam) { data.ps = ps; data.hwnd = handle; GC gc = GC.win32_new (this, data); - - /* Get the system region for the paint HDC */ long sysRgn = 0; if ((style & (SWT.DOUBLE_BUFFERED | SWT.TRANSPARENT)) != 0 || (style & SWT.NO_MERGE_PAINTS) != 0) { sysRgn = OS.CreateRectRgn (0, 0, 0, 0); @@ -1581,14 +1579,25 @@ LRESULT WM_PAINT (long wParam, long lParam) { GC paintGC = null; Image image = null; if ((style & (SWT.DOUBLE_BUFFERED | SWT.TRANSPARENT)) != 0) { - image = new Image (display, width, height); paintGC = gc; - gc = new GC (image, paintGC.getStyle() & SWT.RIGHT_TO_LEFT); - GCData gcData = gc.getGCData (); - gcData.uiState = data.uiState; - gc.setForeground (getForeground ()); - gc.setBackground (getBackground ()); - gc.setFont (getFont ()); + int originalStyle = gc.getStyle(); + ImageGcDrawer drawer = new ImageGcDrawer() { + @Override + public void drawOn(GC gc, int iWidth, int iHeight) { + GCData gcData = gc.getGCData (); + gcData.uiState = data.uiState; + gc.setForeground (getForeground ()); + gc.setBackground (getBackground ()); + gc.setFont (getFont ()); + + } + + @Override + public int getGcStyle() { + return originalStyle & SWT.RIGHT_TO_LEFT; + } + }; + image = new Image (display, drawer, width, height); if ((style & SWT.TRANSPARENT) != 0) { OS.BitBlt (gc.handle, 0, 0, width, height, paintGC.handle, ps.left, ps.top, OS.SRCCOPY); } From 67de2f25520f017f2a7cbde9bd6da7995253473f Mon Sep 17 00:00:00 2001 From: Andreas Koch Date: Mon, 31 Mar 2025 14:49:03 +0200 Subject: [PATCH 018/119] [win32] Fetch Font#handle through SWTFontProvider This commit replaces several calls to Font#handle to use the SWTFontProvider instead. This assures the most Font reusage possible. --- .../win32/org/eclipse/swt/graphics/GC.java | 14 +++++++------- .../win32/org/eclipse/swt/graphics/Path.java | 2 +- .../org/eclipse/swt/graphics/TextLayout.java | 14 +++++++------- .../eclipse/swt/internal/SWTFontProvider.java | 16 ++++++++++++++++ .../win32/org/eclipse/swt/widgets/Caret.java | 2 +- .../win32/org/eclipse/swt/widgets/Composite.java | 2 +- .../win32/org/eclipse/swt/widgets/Control.java | 7 +++---- .../win32/org/eclipse/swt/widgets/ExpandBar.java | 2 +- .../win32/org/eclipse/swt/widgets/TableItem.java | 4 ++-- .../win32/org/eclipse/swt/widgets/TreeItem.java | 4 ++-- 10 files changed, 41 insertions(+), 26 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/GC.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/GC.java index 0fe325f075e..fd4035c5292 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/GC.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/GC.java @@ -333,10 +333,10 @@ void checkGC(int mask) { } } if ((state & FONT) != 0) { - Font font = data.font; - OS.SelectObject(handle, font.handle); + long fontHandle = SWTFontProvider.getFontHandle(data.font, data.nativeZoom); + OS.SelectObject(handle, fontHandle); long[] hFont = new long[1]; - long gdipFont = createGdipFont(handle, font.handle, gdipGraphics, device.fontCollection, null, hFont); + long gdipFont = createGdipFont(handle, fontHandle, gdipGraphics, device.fontCollection, null, hFont); if (hFont[0] != 0) OS.SelectObject(handle, hFont[0]); if (data.hGDIFont != 0) OS.DeleteObject(data.hGDIFont); data.hGDIFont = hFont[0]; @@ -454,8 +454,8 @@ void checkGC(int mask) { OS.SetTextColor(handle, data.foreground); } if ((state & FONT) != 0) { - Font font = data.font; - OS.SelectObject(handle, font.handle); + long fontHandle = SWTFontProvider.getFontHandle(data.font, data.nativeZoom); + OS.SelectObject(handle, fontHandle); } } @@ -2388,7 +2388,7 @@ void drawText(long gdipGraphics, String string, int x, int y, int flags, Point s char[] chars = string.toCharArray(); long hdc = Gdip.Graphics_GetHDC(gdipGraphics); long hFont = data.hGDIFont; - if (hFont == 0 && data.font != null) hFont = data.font.handle; + if (hFont == 0 && data.font != null) hFont = SWTFontProvider.getFontHandle(data.font, data.nativeZoom); long oldFont = 0; if (hFont != 0) oldFont = OS.SelectObject(hdc, hFont); TEXTMETRIC lptm = new TEXTMETRIC(); @@ -2478,7 +2478,7 @@ RectF drawText(long gdipGraphics, char[] buffer, int start, int length, int x, i } long hdc = Gdip.Graphics_GetHDC(gdipGraphics); long hFont = data.hGDIFont; - if (hFont == 0 && data.font != null) hFont = data.font.handle; + if (hFont == 0 && data.font != null) hFont = SWTFontProvider.getFontHandle(data.font, data.nativeZoom); long oldFont = 0; if (hFont != 0) oldFont = OS.SelectObject(hdc, hFont); if (start != 0) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Path.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Path.java index 799300b963d..99f44be4d7f 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Path.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Path.java @@ -763,7 +763,7 @@ private void addStringInPixels(PathHandle pathHandle, float x, float y) { char[] buffer = string.toCharArray(); long hDC = device.internal_new_GC(null); long [] family = new long [1]; - long gdipFont = GC.createGdipFont(hDC, SWTFontProvider.getFont(device, this.fontData, zoom).handle, 0, device.fontCollection, family, null); + long gdipFont = GC.createGdipFont(hDC, SWTFontProvider.getFontHandle(device, this.fontData, zoom), 0, device.fontCollection, family, null); PointF point = new PointF(); point.X = x - (Gdip.Font_GetSize(gdipFont) / 6); point.Y = y; diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/TextLayout.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/TextLayout.java index 0db4dc40e3a..f56955adfc1 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/TextLayout.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/TextLayout.java @@ -1969,12 +1969,12 @@ long getItemFont (StyleItem item, GC gc) { if (item.fallbackFont != 0) return item.fallbackFont; final int zoom = getNativeZoom(gc); if (item.style != null && item.style.font != null) { - return Font.win32_new(item.style.font, zoom).handle; + return SWTFontProvider.getFontHandle(item.style.font, zoom); } if (this.font != null) { - return Font.win32_new(this.font, zoom).handle; + return SWTFontProvider.getFontHandle(this.font, zoom); } - return SWTFontProvider.getSystemFont(device, zoom).handle; + return SWTFontProvider.getSystemFontHandle(device, zoom); } /** @@ -2131,15 +2131,15 @@ public FontMetrics getLineMetrics (int lineIndex) { long hDC = device.internal_new_GC(null); long srcHdc = OS.CreateCompatibleDC(hDC); TEXTMETRIC lptm = new TEXTMETRIC(); - Font availableFont = font != null ? font : device.systemFont; - OS.SelectObject(srcHdc, availableFont.handle); + final int zoom = getZoom(); + long availableFont = font != null ? SWTFontProvider.getFontHandle(font, zoom) : SWTFontProvider.getSystemFontHandle(device, zoom); + OS.SelectObject(srcHdc, availableFont); metricsAdapter.GetTextMetrics(srcHdc, lptm); OS.DeleteDC(srcHdc); device.internal_dispose_GC(hDC, null); - final int zoom = getZoom(); int ascentInPoints = Math.max(DPIUtil.scaleDown(this.device, lptm.tmAscent, zoom), this.ascent); int descentInPoints = Math.max(DPIUtil.scaleDown(this.device, lptm.tmDescent, zoom), this.descent); - int leadingInPoints = DPIUtil.scaleDown(this.device, lptm.tmInternalLeading, availableFont.zoom); + int leadingInPoints = DPIUtil.scaleDown(this.device, lptm.tmInternalLeading, zoom); if (text.length() != 0) { for (StyleItem run : runs[lineIndex]) { if (run.ascentInPoints > ascentInPoints) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/SWTFontProvider.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/SWTFontProvider.java index 9588982ed75..f7217445871 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/SWTFontProvider.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/SWTFontProvider.java @@ -16,6 +16,7 @@ import java.util.*; import java.util.concurrent.*; +import org.eclipse.swt.*; import org.eclipse.swt.graphics.*; import org.eclipse.swt.widgets.*; @@ -46,6 +47,10 @@ public static Font getSystemFont(Device device, int zoom) { return getFontRegistry(device).getSystemFont(zoom); } + public static long getSystemFontHandle(Device device, int zoom) { + return getSystemFont(device, zoom).handle; + } + /** * Returns the font with the given font data for the given device at the * specified zoom. @@ -61,6 +66,17 @@ public static Font getFont(Device device, FontData fontData, int zoom) { return getFontRegistry(device).getFont(fontData, zoom); } + public static long getFontHandle(Device device, FontData fontData, int zoom) { + return getFont(device, fontData, zoom).handle; + } + + public static long getFontHandle(Font font, int zoom) { + if (font == null) { + SWT.error(SWT.ERROR_NULL_ARGUMENT); + } + return getFont(font.getDevice(), font.getFontData()[0], zoom).handle; + } + /** * Returns the font with the given fontHandle for the given device at the * specified zoom. diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Caret.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Caret.java index 44e6175eddb..ade9c8d87e2 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Caret.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Caret.java @@ -509,7 +509,7 @@ public void setImage (Image image) { void setIMEFont () { if (!OS.IsDBLocale) return; long hFont = 0; - if (font != null) hFont = font.handle; + if (font != null) hFont = SWTFontProvider.getFontHandle(font, getNativeZoom()); if (hFont == 0) hFont = defaultFont (); long hwnd = parent.handle; long hIMC = OS.ImmGetContext (hwnd); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Composite.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Composite.java index da3cb78fa75..f3e9795ed1f 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Composite.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Composite.java @@ -1419,7 +1419,7 @@ LRESULT WM_GETFONT (long wParam, long lParam) { if (result != null) return result; long code = callWindowProc (handle, OS.WM_GETFONT, wParam, lParam); if (code != 0) return new LRESULT (code); - return new LRESULT (font != null ? font.handle : defaultFont ()); + return new LRESULT (font != null ? SWTFontProvider.getFontHandle(font, getNativeZoom()) : defaultFont ()); } @Override diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java index c7617eeb70a..bb9e8fe3ca5 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java @@ -721,7 +721,7 @@ int defaultBackground () { } long defaultFont() { - return display.getSystemFont(getNativeZoom()).handle; + return SWTFontProvider.getSystemFontHandle(display, getNativeZoom()); } int defaultForeground () { @@ -3334,7 +3334,7 @@ public void setCursor (Cursor cursor) { } void setDefaultFont () { - long hFont = display.getSystemFont (getNativeZoom()).handle; + long hFont = SWTFontProvider.getSystemFontHandle(display, getNativeZoom()); OS.SendMessage (handle, OS.WM_SETFONT, hFont, 0); } @@ -5894,8 +5894,7 @@ private static void resizeFont(Control control, int newZoom) { if (font == null) { long currentFontHandle = OS.SendMessage (control.handle, OS.WM_GETFONT, 0, 0); if (currentFontHandle != 0) { - Font newFont = display.getSystemFont(newZoom); - long newFontHandle = newFont.handle; + long newFontHandle = SWTFontProvider.getSystemFontHandle(display, newZoom); OS.SendMessage(control.handle, OS.WM_SETFONT, newFontHandle, 1); } } else { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/ExpandBar.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/ExpandBar.java index 6185d628325..f51f0406187 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/ExpandBar.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/ExpandBar.java @@ -509,7 +509,7 @@ void setBackgroundPixel (int pixel) { @Override public void setFont (Font font) { super.setFont (font); - hFont = font != null ? font.handle : 0; + hFont = font != null ? SWTFontProvider.getFontHandle(font, getNativeZoom()) : 0; layoutItems (0, true); } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TableItem.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TableItem.java index 157bd962cb7..216f75f6f7c 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TableItem.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TableItem.java @@ -157,8 +157,8 @@ void destroyWidget () { } long fontHandle (int index) { - if (cellFont != null && cellFont [index] != null) return cellFont [index].handle; - if (font != null) return font.handle; + if (cellFont != null && cellFont [index] != null) return SWTFontProvider.getFontHandle(cellFont[index], getNativeZoom()); + if (font != null) return SWTFontProvider.getFontHandle(font, getNativeZoom()); return -1; } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TreeItem.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TreeItem.java index 022ee7b1bd0..1d7b8daf7c6 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TreeItem.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TreeItem.java @@ -316,8 +316,8 @@ void destroyWidget () { } long fontHandle (int index) { - if (cellFont != null && cellFont [index] != null) return cellFont [index].handle; - if (font != null) return font.handle; + if (cellFont != null && cellFont [index] != null) return SWTFontProvider.getFontHandle(cellFont[index], getNativeZoom()); + if (font != null) return SWTFontProvider.getFontHandle(font, getNativeZoom()); return -1; } From 54a4a8edee0bbf616450e430f24b2ded3d2cd5be Mon Sep 17 00:00:00 2001 From: Andreas Koch Date: Fri, 25 Apr 2025 20:34:18 +0200 Subject: [PATCH 019/119] [win32] Fix GC font for composite This commit reverts moving the initialization of GCData.font in Composite#WM_Paint in commit 033d733. Fixes https://github.com/eclipse-platform/eclipse.platform.swt/issues/2066 --- .../Eclipse SWT/win32/org/eclipse/swt/widgets/Composite.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Composite.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Composite.java index f3e9795ed1f..8b13ecb3192 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Composite.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Composite.java @@ -1525,6 +1525,7 @@ LRESULT WM_PAINT (long wParam, long lParam) { Control control = findBackgroundControl (); if (control == null) control = this; data.background = control.getBackgroundPixel (); + data.font = SWTFontProvider.getFont(display, OS.SendMessage (handle, OS.WM_GETFONT, 0, 0), getNativeZoom()); data.uiState = (int)OS.SendMessage (handle, OS.WM_QUERYUISTATE, 0, 0); if ((style & SWT.NO_BACKGROUND) != 0) { /* This code is intentionally commented because it may be slow to copy bits from the screen */ @@ -1535,7 +1536,6 @@ LRESULT WM_PAINT (long wParam, long lParam) { drawBackground (phdc [0], rect); } GC gc = createNewGC(phdc [0], data); - data.font = SWTFontProvider.getFont(display, OS.SendMessage (handle, OS.WM_GETFONT, 0, 0), data.nativeZoom); Event event = new Event (); event.gc = gc; From 795eccce4f9581df055169823d15db29aeb12fed Mon Sep 17 00:00:00 2001 From: Andreas Koch Date: Mon, 28 Apr 2025 11:23:55 +0200 Subject: [PATCH 020/119] [win32] Move and fix some Image initialization checks This commit moves some initialization checks related to ImageFileNameProvider into the matching This commit moves some initialization checks related to ImageFileNameProvider into the matching Wrapper implementation. It also fixes when an IllegalArgumentException is thrown by the initialization to conform to the constructor' contract. --- .../win32/org/eclipse/swt/graphics/Image.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java index f74612574d6..069b75daa13 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java @@ -521,10 +521,6 @@ public Image (Device device, String filename) { } return null; }); - if (imageProvider.getImageData(100) == null) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT, null, - ": [" + filename + "] returns null ImageData at 100% zoom."); - } init(); this.device.registerResourceWithZoomSupport(this); } @@ -562,9 +558,9 @@ public Image(Device device, ImageFileNameProvider imageFileNameProvider) { super(device); this.imageProvider = new ImageFileNameProviderWrapper(imageFileNameProvider); initialNativeZoom = DPIUtil.getNativeDeviceZoom(); - if (imageProvider.getImageData(100) == null) { + if (imageFileNameProvider.getImagePath(100) == null) { SWT.error(SWT.ERROR_INVALID_ARGUMENT, null, - ": ImageFileNameProvider [" + imageFileNameProvider + "] returns null ImageData at 100% zoom."); + ": ImageFileNameProvider [" + imageFileNameProvider + "] returns null fileName at 100% zoom."); } init(); this.device.registerResourceWithZoomSupport(this); @@ -2221,6 +2217,9 @@ protected Rectangle getBounds(int zoom) { private class ImageFileNameProviderWrapper extends BaseImageProviderWrapper { ImageFileNameProviderWrapper(ImageFileNameProvider provider) { super(provider, ImageFileNameProvider.class); + // Checks for the contract of the passed provider require + // checking for valid image data creation + newImageData(DPIUtil.getDeviceZoom()); } @Override From 88c5c4e48ffe01d9d5c64e532e818930bb736dc4 Mon Sep 17 00:00:00 2001 From: Andreas Koch Date: Sun, 27 Apr 2025 13:18:15 +0200 Subject: [PATCH 021/119] [win32] Move of unified code from Wrapper to Image This commit moves the code that is equal to all AbstractImageProviderWrapper implementations back to Image. --- .../win32/org/eclipse/swt/graphics/Image.java | 32 +++++++------------ 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java index 069b75daa13..334d4140974 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java @@ -98,6 +98,11 @@ public final class Image extends Resource implements Drawable { */ private boolean isInitialized; + /** + * this field is used to mark destroyed images + */ + private boolean isDestroyed; + /** * specifies the transparent pixel */ @@ -999,7 +1004,7 @@ public static void drawScaled(GC gc, Image original, int width, int height, floa void destroy () { device.deregisterResourceWithZoomSupport(this); if (memGC != null) memGC.dispose(); - this.imageProvider.destroy(); + this.isDestroyed = true; destroyHandle(); memGC = null; } @@ -1225,7 +1230,10 @@ public ImageData getImageData() { */ public ImageData getImageData (int zoom) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - return imageProvider.getImageData(zoom); + if (zoomLevelToImageHandle.containsKey(zoom)) { + return zoomLevelToImageHandle.get(zoom).getImageData(); + } + return this.imageProvider.newImageData(zoom); } @@ -1762,7 +1770,7 @@ public void internal_dispose_GC (long hDC, GCData data) { */ @Override public boolean isDisposed() { - return this.imageProvider.isDisposed(); + return !isInitialized || isDestroyed; } /** @@ -1846,17 +1854,9 @@ public static Image win32_new(Device device, int type, long handle, int nativeZo } private abstract class AbstractImageProviderWrapper { - private boolean isDestroyed; protected abstract Rectangle getBounds(int zoom); - protected final ImageData getImageData(int zoom) { - if (zoomLevelToImageHandle.containsKey(zoom)) { - return zoomLevelToImageHandle.get(zoom).getImageData(); - } - return newImageData(zoom); - } - abstract ImageData newImageData(int zoom); abstract AbstractImageProviderWrapper createCopy(Image image); @@ -1888,14 +1888,6 @@ protected final ImageHandle newImageHandle(ImageData data, int zoom) { return init(data, zoom); } } - - protected boolean isDisposed() { - return !isInitialized || isDestroyed; - } - - protected void destroy() { - this.isDestroyed = true; - } } private class ExistingImageHandleProviderWrapper extends AbstractImageProviderWrapper { @@ -1940,7 +1932,7 @@ private abstract class ImageFromImageDataProviderWrapper extends AbstractImagePr void initImage() { // As the init call configured some Image attributes (e.g. type) // it must be called - getImageData(100); + newImageData(100); } @Override From b5f91bac43ea7049625582951e747d12a1380b80 Mon Sep 17 00:00:00 2001 From: Aleksandar Kurtakov Date: Tue, 29 Apr 2025 15:33:13 +0300 Subject: [PATCH 022/119] Stop reexporting SWT spies from swt.tools bundle The o.e.swt.tools* bundles have 2 completely different roles. They used to live in the same bundle back in the days and these reexports were added to preserve backward compatibility. If we want to progress with https://github.com/eclipse-platform/eclipse.platform.swt/discussions/2068 we have to finally make the separation clearer. Note that the swt.tools feature still include both. --- bundles/org.eclipse.swt.tools/META-INF/MANIFEST.MF | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/bundles/org.eclipse.swt.tools/META-INF/MANIFEST.MF b/bundles/org.eclipse.swt.tools/META-INF/MANIFEST.MF index 1a5437e7c6a..6ef829656d3 100644 --- a/bundles/org.eclipse.swt.tools/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.swt.tools/META-INF/MANIFEST.MF @@ -12,7 +12,5 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="3.29.0", org.eclipse.core.resources;bundle-version="3.4.0", org.eclipse.jdt.core;bundle-version="3.4.0", org.eclipse.ui;bundle-version="3.4.0", - org.eclipse.jface.text;bundle-version="3.4.0", - org.eclipse.swt.tools.base;bundle-version="3.106.0";visibility:=reexport, - org.eclipse.swt.tools.spies;bundle-version="3.106.0";visibility:=reexport + org.eclipse.jface.text;bundle-version="3.4.0" Automatic-Module-Name: org.eclipse.swt.tools From 0b06ea92266407e1666f54802580b65ada282ae1 Mon Sep 17 00:00:00 2001 From: fedejeanne Date: Mon, 28 Apr 2025 11:59:07 +0200 Subject: [PATCH 023/119] Use the native device zoom when getting the handle for a cursor #2057 Fixes https://github.com/eclipse-platform/eclipse.platform.swt/issues/2057 --- .../Eclipse SWT/win32/org/eclipse/swt/graphics/Cursor.java | 6 +++--- .../Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java | 2 +- .../Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java | 2 +- .../Eclipse SWT/win32/org/eclipse/swt/widgets/Tracker.java | 4 ++-- .../Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Cursor.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Cursor.java index 719a4020a21..93044f9809d 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Cursor.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Cursor.java @@ -355,13 +355,13 @@ public Cursor(Device device, ImageData source, int hotspotX, int hotspotY) { * Get the handle for a cursor given a zoom level. * * @param cursor the cursor - * @param zoom zoom level (in %) of the monitor the cursor is currently in. - * * @return The handle of the cursor. * * @noreference This method is not intended to be referenced by clients. */ -public static Long win32_getHandle (Cursor cursor, int zoom) { +public static Long win32_getHandle (Cursor cursor) { + // The size of the cursor should match the zoom of the current monitor + int zoom = DPIUtil.getNativeDeviceZoom(); if (cursor.isDisposed()) { return cursor.handle; } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java index bb9e8fe3ca5..64078dbf050 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java @@ -5475,7 +5475,7 @@ LRESULT WM_SETCURSOR (long wParam, long lParam) { if (control == null) return null; Cursor cursor = control.findCursor (); if (cursor != null) { - OS.SetCursor (Cursor.win32_getHandle(cursor, getZoom())); + OS.SetCursor (Cursor.win32_getHandle(cursor)); return LRESULT.ONE; } } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java index 18fefed3cf5..7b78661f142 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java @@ -2659,7 +2659,7 @@ LRESULT WM_SETCURSOR (long wParam, long lParam) { RECT rect = new RECT (); OS.GetClientRect (handle, rect); if (OS.PtInRect (rect, pt)) { - OS.SetCursor (Cursor.win32_getHandle(cursor, getZoom())); + OS.SetCursor (Cursor.win32_getHandle(cursor)); switch (msg) { case OS.WM_LBUTTONDOWN: case OS.WM_RBUTTONDOWN: diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tracker.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tracker.java index f340d38e918..ed9f6d7f39c 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tracker.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tracker.java @@ -823,7 +823,7 @@ public void setCursor(Cursor newCursor) { checkWidget(); clientCursor = newCursor; if (newCursor != null) { - if (inEvent) OS.SetCursor (Cursor.win32_getHandle(clientCursor, getZoom())); + if (inEvent) OS.SetCursor (Cursor.win32_getHandle(clientCursor)); } } @@ -892,7 +892,7 @@ long transparentProc (long hwnd, long msg, long wParam, long lParam) { break; case OS.WM_SETCURSOR: if (clientCursor != null) { - OS.SetCursor (Cursor.win32_getHandle(clientCursor, getZoom())); + OS.SetCursor (Cursor.win32_getHandle(clientCursor)); return 1; } if (resizeCursor != 0) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java index 6e7d8001a0f..95e94bbfc39 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java @@ -4663,7 +4663,7 @@ void setCursor () { * is IDC_ARROW. */ Cursor cursor = findCursor (); - long hCursor = cursor == null ? OS.LoadCursor (0, OS.IDC_ARROW) : Cursor.win32_getHandle(cursor, getZoom()); + long hCursor = cursor == null ? OS.LoadCursor (0, OS.IDC_ARROW) : Cursor.win32_getHandle(cursor); OS.SetCursor (hCursor); } From 0167475749caa62e26f1fbf976867523a21990bf Mon Sep 17 00:00:00 2001 From: fedejeanne Date: Wed, 30 Apr 2025 13:35:25 +0200 Subject: [PATCH 024/119] Destroy correct temporary handle when loading image data --- .../Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java index 334d4140974..f48d20033ba 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java @@ -2236,7 +2236,7 @@ protected ElementAtZoom loadImageData(int zoom) { imageDataAtZoom = ImageDataLoader.load(fileForZoom.element(), fileForZoom.zoom(), zoom); } else { imageDataAtZoom = new ElementAtZoom<>(nativeInitializedImage.getImageData(), fileForZoom.zoom()); - destroyHandleForZoom(zoom); + destroyHandleForZoom(fileForZoom.zoom()); } return imageDataAtZoom; } From d37f285747cd385c531e1dbca00856d0c0224b8e Mon Sep 17 00:00:00 2001 From: Andreas Koch Date: Tue, 29 Apr 2025 17:19:33 +0200 Subject: [PATCH 025/119] [win32] Delegate handle destruction to ImageHandle This commit move the cleanup of OS handle of images from Image to the subclass Image#ImageHandle. --- .../win32/org/eclipse/swt/graphics/Image.java | 56 +++++++++---------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java index f48d20033ba..4c6b8532f16 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java @@ -18,6 +18,7 @@ import java.io.*; import java.util.*; +import java.util.Map.*; import java.util.function.*; import org.eclipse.swt.*; @@ -1005,40 +1006,30 @@ void destroy () { device.deregisterResourceWithZoomSupport(this); if (memGC != null) memGC.dispose(); this.isDestroyed = true; - destroyHandle(); + destroyHandles(); memGC = null; } -private void destroyHandle () { - for (ImageHandle imageMetadata : zoomLevelToImageHandle.values()) { - destroyHandle(imageMetadata.handle); - } - zoomLevelToImageHandle.clear(); +private void destroyHandles() { + destroyHandles(__ -> true); } @Override void destroyHandlesExcept(Set zoomLevels) { - zoomLevelToImageHandle.entrySet().removeIf(entry -> { - final Integer zoom = entry.getKey(); - if (!zoomLevels.contains(zoom) && zoom != DPIUtil.getZoomForAutoscaleProperty(initialNativeZoom)) { - destroyHandle(entry.getValue().handle); - return true; - } - return false; + destroyHandles(zoom -> { + return !zoomLevels.contains(zoom) && zoom != DPIUtil.getZoomForAutoscaleProperty(initialNativeZoom); }); } -private void destroyHandleForZoom(int zoom) { - ImageHandle imageHandle = zoomLevelToImageHandle.remove(zoom); - if (imageHandle != null) { - destroyHandle(imageHandle.handle); - } -} -private void destroyHandle(long handle) { - if (type == SWT.ICON) { - OS.DestroyIcon (handle); - } else { - OS.DeleteObject (handle); +private void destroyHandles(Predicate filter) { + Iterator> it = zoomLevelToImageHandle.entrySet().iterator(); + while (it.hasNext()) { + Entry zoomToHandle = it.next(); + if (filter.test(zoomToHandle.getKey())) { + ImageHandle imageHandle = zoomToHandle.getValue(); + it.remove(); + imageHandle.destroy(); + } } } @@ -1940,7 +1931,7 @@ ImageData newImageData(int zoom) { Function imageDataRetrieval = zoomToRetrieve -> { ImageHandle handle = initializeHandleFromSource(zoomToRetrieve); ImageData data = handle.getImageData(); - destroyHandleForZoom(zoomToRetrieve); + handle.destroy(); return data; }; return cachedImageData.computeIfAbsent(zoom, imageDataRetrieval); @@ -2174,7 +2165,7 @@ ImageData newImageData(int zoom) { Function imageDataRetrival = zoomToRetrieve -> { ImageHandle handle = initializeHandleFromSource(zoomToRetrieve); ImageData data = handle.getImageData(); - destroyHandleForZoom(zoomToRetrieve); + handle.destroy(); return data; }; return cachedImageData.computeIfAbsent(zoom, imageDataRetrival); @@ -2236,7 +2227,7 @@ protected ElementAtZoom loadImageData(int zoom) { imageDataAtZoom = ImageDataLoader.load(fileForZoom.element(), fileForZoom.zoom(), zoom); } else { imageDataAtZoom = new ElementAtZoom<>(nativeInitializedImage.getImageData(), fileForZoom.zoom()); - destroyHandleForZoom(fileForZoom.zoom()); + nativeInitializedImage.destroy(); } return imageDataAtZoom; } @@ -2525,7 +2516,7 @@ public boolean equals(Object otherProvider) { } private class ImageHandle { - private final long handle; + private long handle; private final int zoom; private int height; private int width; @@ -2871,5 +2862,14 @@ private boolean isDisposed() { return this.handle == 0; } + private void destroy() { + zoomLevelToImageHandle.remove(zoom, this); + if (type == SWT.ICON) { + OS.DestroyIcon (handle); + } else { + OS.DeleteObject (handle); + } + handle = 0; + } } } From 071da510b3e47a88d32ecf188b76497653d040ac Mon Sep 17 00:00:00 2001 From: Andreas Koch Date: Mon, 28 Apr 2025 14:34:05 +0200 Subject: [PATCH 026/119] Extend ImageGcDrawer to support transparency This commit extends the usage of ImageGcDraware to support SWT.Transparency as style that will initialize each GC with a proper transparent bitmap. --- .../cocoa/org/eclipse/swt/graphics/Image.java | 12 ++++- .../gtk/org/eclipse/swt/graphics/Image.java | 31 ++++++++--- .../win32/org/eclipse/swt/graphics/Image.java | 40 ++++++++++++--- .../org/eclipse/swt/snippets/Snippet367.java | 22 ++++++-- .../org/eclipse/swt/snippets/Snippet382.java | 51 +++++++++++++------ 5 files changed, 121 insertions(+), 35 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Image.java index 7d0ff95942d..3770107184a 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Image.java @@ -903,8 +903,16 @@ public Image(Device device, ImageGcDrawer imageGcDrawer, int width, int height) } private ImageData drawWithImageGcDrawer(ImageGcDrawer imageGcDrawer, int width, int height, int zoom) { - Image image = new Image(device, width, height); - GC gc = new GC(image); + int gcStyle = imageGcDrawer.getGcStyle(); + Image image; + if ((gcStyle & SWT.TRANSPARENT) != 0) { + final ImageData resultData = new ImageData (width, height, 24, new PaletteData (0xFF, 0xFF00, 0xFF0000)); + resultData.alphaData = new byte [width * height]; + image = new Image(device, resultData); + } else { + image = new Image(device, width, height); + } + GC gc = new GC(image, gcStyle); try { imageGcDrawer.drawOn(gc, width, height); ImageData imageData = image.getImageData(zoom); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java index c73e4dfe873..841810fc2f1 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java @@ -437,11 +437,14 @@ public Image(Device device, Rectangle bounds) { * @see #dispose() */ public Image(Device device, ImageData data) { + this(device, DPIUtil.autoScaleUp(device, data), DPIUtil.getDeviceZoom()); +} + +private Image(Device device, ImageData data, int zoom) { super(device); if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); - currentDeviceZoom = DPIUtil.getDeviceZoom(); - data = DPIUtil.autoScaleUp (device, data); - init(data); + currentDeviceZoom = zoom; + init(data, zoom); init(); } @@ -695,9 +698,9 @@ public Image(Device device, ImageGcDrawer imageGcDrawer, int width, int height) SWT.error(SWT.ERROR_NULL_ARGUMENT); } this.imageGcDrawer = imageGcDrawer; - currentDeviceZoom = DPIUtil.getDeviceZoom(); + currentDeviceZoom = 100; ImageData imageData = drawWithImageGcDrawer(width, height, currentDeviceZoom); - init (imageData); + init (imageData, currentDeviceZoom); init (); } @@ -1162,8 +1165,16 @@ public ImageData getImageData (int zoom) { } private ImageData drawWithImageGcDrawer(int width, int height, int zoom) { - Image image = new Image(device, width, height); - GC gc = new GC(image); + int gcStyle = imageGcDrawer.getGcStyle(); + Image image; + if ((gcStyle & SWT.TRANSPARENT) != 0) { + final ImageData resultData = new ImageData(width, height, 24, new PaletteData (0xFF, 0xFF00, 0xFF0000)); + resultData.alphaData = new byte [width * height]; + image = new Image(device, resultData, zoom); + } else { + image = new Image(device, width, height); + } + GC gc = new GC(image, gcStyle); try { imageGcDrawer.drawOn(gc, width, height); ImageData imageData = image.getImageData(zoom); @@ -1274,6 +1285,10 @@ void init(int width, int height) { } void init(ImageData image) { + init(image, DPIUtil.getDeviceZoom()); +} + +void init(ImageData image, int zoom) { if (image == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); PaletteData palette = image.palette; @@ -1286,7 +1301,7 @@ void init(ImageData image) { int imageDataHeight = image.height; // Scale dimensions of Image object to 100% scale factor - double scaleFactor = DPIUtil.getDeviceZoom() / 100f; + double scaleFactor = zoom / 100f; this.width = (int) Math.round(imageDataWidth / scaleFactor); this.height = (int) Math.round(imageDataHeight / scaleFactor); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java index 4c6b8532f16..7145035c6da 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java @@ -380,6 +380,15 @@ public Image(Device device, ImageData data) { this.device.registerResourceWithZoomSupport(this); } +private Image(Device device, ImageData data, int zoom) { + super(device); + if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); + initialNativeZoom = zoom; + this.imageProvider = new PlainImageDataProviderWrapper(data, zoom); + init(); + this.device.registerResourceWithZoomSupport(this); +} + /** * Constructs an instance of this class, whose type is * SWT.ICON, from the two given ImageData @@ -1956,27 +1965,34 @@ private ImageHandle initializeHandleFromSource(int zoom) { } private class PlainImageDataProviderWrapper extends ImageFromImageDataProviderWrapper { - private ImageData imageDataAt100; + private ImageData imageDataAtBaseZoom; + private int baseZoom; PlainImageDataProviderWrapper(ImageData imageData) { - this.imageDataAt100 = (ImageData) imageData.clone(); + this(imageData, 100); + } + + PlainImageDataProviderWrapper(ImageData imageData, int zoom) { + this.imageDataAtBaseZoom = (ImageData) imageData.clone(); + this.baseZoom = zoom; initImage(); } @Override protected Rectangle getBounds(int zoom) { - Rectangle rectangle = new Rectangle(0, 0, imageDataAt100.width, imageDataAt100.height); + Rectangle rectangle = new Rectangle(0, 0, imageDataAtBaseZoom.width, imageDataAtBaseZoom.height); + rectangle = DPIUtil.scaleDown(rectangle, baseZoom); return DPIUtil.scaleUp(rectangle, zoom); } @Override protected ElementAtZoom loadImageData(int zoom) { - return new ElementAtZoom<>(imageDataAt100, 100); + return new ElementAtZoom<>(imageDataAtBaseZoom, baseZoom); } @Override AbstractImageProviderWrapper createCopy(Image image) { - return image.new PlainImageDataProviderWrapper(this.imageDataAt100); + return image.new PlainImageDataProviderWrapper(this.imageDataAtBaseZoom); } } @@ -2478,8 +2494,18 @@ ImageData newImageData(int zoom) { @Override protected ImageHandle newImageHandle(int zoom) { initialNativeZoom = zoom; - Image image = new Image(device, width, height, zoom); - GC gc = new GC(image, drawer.getGcStyle()); + int gcStyle = drawer.getGcStyle(); + Image image; + if ((gcStyle & SWT.TRANSPARENT) != 0) { + int scaledHeight = DPIUtil.scaleUp(height, zoom); + int scaledWidth = DPIUtil.scaleUp(width, zoom); + final ImageData resultData = new ImageData (scaledWidth, scaledHeight, 24, new PaletteData (0xFF, 0xFF00, 0xFF0000)); + resultData.alphaData = new byte [scaledWidth * scaledHeight]; + image = new Image(device, resultData, zoom); + } else { + image = new Image(device, width, height, zoom); + } + GC gc = new GC(image, gcStyle); try { gc.data.nativeZoom = zoom; drawer.drawOn(gc, width, height); diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet367.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet367.java index fc5b6aee5b5..54b53dc1d39 100644 --- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet367.java +++ b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet367.java @@ -36,6 +36,8 @@ public class Snippet367 { private static final String IMAGE_PATH_200 = IMAGES_ROOT + IMAGE_200; public static void main (String [] args) { + final Display display = new Display (); + final ImageFileNameProvider filenameProvider = zoom -> { switch (zoom) { case 100: @@ -65,7 +67,17 @@ public static void main (String [] args) { gc.drawLine(3, 3, width - 3, height - 3); }; - final Display display = new Display (); + Image imageWithDataProvider = new Image (display, imageDataProvider); + final ImageGcDrawer transparentImageGcDrawer = new ImageGcDrawer() { + @Override + public void drawOn(GC gc, int width, int height) { + gc.drawImage(imageWithDataProvider, 0, 0); + } + @Override + public int getGcStyle() { + return SWT.TRANSPARENT; + } + }; final Shell shell = new Shell (display); shell.setText("Snippet367"); shell.setLayout (new GridLayout (3, false)); @@ -99,13 +111,17 @@ public static void main (String [] args) { new Button(shell, SWT.NONE).setImage (new Image (display, filenameProvider)); new Label (shell, SWT.NONE).setText ("ImageDataProvider:"); - new Label (shell, SWT.NONE).setImage (new Image (display, imageDataProvider)); - new Button(shell, SWT.NONE).setImage (new Image (display, imageDataProvider)); + new Label (shell, SWT.NONE).setImage (imageWithDataProvider); + new Button(shell, SWT.NONE).setImage (imageWithDataProvider); new Label (shell, SWT.NONE).setText ("ImageGcDrawer:"); new Label (shell, SWT.NONE).setImage (new Image (display, imageGcDrawer, 20, 20)); new Button(shell, SWT.NONE).setImage (new Image (display, imageGcDrawer, 20, 20)); + new Label (shell, SWT.NONE).setText ("Transparent ImageGcDrawer:"); + new Label (shell, SWT.NONE).setImage (new Image (display, transparentImageGcDrawer, 20, 20)); + new Button(shell, SWT.NONE).setImage (new Image (display, transparentImageGcDrawer, 20, 20)); + createSeparator(shell); new Label (shell, SWT.NONE).setText ("1. Canvas\n(PaintListener)"); diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet382.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet382.java index 821cfcec277..bb639b08287 100644 --- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet382.java +++ b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet382.java @@ -64,6 +64,18 @@ public static void main (String [] args) { final Display display = new Display (); + final Image imageWithFileNameProvider = new Image (display, filenameProvider); + final Image disabledImageWithFileNameProvider = new Image (display,imageWithFileNameProvider, SWT.IMAGE_DISABLE); + final Image greyImageWithFileNameProvider = new Image (display,imageWithFileNameProvider, SWT.IMAGE_GRAY); + + final Image imageWithDataProvider = new Image (display, imageDataProvider); + final Image disabledImageWithDataProvider = new Image (display,imageWithDataProvider, SWT.IMAGE_DISABLE); + final Image greyImageWithDataProvider = new Image (display,imageWithDataProvider, SWT.IMAGE_GRAY); + + final Image imageWithData = new Image (display, IMAGE_PATH_100); + final Image disabledImageWithData = new Image (display,imageWithData, SWT.IMAGE_DISABLE); + final Image greyImageWithData = new Image (display,imageWithData, SWT.IMAGE_GRAY); + final ImageGcDrawer imageGcDrawer = (gc, width, height) -> { gc.setBackground(display.getSystemColor(SWT.COLOR_RED)); gc.fillRectangle(0, 0, width, height); @@ -71,6 +83,25 @@ public static void main (String [] args) { gc.drawRectangle(4, 4, width - 8, height - 8); }; + final Image imageWithGcDrawer = new Image (display, imageGcDrawer, 16, 16); + final Image disabledImageWithGcDrawer = new Image (display, imageWithGcDrawer, SWT.IMAGE_DISABLE); + final Image greyImageWithGcDrawer = new Image (display, imageWithGcDrawer, SWT.IMAGE_GRAY); + + final ImageGcDrawer transparentImageGcDrawer = new ImageGcDrawer() { + @Override + public void drawOn(GC gc, int width, int height) { + gc.drawImage(imageWithDataProvider, 0, 0); + } + @Override + public int getGcStyle() { + return SWT.TRANSPARENT; + } + }; + + final Image imageWithTransparentGcDrawer = new Image (display, transparentImageGcDrawer, 16, 16); + final Image disabledImageWithTransparentGcDrawer = new Image (display, imageWithTransparentGcDrawer, SWT.IMAGE_DISABLE); + final Image greyImageWithTransparentGcDrawer = new Image (display, imageWithTransparentGcDrawer, SWT.IMAGE_GRAY); + final Shell shell = new Shell (display); shell.setText("Snippet382"); shell.setLayout (new GridLayout (3, false)); @@ -80,21 +111,7 @@ public void handleEvent(Event e) { if (e.type == SWT.Paint) { GC mainGC = e.gc; GCData gcData = mainGC.getGCData(); - final Image imageWithFileNameProvider = new Image (display, filenameProvider); - final Image disabledImageWithFileNameProvider = new Image (display,imageWithFileNameProvider, SWT.IMAGE_DISABLE); - final Image greyImageWithFileNameProvider = new Image (display,imageWithFileNameProvider, SWT.IMAGE_GRAY); - final Image imageWithDataProvider = new Image (display, imageDataProvider); - final Image disabledImageWithDataProvider = new Image (display,imageWithDataProvider, SWT.IMAGE_DISABLE); - final Image greyImageWithDataProvider = new Image (display,imageWithDataProvider, SWT.IMAGE_GRAY); - - final Image imageWithData = new Image (display, IMAGE_PATH_100); - final Image disabledImageWithData = new Image (display,imageWithData, SWT.IMAGE_DISABLE); - final Image greyImageWithData = new Image (display,imageWithData, SWT.IMAGE_GRAY); - - final Image imageWithGcDrawer = new Image (display, imageGcDrawer, 16, 16); - final Image disabledImageWithGcDrawer = new Image (display, imageWithGcDrawer, SWT.IMAGE_DISABLE); - final Image greyImageWithGcDrawer = new Image (display, imageWithGcDrawer, SWT.IMAGE_GRAY); try { drawImages(mainGC, gcData, "Normal",40, imageWithFileNameProvider); @@ -112,6 +129,10 @@ public void handleEvent(Event e) { drawImages(mainGC, gcData, "Normal", 400, imageWithGcDrawer); drawImages(mainGC, gcData, "Disabled", 440, disabledImageWithGcDrawer); drawImages(mainGC, gcData, "Greyed", 480, greyImageWithGcDrawer); + + drawImages(mainGC, gcData, "Normal", 520, imageWithTransparentGcDrawer); + drawImages(mainGC, gcData, "Disabled", 560, disabledImageWithTransparentGcDrawer); + drawImages(mainGC, gcData, "Greyed", 600, greyImageWithTransparentGcDrawer); } finally { mainGC.dispose (); } @@ -130,7 +151,7 @@ private void drawImages(GC mainGC, GCData gcData, String text, int y, final Imag }; shell.addListener(SWT.Paint, l); - shell.setSize(400, 550); + shell.setSize(400, 750); shell.open (); while (!shell.isDisposed ()) { if (!display.readAndDispatch ()) display.sleep (); From d712320341185b72a39b062057e43f98bd68aefd Mon Sep 17 00:00:00 2001 From: Andreas Koch Date: Mon, 28 Apr 2025 15:46:17 +0200 Subject: [PATCH 027/119] Use ImageGcDrawer for smooth scaling of ImageData This commit adapts the smooth scaling implementation to use ImageGcDrawer. --- .../cocoa/org/eclipse/swt/graphics/Image.java | 1 + .../org/eclipse/swt/internal/DPIUtil.java | 23 +++++++++++-------- .../gtk/org/eclipse/swt/graphics/Image.java | 3 ++- .../win32/org/eclipse/swt/graphics/Image.java | 3 ++- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Image.java index 3770107184a..8040df584bf 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Image.java @@ -906,6 +906,7 @@ private ImageData drawWithImageGcDrawer(ImageGcDrawer imageGcDrawer, int width, int gcStyle = imageGcDrawer.getGcStyle(); Image image; if ((gcStyle & SWT.TRANSPARENT) != 0) { + /* Create a 24 bit image data with alpha channel */ final ImageData resultData = new ImageData (width, height, 24, new PaletteData (0xFF, 0xFF00, 0xFF0000)); resultData.alphaData = new byte [width * height]; image = new Image(device, resultData); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/DPIUtil.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/DPIUtil.java index 10a60eb0048..7b197fa6e3f 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/DPIUtil.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/DPIUtil.java @@ -306,16 +306,21 @@ private static ImageData autoScaleImageData (Device device, final ImageData imag boolean useSmoothScaling = isSmoothScalingEnabled() && imageData.getTransparencyType() != SWT.TRANSPARENCY_MASK; if (useSmoothScaling) { Image original = new Image (device, (ImageDataProvider) zoom -> imageData); - /* Create a 24 bit image data with alpha channel */ - final ImageData resultData = new ImageData (scaledWidth, scaledHeight, 24, new PaletteData (0xFF, 0xFF00, 0xFF0000)); - resultData.alphaData = new byte [scaledWidth * scaledHeight]; - Image resultImage = new Image (device, (ImageDataProvider) zoom -> resultData); - GC gc = new GC (resultImage); - gc.setAntialias (SWT.ON); - Image.drawScaled(gc, original, width, height, scaleFactor); - gc.dispose (); + ImageGcDrawer drawer = new ImageGcDrawer() { + @Override + public void drawOn(GC gc, int imageWidth, int imageHeight) { + gc.setAntialias (SWT.ON); + Image.drawScaled(gc, original, width, height, scaleFactor); + }; + + @Override + public int getGcStyle() { + return SWT.TRANSPARENT; + } + }; + Image resultImage = new Image (device, drawer, scaledWidth, scaledHeight); + ImageData result = resultImage.getImageData (100); original.dispose (); - ImageData result = resultImage.getImageData (getDeviceZoom ()); resultImage.dispose (); return result; } else { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java index 841810fc2f1..f174e431738 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java @@ -1168,6 +1168,7 @@ private ImageData drawWithImageGcDrawer(int width, int height, int zoom) { int gcStyle = imageGcDrawer.getGcStyle(); Image image; if ((gcStyle & SWT.TRANSPARENT) != 0) { + /* Create a 24 bit image data with alpha channel */ final ImageData resultData = new ImageData(width, height, 24, new PaletteData (0xFF, 0xFF00, 0xFF0000)); resultData.alphaData = new byte [width * height]; image = new Image(device, resultData, zoom); @@ -1288,7 +1289,7 @@ void init(ImageData image) { init(image, DPIUtil.getDeviceZoom()); } -void init(ImageData image, int zoom) { +private void init(ImageData image, int zoom) { if (image == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); PaletteData palette = image.palette; diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java index 7145035c6da..f2b96c560b1 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java @@ -1972,7 +1972,7 @@ private class PlainImageDataProviderWrapper extends ImageFromImageDataProviderWr this(imageData, 100); } - PlainImageDataProviderWrapper(ImageData imageData, int zoom) { + private PlainImageDataProviderWrapper(ImageData imageData, int zoom) { this.imageDataAtBaseZoom = (ImageData) imageData.clone(); this.baseZoom = zoom; initImage(); @@ -2499,6 +2499,7 @@ protected ImageHandle newImageHandle(int zoom) { if ((gcStyle & SWT.TRANSPARENT) != 0) { int scaledHeight = DPIUtil.scaleUp(height, zoom); int scaledWidth = DPIUtil.scaleUp(width, zoom); + /* Create a 24 bit image data with alpha channel */ final ImageData resultData = new ImageData (scaledWidth, scaledHeight, 24, new PaletteData (0xFF, 0xFF00, 0xFF0000)); resultData.alphaData = new byte [scaledWidth * scaledHeight]; image = new Image(device, resultData, zoom); From a491ec48b40ccb6425b112f19102d69424ca63b1 Mon Sep 17 00:00:00 2001 From: Aleksandar Kurtakov Date: Thu, 1 May 2025 10:34:51 +0300 Subject: [PATCH 028/119] Fix svg fragment build Ensure that the applicable implementation fragments are available for svg fragment Part of https://github.com/eclipse-platform/eclipse.platform.releng.aggregator/issues/3006 --- bundles/org.eclipse.swt.svg/META-INF/p2.inf | 32 +++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 bundles/org.eclipse.swt.svg/META-INF/p2.inf diff --git a/bundles/org.eclipse.swt.svg/META-INF/p2.inf b/bundles/org.eclipse.swt.svg/META-INF/p2.inf new file mode 100644 index 00000000000..9818f97c079 --- /dev/null +++ b/bundles/org.eclipse.swt.svg/META-INF/p2.inf @@ -0,0 +1,32 @@ +# ensure that the applicable implementation fragment gets installed (https://github.com/eclipse-platform/eclipse.platform.releng.aggregator/issues/3006) +requires.1.namespace = org.eclipse.equinox.p2.iu +requires.1.name = org.eclipse.swt.win32.win32.x86_64 +requires.1.filter = (&(osgi.os=win32)(osgi.ws=win32)(osgi.arch=x86_64)) + +requires.2.namespace = org.eclipse.equinox.p2.iu +requires.2.name = org.eclipse.swt.cocoa.macosx.x86_64 +requires.2.filter = (&(osgi.os=macosx)(osgi.ws=cocoa)(osgi.arch=x86_64)) + +requires.3.namespace = org.eclipse.equinox.p2.iu +requires.3.name = org.eclipse.swt.gtk.linux.x86_64 +requires.3.filter = (&(osgi.os=linux)(osgi.ws=gtk)(osgi.arch=x86_64)) + +requires.4.namespace = org.eclipse.equinox.p2.iu +requires.4.name = org.eclipse.swt.gtk.linux.ppc64le +requires.4.filter = (&(osgi.os=linux)(osgi.ws=gtk)(osgi.arch=ppc64le)) + +requires.5.namespace = org.eclipse.equinox.p2.iu +requires.5.name = org.eclipse.swt.gtk.linux.aarch64 +requires.5.filter = (&(osgi.os=linux)(osgi.ws=gtk)(osgi.arch=aarch64)) + +requires.6.namespace = org.eclipse.equinox.p2.iu +requires.6.name = org.eclipse.swt.cocoa.macosx.aarch64 +requires.6.filter = (&(osgi.os=macosx)(osgi.ws=cocoa)(osgi.arch=aarch64)) + +requires.7.namespace = org.eclipse.equinox.p2.iu +requires.7.name = org.eclipse.swt.win32.win32.aarch64 +requires.7.filter = (&(osgi.os=win32)(osgi.ws=win32)(osgi.arch=aarch64)) + +requires.8.namespace = org.eclipse.equinox.p2.iu +requires.8.name = org.eclipse.swt.gtk.linux.riscv64 +requires.8.filter = (&(osgi.os=linux)(osgi.ws=gtk)(osgi.arch=riscv64)) From d267b1514b6fb3fa59c929c3561be6c081aef6a0 Mon Sep 17 00:00:00 2001 From: Aleksandar Kurtakov Date: Thu, 1 May 2025 10:43:03 +0300 Subject: [PATCH 029/119] Fix Jenkinsfile to not ust strip but trim --- Jenkinsfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 641ee0e813e..e11010ad978 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -71,7 +71,7 @@ def getNativeJdkUrl(String os, String arch) { // To update the used JDK version } def getLatestGitTag() { - return sh(script: 'git describe --abbrev=0 --tags --match v[0-9][0-9][0-9][0-9]*', returnStdout: true).strip() + return sh(script: 'git describe --abbrev=0 --tags --match v[0-9][0-9][0-9][0-9]*', returnStdout: true).trim() } def getSWTVersions() { // must be called from the repository root @@ -159,7 +159,7 @@ pipeline { def sources = sourceFoldersProps.collectEntries{ k, src -> [ k, src.split(',').collect{ f -> '\'' + f + '\''}.join(' ') ] } for(ws in allWS) { def diff = sh(script: "git diff HEAD ${swtTag} ${sources.src_common} ${sources['src_' + ws]}", returnStdout: true) - if (!diff.strip().isEmpty()) { + if (!diff.trim().isEmpty()) { NATIVES_CHANGED += ws } } From f3944f0df50d2c98a5b5a408db784ef6a142c4b6 Mon Sep 17 00:00:00 2001 From: Hannes Wellmann Date: Thu, 1 May 2025 21:29:27 +0200 Subject: [PATCH 030/119] [Build] Activate javadoc generation and 'bree-libs' profile --- .github/workflows/maven.yml | 2 +- Jenkinsfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 034d6f2f673..87a935406a5 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -72,7 +72,7 @@ jobs: --threads 1C -DforkCount=1 '-Dnative=${{ matrix.config.native }}' - -Papi-check + -Papi-check -Pjavadoc '-Dtycho.baseline.replace=none' --fail-at-end -DskipNativeTests=false diff --git a/Jenkinsfile b/Jenkinsfile index e11010ad978..df61a78b02a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -351,7 +351,7 @@ pipeline { sh ''' mvn clean verify \ --batch-mode --threads 1C -V -U -e -DforkCount=0 \ - -Papi-check \ + -Pbree-libs -Papi-check -Pjavadoc \ -Dcompare-version-with-baselines.skip=false \ -Dorg.eclipse.swt.tests.junit.disable.test_isLocal=true \ -Dmaven.test.failure.ignore=true -Dmaven.test.error.ignore=true From ea059c15ffac5e344e2cc30ef16b75ddd3beee15 Mon Sep 17 00:00:00 2001 From: Hannes Wellmann Date: Thu, 1 May 2025 21:56:34 +0200 Subject: [PATCH 031/119] Fix javadoc errors --- binaries/pom.xml | 18 +++++++++ .../eclipse/swt/accessibility/Accessible.java | 10 ++--- .../gtk/org/eclipse/swt/internal/gtk/GTK.java | 2 +- .../gtk/org/eclipse/swt/internal/gtk/OS.java | 1 - .../org/eclipse/swt/internal/Converter.java | 6 +-- .../gtk/org/eclipse/swt/internal/GDBus.java | 2 +- .../examples/controls/CustomControlView.java | 7 ++-- .../swt/examples/accessibility/CTable.java | 16 ++++---- .../examples/accessibility/CTableColumn.java | 8 ++-- .../examples/accessibility/CTableItem.java | 39 +++++++++---------- .../examples/addressbook/DataEntryDialog.java | 5 +-- .../swt/examples/graphics/ColorListener.java | 4 +- .../swt/examples/hoverhelp/HoverHelp.java | 3 +- .../paint/ContinuousPaintSession.java | 7 ++-- .../swt/examples/paint/DragPaintSession.java | 2 +- .../swt/examples/paint/EllipseFigure.java | 9 +++-- .../swt/examples/paint/LineFigure.java | 9 +++-- .../swt/examples/paint/PaintSurface.java | 6 +-- .../swt/examples/paint/PencilTool.java | 2 +- .../swt/examples/paint/RectangleFigure.java | 9 +++-- .../paint/RoundedRectangleFigure.java | 9 +++-- .../examples/paint/SolidPolygonFigure.java | 6 ++- .../Bug516480_KeydownRussianlayout.java | 25 ++++++------ .../tests/gtk/snippets/Bug518961_RTTest.java | 2 +- ...ug546961_Scrollbar_Slider_Popup_Shell.java | 2 +- .../Bug573697_MenuBar_CrashShellReparent.java | 2 +- .../Bug573697_MenuBar_MenuDispose.java | 2 +- .../snippets/Bug573697_MenuBar_MenuLeak.java | 2 +- ...83_TestToolbarOverflow_itemEnablement.java | 4 +- ..._JvmCrashRemovingMenuItemAccelerators.java | 5 +-- .../swt/tests/manualJUnit/MJ_Template.java | 2 +- .../swt/tests/manualJUnit/MJ_Tree.java | 2 +- .../eclipse/swt/tests/junit/SwtTestUtil.java | 1 - .../Test_org_eclipse_swt_browser_Browser.java | 6 +-- ...est_org_eclipse_swt_custom_CTabFolder.java | 4 +- .../Test_org_eclipse_swt_widgets_List.java | 8 ++-- ...st_org_eclipse_swt_widgets_MessageBox.java | 3 -- .../junit/memoryleak/Test_Memory_Leak.java | 4 +- 38 files changed, 137 insertions(+), 117 deletions(-) diff --git a/binaries/pom.xml b/binaries/pom.xml index 743ed32629c..54c2920b8f0 100644 --- a/binaries/pom.xml +++ b/binaries/pom.xml @@ -83,6 +83,24 @@ + + org.apache.maven.plugins + maven-javadoc-plugin + + + + field + f + Native field + + + method + m + Native method + + + + diff --git a/bundles/org.eclipse.swt/Eclipse SWT Accessibility/cocoa/org/eclipse/swt/accessibility/Accessible.java b/bundles/org.eclipse.swt/Eclipse SWT Accessibility/cocoa/org/eclipse/swt/accessibility/Accessible.java index ed12c5fe9d2..076654fdcf6 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Accessibility/cocoa/org/eclipse/swt/accessibility/Accessible.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Accessibility/cocoa/org/eclipse/swt/accessibility/Accessible.java @@ -1351,7 +1351,7 @@ public id internal_accessibilityFocusedUIElement(int childID) { * You can assume the point has already been determined to lie within the receiver. * Override this method to do deeper hit testing within a UIElement - e.g. a NSMatrix * would test its cells. The point is bottom-left relative screen coordinates. - * + *

* IMPORTANT: This field is not part of the SWT * public API. It is marked public only so that it can be shared * within the packages provided by SWT. It is not available on all @@ -1393,7 +1393,7 @@ public id internal_accessibilityHitTest(NSPoint point, int childID) { * Return YES if the UIElement doesn't show up to the outside world - * i.e. its parent should return the UIElement's children as its own - * cutting the UIElement out. E.g. NSControls are ignored when they are single-celled. - * + *

* IMPORTANT: This field is not part of the SWT * public API. It is marked public only so that it can be shared * within the packages provided by SWT. It is not available on all @@ -1422,7 +1422,7 @@ public boolean internal_accessibilityIsIgnored(int childID) { /** * Return the array of supported attributes that take parameters. - * + *

* IMPORTANT: This field is not part of the SWT * public API. It is marked public only so that it can be shared * within the packages provided by SWT. It is not available on all @@ -1484,7 +1484,7 @@ public NSArray internal_accessibilityParameterizedAttributeNames(int childID) { /** * Performs the specified action. - * + *

* IMPORTANT: This field is not part of the SWT * public API. It is marked public only so that it can be shared * within the packages provided by SWT. It is not available on all @@ -1530,7 +1530,7 @@ public boolean internal_accessibilityPerformAction(NSString action, int childID) /** * Set the value of the specified attribute to the given value. * Unsupported attributes are ignored. - * + *

* IMPORTANT: This field is not part of the SWT * public API. It is marked public only so that it can be shared * within the packages provided by SWT. It is not available on all diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/GTK.java b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/GTK.java index 29f15836b1d..a7793a09f6a 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/GTK.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/GTK.java @@ -185,7 +185,7 @@ public class GTK extends OS { public static final byte[] gtk_application_prefer_dark_theme = OS.ascii("gtk-application-prefer-dark-theme"); /** Named icons. - * See https://docs.google.com/spreadsheet/pub?key=0AsPAM3pPwxagdGF4THNMMUpjUW5xMXZfdUNzMXhEa2c&output=html + * See https://docs.google.com/spreadsheet/pub?key=0AsPAM3pPwxagdGF4THNMMUpjUW5xMXZfdUNzMXhEa2c&output=html * See http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html#names * Icon preview tool: gtk3-icon-browser * Snippets often demonstrate usage of these. E.x 309, 258. diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java index 97cc31ee5d8..37601e1f413 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java @@ -741,7 +741,6 @@ public static boolean isX11 () { public static final native long G_OBJECT_CLASS_CONSTRUCTOR(long object_class); /** * @param object_class cast=(GObjectClass *) - * @paramOFF constructor cast=(GObject* (*) (GType, guint, GObjectConstructParam *)) */ public static final native void G_OBJECT_CLASS_SET_CONSTRUCTOR(long object_class, long constructor); /** @param xevent cast=(XEvent *) */ diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/internal/Converter.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/internal/Converter.java index f6903657204..dc819bff0c5 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/internal/Converter.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/internal/Converter.java @@ -31,7 +31,7 @@ * * This class is tested via: org.eclipse.swt.tests.gtk.Test_GtkTextEncoding * - * About JNI & string conversion: + * About JNI & string conversion: * ############################# * - Regular JNI String conversion usually uses a modified UTF-8, see: https://en.wikipedia.org/wiki/UTF-8#Modified_UTF-8 * - And in JNI, normally (env*)->GetStringUTFChars(..) is used to convert a javaString into a C string. @@ -50,12 +50,12 @@ * Java uses UTF-16 Wide characters internally to represent a string. * C uses UTF-8 Multibyte characters (null terminated) to represent a string. * - * About encoding on Linux/Gtk & it's relevance to SWT: + * About encoding on Linux/Gtk & it's relevance to SWT: * #################################################### * * UTF-* = variable length encoding. * - * UTF-8 = minimum is 8 bits, max is 6 bytes, but rarely goes beyond 4 bytes. Gtk & most of web uses this. + * UTF-8 = minimum is 8 bits, max is 6 bytes, but rarely goes beyond 4 bytes. Gtk & most of web uses this. * UTF-16 = minimum is 16 bits. Java's string are stored this way. * UTF-16 can be * Big Endian : 65 = 00000000 01000001 # Human friendly, reads left to right. diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/internal/GDBus.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/internal/GDBus.java index 648c9ac8dcd..7cc17b2d6e1 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/internal/GDBus.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/internal/GDBus.java @@ -58,7 +58,7 @@ public static class GDBusMethod { * @param inputArgs 2D array pair of Strings in the format of: (DBUS_TYPE_*, argument_name). * Where argument_name is only so that it's seen by command line by user. * @param outputArgs Same as inputArgs, but for returning values. - * @param userFunction A Function, that you would like to run when the user calls the method over gdbus. + * @param userFunction A Function<Object[],Object[]>, that you would like to run when the user calls the method over gdbus. * Note, input argument(s) are provided as an Object[] array. You need to cast items manually. * Output must always be an Object[] array or null. (E.g Object[] with only 1 element in it). * diff --git a/examples/org.eclipse.swt.examples.views/src/org/eclipse/swt/examples/controls/CustomControlView.java b/examples/org.eclipse.swt.examples.views/src/org/eclipse/swt/examples/controls/CustomControlView.java index a2cbd7cff2b..6f9d0d595de 100644 --- a/examples/org.eclipse.swt.examples.views/src/org/eclipse/swt/examples/controls/CustomControlView.java +++ b/examples/org.eclipse.swt.examples.views/src/org/eclipse/swt/examples/controls/CustomControlView.java @@ -14,8 +14,9 @@ package org.eclipse.swt.examples.controls; -import org.eclipse.swt.examples.controlexample.*; -import org.eclipse.swt.widgets.*; +import org.eclipse.swt.examples.controlexample.CustomControlExample; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.part.ViewPart; /** * CustomControls is a simple demonstration @@ -30,7 +31,7 @@ public class CustomControlView extends ControlView { /** * Create the example * - * @see ViewPart#createPartControl + * @see ViewPart#createPartControl(Composite) */ @Override public void createPartControl(Composite frame) { diff --git a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/accessibility/CTable.java b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/accessibility/CTable.java index a3c12619033..91a038532c8 100644 --- a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/accessibility/CTable.java +++ b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/accessibility/CTable.java @@ -60,9 +60,9 @@ * instead of up-front. This can provide significant performance improvements for * tables that are very large or for which TableItem population is * expensive (for example, retrieving values from an external source). - *

+ *

* Here is an example of using a Table with style VIRTUAL: - *
+ * 
  *  final Table table = new Table (parent, SWT.VIRTUAL | SWT.BORDER);
  *  table.setItemCount (1000000);
  *  table.addListener (SWT.SetData, new Listener () {
@@ -73,20 +73,20 @@
  *          System.out.println (item.getText ());
  *      }
  *  });
- * 
- *

+ *

+ *

* Note that although this class is a subclass of Composite, * it does not normally make sense to add Control children to * it, or set a layout on it, unless implementing something like a cell * editor. - *

+ *

*
*
Styles:
*
SINGLE, MULTI, CHECK, FULL_SELECTION, HIDE_SELECTION, VIRTUAL, NO_SCROLL
*
Events:
*
Selection, DefaultSelection, SetData, MeasureItem, EraseItem, PaintItem
*
- *

+ *

* Note: Only one of the styles SINGLE, and MULTI may be specified. *

* IMPORTANT: This class is not intended to be subclassed. @@ -3844,7 +3844,7 @@ void setHeaderImageHeight (int value) { * it visible may not actually cause it to be displayed. *

* - * @param show the new visibility state + * @param value the new visibility state * * @exception SWTException
    *
  • ERROR_WIDGET_DISPOSED - if the receiver has been disposed
  • @@ -3970,7 +3970,7 @@ boolean setItemHeight (int value) { * it visible may not actually cause it to be displayed. *

    * - * @param show the new visibility state + * @param value the new visibility state * * @exception SWTException
      *
    • ERROR_WIDGET_DISPOSED - if the receiver has been disposed
    • diff --git a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/accessibility/CTableColumn.java b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/accessibility/CTableColumn.java index 5c98a217e71..d95c51a6cd8 100644 --- a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/accessibility/CTableColumn.java +++ b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/accessibility/CTableColumn.java @@ -35,13 +35,13 @@ /** * Instances of this class represent a column in a table widget. - *

      + *
      *
      Styles:
      *
      LEFT, RIGHT, CENTER
      *
      Events:
      *
      Move, Resize, Selection
      *
      - *

      + *

      * Note: Only one of the styles LEFT, RIGHT and CENTER may be specified. *

      * IMPORTANT: This class is not intended to be subclassed. @@ -679,7 +679,7 @@ public void setMoveable (boolean moveable) { * cannot be dragged by the user but may be resized * by the programmer. * - * @param resizable the resize attribute + * @param value the resize attribute * * @exception SWTException

        *
      • ERROR_WIDGET_DISPOSED - if the receiver has been disposed
      • @@ -756,7 +756,7 @@ public void setToolTipText (String string) { /** * Sets the width of the receiver. * - * @param width the new width + * @param value the new width * * @exception SWTException
          *
        • ERROR_WIDGET_DISPOSED - if the receiver has been disposed
        • diff --git a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/accessibility/CTableItem.java b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/accessibility/CTableItem.java index 9d492249a58..792124ac4ff 100644 --- a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/accessibility/CTableItem.java +++ b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/accessibility/CTableItem.java @@ -553,7 +553,7 @@ public Color getBackground () { /** * Returns the background color at the given column index in the receiver. * - * @param index the column index + * @param columnIndex the column index * @return the background color * * @exception SWTException
            @@ -605,7 +605,7 @@ Rectangle getBounds (boolean checkData) { * Returns a rectangle describing the receiver's size and location * relative to its parent at a column in the table. * - * @param index the index that specifies the column + * @param columnIndex the index that specifies the column * @return the receiver's bounding column rectangle * * @exception SWTException
              @@ -818,7 +818,7 @@ Font getFont (boolean checkData) { * Returns the font that the receiver will use to paint textual information * for the specified cell in this item. * - * @param index the column index + * @param columnIndex the column index * @return the receiver's font * * @exception SWTException
                @@ -869,7 +869,7 @@ public Color getForeground () { * * Returns the foreground color at the given column index in the receiver. * - * @param index the column index + * @param columnIndex the column index * @return the foreground color * * @exception SWTException
                  @@ -950,7 +950,7 @@ public Image getImage () { * Returns the image stored at the given column index in the receiver, * or null if the image has not been set or if the column does not exist. * - * @param index the column index + * @param columnIndex the column index * @return the image stored at the given column index in the receiver * * @exception SWTException
                    @@ -975,7 +975,7 @@ Image getImage (int columnIndex, boolean checkData) { * table. An empty rectangle is returned if index exceeds * the index of the table's last column. * - * @param index the index that specifies the column + * @param columnIndex the index that specifies the column * @return the receiver's bounding image rectangle * * @exception SWTException
                      @@ -1096,7 +1096,7 @@ public String getText () { * Returns the text stored at the given column index in the receiver, * or empty string if the text has not been set. * - * @param index the column index + * @param columnIndex the column index * @return the text stored at the given column index in the receiver * * @exception SWTException
                        @@ -1122,7 +1122,7 @@ String getText (int columnIndex, boolean checkData) { * table. An empty rectangle is returned if index exceeds * the index of the table's last column. * - * @param index the index that specifies the column + * @param columnIndex the index that specifies the column * @return the receiver's bounding text rectangle * * @exception SWTException
                          @@ -1653,7 +1653,7 @@ public void setBackground (Color color) { * to the color specified by the argument, or to the default system color for the item * if the argument is null. * - * @param index the column index + * @param columnIndex the column index * @param color the new color (or null) * * @exception IllegalArgumentException
                            @@ -1692,7 +1692,7 @@ public void setBackground (int columnIndex, Color color) { * Sets the checked state of the checkbox for this item. This state change * only applies if the Table was created with the SWT.CHECK style. * - * @param checked the new checked state of the checkbox + * @param value the new checked state of the checkbox * * @exception SWTException
                              *
                            • ERROR_WIDGET_DISPOSED - if the receiver has been disposed
                            • @@ -1768,7 +1768,7 @@ public void setFont (Font font) { * argument, or to the default font for that kind of control if the * argument is null. * - * @param index the column index + * @param columnIndex the column index * @param font the new font (or null) * * @exception IllegalArgumentException
                                @@ -1846,7 +1846,7 @@ public void setForeground (Color color) { * to the color specified by the argument, or to the default system color for the item * if the argument is null. * - * @param index the column index + * @param columnIndex the column index * @param color the new color (or null) * * @exception IllegalArgumentException
                                  @@ -1889,7 +1889,7 @@ public void setForeground (int columnIndex, Color color) { * Sets the grayed state of the checkbox for this item. This state change * only applies if the Table was created with the SWT.CHECK style. * - * @param grayed the new grayed state of the checkbox; + * @param value the new grayed state of the checkbox; * * @exception SWTException
                                    *
                                  • ERROR_WIDGET_DISPOSED - if the receiver has been disposed
                                  • @@ -1916,7 +1916,7 @@ public void setImage (Image value) { /** * Sets the image for multiple columns in the table. * - * @param images the array of new images + * @param value the array of new images * * @exception IllegalArgumentException
                                      *
                                    • ERROR_NULL_ARGUMENT - if the array of images is null
                                    • @@ -1939,8 +1939,8 @@ public void setImage (Image[] value) { /** * Sets the receiver's image at a column. * - * @param index the column index - * @param image the new image + * @param columnIndex the column index + * @param value the new image * * @exception IllegalArgumentException
                                        *
                                      • ERROR_INVALID_ARGUMENT - if the image has been disposed
                                      • @@ -2046,7 +2046,6 @@ public void setImage (int columnIndex, Image value) { * * @param indent the new indent * - *
                                      * @exception SWTException
                                        *
                                      • ERROR_WIDGET_DISPOSED - if the receiver has been disposed
                                      • *
                                      • ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
                                      • @@ -2065,8 +2064,8 @@ public void setImageIndent (int indent) { /** * Sets the receiver's text at a column * - * @param index the column index - * @param string the new text + * @param columnIndex the column index + * @param value the new text * * @exception IllegalArgumentException
                                          *
                                        • ERROR_NULL_ARGUMENT - if the text is null
                                        • @@ -2125,7 +2124,7 @@ public void setText (String value) { /** * Sets the text for multiple columns in the table. * - * @param strings the array of new strings + * @param value the array of new strings * * @exception IllegalArgumentException
                                            *
                                          • ERROR_NULL_ARGUMENT - if the text is null
                                          • diff --git a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/addressbook/DataEntryDialog.java b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/addressbook/DataEntryDialog.java index 18cb76d71ad..3b6a480982e 100644 --- a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/addressbook/DataEntryDialog.java +++ b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/addressbook/DataEntryDialog.java @@ -121,10 +121,7 @@ public String[] getValues() { } /** * Opens the dialog in the given state. Sets Text widget contents - * and dialog behaviour accordingly. - * - * @param dialogState int - * The state the dialog should be opened in. + * and dialog behavior accordingly. */ public String[] open() { createTextWidgets(); diff --git a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/graphics/ColorListener.java b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/graphics/ColorListener.java index 6105285e4d2..811bee1c51d 100644 --- a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/graphics/ColorListener.java +++ b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/graphics/ColorListener.java @@ -17,8 +17,8 @@ /** * Used to perform an action after an item in a Menu has been selected. * - * @see org.eclipse.swt.examples.graphics.ColorMenu.java - * @see org.eclipse.swt.examples.graphics.GraphicsBackground.java + * @see org.eclipse.swt.examples.graphics.ColorMenu + * @see org.eclipse.swt.examples.graphics.GraphicsBackground */ public interface ColorListener { diff --git a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/hoverhelp/HoverHelp.java b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/hoverhelp/HoverHelp.java index 15a313907c1..9451b18d44a 100644 --- a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/hoverhelp/HoverHelp.java +++ b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/hoverhelp/HoverHelp.java @@ -265,7 +265,7 @@ public ToolTipHandler(Shell parent) { /** * Enables customized hover help for a specified control * - * @control the control on which to enable hoverhelp + * @param control the control on which to enable hoverhelp */ public void activateHoverHelp(final Control control) { /* @@ -347,7 +347,6 @@ public void mouseHover (MouseEvent event) { * Sets the location for a hovering shell * @param shell the object that is to hover * @param position the position of a widget to hover over - * @return the top-left location for a hovering box */ private void setHoverLocation(Shell shell, Point position) { Rectangle displayBounds = shell.getDisplay().getBounds(); diff --git a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/ContinuousPaintSession.java b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/ContinuousPaintSession.java index b3225e70dc4..4312e2596dd 100644 --- a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/ContinuousPaintSession.java +++ b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/ContinuousPaintSession.java @@ -162,8 +162,9 @@ private final void mouseSegmentFinished(MouseEvent event) { /** * Draws a continuous segment from points[0] to points[1]. * Assumes points[0] has been drawn already. - * - * @post points[0] will refer to the same point as points[1] + *
                                              + *
                                            • post-condition: points[0] will refer to the same point as points[1]
                                            • + *
                                            */ protected void renderContinuousSegment() { /* A lazy but effective line drawing algorithm */ @@ -239,7 +240,7 @@ private final void abortRetrigger() { /** * Template method: Renders a point. - * @param point, the point to render + * @param point the point to render */ protected abstract void render(Point point); } diff --git a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/DragPaintSession.java b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/DragPaintSession.java index de93ba76e87..509c7692539 100644 --- a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/DragPaintSession.java +++ b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/DragPaintSession.java @@ -40,7 +40,7 @@ public abstract class DragPaintSession extends BasicPaintSession { /** * Constructs a PaintSession. * - * @param getPaintSurface() the drawing surface to use + * @param paintSurface the drawing surface to use */ protected DragPaintSession(PaintSurface paintSurface) { super(paintSurface); diff --git a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/EllipseFigure.java b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/EllipseFigure.java index 5510c05c3d4..e229069e320 100644 --- a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/EllipseFigure.java +++ b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/EllipseFigure.java @@ -14,8 +14,10 @@ package org.eclipse.swt.examples.paint; -import org.eclipse.swt.*; -import org.eclipse.swt.graphics.*; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.Rectangle; +import org.eclipse.swt.graphics.Region; /** * 2D Ellipse object @@ -28,7 +30,8 @@ public class EllipseFigure extends Figure { * These objects are defined by any two diametrically opposing corners of a box * bounding the ellipse. * - * @param color the color for this object + * @param foregroundColor the foreground color for this object + * @param backgroundColor the background color for this object * @param lineStyle the line style for this object * @param x1 the virtual X coordinate of the first corner * @param y1 the virtual Y coordinate of the first corner diff --git a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/LineFigure.java b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/LineFigure.java index 41a4b0b214e..97bfc8fd10b 100644 --- a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/LineFigure.java +++ b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/LineFigure.java @@ -14,8 +14,10 @@ package org.eclipse.swt.examples.paint; -import org.eclipse.swt.*; -import org.eclipse.swt.graphics.*; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.graphics.Region; /** * 2D Line object @@ -27,7 +29,8 @@ public class LineFigure extends Figure { * Constructs a Line * These objects are defined by their two end-points. * - * @param color the color for this object + * @param foregroundColor the foreground color for this object + * @param backgroundColor the background color for this object * @param lineStyle the line style for this object * @param x1 the virtual X coordinate of the first end-point * @param y1 the virtual Y coordinate of the first end-point diff --git a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/PaintSurface.java b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/PaintSurface.java index 16ac9d46797..50455c66fd9 100644 --- a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/PaintSurface.java +++ b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/PaintSurface.java @@ -64,7 +64,7 @@ public class PaintSurface { * and may have SWT.V_SCROLL and/or SWT.H_SCROLL. *

                                            * @param paintCanvas the Canvas object in which to render - * @param paintStatus the PaintStatus object to use for providing user feedback + * @param statusText the status text to use for providing user feedback * @param fillColor the color to fill the canvas with initially */ public PaintSurface(Canvas paintCanvas, Text statusText, Color fillColor) { @@ -374,7 +374,7 @@ public boolean isRubberbandHidden() { /** * Handles a horizontal scroll event * - * @param scrollbar the horizontal scroll bar that posted this event + * @param scrollBar the horizontal scroll bar that posted this event */ public void scrollHorizontally(ScrollBar scrollBar) { if (image == null) return; @@ -393,7 +393,7 @@ public void scrollHorizontally(ScrollBar scrollBar) { /** * Handles a vertical scroll event * - * @param scrollbar the vertical scroll bar that posted this event + * @param scrollBar the vertical scroll bar that posted this event */ public void scrollVertically(ScrollBar scrollBar) { if (image == null) return; diff --git a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/PencilTool.java b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/PencilTool.java index a252da53e91..81022348706 100644 --- a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/PencilTool.java +++ b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/PencilTool.java @@ -26,7 +26,7 @@ public class PencilTool extends ContinuousPaintSession implements PaintTool { * Constructs a pencil tool. * * @param toolSettings the new tool settings - * @param getPaintSurface() the PaintSurface we will render on. + * @param paintSurface the PaintSurface we will render on. */ public PencilTool(ToolSettings toolSettings, PaintSurface paintSurface) { super(paintSurface); diff --git a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/RectangleFigure.java b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/RectangleFigure.java index 7d28561614d..47413bddd47 100644 --- a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/RectangleFigure.java +++ b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/RectangleFigure.java @@ -14,8 +14,10 @@ package org.eclipse.swt.examples.paint; -import org.eclipse.swt.*; -import org.eclipse.swt.graphics.*; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.Rectangle; +import org.eclipse.swt.graphics.Region; /** * 2D Rectangle object @@ -27,7 +29,8 @@ public class RectangleFigure extends Figure { * Constructs a Rectangle * These objects are defined by any two diametrically opposing corners. * - * @param color the color for this object + * @param foregroundColor the foreground color for this object + * @param backgroundColor the background color for this object * @param lineStyle the line style for this object * @param x1 the virtual X coordinate of the first corner * @param y1 the virtual Y coordinate of the first corner diff --git a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/RoundedRectangleFigure.java b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/RoundedRectangleFigure.java index 79d297aa115..0071cc30e3a 100644 --- a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/RoundedRectangleFigure.java +++ b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/RoundedRectangleFigure.java @@ -14,8 +14,10 @@ package org.eclipse.swt.examples.paint; -import org.eclipse.swt.*; -import org.eclipse.swt.graphics.*; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.Rectangle; +import org.eclipse.swt.graphics.Region; /** * 2D Rectangle object @@ -27,7 +29,8 @@ public class RoundedRectangleFigure extends Figure { * Constructs a Rectangle * These objects are defined by any two diametrically opposing corners. * - * @param color the color for this object + * @param foregroundColor the foreground color for this object + * @param backgroundColor the background color for this object * @param lineStyle the line style for this object * @param x1 the virtual X coordinate of the first corner * @param y1 the virtual Y coordinate of the first corner diff --git a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/SolidPolygonFigure.java b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/SolidPolygonFigure.java index 247ef8b6d80..3a3c0210e4a 100644 --- a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/SolidPolygonFigure.java +++ b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/paint/SolidPolygonFigure.java @@ -14,7 +14,9 @@ package org.eclipse.swt.examples.paint; -import org.eclipse.swt.graphics.*; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.graphics.Region; /** * 2D Line object @@ -28,7 +30,7 @@ public class SolidPolygonFigure extends Figure { * * @param color the color for this object * @param vertices the array of vertices making up the polygon - * @param numPoint the number of valid points in the array (n >= 3) + * @param numPoints the number of valid points in the array (n >= 3) */ public SolidPolygonFigure(Color color, Point[] vertices, int numPoints) { this.color = color; diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug516480_KeydownRussianlayout.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug516480_KeydownRussianlayout.java index 5a1a504cdf4..7e94983e63d 100644 --- a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug516480_KeydownRussianlayout.java +++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug516480_KeydownRussianlayout.java @@ -14,14 +14,16 @@ package org.eclipse.swt.tests.gtk.snippets; import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.*; -import org.eclipse.swt.layout.*; -import org.eclipse.swt.widgets.*; - +import org.eclipse.swt.custom.StyledText; +import org.eclipse.swt.layout.FillLayout; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Shell; + +/** + * @author Thomas Singer + */ public class Bug516480_KeydownRussianlayout { - /** - * @author Thomas Singer - */ + public static void main(String[] args) { final Display display = new Display(); @@ -31,12 +33,9 @@ public static void main(String[] args) { final StyledText text = new StyledText(shell, SWT.BORDER); text.setText("hello world"); - text.addListener(SWT.KeyDown, new Listener() { - @Override - public void handleEvent(Event event) { - System.out.println("event.character = " + (int)event.character); - System.out.println("event.keyCode = " + event.keyCode); - } + text.addListener(SWT.KeyDown, event -> { + System.out.println("event.character = " + (int)event.character); + System.out.println("event.keyCode = " + event.keyCode); }); shell.setSize(300, 200); diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug518961_RTTest.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug518961_RTTest.java index 41a2d29832f..032df4bba1c 100644 --- a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug518961_RTTest.java +++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug518961_RTTest.java @@ -26,7 +26,7 @@ 1) Uncomment line with "UNCOMMENT THIS". 2) Get hold of nebula rich text project. (found inside org.eclipse.nebula) edit .classpath and add: - + {@code } (This can be done via auto fix. Before Fix: When running, error messages thrown into console. diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug546961_Scrollbar_Slider_Popup_Shell.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug546961_Scrollbar_Slider_Popup_Shell.java index 9b3909a12a6..0189e328306 100644 --- a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug546961_Scrollbar_Slider_Popup_Shell.java +++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug546961_Scrollbar_Slider_Popup_Shell.java @@ -27,12 +27,12 @@ * no longer paint sliders correctly when scrolling. *

                                            * Steps to reproduce: + *

                                            *
                                              *
                                            1. Run the snippet.
                                            2. *
                                            3. Resize the pop-up {@link Shell}, so that scrollbars can still be used.
                                            4. *
                                            5. Scroll with mouse drag, observe that the sliders of the scrollbars don't move.
                                            6. *
                                            - *

                                            * Expected results: Scrollbar sliders move during scrolling. * Actual results: Scrollbar sliders don't move when scrolling. */ diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug573697_MenuBar_CrashShellReparent.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug573697_MenuBar_CrashShellReparent.java index d8ef6bb0edf..f8df5a15b5d 100644 --- a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug573697_MenuBar_CrashShellReparent.java +++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug573697_MenuBar_CrashShellReparent.java @@ -28,11 +28,11 @@ * destroyed {@link Decorations#accelGroup} while still in use by GTK. *

                                            * Steps to reproduce: + *

                                            *
                                              *
                                            1. Run the snippet.
                                            2. *
                                            3. No JDK crash should occur.
                                            4. *
                                            - *

                                            * Expected results: Standard out has text "No crash occurred.", the JDK did not crash. * Actual results: The JDK crashed in GTK+ method {@code g_type_check_instance()}. */ diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug573697_MenuBar_MenuDispose.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug573697_MenuBar_MenuDispose.java index dac3a83feef..7531c610b33 100644 --- a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug573697_MenuBar_MenuDispose.java +++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug573697_MenuBar_MenuDispose.java @@ -27,11 +27,11 @@ * standard error stream. *

                                            * Steps to reproduce: + *

                                            *
                                              *
                                            1. Run the snippet.
                                            2. *
                                            3. No JDK crash should occur, no {@code GLib CRITICAL} errors should be printed on standard error stream.
                                            4. *
                                            - *

                                            * Expected results: Standard error has no {@code GLib CRITICAL} errors, the JDK did not crash. * Actual results: The JDK either crashed or {@code GLib CRITICAL} errors are printed on standard error stream. */ diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug573697_MenuBar_MenuLeak.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug573697_MenuBar_MenuLeak.java index 246b17bf6f4..dcc8256f804 100644 --- a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug573697_MenuBar_MenuLeak.java +++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug573697_MenuBar_MenuLeak.java @@ -27,11 +27,11 @@ * not being unreferenced. *

                                            * Steps to reproduce: + *

                                            *
                                              *
                                            1. Run the snippet.
                                            2. *
                                            3. No native memory leak should be detected by e.g. {code valgrind} or {@code jemalloc}.
                                            4. *
                                            - *

                                            * Expected results: No native memory leak should be detected by e.g. {code valgrind} or {@code jemalloc}. * Actual results: {@code jemalloc} reports a native memory leak, e.g.: *
                                            diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug579283_TestToolbarOverflow_itemEnablement.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug579283_TestToolbarOverflow_itemEnablement.java
                                            index 3826a9bafcf..a4a983e85b5 100644
                                            --- a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug579283_TestToolbarOverflow_itemEnablement.java
                                            +++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug579283_TestToolbarOverflow_itemEnablement.java
                                            @@ -27,10 +27,11 @@
                                             import org.eclipse.swt.widgets.ToolItem;
                                             
                                             /**
                                            - * Description: Toolbar items in a toolbar overflow submenu (enabled with style flag {@link SWT.WRAP})
                                            + * Description: Toolbar items in a toolbar overflow submenu (enabled with style flag {@link SWT#WRAP})
                                              * do not show correct image enablement.
                                              * 

                                            * Steps to reproduce: + *

                                            *
                                              *
                                            1. Run the snippet.
                                            2. *
                                            3. Resize the {@link Shell}, so that only some of the icons are visible.
                                            4. @@ -40,7 +41,6 @@ *
                                            5. Click one of the overflow submenu items.
                                            6. *
                                            7. Show the overflow menu again, observe that the image of the clicked item is not changed.
                                            8. *
                                            - *

                                            * Expected results: Images of disabled buttons should appear grayed out. * Images should change on overflow submenu item click. * Text and tooltip of an overflow submenu item should also change on click. diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Issue346_JvmCrashRemovingMenuItemAccelerators.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Issue346_JvmCrashRemovingMenuItemAccelerators.java index 32b16e01eb7..6f9cd74a460 100644 --- a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Issue346_JvmCrashRemovingMenuItemAccelerators.java +++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Issue346_JvmCrashRemovingMenuItemAccelerators.java @@ -29,9 +29,7 @@ *
                                          • Set SWT_GTK4=1 in the environment to run on GTK4
                                          • *
                                          • Run the snippet
                                          • *
                                          • Click the menu items a few times and it will eventually crash with the - * following segfault:
                                          • - *

                                            - * + * following segfault: *

                                              * Native frames: (J=compiled Java code, A=aot compiled Java code, j=interpreted, Vv=VM code, C=native code)
                                              * C  [libgtk-4.so.1+0x213053]  gtk_shortcut_controller_remove_shortcut+0x53
                                            @@ -40,6 +38,7 @@
                                              * j  org.eclipse.swt.internal.gtk4.GTK4.gtk_shortcut_controller_remove_shortcut(JJ)V+0
                                              * j  org.eclipse.swt.widgets.MenuItem.setAccelerator(I)V+39
                                              * 
                                            + * * * * Tested on GTK 4.6.8 (Fedora 36) diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/manualJUnit/MJ_Template.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/manualJUnit/MJ_Template.java index 35c2ad2356b..15b1bc75352 100644 --- a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/manualJUnit/MJ_Template.java +++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/manualJUnit/MJ_Template.java @@ -21,7 +21,7 @@ import org.junit.Test; import org.junit.runners.MethodSorters; -/** Convenience class for easy copy & paste */ +/** Convenience class for easy copy & paste */ @FixMethodOrder(MethodSorters.JVM) public class MJ_Template extends MJ_root { diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/manualJUnit/MJ_Tree.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/manualJUnit/MJ_Tree.java index bb284110c12..e3ea5725329 100644 --- a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/manualJUnit/MJ_Tree.java +++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/manualJUnit/MJ_Tree.java @@ -36,7 +36,7 @@ import org.junit.Test; import org.junit.runners.MethodSorters; -/** Convenience class for easy copy & paste */ +/** Convenience class for easy copy & paste */ @FixMethodOrder(MethodSorters.JVM) public class MJ_Tree extends MJ_root { diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/SwtTestUtil.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/SwtTestUtil.java index fc3bdeaa009..122e4a1eade 100644 --- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/SwtTestUtil.java +++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/SwtTestUtil.java @@ -452,7 +452,6 @@ public static boolean waitEvent(Runnable trigger, Control control, int swtEvent, * arrive *before* you call this function, and it will * fail to receive event. * @param shell the Shell to wait for - * @return true if Shell became active within timeout */ public static void waitShellActivate(Runnable trigger, Shell shell) { final int timeoutInMsec = 3000; diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java index 35adebff18c..87b73ed8d1f 100644 --- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java +++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java @@ -1031,7 +1031,7 @@ public void test_StatusTextListener_addAndRemove() { * 3) Upon compleation of page load, move cursor across whole shell. * (Note, in current jUnit, browser sometimes only takes up half the shell). * 4) StatusTextListener should get triggered. Test passes. - * 5) Else timeout & fail. + * 5) Else timeout and fail. * * Set variable "debug_show_browser" to true to see this being performed at human-observable speed. * @@ -2242,8 +2242,8 @@ function callCustomFunction() { /** * Test for stacked (cascaded) calls between Java and JS i.e. java calls JS * which calls Java which calls JS and so on. - * - * @see https://github.com/eclipse-platform/eclipse.platform.swt/issues/1919 + *

                                            + * See {@code https://github.com/eclipse-platform/eclipse.platform.swt/issues/1919} * */ @Test diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabFolder.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabFolder.java index f4900529746..536d4f9715c 100644 --- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabFolder.java +++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabFolder.java @@ -280,8 +280,8 @@ public void test_checkSize() { * * We define two {@link CTabFolder tab folders}, of which one has a nested tab folder. * We validate that selecting the nested tab does not break selection highlight for the top-level tabs. - * - * @see org.eclipse.swt.tests.manual.Bug528251_CTabFolder_nested_highlighting + *

                                            + * See also {@code org.eclipse.swt.tests.manual.Bug528251_CTabFolder_nested_highlighting} */ @Test public void test_nestedTabHighlighting () { diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_List.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_List.java index bc6f2480d32..0f11a00387f 100644 --- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_List.java +++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_List.java @@ -627,8 +627,6 @@ public void test_getSelection() { /** * Returns the number of selected items contained in the receiver. * - * @return the number of selected items - * * @exception SWTException

                                              *
                                            • ERROR_WIDGET_DISPOSED - if the receiver has been disposed
                                            • *
                                            • ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
                                            • @@ -2343,7 +2341,7 @@ public void test_showSelection() { /* custom */ List list; /** - * Test if 'deselect(u, v)' is the same as 'for (i=u; i<=v; ++i) deselect(i);' + * Test if {@code deselect(u, v)} is the same as {@code for (i=u; i<=v; ++i) deselect(i);} */ protected void deselectII_helper( String[] items, @@ -2383,8 +2381,8 @@ protected List setSingleList() { return list; } /** - * Similar to deselectII_helper, checks if select(u, v) is the same as - * for (i=u; i<=v; ++i) select(i) + * Similar to deselectII_helper, checks if {@code select(u, v)} is the same as + * {@code for (i=u; i<=v; ++i) select(i)} */ protected void selectII_helper( String[] items, diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_MessageBox.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_MessageBox.java index 52de7765744..2fe0304dc6b 100644 --- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_MessageBox.java +++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_MessageBox.java @@ -59,9 +59,6 @@ public void test_ConstructorLorg_eclipse_swt_widgets_Shell(){ /** * Makes the dialog visible and brings it to the front * of the display. - * - * @return the ID of the button that was selected to dismiss the - * message box (e.g. SWT.OK, SWT.CANCEL, etc...) */ @Test public void test_open(){ diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/memoryleak/Test_Memory_Leak.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/memoryleak/Test_Memory_Leak.java index 326a7cc3d0e..ac03dbfc945 100644 --- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/memoryleak/Test_Memory_Leak.java +++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/memoryleak/Test_Memory_Leak.java @@ -10,7 +10,7 @@ /** * Test Widgets for memory leaks. Used when updating dispose logic. * - * Due to lack of better alternative, the current mechanism creates & disposes a widget in a loop. + * Due to lack of better alternative, the current mechanism creates and disposes a widget in a loop. * If the test makes it to the end without crashing your system, then you have no (major?) leaks. * * Run these on demand if updating dispose logic of a particular widget. @@ -35,7 +35,7 @@ public class Test_Memory_Leak { * * If you have a memory leak in the dispoal logic, then the loop eventually slows down and the test crashes. * You would see 'memory pressure' errors. The Java process of the jUnit would grow significantly (100's of mbs) - * On my machine with Intel i7 & 16 GB of ram, this occurs at the ~420th iteration. + * On my machine with Intel i7 and 16 GB of ram, this occurs at the ~420th iteration. * (although with my testing, without memory leaks, it grows a little bit (by 100mb by end of test)). */ @Test From fd68b05dfa3f1e55be7dd0db9be5424f7bf9b99e Mon Sep 17 00:00:00 2001 From: Hannes Wellmann Date: Thu, 24 Apr 2025 09:27:02 +0200 Subject: [PATCH 032/119] Support disabling the GTK SessionManagerDBus via environment variables For example this simplifies disabling the SessionManagerDBus in CI environments where no bus is available. --- .../gtk/org/eclipse/swt/internal/SessionManagerDBus.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/internal/SessionManagerDBus.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/internal/SessionManagerDBus.java index 57e4c036d1b..c7e9f044a82 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/internal/SessionManagerDBus.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/internal/SessionManagerDBus.java @@ -111,7 +111,8 @@ public void remove() { public SessionManagerDBus() { // Allow to disable session manager, for example in case it conflicts with // session manager connection implemented in application itself. - boolean isDisabled = System.getProperty("org.eclipse.swt.internal.SessionManagerDBus.disable") != null; + boolean isDisabled = System.getProperty("org.eclipse.swt.internal.SessionManagerDBus.disable") != null + || System.getenv("org.eclipse.swt.internal.SessionManagerDBus.disable") != null; if (isDisabled) return; start(); From e71274c78de6034b8fe2a000474315175981ca44 Mon Sep 17 00:00:00 2001 From: Ed Merks Date: Fri, 2 May 2025 08:25:43 +0200 Subject: [PATCH 033/119] Force qualifier updates https://github.com/eclipse-platform/eclipse.platform.releng.aggregator/issues/3011 --- .../forceQualifierUpdate.txt | 1 + .../org.eclipse.swt.cocoa.macosx.x86_64/forceQualifierUpdate.txt | 1 + .../org.eclipse.swt.gtk.linux.aarch64/forceQualifierUpdate.txt | 1 + .../forceQualifierUpdate.txt | 1 + .../org.eclipse.swt.gtk.linux.ppc64le/forceQualifierUpdate.txt | 1 + .../org.eclipse.swt.gtk.linux.riscv64/forceQualifierUpdate.txt | 1 + .../org.eclipse.swt.gtk.linux.x86_64/forceQualifierUpdate.txt | 1 + .../org.eclipse.swt.win32.win32.aarch64/forceQualifierUpdate.txt | 1 + .../org.eclipse.swt.win32.win32.x86_64/forceQualifierUpdate.txt | 1 + bundles/org.eclipse.swt/forceQualifierUpdate.txt | 1 + 10 files changed, 10 insertions(+) create mode 100644 binaries/org.eclipse.swt.cocoa.macosx.aarch64/forceQualifierUpdate.txt create mode 100644 binaries/org.eclipse.swt.cocoa.macosx.x86_64/forceQualifierUpdate.txt create mode 100644 binaries/org.eclipse.swt.gtk.linux.loongarch64/forceQualifierUpdate.txt diff --git a/binaries/org.eclipse.swt.cocoa.macosx.aarch64/forceQualifierUpdate.txt b/binaries/org.eclipse.swt.cocoa.macosx.aarch64/forceQualifierUpdate.txt new file mode 100644 index 00000000000..7a4bf9f709b --- /dev/null +++ b/binaries/org.eclipse.swt.cocoa.macosx.aarch64/forceQualifierUpdate.txt @@ -0,0 +1 @@ +https://github.com/eclipse-platform/eclipse.platform.releng.aggregator/issues/3011 diff --git a/binaries/org.eclipse.swt.cocoa.macosx.x86_64/forceQualifierUpdate.txt b/binaries/org.eclipse.swt.cocoa.macosx.x86_64/forceQualifierUpdate.txt new file mode 100644 index 00000000000..7a4bf9f709b --- /dev/null +++ b/binaries/org.eclipse.swt.cocoa.macosx.x86_64/forceQualifierUpdate.txt @@ -0,0 +1 @@ +https://github.com/eclipse-platform/eclipse.platform.releng.aggregator/issues/3011 diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/forceQualifierUpdate.txt b/binaries/org.eclipse.swt.gtk.linux.aarch64/forceQualifierUpdate.txt index 75709314bdd..f844a1dc494 100644 --- a/binaries/org.eclipse.swt.gtk.linux.aarch64/forceQualifierUpdate.txt +++ b/binaries/org.eclipse.swt.gtk.linux.aarch64/forceQualifierUpdate.txt @@ -1 +1,2 @@ https://github.com/eclipse-platform/eclipse.platform.releng.aggregator/issues/2595 +https://github.com/eclipse-platform/eclipse.platform.releng.aggregator/issues/3011 diff --git a/binaries/org.eclipse.swt.gtk.linux.loongarch64/forceQualifierUpdate.txt b/binaries/org.eclipse.swt.gtk.linux.loongarch64/forceQualifierUpdate.txt new file mode 100644 index 00000000000..7a4bf9f709b --- /dev/null +++ b/binaries/org.eclipse.swt.gtk.linux.loongarch64/forceQualifierUpdate.txt @@ -0,0 +1 @@ +https://github.com/eclipse-platform/eclipse.platform.releng.aggregator/issues/3011 diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/forceQualifierUpdate.txt b/binaries/org.eclipse.swt.gtk.linux.ppc64le/forceQualifierUpdate.txt index 75709314bdd..f844a1dc494 100644 --- a/binaries/org.eclipse.swt.gtk.linux.ppc64le/forceQualifierUpdate.txt +++ b/binaries/org.eclipse.swt.gtk.linux.ppc64le/forceQualifierUpdate.txt @@ -1 +1,2 @@ https://github.com/eclipse-platform/eclipse.platform.releng.aggregator/issues/2595 +https://github.com/eclipse-platform/eclipse.platform.releng.aggregator/issues/3011 diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/forceQualifierUpdate.txt b/binaries/org.eclipse.swt.gtk.linux.riscv64/forceQualifierUpdate.txt index 75709314bdd..f844a1dc494 100644 --- a/binaries/org.eclipse.swt.gtk.linux.riscv64/forceQualifierUpdate.txt +++ b/binaries/org.eclipse.swt.gtk.linux.riscv64/forceQualifierUpdate.txt @@ -1 +1,2 @@ https://github.com/eclipse-platform/eclipse.platform.releng.aggregator/issues/2595 +https://github.com/eclipse-platform/eclipse.platform.releng.aggregator/issues/3011 diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/forceQualifierUpdate.txt b/binaries/org.eclipse.swt.gtk.linux.x86_64/forceQualifierUpdate.txt index 75709314bdd..f844a1dc494 100644 --- a/binaries/org.eclipse.swt.gtk.linux.x86_64/forceQualifierUpdate.txt +++ b/binaries/org.eclipse.swt.gtk.linux.x86_64/forceQualifierUpdate.txt @@ -1 +1,2 @@ https://github.com/eclipse-platform/eclipse.platform.releng.aggregator/issues/2595 +https://github.com/eclipse-platform/eclipse.platform.releng.aggregator/issues/3011 diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/forceQualifierUpdate.txt b/binaries/org.eclipse.swt.win32.win32.aarch64/forceQualifierUpdate.txt index 75709314bdd..f844a1dc494 100644 --- a/binaries/org.eclipse.swt.win32.win32.aarch64/forceQualifierUpdate.txt +++ b/binaries/org.eclipse.swt.win32.win32.aarch64/forceQualifierUpdate.txt @@ -1 +1,2 @@ https://github.com/eclipse-platform/eclipse.platform.releng.aggregator/issues/2595 +https://github.com/eclipse-platform/eclipse.platform.releng.aggregator/issues/3011 diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/forceQualifierUpdate.txt b/binaries/org.eclipse.swt.win32.win32.x86_64/forceQualifierUpdate.txt index 75709314bdd..f844a1dc494 100644 --- a/binaries/org.eclipse.swt.win32.win32.x86_64/forceQualifierUpdate.txt +++ b/binaries/org.eclipse.swt.win32.win32.x86_64/forceQualifierUpdate.txt @@ -1 +1,2 @@ https://github.com/eclipse-platform/eclipse.platform.releng.aggregator/issues/2595 +https://github.com/eclipse-platform/eclipse.platform.releng.aggregator/issues/3011 diff --git a/bundles/org.eclipse.swt/forceQualifierUpdate.txt b/bundles/org.eclipse.swt/forceQualifierUpdate.txt index 07d7b4dfdbe..6061536f9d5 100644 --- a/bundles/org.eclipse.swt/forceQualifierUpdate.txt +++ b/bundles/org.eclipse.swt/forceQualifierUpdate.txt @@ -2,3 +2,4 @@ https://github.com/eclipse-platform/eclipse.platform.swt/issues/1093 Pick-up legal file unification in native fragments from: https://github.com/eclipse-platform/eclipse.platform.swt/pull/1144 https://github.com/eclipse-platform/eclipse.platform.releng.aggregator/issues/2595 Pick-up localization file fixes in native fragments in: https://github.com/eclipse-platform/eclipse.platform.swt/pull/2007 +https://github.com/eclipse-platform/eclipse.platform.releng.aggregator/issues/3011 From 3f189808fba16f90098802f8438c0df2ae8f6379 Mon Sep 17 00:00:00 2001 From: Hannes Wellmann Date: Fri, 2 May 2025 10:29:58 +0200 Subject: [PATCH 034/119] Refine custom @field and @method javadoc tag heads Follow-up on: - https://github.com/eclipse-platform/eclipse.platform.swt/pull/2079 --- binaries/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/binaries/pom.xml b/binaries/pom.xml index 54c2920b8f0..055cdfb9f74 100644 --- a/binaries/pom.xml +++ b/binaries/pom.xml @@ -91,12 +91,12 @@ field f - Native field + Native code field method m - Native method + Native code method From 878f7b3b64a6aded59b3dcc1f55f3937b896f1a3 Mon Sep 17 00:00:00 2001 From: Hannes Wellmann Date: Fri, 2 May 2025 12:09:03 +0200 Subject: [PATCH 035/119] Enable javadoc validation of examples in workspace and fix more uncovered javadoc problems. --- binaries/.settings/org.eclipse.jdt.core.prefs | 2 +- .../org.eclipse.jdt.core.prefs | 14 +++++++++++ .../swt/examples/ole/win32/OleWebBrowser.java | 9 +++----- .../swt/examples/graphics/ColorMenu.java | 2 +- .../Bug491167_TableCursorScrolling.java | 23 +++++++++++++------ .../Bug573697_MenuBar_CrashShellReparent.java | 5 ++-- .../snippets/Bug573697_MenuBar_MenuLeak.java | 4 ++-- .../manual/Issue0445_HiDPISmoothScaling.java | 5 ++-- 8 files changed, 42 insertions(+), 22 deletions(-) diff --git a/binaries/.settings/org.eclipse.jdt.core.prefs b/binaries/.settings/org.eclipse.jdt.core.prefs index ee1fd8be6de..8487c861252 100644 --- a/binaries/.settings/org.eclipse.jdt.core.prefs +++ b/binaries/.settings/org.eclipse.jdt.core.prefs @@ -46,7 +46,7 @@ org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning org.eclipse.jdt.core.compiler.problem.invalidJavadoc=error org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled -org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore diff --git a/examples/.settings_shared/org.eclipse.jdt.core.prefs b/examples/.settings_shared/org.eclipse.jdt.core.prefs index 8ed1a2c764a..8c07efd0dfe 100644 --- a/examples/.settings_shared/org.eclipse.jdt.core.prefs +++ b/examples/.settings_shared/org.eclipse.jdt.core.prefs @@ -19,6 +19,7 @@ org.eclipse.jdt.core.compiler.compliance=17 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.doc.comment.support=enabled org.eclipse.jdt.core.compiler.problem.APILeak=warning org.eclipse.jdt.core.compiler.problem.annotatedTypeArgumentToUnannotated=info org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning @@ -47,12 +48,25 @@ org.eclipse.jdt.core.compiler.problem.incompatibleOwningContract=warning org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=info org.eclipse.jdt.core.compiler.problem.insufficientResourceAnalysis=warning +org.eclipse.jdt.core.compiler.problem.invalidJavadoc=error +org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore +org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore +org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled +org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public +org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag +org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning +org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled +org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled +org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning diff --git a/examples/org.eclipse.swt.examples.ole.win32/src/org/eclipse/swt/examples/ole/win32/OleWebBrowser.java b/examples/org.eclipse.swt.examples.ole.win32/src/org/eclipse/swt/examples/ole/win32/OleWebBrowser.java index 52931b9d485..a51d60a0023 100644 --- a/examples/org.eclipse.swt.examples.ole.win32/src/org/eclipse/swt/examples/ole/win32/OleWebBrowser.java +++ b/examples/org.eclipse.swt.examples.ole.win32/src/org/eclipse/swt/examples/ole/win32/OleWebBrowser.java @@ -14,7 +14,9 @@ package org.eclipse.swt.examples.ole.win32; -import org.eclipse.swt.ole.win32.*; +import org.eclipse.swt.ole.win32.OLE; +import org.eclipse.swt.ole.win32.OleAutomation; +import org.eclipse.swt.ole.win32.Variant; /** * Wrapper for an OleAutomation object used to send commands @@ -76,7 +78,6 @@ class OleWebBrowser { * * * @param oleAutomation the OleAutomation object for this control. - * @param oleControlSite the OleControlSite object for this control. */ public OleWebBrowser(OleAutomation oleAutomation) { this.oleAutomation = oleAutomation; @@ -207,8 +208,6 @@ public void Navigate(String url) { /** * Refreshes the currently viewed page. - * - * @return the platform-defined result code for the "Refresh" method invocation */ public void Refresh(){ // dispid= 4294966746, type=METHOD, name="Refresh" @@ -219,8 +218,6 @@ public void Refresh(){ /** * Aborts loading of the currnet page. - * - * @return the platform-defined result code for the "Stop" method invocation */ public void Stop() { // dispid=106, type=METHOD, name="Stop" diff --git a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/graphics/ColorMenu.java b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/graphics/ColorMenu.java index 185e95880a7..3e2be7f1356 100644 --- a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/graphics/ColorMenu.java +++ b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/graphics/ColorMenu.java @@ -282,7 +282,7 @@ public MenuItemListener(Control parent){ * * @param cl * A ColorListener - * @see org.eclipse.swt.examples.graphics.ColorListener.java + * @see org.eclipse.swt.examples.graphics.ColorListener */ public void setColorListener(ColorListener cl) { this.colorListener = cl; diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug491167_TableCursorScrolling.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug491167_TableCursorScrolling.java index 64660d3a423..fed8ce69685 100644 --- a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug491167_TableCursorScrolling.java +++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug491167_TableCursorScrolling.java @@ -15,10 +15,19 @@ import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.*; -import org.eclipse.swt.events.*; -import org.eclipse.swt.layout.*; -import org.eclipse.swt.widgets.*; +import org.eclipse.swt.custom.ControlEditor; +import org.eclipse.swt.custom.TableCursor; +import org.eclipse.swt.events.KeyAdapter; +import org.eclipse.swt.events.KeyEvent; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.layout.FillLayout; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; +import org.eclipse.swt.widgets.TableItem; +import org.eclipse.swt.widgets.Text; /** * This class demonstrates TableCursor @@ -47,8 +56,8 @@ public void run() { /** * Creates the main window's contents - * - * @param widget.shell + * + * @param shell * the main window */ private void createContents(Shell shell) { @@ -128,7 +137,7 @@ public void keyPressed(KeyEvent event) { /** * The application entry point - * + * * @param args * the command line arguments */ diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug573697_MenuBar_CrashShellReparent.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug573697_MenuBar_CrashShellReparent.java index f8df5a15b5d..a0048422bbb 100644 --- a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug573697_MenuBar_CrashShellReparent.java +++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug573697_MenuBar_CrashShellReparent.java @@ -24,8 +24,9 @@ /** * Description: After fixing the memory leak in bug 573697, we observed crashes - * on shell re-parenting. In particular, {@link Decorations#fixAccelGroup()} - * destroyed {@link Decorations#accelGroup} while still in use by GTK. + * on shell re-parenting. In particular, in the GTK implementation of + * {@link Decorations}'s the method {@code fixAccelGroup()} destroyed + * {@code accelGroup} while still in use by GTK. *

                                              * Steps to reproduce: *

                                              diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug573697_MenuBar_MenuLeak.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug573697_MenuBar_MenuLeak.java index dcc8256f804..ab6b4be80b0 100644 --- a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug573697_MenuBar_MenuLeak.java +++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug573697_MenuBar_MenuLeak.java @@ -23,8 +23,8 @@ import org.eclipse.swt.widgets.Shell; /** - * Description: In bug 573697, we observed a native memory leak cased by {@link Decorations#accelGroup} - * not being unreferenced. + * Description: In bug 573697, we observed a native memory leak caused in the GTK implementation of {@link Decorations} + * by the field {@code accelGroup} not being unreferenced. *

                                              * Steps to reproduce: *

                                              diff --git a/tests/org.eclipse.swt.tests/ManualTests/org/eclipse/swt/tests/manual/Issue0445_HiDPISmoothScaling.java b/tests/org.eclipse.swt.tests/ManualTests/org/eclipse/swt/tests/manual/Issue0445_HiDPISmoothScaling.java index 936eaf7e2f0..88bdb17c031 100644 --- a/tests/org.eclipse.swt.tests/ManualTests/org/eclipse/swt/tests/manual/Issue0445_HiDPISmoothScaling.java +++ b/tests/org.eclipse.swt.tests/ManualTests/org/eclipse/swt/tests/manual/Issue0445_HiDPISmoothScaling.java @@ -42,9 +42,8 @@ *

                                              * On Linux you may need to run this with GDK_SCALE=2 set in the environment. * - * @see Issue - * #445 for details. + * + * For details see: {@code https://github.com/eclipse-platform/eclipse.platform.swt/issues/445}. */ @SuppressWarnings("restriction") public class Issue0445_HiDPISmoothScaling { From cdffabb7e99d06173977804e58698a8040a10ab3 Mon Sep 17 00:00:00 2001 From: Hannes Wellmann Date: Fri, 2 May 2025 14:23:54 +0200 Subject: [PATCH 036/119] [Build] Extend list of kept builds but reduce artifacts kept Keep the metadata of more builds but reduce the number of builds for which artifacts are kept. This reduces the overall storage occupation but lengths the trend lists. --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index df61a78b02a..21eea26b204 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -89,7 +89,7 @@ pipeline { skipDefaultCheckout() // Specialiced checkout is performed below timestamps() timeout(time: 180, unit: 'MINUTES') - buildDiscarder(logRotator(numToKeepStr:'5')) + buildDiscarder(logRotator(numToKeepStr: 'master'.equals(env.BRANCH_NAME) ? '20' : '5', artifactNumToKeepStr: 'master'.equals(env.BRANCH_NAME) ? '3' : '1' )) disableConcurrentBuilds(abortPrevious: true) } agent { From d4a6eb7df2f9d7fea857ef1b2526b13ad93f6113 Mon Sep 17 00:00:00 2001 From: Hannes Wellmann Date: Sat, 26 Apr 2025 10:12:11 +0200 Subject: [PATCH 037/119] [Build] Pack swt-download zip after it was signed Part of - https://github.com/eclipse-platform/eclipse.platform.releng.aggregator/issues/2189 --- binaries/pom.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/binaries/pom.xml b/binaries/pom.xml index 055cdfb9f74..965fedb99bc 100644 --- a/binaries/pom.xml +++ b/binaries/pom.xml @@ -189,7 +189,8 @@ package-swt-download-zip - package + + verify run From 784614a99f9633efe93d353c9578474dc08c30d7 Mon Sep 17 00:00:00 2001 From: Andreas Koch Date: Mon, 5 May 2025 11:27:01 +0200 Subject: [PATCH 038/119] [win32] Prevent loop with fix swt.autoScale value This commit adapts the extraction of the correct image handle in the windows implementation when using an Image with a GC. As the image will always pass the exact zoom it needs to the GC using the autoscaled zoom together with an Image can lead to unexpected results when fixed values for swt.autoScale are passed, e.g. scaling ImageData can result in endless loops. --- .../Eclipse SWT/win32/org/eclipse/swt/graphics/GC.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/GC.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/GC.java index fd4035c5292..42c527d985f 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/GC.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/GC.java @@ -3909,7 +3909,7 @@ void init(Drawable drawable, GCData data, long hDC) { } Image image = data.image; if (image != null) { - data.hNullBitmap = OS.SelectObject(hDC, Image.win32_getHandle(image, DPIUtil.getZoomForAutoscaleProperty(data.nativeZoom))); + data.hNullBitmap = OS.SelectObject(hDC, Image.win32_getHandle(image, data.nativeZoom)); image.memGC = this; } int layout = data.layout; From 192dc00ef4cc4a13c052e383f1f7d6fa1985a2d7 Mon Sep 17 00:00:00 2001 From: fedejeanne Date: Mon, 5 May 2025 10:43:18 +0200 Subject: [PATCH 039/119] Do not use DPIUtil.getNativeDeviceZoom() to get the cursor handle #2057 Pass the native zoom to Cursor.win32_getHandle(Cursor, int) instead Fixes https://github.com/eclipse-platform/eclipse.platform.swt/issues/2057 --- .../Eclipse SWT/win32/org/eclipse/swt/graphics/Cursor.java | 5 ++--- .../Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java | 2 +- .../Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java | 2 +- .../Eclipse SWT/win32/org/eclipse/swt/widgets/Tracker.java | 4 ++-- .../Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java | 2 +- 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Cursor.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Cursor.java index 93044f9809d..f1002ba50be 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Cursor.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Cursor.java @@ -355,13 +355,12 @@ public Cursor(Device device, ImageData source, int hotspotX, int hotspotY) { * Get the handle for a cursor given a zoom level. * * @param cursor the cursor + * @param zoom zoom level (in %) of the monitor the cursor is currently in. * @return The handle of the cursor. * * @noreference This method is not intended to be referenced by clients. */ -public static Long win32_getHandle (Cursor cursor) { - // The size of the cursor should match the zoom of the current monitor - int zoom = DPIUtil.getNativeDeviceZoom(); +public static Long win32_getHandle (Cursor cursor, int zoom) { if (cursor.isDisposed()) { return cursor.handle; } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java index 64078dbf050..cf98f3bf2b4 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java @@ -5475,7 +5475,7 @@ LRESULT WM_SETCURSOR (long wParam, long lParam) { if (control == null) return null; Cursor cursor = control.findCursor (); if (cursor != null) { - OS.SetCursor (Cursor.win32_getHandle(cursor)); + OS.SetCursor (Cursor.win32_getHandle(cursor, getNativeZoom())); return LRESULT.ONE; } } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java index 7b78661f142..3033af31782 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java @@ -2659,7 +2659,7 @@ LRESULT WM_SETCURSOR (long wParam, long lParam) { RECT rect = new RECT (); OS.GetClientRect (handle, rect); if (OS.PtInRect (rect, pt)) { - OS.SetCursor (Cursor.win32_getHandle(cursor)); + OS.SetCursor (Cursor.win32_getHandle(cursor, getNativeZoom())); switch (msg) { case OS.WM_LBUTTONDOWN: case OS.WM_RBUTTONDOWN: diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tracker.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tracker.java index ed9f6d7f39c..11f841b8613 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tracker.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tracker.java @@ -823,7 +823,7 @@ public void setCursor(Cursor newCursor) { checkWidget(); clientCursor = newCursor; if (newCursor != null) { - if (inEvent) OS.SetCursor (Cursor.win32_getHandle(clientCursor)); + if (inEvent) OS.SetCursor (Cursor.win32_getHandle(clientCursor, getNativeZoom())); } } @@ -892,7 +892,7 @@ long transparentProc (long hwnd, long msg, long wParam, long lParam) { break; case OS.WM_SETCURSOR: if (clientCursor != null) { - OS.SetCursor (Cursor.win32_getHandle(clientCursor)); + OS.SetCursor (Cursor.win32_getHandle(clientCursor, getNativeZoom())); return 1; } if (resizeCursor != 0) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java index 95e94bbfc39..a7cf7cd9cae 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java @@ -4663,7 +4663,7 @@ void setCursor () { * is IDC_ARROW. */ Cursor cursor = findCursor (); - long hCursor = cursor == null ? OS.LoadCursor (0, OS.IDC_ARROW) : Cursor.win32_getHandle(cursor); + long hCursor = cursor == null ? OS.LoadCursor (0, OS.IDC_ARROW) : Cursor.win32_getHandle(cursor, getNativeZoom()); OS.SetCursor (hCursor); } From 741dd5af5f7e6410266c66de33584d3a10e891c9 Mon Sep 17 00:00:00 2001 From: Heiko Klare Date: Mon, 5 May 2025 11:24:40 +0200 Subject: [PATCH 040/119] Remove hue from ImageColorTransformer#forHSB #2060 The ImageColorTransformer introduced for disabled icon calculation has a default implementation taking hue, saturation, brightness and alpha factors for transformation. The hue factor was by accident limited to 1, even though it is a value between 0 and 360. In addition, a multiplication of a hue value with a factor is not reasonable at all. This change removes the ability to change the hue of a color value, as the existing usage of that method does not change the hue anyway. It renames the method accordingly. Fixes https://github.com/eclipse-platform/eclipse.platform.swt/issues/2060 Co-authored-by: Manuel Killinger --- .../eclipse/swt/internal/image/ImageColorTransformer.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/ImageColorTransformer.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/ImageColorTransformer.java index 73f8b26de57..a3e0ddef4bd 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/ImageColorTransformer.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/ImageColorTransformer.java @@ -23,17 +23,17 @@ public interface ImageColorTransformer { public static final ImageColorTransformer DEFAULT_DISABLED_IMAGE_TRANSFORMER = switch (IMAGE_DISABLEMENT_ALGORITHM) { case IMAGE_DISABLEMENT_ALGORITHM_GTK -> ImageColorTransformer.forRGB(0.5f, 0.5f, 0.5f, 0.5f); - case IMAGE_DISABLEMENT_ALGORITHM_DESATURATED -> ImageColorTransformer.forHSB(1.0f, 0.2f, 0.9f, 0.5f); + case IMAGE_DISABLEMENT_ALGORITHM_DESATURATED -> ImageColorTransformer.forSaturationBrightness(0.2f, 0.9f, 0.5f); default -> ImageColorTransformer.forGrayscaledContrastBrightness(0.2f, 2.9f); }; RGBA adaptPixelValue(int red, int green, int blue, int alpha); - public static ImageColorTransformer forHSB(float hueFactor, float saturationFactor, float brightnessFactor, + public static ImageColorTransformer forSaturationBrightness(float saturationFactor, float brightnessFactor, float alphaFactor) { return (red, green, blue, alpha) -> { float[] hsba = new RGBA(red, green, blue, alpha).getHSBA(); - float hue = Math.min(hueFactor * hsba[0], 1.0f); + float hue = hsba[0]; float saturation = Math.min(saturationFactor * hsba[1], 1.0f); float brightness = Math.min(brightnessFactor * hsba[2], 1.0f); float alphaResult = Math.min(alphaFactor * hsba[3], 255.0f); From d28a20182d0febec0a392bbc87519065aa03b728 Mon Sep 17 00:00:00 2001 From: Heiko Klare Date: Mon, 5 May 2025 14:01:26 +0200 Subject: [PATCH 041/119] Revert "Preserved width/height on scaleUp/Down a Rectangle" The change introduced a regression with borders in CTabFolder at different scale values, so this reverts to the state before. This reverts commit d4caabfb10314a29656ab0e3783059c5068be7c3. --- .../org/eclipse/swt/internal/DPIUtil.java | 21 ------------------- .../eclipse/swt/tests/junit/DPIUtilTests.java | 4 ++-- 2 files changed, 2 insertions(+), 23 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/DPIUtil.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/DPIUtil.java index 7b197fa6e3f..c48dccc7620 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/DPIUtil.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/DPIUtil.java @@ -257,17 +257,6 @@ public static Rectangle scaleDown(Rectangle rect, int zoom) { scaledRect.y = scaledTopLeft.y; scaledRect.width = scaledBottomRight.x - scaledTopLeft.x; scaledRect.height = scaledBottomRight.y - scaledTopLeft.y; - - int scaledDownWidth = DPIUtil.scaleDown(rect.width, zoom); - int scaledDownHeight = DPIUtil.scaleDown(rect.height, zoom); - - // It must be ensured, that a scaled down width or height - // based on Rectangle x or y is not bigger than directly - // scaling down the width or height. Therefore the min - // value is used - scaledRect.width = Math.min(scaledRect.width, scaledDownWidth); - scaledRect.height = Math.min(scaledRect.height, scaledDownHeight); - return scaledRect; } /** @@ -476,16 +465,6 @@ public static Rectangle scaleUp(Rectangle rect, int zoom) { scaledRect.y = scaledTopLeft.y; scaledRect.width = scaledBottomRight.x - scaledTopLeft.x; scaledRect.height = scaledBottomRight.y - scaledTopLeft.y; - - int scaledUpWidth = DPIUtil.scaleUp(rect.width, zoom); - int scaledUpHeight = DPIUtil.scaleUp(rect.height, zoom); - - // It must be ensured, that a scaled up width or height - // based on Rectangle x or y is not smaller that directly - // scaling up the width or height. Therefore the max - // value is used - scaledRect.width = Math.max(scaledRect.width, scaledUpWidth); - scaledRect.height = Math.max(scaledRect.height, scaledUpHeight); return scaledRect; } diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/DPIUtilTests.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/DPIUtilTests.java index d22a74cdbad..a517ed9942b 100644 --- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/DPIUtilTests.java +++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/DPIUtilTests.java @@ -160,7 +160,7 @@ public void scaleDownPoint() { @Test public void scaleDownRectangle() { Rectangle valueAt200 = new Rectangle(100, 150, 10, 14); - Rectangle valueAt150 = new Rectangle(75, 113, 7, 11); + Rectangle valueAt150 = new Rectangle(75, 113, 7, 10); Rectangle valueAt100 = new Rectangle(50, 75, 5, 7); Rectangle scaledValue = DPIUtil.autoScaleDown(valueAt200); @@ -295,7 +295,7 @@ public void scaleUpPoint() { @Test public void scaleUpRectangle() { Rectangle valueAt200 = new Rectangle(100, 150, 10, 14); - Rectangle valueAt150 = new Rectangle(75, 113, 8, 11); + Rectangle valueAt150 = new Rectangle(75, 113, 8, 10); Rectangle valueAt100 = new Rectangle(50, 75, 5, 7); Rectangle scaledValue = DPIUtil.autoScaleUp(valueAt100); From 13f57c190c52969fdb0ee54fc86ca5542f51e5b5 Mon Sep 17 00:00:00 2001 From: Sebastian Ratz Date: Mon, 5 May 2025 12:09:55 +0200 Subject: [PATCH 042/119] Edge: Ensure #getText() works even when javascript is disabled Fixes #2029. --- .../win32/org/eclipse/swt/browser/Edge.java | 10 +++++++++- .../junit/Test_org_eclipse_swt_browser_Browser.java | 12 ++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/Edge.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/Edge.java index 5ededadd2f8..0dd09844504 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/Edge.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/Edge.java @@ -925,6 +925,14 @@ public Object evaluate(String script) throws SWTException { // Feature in WebView2. ExecuteScript works regardless of IsScriptEnabled setting. // Disallow programmatic execution manually. if (!jsEnabled) return null; + return evaluateInternal(script); +} + +/** + * Unconditional script execution, bypassing {@link WebBrowser#jsEnabled} flag / + * {@link Browser#setJavascriptEnabled(boolean)}. + */ +private Object evaluateInternal(String script) throws SWTException { if(inCallback > 0) { // Execute script, but do not wait for async call to complete as otherwise it // can cause a deadlock if execute inside a WebView callback. @@ -974,7 +982,7 @@ String getJavaCallDeclaration() { @Override public String getText() { - return (String)evaluate("return document.documentElement.outerHTML;"); + return (String)evaluateInternal("return document.documentElement.outerHTML;"); } @Override diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java index 87b73ed8d1f..ec02ab81a89 100644 --- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java +++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java @@ -1746,6 +1746,18 @@ public void test_getText_html() { getText_helper(testString, testString); } +/** + * Ensure getText() works even if consumer-level scripting is disabled. Needed + * on platforms where getText() implementation is JavaScript-based, e.g. Edge: + * https://github.com/eclipse-platform/eclipse.platform.swt/issues/2029 + */ +@Test +public void test_getText_javscriptDisabled() { + browser.setJavascriptEnabled(false); + String testString = "helloWorld"; + getText_helper(testString, testString); +} + /** Ensure we get webpage before javascript processed it. * E.g JS would add 'style' tag to body after processing. */ @Test From 2024febeb7994dbb1907541bedc7dd69bc826b58 Mon Sep 17 00:00:00 2001 From: Heiko Klare Date: Wed, 23 Apr 2025 16:04:33 +0200 Subject: [PATCH 043/119] [Win32] Add explicit supported OS version check and set to build 14393 Currently, there is no explicit minimum version required for executing SWT applications. However, some versions are implicitly not supported anymore as library methods are linked that are not present in older OS versions. In addition, we still have some methods dynamically linked and their execution guarded by a version constraint for version that are out of support. In particular, this holds for every Windows version older than build 14393, which is the 1607 update for Windows 10 and the release of Windows Server 2016, the latter being the latest still supported server version of Windows except for the extended support of Windows Server 2012. This change adds an explicit Windows version check at initialization to avoid that applications fail to start with incomprehensible linkage errors but a proper error message. It sets the minimum required Windows version to build 14393. To this end, it adds an additional SWT DLL only for retrieving the OS version, as the required Windows API call will no be executable on unsupported OS versions otherwise, as the ordinary SWT DLL will fail to load before executing the version check. This change also adds a check for SWT libraries being loadable (in particular in terms of a matching OS) on startup for every OS. --- .../org.eclipse.swt.internal.properties | 7 +- .../org/eclipse/swt/internal/Platform.java | 8 +- .../common/org/eclipse/swt/internal/C.java | 1 + .../org/eclipse/swt/internal/Platform.java | 8 +- .../win32/library/make_win32.mak | 17 +++- .../Eclipse SWT PI/win32/library/osversion.c | 63 ++++++++++++++ .../Eclipse SWT PI/win32/library/osversion.h | 34 ++++++++ .../win32/library/osversion_stats.c | 17 ++++ .../win32/library/osversion_stats.h | 25 ++++++ .../win32/library/osversion_structs.c | 84 +++++++++++++++++++ .../win32/library/osversion_structs.h | 28 +++++++ .../win32/library/swt_osversion.rc | 46 ++++++++++ .../org/eclipse/swt/internal/Platform.java | 8 ++ .../win32/version/OSVERSIONINFOEX.java | 35 ++++++++ .../swt/internal/win32/version/OsVersion.java | 77 +++++++++++++++++ 15 files changed, 449 insertions(+), 9 deletions(-) create mode 100644 bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/osversion.c create mode 100644 bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/osversion.h create mode 100644 bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/osversion_stats.c create mode 100644 bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/osversion_stats.h create mode 100644 bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/osversion_structs.c create mode 100644 bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/osversion_structs.h create mode 100644 bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/swt_osversion.rc create mode 100644 bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/version/OSVERSIONINFOEX.java create mode 100644 bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/version/OsVersion.java diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.properties index 7b85efdb120..d7982f1b9f9 100644 --- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.properties +++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.properties @@ -20,9 +20,6 @@ swt_copyright=/***************************************************************** * https://www.eclipse.org/legal/epl-2.0/\n \ *\n \ * SPDX-License-Identifier: EPL-2.0\n \ -*\n \ -* Contributors:\n \ -* IBM Corporation - initial API and implementation\n \ *******************************************************************************/\n swt_properties_copyright=###############################################################################\n\ # Copyright (c) 2000, %END_YEAR IBM Corporation and others.\n\ @@ -33,9 +30,6 @@ swt_properties_copyright=####################################################### # https://www.eclipse.org/legal/epl-2.0/\n\ #\n\ # SPDX-License-Identifier: EPL-2.0\n\ -#\n\ -# Contributors:\n\ -# IBM Corporation - initial API and implementation\n\ ############################################################################### swt_main_classes=\ org.eclipse.swt.internal.accessibility.gtk.ATK,../org.eclipse.swt/Eclipse SWT PI/gtk/library/,\ @@ -44,6 +38,7 @@ org.eclipse.swt.internal.gtk3.GTK3,../org.eclipse.swt/Eclipse SWT PI/gtk/library org.eclipse.swt.internal.gtk4.GTK4,../org.eclipse.swt/Eclipse SWT PI/gtk/library/,\ org.eclipse.swt.internal.ole.win32.COM,../org.eclipse.swt/Eclipse SWT PI/win32/library/,\ org.eclipse.swt.internal.win32.OS,../org.eclipse.swt/Eclipse SWT PI/win32/library/,\ +org.eclipse.swt.internal.win32.version.OsVersion,../org.eclipse.swt/Eclipse SWT PI/win32/library/,\ org.eclipse.swt.internal.gdip.Gdip,../org.eclipse.swt/Eclipse SWT PI/win32/library/,\ org.eclipse.swt.internal.cairo.Cairo,../org.eclipse.swt/Eclipse SWT PI/cairo/library/,\ org.eclipse.swt.internal.opengl.glx.GLX,../org.eclipse.swt/Eclipse SWT OpenGL/glx/library/,\ diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/Platform.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/Platform.java index 06cf11fdb28..dbf7dbc102e 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/Platform.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/Platform.java @@ -13,7 +13,6 @@ *******************************************************************************/ package org.eclipse.swt.internal; - public class Platform { public static final String PLATFORM = "cocoa"; //$NON-NLS-1$ @@ -21,4 +20,11 @@ public static boolean isLoadable () { return Library.isLoadable (); } +public static void exitIfNotLoadable() { + if (!Library.isLoadable ()) { + System.err.println("Libraries for platform " + Platform.PLATFORM + " cannot be loaded because of incompatible environment"); + System.exit(1); + } +} + } diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/C.java b/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/C.java index 1abd49ca477..df91aef01a6 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/C.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/C.java @@ -16,6 +16,7 @@ public class C extends Platform { static { + exitIfNotLoadable(); Library.loadLibrary ("swt"); //$NON-NLS-1$ } diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/Platform.java b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/Platform.java index 3b6c5e72589..af2f17d7b92 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/Platform.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/Platform.java @@ -14,7 +14,6 @@ *******************************************************************************/ package org.eclipse.swt.internal; - public class Platform { public static final String PLATFORM = "gtk"; //$NON-NLS-1$ @@ -22,4 +21,11 @@ public static boolean isLoadable () { return Library.isLoadable (); } +public static void exitIfNotLoadable() { + if (!Library.isLoadable ()) { + System.err.println("Libraries for platform " + Platform.PLATFORM + " cannot be loaded because of incompatible environment"); + System.exit(1); + } +} + } diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/make_win32.mak b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/make_win32.mak index bc458f60731..0f19029181c 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/make_win32.mak +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/make_win32.mak @@ -31,6 +31,10 @@ SWT_OBJS = swt.obj callback.obj c.obj c_stats.obj \ os.obj os_structs.obj os_custom.obj os_stats.obj \ com_structs.obj com.obj com_stats.obj com_custom.obj +OSVERSION_PREFIX = swt-osversion +OSVERSION_LIB = $(OSVERSION_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).dll +OSVERSION_OBJS = osversion.obj osversion_structs.obj osversion_stats.obj + GDIP_PREFIX = swt-gdip GDIP_LIB = $(GDIP_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).dll GDIP_LIBS = gdiplus.lib @@ -57,7 +61,7 @@ dlllflags = -dll /WX guilibsmt = kernel32.lib ws2_32.lib mswsock.lib advapi32.lib bufferoverflowu.lib user32.lib gdi32.lib comdlg32.lib winspool.lib olelibsmt = ole32.lib uuid.lib oleaut32.lib $(guilibsmt) -all: make_swt make_awt make_gdip make_wgl +all: make_osversion make_swt make_awt make_gdip make_wgl .c.obj: cl $(CFLAGS) $*.c @@ -74,6 +78,14 @@ make_swt: $(SWT_OBJS) swt.res link @templrf del templrf +make_osversion: $(OSVERSION_OBJS) swt_osversion.res + echo $(ldebug) $(dlllflags) $(guilibsmt) >templrf + echo $(OSVERSION_OBJS) >>templrf + echo swt_osversion.res >>templrf + echo -out:$(OSVERSION_LIB) >>templrf + link @templrf + del templrf + make_gdip: $(GDIP_OBJS) swt_gdip.res echo $(ldebug) $(dlllflags) $(guilibsmt) >templrf echo $(GDIP_LIBS) >>templrf @@ -104,6 +116,9 @@ make_wgl: $(WGL_OBJS) swt_wgl.res swt.res: rc $(RCFLAGS) -DSWT_ORG_FILENAME=\"$(SWT_LIB)\" -r -fo swt.res swt.rc +swt_osversion.res: + rc $(RCFLAGS) -DSWT_ORG_FILENAME=\"$(OSVERSION_LIB)\" -r -fo swt_osversion.res swt_osversion.rc + swt_gdip.res: rc $(RCFLAGS) -DSWT_ORG_FILENAME=\"$(GDIP_LIB)\" -r -fo swt_gdip.res swt_gdip.rc diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/osversion.c b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/osversion.c new file mode 100644 index 00000000000..babc08e1135 --- /dev/null +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/osversion.c @@ -0,0 +1,63 @@ +/******************************************************************************* + * Copyright (c) 2000, 2025 IBM Corporation and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ + +/* Note: This file was auto-generated by org.eclipse.swt.tools.internal.JNIGenerator */ +/* DO NOT EDIT - your changes will be lost. */ + +#include "swt.h" +#include "osversion_structs.h" +#include "osversion_stats.h" + +#ifndef OsVersion_NATIVE +#define OsVersion_NATIVE(func) Java_org_eclipse_swt_internal_win32_version_OsVersion_##func +#endif + +#ifdef _WIN32 + /* Many methods don't use their 'env' and 'that' arguments */ + #pragma warning (disable: 4100) +#endif + +#ifndef NO_OSVERSIONINFOEX_1sizeof +JNIEXPORT jint JNICALL OsVersion_NATIVE(OSVERSIONINFOEX_1sizeof) + (JNIEnv *env, jclass that) +{ + jint rc = 0; + OsVersion_NATIVE_ENTER(env, that, OSVERSIONINFOEX_1sizeof_FUNC); + rc = (jint)OSVERSIONINFOEX_sizeof(); + OsVersion_NATIVE_EXIT(env, that, OSVERSIONINFOEX_1sizeof_FUNC); + return rc; +} +#endif + +#ifndef NO_RtlGetVersion +JNIEXPORT jint JNICALL OsVersion_NATIVE(RtlGetVersion) + (JNIEnv *env, jclass that, jobject arg0) +{ + OSVERSIONINFOEX _arg0, *lparg0=NULL; + jint rc = 0; + OsVersion_NATIVE_ENTER(env, that, RtlGetVersion_FUNC); + if (arg0) if ((lparg0 = getOSVERSIONINFOEXFields(env, arg0, &_arg0)) == NULL) goto fail; +/* + rc = (jint)RtlGetVersion(lparg0); +*/ + { + OsVersion_LOAD_FUNCTION(fp, RtlGetVersion) + if (fp) { + rc = (jint)((jint (CALLING_CONVENTION*)(OSVERSIONINFOEX *))fp)(lparg0); + } + } +fail: + if (arg0 && lparg0) setOSVERSIONINFOEXFields(env, arg0, lparg0); + OsVersion_NATIVE_EXIT(env, that, RtlGetVersion_FUNC); + return rc; +} +#endif + diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/osversion.h b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/osversion.h new file mode 100644 index 00000000000..135e715071b --- /dev/null +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/osversion.h @@ -0,0 +1,34 @@ +/******************************************************************************* + * Copyright (c) 2025 Vector Informatik GmbH and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ + +#ifndef INC_osversion_H +#define INC_osversion_H + +/* + * Windows headers will sometimes have warnings above level 2, just + * ignore all of them, we can't do anything about it anyway. + */ +#pragma warning(push, 2) + +#include + +/* Restore warnings */ +#pragma warning(pop) + +/* Optional custom definitions to exclude some types */ +#include "defines.h" + +#define OsVersion_LOAD_FUNCTION LOAD_FUNCTION + +/* Libraries for dynamic loaded functions */ +#define RtlGetVersion_LIB "ntdll.dll" + +#endif /* INC_osversion_H */ diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/osversion_stats.c b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/osversion_stats.c new file mode 100644 index 00000000000..8fa86d83225 --- /dev/null +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/osversion_stats.c @@ -0,0 +1,17 @@ +/******************************************************************************* + * Copyright (c) 2000, 2025 Vector Informatik GmbH and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ + +/* Note: This file was auto-generated by org.eclipse.swt.tools.internal.JNIGenerator */ +/* DO NOT EDIT - your changes will be lost. */ + +#include "swt.h" +#include "osversion_stats.h" + diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/osversion_stats.h b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/osversion_stats.h new file mode 100644 index 00000000000..79fae4e1061 --- /dev/null +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/osversion_stats.h @@ -0,0 +1,25 @@ +/******************************************************************************* + * Copyright (c) 2000, 2025 IBM Corporation and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ + +/* Note: This file was auto-generated by org.eclipse.swt.tools.internal.JNIGenerator */ +/* DO NOT EDIT - your changes will be lost. */ + +#ifndef OsVersion_NATIVE_ENTER +#define OsVersion_NATIVE_ENTER(env, that, func) +#endif +#ifndef OsVersion_NATIVE_EXIT +#define OsVersion_NATIVE_EXIT(env, that, func) +#endif + +typedef enum { + OSVERSIONINFOEX_1sizeof_FUNC, + RtlGetVersion_FUNC, +} OsVersion_FUNCS; diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/osversion_structs.c b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/osversion_structs.c new file mode 100644 index 00000000000..40fa0586643 --- /dev/null +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/osversion_structs.c @@ -0,0 +1,84 @@ +/******************************************************************************* + * Copyright (c) 2000, 2025 IBM Corporation and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ + +/* Note: This file was auto-generated by org.eclipse.swt.tools.internal.JNIGenerator */ +/* DO NOT EDIT - your changes will be lost. */ + +#include "swt.h" +#include "osversion_structs.h" + +#ifndef NO_OSVERSIONINFOEX +typedef struct OSVERSIONINFOEX_FID_CACHE { + int cached; + jclass clazz; + jfieldID dwOSVersionInfoSize, dwMajorVersion, dwMinorVersion, dwBuildNumber, dwPlatformId, szCSDVersion, wServicePackMajor, wServicePackMinor, wSuiteMask, wProductType, wReserved; +} OSVERSIONINFOEX_FID_CACHE; + +OSVERSIONINFOEX_FID_CACHE OSVERSIONINFOEXFc; + +void cacheOSVERSIONINFOEXFields(JNIEnv *env, jobject lpObject) +{ + if (OSVERSIONINFOEXFc.cached) return; + OSVERSIONINFOEXFc.clazz = (*env)->GetObjectClass(env, lpObject); + OSVERSIONINFOEXFc.dwOSVersionInfoSize = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "dwOSVersionInfoSize", "I"); + OSVERSIONINFOEXFc.dwMajorVersion = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "dwMajorVersion", "I"); + OSVERSIONINFOEXFc.dwMinorVersion = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "dwMinorVersion", "I"); + OSVERSIONINFOEXFc.dwBuildNumber = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "dwBuildNumber", "I"); + OSVERSIONINFOEXFc.dwPlatformId = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "dwPlatformId", "I"); + OSVERSIONINFOEXFc.szCSDVersion = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "szCSDVersion", "[C"); + OSVERSIONINFOEXFc.wServicePackMajor = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "wServicePackMajor", "I"); + OSVERSIONINFOEXFc.wServicePackMinor = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "wServicePackMinor", "I"); + OSVERSIONINFOEXFc.wSuiteMask = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "wSuiteMask", "I"); + OSVERSIONINFOEXFc.wProductType = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "wProductType", "I"); + OSVERSIONINFOEXFc.wReserved = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "wReserved", "I"); + OSVERSIONINFOEXFc.cached = 1; +} + +OSVERSIONINFOEX *getOSVERSIONINFOEXFields(JNIEnv *env, jobject lpObject, OSVERSIONINFOEX *lpStruct) +{ + if (!OSVERSIONINFOEXFc.cached) cacheOSVERSIONINFOEXFields(env, lpObject); + lpStruct->dwOSVersionInfoSize = (*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.dwOSVersionInfoSize); + lpStruct->dwMajorVersion = (*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.dwMajorVersion); + lpStruct->dwMinorVersion = (*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.dwMinorVersion); + lpStruct->dwBuildNumber = (*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.dwBuildNumber); + lpStruct->dwPlatformId = (*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.dwPlatformId); + { + jcharArray lpObject1 = (jcharArray)(*env)->GetObjectField(env, lpObject, OSVERSIONINFOEXFc.szCSDVersion); + (*env)->GetCharArrayRegion(env, lpObject1, 0, sizeof(lpStruct->szCSDVersion) / sizeof(jchar), (jchar *)lpStruct->szCSDVersion); + } + lpStruct->wServicePackMajor = (WORD)(*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.wServicePackMajor); + lpStruct->wServicePackMinor = (WORD)(*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.wServicePackMinor); + lpStruct->wSuiteMask = (WORD)(*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.wSuiteMask); + lpStruct->wProductType = (BYTE)(*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.wProductType); + lpStruct->wReserved = (BYTE)(*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.wReserved); + return lpStruct; +} + +void setOSVERSIONINFOEXFields(JNIEnv *env, jobject lpObject, OSVERSIONINFOEX *lpStruct) +{ + if (!OSVERSIONINFOEXFc.cached) cacheOSVERSIONINFOEXFields(env, lpObject); + (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.dwOSVersionInfoSize, (jint)lpStruct->dwOSVersionInfoSize); + (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.dwMajorVersion, (jint)lpStruct->dwMajorVersion); + (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.dwMinorVersion, (jint)lpStruct->dwMinorVersion); + (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.dwBuildNumber, (jint)lpStruct->dwBuildNumber); + (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.dwPlatformId, (jint)lpStruct->dwPlatformId); + { + jcharArray lpObject1 = (jcharArray)(*env)->GetObjectField(env, lpObject, OSVERSIONINFOEXFc.szCSDVersion); + (*env)->SetCharArrayRegion(env, lpObject1, 0, sizeof(lpStruct->szCSDVersion) / sizeof(jchar), (jchar *)lpStruct->szCSDVersion); + } + (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.wServicePackMajor, (jint)lpStruct->wServicePackMajor); + (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.wServicePackMinor, (jint)lpStruct->wServicePackMinor); + (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.wSuiteMask, (jint)lpStruct->wSuiteMask); + (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.wProductType, (jint)lpStruct->wProductType); + (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.wReserved, (jint)lpStruct->wReserved); +} +#endif + diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/osversion_structs.h b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/osversion_structs.h new file mode 100644 index 00000000000..0ec38f360cb --- /dev/null +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/osversion_structs.h @@ -0,0 +1,28 @@ +/******************************************************************************* + * Copyright (c) 2000, 2025 IBM Corporation and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ + +/* Note: This file was auto-generated by org.eclipse.swt.tools.internal.JNIGenerator */ +/* DO NOT EDIT - your changes will be lost. */ + +#include "osversion.h" + +#ifndef NO_OSVERSIONINFOEX +void cacheOSVERSIONINFOEXFields(JNIEnv *env, jobject lpObject); +OSVERSIONINFOEX *getOSVERSIONINFOEXFields(JNIEnv *env, jobject lpObject, OSVERSIONINFOEX *lpStruct); +void setOSVERSIONINFOEXFields(JNIEnv *env, jobject lpObject, OSVERSIONINFOEX *lpStruct); +#define OSVERSIONINFOEX_sizeof() sizeof(OSVERSIONINFOEX) +#else +#define cacheOSVERSIONINFOEXFields(a,b) +#define getOSVERSIONINFOEXFields(a,b,c) NULL +#define setOSVERSIONINFOEXFields(a,b,c) +#define OSVERSIONINFOEX_sizeof() 0 +#endif + diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/swt_osversion.rc b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/swt_osversion.rc new file mode 100644 index 00000000000..aff3e580931 --- /dev/null +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/swt_osversion.rc @@ -0,0 +1,46 @@ +/******************************************************************************* + * Copyright (c) 2000, 2011 IBM Corporation and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +#include "windows.h" + +VS_VERSION_INFO VERSIONINFO + PRODUCTVERSION 0,0,0,0 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40000L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", "Eclipse Foundation\0" + VALUE "FileDescription", "SWT for Windows native library\0" + VALUE "InternalName", "SWT\0" + VALUE "LegalCopyright", "Copyright (c) 2000, 2025 IBM Corp. All Rights Reserved.\0" + VALUE "OriginalFilename", SWT_ORG_FILENAME + VALUE "ProductName", "Standard Widget Toolkit\0" + VALUE "ProductVersion", "0,0,0,0\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/Platform.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/Platform.java index 7ae0c40f7aa..0d2b3d46dd6 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/Platform.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/Platform.java @@ -13,6 +13,7 @@ *******************************************************************************/ package org.eclipse.swt.internal; +import org.eclipse.swt.internal.win32.version.*; public class Platform { public static final String PLATFORM = "win32"; //$NON-NLS-1$ @@ -21,4 +22,11 @@ public static boolean isLoadable () { return Library.isLoadable (); } +public static void exitIfNotLoadable() { + if (!Library.isLoadable ()) { + System.err.println("Libraries for platform " + Platform.PLATFORM + " cannot be loaded because of incompatible environment"); + System.exit(1); + } + OsVersion.checkCompatibleWindowsVersion(); +} } diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/version/OSVERSIONINFOEX.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/version/OSVERSIONINFOEX.java new file mode 100644 index 00000000000..7156e8d4a46 --- /dev/null +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/version/OSVERSIONINFOEX.java @@ -0,0 +1,35 @@ +/******************************************************************************* + * Copyright (c) 2021 Syntevo and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Syntevo - initial API and implementation + *******************************************************************************/ +package org.eclipse.swt.internal.win32.version; + +public class OSVERSIONINFOEX { + public int dwOSVersionInfoSize; + public int dwMajorVersion; + public int dwMinorVersion; + public int dwBuildNumber; + public int dwPlatformId; + public char[] szCSDVersion = new char[128]; + /** @field cast=(WORD) */ + public int wServicePackMajor; + /** @field cast=(WORD) */ + public int wServicePackMinor; + /** @field cast=(WORD) */ + public int wSuiteMask; + /** @field cast=(BYTE) */ + public int wProductType; + /** @field cast=(BYTE) */ + public int wReserved; + + public static final int sizeof = OsVersion.OSVERSIONINFOEX_sizeof (); +} diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/version/OsVersion.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/version/OsVersion.java new file mode 100644 index 00000000000..e02be241ec7 --- /dev/null +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/version/OsVersion.java @@ -0,0 +1,77 @@ +/******************************************************************************* + * Copyright (c) 2025 Vector Informatik GmbH and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package org.eclipse.swt.internal.win32.version; + +import org.eclipse.swt.internal.*; + +/** + * A separate library only for checking the Windows build version. Required as the general + * OS library may not be loadable with linkage errors when executed on an unsupported Windows + * build, such that a version check cannot be performed successfully, but a a linkage error + * will occur instead. This library only adapts a single OS method that can always be loaded, + * thus ensuring that the version check can always be executed. + * + * @jniclass flags=c + * */ +public class OsVersion extends Platform { + static { + Library.loadLibrary ("swt-osversion"); //$NON-NLS-1$ + } + + /** + * Always reports the correct build number, regardless of manifest and + * compatibility GUIDs. Note that build number alone is sufficient to + * identify Windows version. + */ + public static final int WIN32_BUILD; + /** + * Values taken from https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions + */ + public static final int WIN32_BUILD_WIN10_1607 = 14393; // "Windows 10 August 2016 Update" + + /** + * The minimum supported Windows build version for using this SWT version + */ + public static final int WIN32_MINIMUM_COMPATIBLE_BUILD = WIN32_BUILD_WIN10_1607; + + private static final String DISABLE_WINDOWS_VERSION_CHECK_PROPERTY = "swt.disableWindowsVersionCheck"; + + static { + /* + * Starting with Windows 10, GetVersionEx() lies about version unless + * application manifest has a proper entry. RtlGetVersion() always + * reports true version. + */ + OSVERSIONINFOEX osVersionInfoEx = new OSVERSIONINFOEX (); + osVersionInfoEx.dwOSVersionInfoSize = OSVERSIONINFOEX.sizeof; + if (0 == OsVersion.RtlGetVersion (osVersionInfoEx)) { + WIN32_BUILD = osVersionInfoEx.dwBuildNumber; + } else { + System.err.println ("SWT: OS: Failed to detect Windows build number"); + WIN32_BUILD = 0; + } + } + + public static void checkCompatibleWindowsVersion() { + String disableVersionCheckPropertyValue = System.getProperty(DISABLE_WINDOWS_VERSION_CHECK_PROPERTY, Boolean.FALSE.toString()); + boolean versionCheckDisabled = "".equals(disableVersionCheckPropertyValue) || Boolean.TRUE.toString().equalsIgnoreCase(disableVersionCheckPropertyValue); + if (!versionCheckDisabled && WIN32_BUILD < WIN32_MINIMUM_COMPATIBLE_BUILD) { + System.err.println(String.format("Incompatible OS: Minimum Windows build version is %s but current is %s", + WIN32_MINIMUM_COMPATIBLE_BUILD, WIN32_BUILD)); + System.exit(1); + } + } + + public static final native int OSVERSIONINFOEX_sizeof (); + + /** @method flags=dynamic */ + public static final native int RtlGetVersion (OSVERSIONINFOEX lpVersionInformation); +} From 252e9f6cfd617d0fcb7448bbc644ecb1ff8b59e3 Mon Sep 17 00:00:00 2001 From: Heiko Klare Date: Wed, 23 Apr 2025 22:45:45 +0200 Subject: [PATCH 044/119] [Win32] Remove obsolete checks for non-supported Windows versions #2011 With introducing an explicit minimum supported OS version for Windows, all code guards for older than the minimum supported Windows version became obsolete. This change removes those guards and those OS methods that became unused. It also makes those methods, whose calls are not version-guarded anymore, statically instead of dynamically linked. This fixes some issue with wrong values returned by the AdjustWindowRectExForDpi method when used via dynamic linking. Fixes https://github.com/eclipse-platform/eclipse.platform.ui/issues/2852 Fixes https://github.com/eclipse-platform/eclipse.platform.swt/issues/2011 --- .../Eclipse SWT PI/win32/library/os.c | 40 ------------------- .../Eclipse SWT PI/win32/library/os_custom.h | 3 -- .../Eclipse SWT PI/win32/library/os_stats.h | 1 - .../org/eclipse/swt/internal/win32/OS.java | 6 --- .../swt/internal/ScalingSWTFontRegistry.java | 8 +--- .../org/eclipse/swt/widgets/Control.java | 12 +++--- .../org/eclipse/swt/widgets/Display.java | 10 +---- .../win32/org/eclipse/swt/widgets/Widget.java | 16 +------- 8 files changed, 10 insertions(+), 86 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os.c b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os.c index ceb19ea77eb..495e6a69ac5 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os.c +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os.c @@ -108,22 +108,6 @@ JNIEXPORT jint JNICALL OS_NATIVE(AddFontResourceEx) } #endif -#ifndef NO_AdjustWindowRectEx -JNIEXPORT jboolean JNICALL OS_NATIVE(AdjustWindowRectEx) - (JNIEnv *env, jclass that, jobject arg0, jint arg1, jboolean arg2, jint arg3) -{ - RECT _arg0, *lparg0=NULL; - jboolean rc = 0; - OS_NATIVE_ENTER(env, that, AdjustWindowRectEx_FUNC); - if (arg0) if ((lparg0 = getRECTFields(env, arg0, &_arg0)) == NULL) goto fail; - rc = (jboolean)AdjustWindowRectEx(lparg0, arg1, arg2, arg3); -fail: - if (arg0 && lparg0) setRECTFields(env, arg0, lparg0); - OS_NATIVE_EXIT(env, that, AdjustWindowRectEx_FUNC); - return rc; -} -#endif - #ifndef NO_AdjustWindowRectExForDpi JNIEXPORT jboolean JNICALL OS_NATIVE(AdjustWindowRectExForDpi) (JNIEnv *env, jclass that, jobject arg0, jint arg1, jboolean arg2, jint arg3, jint arg4) @@ -132,15 +116,7 @@ JNIEXPORT jboolean JNICALL OS_NATIVE(AdjustWindowRectExForDpi) jboolean rc = 0; OS_NATIVE_ENTER(env, that, AdjustWindowRectExForDpi_FUNC); if (arg0) if ((lparg0 = getRECTFields(env, arg0, &_arg0)) == NULL) goto fail; -/* rc = (jboolean)AdjustWindowRectExForDpi(lparg0, arg1, arg2, arg3, arg4); -*/ - { - OS_LOAD_FUNCTION(fp, AdjustWindowRectExForDpi) - if (fp) { - rc = (jboolean)((jboolean (CALLING_CONVENTION*)(RECT *, jint, jboolean, jint, jint))fp)(lparg0, arg1, arg2, arg3, arg4); - } - } fail: if (arg0 && lparg0) setRECTFields(env, arg0, lparg0); OS_NATIVE_EXIT(env, that, AdjustWindowRectExForDpi_FUNC); @@ -3320,15 +3296,7 @@ JNIEXPORT jint JNICALL OS_NATIVE(GetSystemMetricsForDpi) { jint rc = 0; OS_NATIVE_ENTER(env, that, GetSystemMetricsForDpi_FUNC); -/* rc = (jint)GetSystemMetricsForDpi(arg0, arg1); -*/ - { - OS_LOAD_FUNCTION(fp, GetSystemMetricsForDpi) - if (fp) { - rc = (jint)((jint (CALLING_CONVENTION*)(jint, jint))fp)(arg0, arg1); - } - } OS_NATIVE_EXIT(env, that, GetSystemMetricsForDpi_FUNC); return rc; } @@ -9329,15 +9297,7 @@ JNIEXPORT jboolean JNICALL OS_NATIVE(SystemParametersInfoForDpi) jboolean rc = 0; OS_NATIVE_ENTER(env, that, SystemParametersInfoForDpi_FUNC); if (arg2) if ((lparg2 = getNONCLIENTMETRICSFields(env, arg2, &_arg2)) == NULL) goto fail; -/* rc = (jboolean)SystemParametersInfoForDpi(arg0, arg1, lparg2, arg3, arg4); -*/ - { - OS_LOAD_FUNCTION(fp, SystemParametersInfoForDpi) - if (fp) { - rc = (jboolean)((jboolean (CALLING_CONVENTION*)(jint, jint, NONCLIENTMETRICS *, jint, jint))fp)(arg0, arg1, lparg2, arg3, arg4); - } - } fail: if (arg2 && lparg2) setNONCLIENTMETRICSFields(env, arg2, lparg2); OS_NATIVE_EXIT(env, that, SystemParametersInfoForDpi_FUNC); diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_custom.h b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_custom.h index f26e394844f..594aa2c27cb 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_custom.h +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_custom.h @@ -22,8 +22,5 @@ #define GetDpiForWindow_LIB "user32.dll" #define RtlGetVersion_LIB "ntdll.dll" #define OpenThemeDataForDpi_LIB "uxtheme.dll" -#define GetSystemMetricsForDpi_LIB "user32.dll" #define GetThreadDpiAwarenessContext_LIB "user32.dll" #define SetThreadDpiAwarenessContext_LIB "user32.dll" -#define SystemParametersInfoForDpi_LIB "user32.dll" -#define AdjustWindowRectExForDpi_LIB "user32.dll" diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_stats.h b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_stats.h index 4175ca4a320..16ce626c546 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_stats.h +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_stats.h @@ -29,7 +29,6 @@ typedef enum { ActivateActCtx_FUNC, ActivateKeyboardLayout_FUNC, AddFontResourceEx_FUNC, - AdjustWindowRectEx_FUNC, AdjustWindowRectExForDpi_FUNC, AllowDarkModeForWindow_FUNC, AllowSetForegroundWindow_FUNC, diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OS.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OS.java index 267573ed8a2..75e6f4da1c0 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OS.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OS.java @@ -39,8 +39,6 @@ public class OS extends C { /** * Values taken from https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions */ - public static final int WIN32_BUILD_WIN8_1 = 9600; // "Windows 8.1" - public static final int WIN32_BUILD_WIN10_1607 = 14393; // "Windows 10 August 2016 Update" public static final int WIN32_BUILD_WIN10_1809 = 17763; // "Windows 10 October 2018 Update" public static final int WIN32_BUILD_WIN10_2004 = 19041; // "Windows 10 May 2020 Update" public static final int WIN32_BUILD_WIN11_21H2 = 22000; // Initial Windows 11 release @@ -2353,8 +2351,6 @@ public static int HRESULT_FROM_WIN32(int x) { * @param pdv cast=(PVOID) */ public static final native int AddFontResourceEx(char[] lpszFilename, int fl, long pdv); -public static final native boolean AdjustWindowRectEx (RECT lpRect, int dwStyle, boolean bMenu, int dwExStyle); -/** @method flags=dynamic */ public static final native boolean AdjustWindowRectExForDpi (RECT lpRect, int dwStyle, boolean bMenu, int dwExStyle, int dpi); /** @method flags=no_gen */ public static final native boolean AllowDarkModeForWindow(long hWnd, boolean allow); @@ -3006,7 +3002,6 @@ public static int HRESULT_FROM_WIN32(int x) { /** @param hWnd cast=(HWND) */ public static final native long GetSystemMenu (long hWnd, boolean bRevert); public static final native int GetSystemMetrics (int nIndex); -/** @method flags=dynamic */ public static final native int GetSystemMetricsForDpi (int nIndex, int dpi); /** @param hDC cast=(HDC) */ public static final native int GetTextColor (long hDC); @@ -4496,7 +4491,6 @@ public static int HRESULT_FROM_WIN32(int x) { public static final native boolean SystemParametersInfo (int uiAction, int uiParam, RECT pvParam, int fWinIni); public static final native boolean SystemParametersInfo (int uiAction, int uiParam, NONCLIENTMETRICS pvParam, int fWinIni); public static final native boolean SystemParametersInfo (int uiAction, int uiParam, int [] pvParam, int fWinIni); -/** @method flags=dynamic */ public static final native boolean SystemParametersInfoForDpi (int uiAction, int uiParam, NONCLIENTMETRICS pvParam, int fWinIni, int dpi); /** * @param lpKeyState cast=(PBYTE) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/ScalingSWTFontRegistry.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/ScalingSWTFontRegistry.java index fa67ea09f3b..55dc435c004 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/ScalingSWTFontRegistry.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/ScalingSWTFontRegistry.java @@ -97,12 +97,8 @@ private long createSystemFontHandle(int zoom) { } private static boolean fetchSystemParametersInfo(NONCLIENTMETRICS info, int targetZoom) { - if (OS.WIN32_BUILD >= OS.WIN32_BUILD_WIN10_1607) { - return OS.SystemParametersInfoForDpi(OS.SPI_GETNONCLIENTMETRICS, NONCLIENTMETRICS.sizeof, info, 0, - DPIUtil.mapZoomToDPI(targetZoom)); - } else { - return OS.SystemParametersInfo(OS.SPI_GETNONCLIENTMETRICS, 0, info, 0); - } + return OS.SystemParametersInfoForDpi(OS.SPI_GETNONCLIENTMETRICS, NONCLIENTMETRICS.sizeof, info, 0, + DPIUtil.mapZoomToDPI(targetZoom)); } @Override diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java index cf98f3bf2b4..7d4ef4988ea 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java @@ -2229,13 +2229,11 @@ public boolean print (GC gc) { int flags = OS.RDW_UPDATENOW | OS.RDW_ALLCHILDREN; OS.RedrawWindow (topHandle, null, 0, flags); int printWindowFlags = 0; - if (OS.WIN32_BUILD >= OS.WIN32_BUILD_WIN8_1) { - /* - * Undocumented flag in windows, which also allows the capturing - * of GPU-drawn areas, e.g. an embedded Edge WebView2. - */ - printWindowFlags |= OS.PW_RENDERFULLCONTENT; - } + /* + * Undocumented flag in windows, which also allows the capturing + * of GPU-drawn areas, e.g. an embedded Edge WebView2. + */ + printWindowFlags |= OS.PW_RENDERFULLCONTENT; printWidget (topHandle, hdc, gc, printWindowFlags); if (gdipGraphics != 0) { OS.RestoreDC(hdc, state); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java index 5d2c82aadc4..38775af168e 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java @@ -533,11 +533,7 @@ public class Display extends Device implements Executor { private static int ICON_SIZE_AT_100 = retrieveDefaultIconSize(); private static int retrieveDefaultIconSize() { - if (OS.WIN32_BUILD >= OS.WIN32_BUILD_WIN10_1607) { - return OS.GetSystemMetricsForDpi(OS.SM_CXICON, DPIUtil.mapZoomToDPI(100)); - } else { - return 32; - } + return OS.GetSystemMetricsForDpi(OS.SM_CXICON, DPIUtil.mapZoomToDPI(100)); } /* Skinning support */ @@ -5396,10 +5392,6 @@ private boolean setMonitorSpecificScaling(boolean activate) { } private boolean setDPIAwareness(int desiredDpiAwareness) { - if (OS.WIN32_BUILD < OS.WIN32_BUILD_WIN10_1607) { - System.err.println("***WARNING: the OS version does not support setting DPI awareness."); - return false; - } if (desiredDpiAwareness == OS.GetThreadDpiAwarenessContext()) { return true; } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Widget.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Widget.java index 605afbf781a..c663b92740b 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Widget.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Widget.java @@ -2703,23 +2703,11 @@ private static void handleDPIChange(Widget widget, int newZoom, float scalingFac } int getSystemMetrics(int nIndex) { - /* - * DPI dependent metrics were introduced after 2016 version of windows 10 - */ - if (OS.WIN32_BUILD >= OS.WIN32_BUILD_WIN10_1607) { - return OS.GetSystemMetricsForDpi(nIndex, DPIUtil.mapZoomToDPI(nativeZoom)); - } - return OS.GetSystemMetrics(nIndex); + return OS.GetSystemMetricsForDpi(nIndex, DPIUtil.mapZoomToDPI(nativeZoom)); } boolean adjustWindowRectEx(RECT lpRect, int dwStyle, boolean bMenu, int dwExStyle) { - /* - * DPI-dependent version of the method was introduced with Windows 10 Version 1607 - */ - if (OS.WIN32_BUILD >= OS.WIN32_BUILD_WIN10_1607) { - return OS.AdjustWindowRectExForDpi (lpRect, dwStyle, bMenu, dwExStyle, DPIUtil.mapZoomToDPI(nativeZoom)); - } - return OS.AdjustWindowRectEx(lpRect, dwStyle, bMenu, dwExStyle); + return OS.AdjustWindowRectExForDpi (lpRect, dwStyle, bMenu, dwExStyle, DPIUtil.mapZoomToDPI(nativeZoom)); } From 42e154c37972df76213c8459575c0957ee626c9c Mon Sep 17 00:00:00 2001 From: Eclipse Releng Bot Date: Mon, 5 May 2025 14:31:43 +0000 Subject: [PATCH 045/119] v4969r14 --- ...wt-cocoa-4969r13.jnilib => libswt-awt-cocoa-4969r14.jnilib} | 0 ...libswt-cocoa-4969r13.jnilib => libswt-cocoa-4969r14.jnilib} | 0 ...-pi-cocoa-4969r13.jnilib => libswt-pi-cocoa-4969r14.jnilib} | 0 ...wt-cocoa-4969r13.jnilib => libswt-awt-cocoa-4969r14.jnilib} | 0 ...libswt-cocoa-4969r13.jnilib => libswt-cocoa-4969r14.jnilib} | 0 ...-pi-cocoa-4969r13.jnilib => libswt-pi-cocoa-4969r14.jnilib} | 0 .../{libswt-atk-gtk-4969r13.so => libswt-atk-gtk-4969r14.so} | 0 .../{libswt-awt-gtk-4969r13.so => libswt-awt-gtk-4969r14.so} | 0 ...libswt-cairo-gtk-4969r13.so => libswt-cairo-gtk-4969r14.so} | 0 .../{libswt-glx-gtk-4969r13.so => libswt-glx-gtk-4969r14.so} | 0 .../{libswt-gtk-4969r13.so => libswt-gtk-4969r14.so} | 0 .../{libswt-pi3-gtk-4969r13.so => libswt-pi3-gtk-4969r14.so} | 0 ...bswt-webkit-gtk-4969r13.so => libswt-webkit-gtk-4969r14.so} | 0 .../{libswt-atk-gtk-4969r13.so => libswt-atk-gtk-4969r14.so} | 0 .../{libswt-awt-gtk-4969r13.so => libswt-awt-gtk-4969r14.so} | 0 ...libswt-cairo-gtk-4969r13.so => libswt-cairo-gtk-4969r14.so} | 0 .../{libswt-glx-gtk-4969r13.so => libswt-glx-gtk-4969r14.so} | 0 .../{libswt-gtk-4969r13.so => libswt-gtk-4969r14.so} | 0 .../{libswt-pi3-gtk-4969r13.so => libswt-pi3-gtk-4969r14.so} | 0 ...bswt-webkit-gtk-4969r13.so => libswt-webkit-gtk-4969r14.so} | 0 .../{libswt-atk-gtk-4969r13.so => libswt-atk-gtk-4969r14.so} | 0 .../{libswt-awt-gtk-4969r13.so => libswt-awt-gtk-4969r14.so} | 0 ...libswt-cairo-gtk-4969r13.so => libswt-cairo-gtk-4969r14.so} | 0 .../{libswt-glx-gtk-4969r13.so => libswt-glx-gtk-4969r14.so} | 0 .../{libswt-gtk-4969r13.so => libswt-gtk-4969r14.so} | 0 .../{libswt-pi3-gtk-4969r13.so => libswt-pi3-gtk-4969r14.so} | 0 ...bswt-webkit-gtk-4969r13.so => libswt-webkit-gtk-4969r14.so} | 0 .../{libswt-atk-gtk-4969r13.so => libswt-atk-gtk-4969r14.so} | 0 .../{libswt-awt-gtk-4969r13.so => libswt-awt-gtk-4969r14.so} | 0 ...libswt-cairo-gtk-4969r13.so => libswt-cairo-gtk-4969r14.so} | 0 .../{libswt-glx-gtk-4969r13.so => libswt-glx-gtk-4969r14.so} | 0 .../{libswt-gtk-4969r13.so => libswt-gtk-4969r14.so} | 0 .../{libswt-pi3-gtk-4969r13.so => libswt-pi3-gtk-4969r14.so} | 0 .../{libswt-pi4-gtk-4969r13.so => libswt-pi4-gtk-4969r14.so} | 0 ...bswt-webkit-gtk-4969r13.so => libswt-webkit-gtk-4969r14.so} | 0 .../swt-awt-win32-4969r13.dll | 3 --- .../swt-awt-win32-4969r14.dll | 3 +++ .../swt-gdip-win32-4969r13.dll | 3 --- .../swt-gdip-win32-4969r14.dll | 3 +++ .../swt-osversion-win32-4969r14.dll | 3 +++ .../swt-wgl-win32-4969r13.dll | 3 --- .../swt-wgl-win32-4969r14.dll | 3 +++ .../org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r13.dll | 3 --- .../org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r14.dll | 3 +++ .../swt-awt-win32-4969r13.dll | 3 --- .../swt-awt-win32-4969r14.dll | 3 +++ .../swt-gdip-win32-4969r13.dll | 3 --- .../swt-gdip-win32-4969r14.dll | 3 +++ .../swt-osversion-win32-4969r14.dll | 3 +++ .../swt-wgl-win32-4969r13.dll | 3 --- .../swt-wgl-win32-4969r14.dll | 3 +++ .../org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r13.dll | 3 --- .../org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r14.dll | 3 +++ .../common/org/eclipse/swt/internal/Library.java | 2 +- .../org.eclipse.swt/Eclipse SWT/common/library/make_common.mak | 2 +- 55 files changed, 32 insertions(+), 26 deletions(-) rename binaries/org.eclipse.swt.cocoa.macosx.aarch64/{libswt-awt-cocoa-4969r13.jnilib => libswt-awt-cocoa-4969r14.jnilib} (100%) rename binaries/org.eclipse.swt.cocoa.macosx.aarch64/{libswt-cocoa-4969r13.jnilib => libswt-cocoa-4969r14.jnilib} (100%) rename binaries/org.eclipse.swt.cocoa.macosx.aarch64/{libswt-pi-cocoa-4969r13.jnilib => libswt-pi-cocoa-4969r14.jnilib} (100%) rename binaries/org.eclipse.swt.cocoa.macosx.x86_64/{libswt-awt-cocoa-4969r13.jnilib => libswt-awt-cocoa-4969r14.jnilib} (100%) rename binaries/org.eclipse.swt.cocoa.macosx.x86_64/{libswt-cocoa-4969r13.jnilib => libswt-cocoa-4969r14.jnilib} (100%) rename binaries/org.eclipse.swt.cocoa.macosx.x86_64/{libswt-pi-cocoa-4969r13.jnilib => libswt-pi-cocoa-4969r14.jnilib} (100%) rename binaries/org.eclipse.swt.gtk.linux.aarch64/{libswt-atk-gtk-4969r13.so => libswt-atk-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.aarch64/{libswt-awt-gtk-4969r13.so => libswt-awt-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.aarch64/{libswt-cairo-gtk-4969r13.so => libswt-cairo-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.aarch64/{libswt-glx-gtk-4969r13.so => libswt-glx-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.aarch64/{libswt-gtk-4969r13.so => libswt-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.aarch64/{libswt-pi3-gtk-4969r13.so => libswt-pi3-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.aarch64/{libswt-webkit-gtk-4969r13.so => libswt-webkit-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.ppc64le/{libswt-atk-gtk-4969r13.so => libswt-atk-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.ppc64le/{libswt-awt-gtk-4969r13.so => libswt-awt-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.ppc64le/{libswt-cairo-gtk-4969r13.so => libswt-cairo-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.ppc64le/{libswt-glx-gtk-4969r13.so => libswt-glx-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.ppc64le/{libswt-gtk-4969r13.so => libswt-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.ppc64le/{libswt-pi3-gtk-4969r13.so => libswt-pi3-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.ppc64le/{libswt-webkit-gtk-4969r13.so => libswt-webkit-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.riscv64/{libswt-atk-gtk-4969r13.so => libswt-atk-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.riscv64/{libswt-awt-gtk-4969r13.so => libswt-awt-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.riscv64/{libswt-cairo-gtk-4969r13.so => libswt-cairo-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.riscv64/{libswt-glx-gtk-4969r13.so => libswt-glx-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.riscv64/{libswt-gtk-4969r13.so => libswt-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.riscv64/{libswt-pi3-gtk-4969r13.so => libswt-pi3-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.riscv64/{libswt-webkit-gtk-4969r13.so => libswt-webkit-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-atk-gtk-4969r13.so => libswt-atk-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-awt-gtk-4969r13.so => libswt-awt-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-cairo-gtk-4969r13.so => libswt-cairo-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-glx-gtk-4969r13.so => libswt-glx-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-gtk-4969r13.so => libswt-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-pi3-gtk-4969r13.so => libswt-pi3-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-pi4-gtk-4969r13.so => libswt-pi4-gtk-4969r14.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-webkit-gtk-4969r13.so => libswt-webkit-gtk-4969r14.so} (100%) delete mode 100755 binaries/org.eclipse.swt.win32.win32.aarch64/swt-awt-win32-4969r13.dll create mode 100755 binaries/org.eclipse.swt.win32.win32.aarch64/swt-awt-win32-4969r14.dll delete mode 100755 binaries/org.eclipse.swt.win32.win32.aarch64/swt-gdip-win32-4969r13.dll create mode 100755 binaries/org.eclipse.swt.win32.win32.aarch64/swt-gdip-win32-4969r14.dll create mode 100755 binaries/org.eclipse.swt.win32.win32.aarch64/swt-osversion-win32-4969r14.dll delete mode 100755 binaries/org.eclipse.swt.win32.win32.aarch64/swt-wgl-win32-4969r13.dll create mode 100755 binaries/org.eclipse.swt.win32.win32.aarch64/swt-wgl-win32-4969r14.dll delete mode 100755 binaries/org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r13.dll create mode 100755 binaries/org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r14.dll delete mode 100755 binaries/org.eclipse.swt.win32.win32.x86_64/swt-awt-win32-4969r13.dll create mode 100755 binaries/org.eclipse.swt.win32.win32.x86_64/swt-awt-win32-4969r14.dll delete mode 100755 binaries/org.eclipse.swt.win32.win32.x86_64/swt-gdip-win32-4969r13.dll create mode 100755 binaries/org.eclipse.swt.win32.win32.x86_64/swt-gdip-win32-4969r14.dll create mode 100755 binaries/org.eclipse.swt.win32.win32.x86_64/swt-osversion-win32-4969r14.dll delete mode 100755 binaries/org.eclipse.swt.win32.win32.x86_64/swt-wgl-win32-4969r13.dll create mode 100755 binaries/org.eclipse.swt.win32.win32.x86_64/swt-wgl-win32-4969r14.dll delete mode 100755 binaries/org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r13.dll create mode 100755 binaries/org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r14.dll diff --git a/binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-awt-cocoa-4969r13.jnilib b/binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-awt-cocoa-4969r14.jnilib similarity index 100% rename from binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-awt-cocoa-4969r13.jnilib rename to binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-awt-cocoa-4969r14.jnilib diff --git a/binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-cocoa-4969r13.jnilib b/binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-cocoa-4969r14.jnilib similarity index 100% rename from binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-cocoa-4969r13.jnilib rename to binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-cocoa-4969r14.jnilib diff --git a/binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-pi-cocoa-4969r13.jnilib b/binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-pi-cocoa-4969r14.jnilib similarity index 100% rename from binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-pi-cocoa-4969r13.jnilib rename to binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-pi-cocoa-4969r14.jnilib diff --git a/binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-awt-cocoa-4969r13.jnilib b/binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-awt-cocoa-4969r14.jnilib similarity index 100% rename from binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-awt-cocoa-4969r13.jnilib rename to binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-awt-cocoa-4969r14.jnilib diff --git a/binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-cocoa-4969r13.jnilib b/binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-cocoa-4969r14.jnilib similarity index 100% rename from binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-cocoa-4969r13.jnilib rename to binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-cocoa-4969r14.jnilib diff --git a/binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-pi-cocoa-4969r13.jnilib b/binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-pi-cocoa-4969r14.jnilib similarity index 100% rename from binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-pi-cocoa-4969r13.jnilib rename to binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-pi-cocoa-4969r14.jnilib diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-atk-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-atk-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-atk-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-atk-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-awt-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-awt-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-awt-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-awt-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-cairo-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-cairo-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-cairo-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-cairo-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-glx-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-glx-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-glx-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-glx-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-pi3-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-pi3-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-pi3-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-pi3-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-webkit-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-webkit-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-webkit-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-webkit-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-atk-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-atk-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-atk-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-atk-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-awt-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-awt-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-awt-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-awt-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-cairo-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-cairo-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-cairo-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-cairo-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-glx-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-glx-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-glx-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-glx-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-pi3-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-pi3-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-pi3-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-pi3-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-webkit-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-webkit-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-webkit-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-webkit-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-atk-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-atk-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-atk-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-atk-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-awt-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-awt-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-awt-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-awt-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-cairo-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-cairo-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-cairo-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-cairo-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-glx-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-glx-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-glx-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-glx-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-pi3-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-pi3-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-pi3-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-pi3-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-webkit-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-webkit-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-webkit-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-webkit-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-atk-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-atk-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-atk-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-atk-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-awt-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-awt-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-awt-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-awt-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-cairo-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-cairo-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-cairo-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-cairo-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-glx-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-glx-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-glx-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-glx-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi3-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi3-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi3-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi3-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi4-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi4-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi4-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi4-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-webkit-gtk-4969r13.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-webkit-gtk-4969r14.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-webkit-gtk-4969r13.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-webkit-gtk-4969r14.so diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-awt-win32-4969r13.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-awt-win32-4969r13.dll deleted file mode 100755 index 9ed6f876c0e..00000000000 --- a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-awt-win32-4969r13.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:82cb3b64f667e0fc14d26b48c823120766e275713c1c2d3261c48a6c7ce62c17 -size 111208 diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-awt-win32-4969r14.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-awt-win32-4969r14.dll new file mode 100755 index 00000000000..b139bf878e0 --- /dev/null +++ b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-awt-win32-4969r14.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b92284f76b7d0f985b5618ab77ad32f45d33e411ee149310d3591a97ceff8cc5 +size 111208 diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-gdip-win32-4969r13.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-gdip-win32-4969r13.dll deleted file mode 100755 index e64d82214c8..00000000000 --- a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-gdip-win32-4969r13.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a7ad22646dc644a2d630154e346d58ee1d21af05ce4eca88a92ff1e072b67ae5 -size 160360 diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-gdip-win32-4969r14.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-gdip-win32-4969r14.dll new file mode 100755 index 00000000000..c7098b9b833 --- /dev/null +++ b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-gdip-win32-4969r14.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:167b430709909a9040aa34ae88b95b88dd29ec015c36f288cd70f673b91b7b13 +size 160360 diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-osversion-win32-4969r14.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-osversion-win32-4969r14.dll new file mode 100755 index 00000000000..0b99972e7b0 --- /dev/null +++ b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-osversion-win32-4969r14.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ed29b2a5f8f6b204769ed7da71d2b0b196cf26da508549e1676f125d9863930 +size 111720 diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-wgl-win32-4969r13.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-wgl-win32-4969r13.dll deleted file mode 100755 index 74377d9ba6c..00000000000 --- a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-wgl-win32-4969r13.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8d882aa99e801c1776d12664fcdeecf9c3b83ae9d55c8981b045e222ffadd720 -size 114280 diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-wgl-win32-4969r14.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-wgl-win32-4969r14.dll new file mode 100755 index 00000000000..5e37bb5e6d3 --- /dev/null +++ b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-wgl-win32-4969r14.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cff188d58767dd1abbc4ca085f703d41ebf9b94d657120c4cb47af11ad65ef4 +size 114280 diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r13.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r13.dll deleted file mode 100755 index 9792547d6bf..00000000000 --- a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r13.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ecca9f796b35a27d73f88ac68881deef05d38cdd72c12a35d0ee392d1ba1c3bd -size 708712 diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r14.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r14.dll new file mode 100755 index 00000000000..a83c522f1f9 --- /dev/null +++ b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r14.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af7f9e35a4aea619a1f0468ca0c211e19739ed3bc721ba6f908a55f796a02eb3 +size 708200 diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-awt-win32-4969r13.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-awt-win32-4969r13.dll deleted file mode 100755 index 1b47208c816..00000000000 --- a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-awt-win32-4969r13.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7601b2f4176afa1af582aa71009d6c1ddf09887c388cd8818a2d46ca06be0999 -size 121960 diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-awt-win32-4969r14.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-awt-win32-4969r14.dll new file mode 100755 index 00000000000..7e1354b429a --- /dev/null +++ b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-awt-win32-4969r14.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b57bebbd78bc182a0040501934a07aa7ca0a7d7eacbb8975454dedf2051e041e +size 121960 diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-gdip-win32-4969r13.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-gdip-win32-4969r13.dll deleted file mode 100755 index 7282ee943bc..00000000000 --- a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-gdip-win32-4969r13.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:199d246194fdcac29bc7078c8a0e3711cc0b3b0337a15ba85d3427c7e230821e -size 170600 diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-gdip-win32-4969r14.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-gdip-win32-4969r14.dll new file mode 100755 index 00000000000..083c829019e --- /dev/null +++ b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-gdip-win32-4969r14.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84f5278b6d60579bbc9c1e2e3c1b53bc199043eb84ffedab2834cca9c9d4ca7f +size 170600 diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-osversion-win32-4969r14.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-osversion-win32-4969r14.dll new file mode 100755 index 00000000000..11def45299f --- /dev/null +++ b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-osversion-win32-4969r14.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be1bdf73a49f458d4a36b590b85e3ea397fa7efd1d1e229585a8ffcaff04dd50 +size 123496 diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-wgl-win32-4969r13.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-wgl-win32-4969r13.dll deleted file mode 100755 index d82a405e8ab..00000000000 --- a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-wgl-win32-4969r13.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:387741e36f5d3c1897884fdc2b383a9b443c86d455f601b091633bf5cc71cb5f -size 125544 diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-wgl-win32-4969r14.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-wgl-win32-4969r14.dll new file mode 100755 index 00000000000..78d9342d03e --- /dev/null +++ b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-wgl-win32-4969r14.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca5bccaafa16149c52a520cc67e367c9d5f8423c86f0451ab1c1cd87dae4b2e5 +size 125544 diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r13.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r13.dll deleted file mode 100755 index b908c7d6d5a..00000000000 --- a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r13.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:442a181c7a50691f09f0bf45ec8946ca64ee0adcda383ef07210bb705b9340f5 -size 792680 diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r14.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r14.dll new file mode 100755 index 00000000000..6afb16dfe7a --- /dev/null +++ b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r14.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b0ff443ec6e1f95ca5b2fd07ad50f0a541e8cf112a755303454bc497a8834d6 +size 792168 diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/Library.java b/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/Library.java index 5f4472c73c8..4d1541dd2b7 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/Library.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/Library.java @@ -40,7 +40,7 @@ public class Library { /** * SWT revision number (must be >= 0) */ - static int REVISION = 13; + static int REVISION = 14; /** * The JAVA and SWT versions diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/library/make_common.mak b/bundles/org.eclipse.swt/Eclipse SWT/common/library/make_common.mak index 9733aef6ace..764acb9dbf1 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/library/make_common.mak +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/library/make_common.mak @@ -14,4 +14,4 @@ maj_ver=4 min_ver=969 -rev=13 +rev=14 From 6d4dc1c935f7c291e7e33083615a02cf63c8386d Mon Sep 17 00:00:00 2001 From: Shahzaib Ibrahim Date: Tue, 29 Apr 2025 18:07:23 +0200 Subject: [PATCH 046/119] Artifacts due to rounding errors in StyledText While selecting the text in code editor the styled text have some artifacts/blank lines due to rounding error while translating points to pixel. Now we are passing the x and y in drawInPixels method in points instead of pixels and expecting it to be scaled up in the method. --- .../org/eclipse/swt/graphics/TextLayout.java | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/TextLayout.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/TextLayout.java index f56955adfc1..af092a85353 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/TextLayout.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/TextLayout.java @@ -705,7 +705,7 @@ long createGdipBrush(Color color, int alpha) { */ public void draw (GC gc, int x, int y) { checkLayout(); - drawInPixels(gc, DPIUtil.scaleUp(getDevice(), x, getZoom(gc)), DPIUtil.scaleUp(getDevice(), y, getZoom(gc))); + drawInPixels(gc, x, y); } /** @@ -729,11 +729,11 @@ public void draw (GC gc, int x, int y) { */ public void draw (GC gc, int x, int y, int selectionStart, int selectionEnd, Color selectionForeground, Color selectionBackground) { checkLayout(); - drawInPixels(gc, DPIUtil.scaleUp(getDevice(), x, getZoom(gc)), DPIUtil.scaleUp(getDevice(), y, getZoom(gc)), selectionStart, selectionEnd, selectionForeground, selectionBackground); + drawInPixels(gc, x, y, selectionStart, selectionEnd, selectionForeground, selectionBackground); } -void drawInPixels (GC gc, int x, int y, int selectionStart, int selectionEnd, Color selectionForeground, Color selectionBackground) { - drawInPixels(gc, x, y, selectionStart, selectionEnd, selectionForeground, selectionBackground, 0); +void drawInPixels (GC gc, int xInPoints, int yInPoints, int selectionStart, int selectionEnd, Color selectionForeground, Color selectionBackground) { + drawInPixels(gc, xInPoints, yInPoints, selectionStart, selectionEnd, selectionForeground, selectionBackground, 0); } /** @@ -765,7 +765,7 @@ void drawInPixels (GC gc, int x, int y, int selectionStart, int selectionEnd, Co */ public void draw (GC gc, int x, int y, int selectionStart, int selectionEnd, Color selectionForeground, Color selectionBackground, int flags) { checkLayout(); - drawInPixels(gc, DPIUtil.scaleUp(getDevice(), x, getZoom(gc)), DPIUtil.scaleUp(getDevice(), y, getZoom(gc)), selectionStart, selectionEnd, selectionForeground, selectionBackground, flags); + drawInPixels(gc, x, y, selectionStart, selectionEnd, selectionForeground, selectionBackground, flags); } private int getNativeZoom(GC gc) { @@ -783,11 +783,11 @@ private int getZoom() { return DPIUtil.getZoomForAutoscaleProperty(nativeZoom); } -void drawInPixels (GC gc, int x, int y) { - drawInPixels(gc, x, y, -1, -1, null, null); +void drawInPixels (GC gc, int xInPoints, int yInPoints) { + drawInPixels(gc, xInPoints, yInPoints, -1, -1, null, null); } -void drawInPixels (GC gc, int x, int y, int selectionStart, int selectionEnd, Color selectionForeground, Color selectionBackground, int flags) { +void drawInPixels (GC gc, int xInPoints, int yInPoints, int selectionStart, int selectionEnd, Color selectionForeground, Color selectionBackground, int flags) { computeRuns(gc); if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT); @@ -795,7 +795,7 @@ void drawInPixels (GC gc, int x, int y, int selectionStart, int selectionEnd, Co if (selectionBackground != null && selectionBackground.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT); int length = text.length(); if (length == 0 && flags == 0) return; - y += getScaledVerticalIndent(); + yInPoints += verticalIndentInPoints; long hdc = gc.handle; Rectangle clip = gc.getClippingInPixels(); GCData data = gc.data; @@ -835,12 +835,15 @@ void drawInPixels (GC gc, int x, int y, int selectionStart, int selectionEnd, Co selectionEnd = translateOffset(Math.min(Math.max(0, selectionEnd), length - 1)); } } + int x = DPIUtil.scaleUp(getDevice(), xInPoints, getZoom(gc)); RECT rect = new RECT(); OS.SetBkMode(hdc, OS.TRANSPARENT); for (int line=0; line= clip.x) { if (!run.lineBreak || run.softBreak) { if (extents) { - OS.SetRect(rect, drawX, drawY, drawX + run.width, drawY + lineHeightWithSpacing); + OS.SetRect(rect, drawX, drawY, drawX + run.width, drawYWithLineHeightWithSpacing); }else { - OS.SetRect(rect, drawX, drawY, drawX + run.width, drawY + lineHeight); + OS.SetRect(rect, drawX, drawY, drawX + run.width, drawYWithLineHeight); } if (gdip) { drawRunBackgroundGDIP(run, gdipGraphics, rect, selectionStart, selectionEnd, alpha, gdipSelBackground, hasSelection); From be95610919a8dc344d231d27d75003725ebf7197 Mon Sep 17 00:00:00 2001 From: Shahzaib Ibrahim Date: Mon, 5 May 2025 14:42:32 +0200 Subject: [PATCH 047/119] Fix for normal monitor --- .../win32/org/eclipse/swt/graphics/TextLayout.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/TextLayout.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/TextLayout.java index af092a85353..23f745c6cc8 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/TextLayout.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/TextLayout.java @@ -845,7 +845,7 @@ void drawInPixels (GC gc, int xInPoints, int yInPoints, int selectionStart, int int drawYWithLineHeight = DPIUtil.scaleUp(getDevice(), yInPoints + lineY[line+1] - lineSpacingInPoints, getZoom(gc)); int drawYWithLineHeightWithSpacing = DPIUtil.scaleUp(getDevice(), yInPoints + lineY[line+1], getZoom(gc)); int lineHeight = DPIUtil.scaleUp(getDevice(), lineY[line+1] - lineY[line] - lineSpacingInPoints, getZoom(gc)); - int lineHeightWithSpacing = DPIUtil.scaleUp(getDevice(), lineY[line+1] - lineY[line], getZoom(gc)); + int lineHeightWithSpacing = drawYWithLineHeightWithSpacing - drawY; //Draw last line selection boolean extents = false; if ((flags & (SWT.FULL_SELECTION | SWT.DELIMITER_SELECTION)) != 0 && (hasSelection || (flags & SWT.LAST_LINE_SELECTION) != 0)) { @@ -873,7 +873,7 @@ void drawInPixels (GC gc, int xInPoints, int yInPoints, int selectionStart, int Gdip.Graphics_FillRectangle(gdipGraphics, gdipSelBackground, drawX + lineWidthInPixels[line], drawY, width, lineHeightWithSpacing); } else { OS.SelectObject(hdc, selBackground); - OS.PatBlt(hdc, drawX + lineWidthInPixels[line], drawY, width, drawYWithLineHeightWithSpacing, OS.PATCOPY); + OS.PatBlt(hdc, drawX + lineWidthInPixels[line], drawY, width, lineHeightWithSpacing, OS.PATCOPY); } } } From 334e7a3089749c0e32fe767e0150472c07bd1860 Mon Sep 17 00:00:00 2001 From: Aleksandar Kurtakov Date: Mon, 5 May 2025 18:40:38 +0300 Subject: [PATCH 048/119] [GTK] Simplify Tree/Table This is continuation of https://github.com/eclipse-platform/eclipse.platform.swt/pull/2059 . There is no point in having these extra methods (and double checkWidget method calls for so many things). --- .../gtk/org/eclipse/swt/widgets/Table.java | 24 ++-------------- .../org/eclipse/swt/widgets/TableColumn.java | 12 +------- .../org/eclipse/swt/widgets/TableItem.java | 17 +---------- .../gtk/org/eclipse/swt/widgets/Tree.java | 28 +++---------------- .../org/eclipse/swt/widgets/TreeColumn.java | 12 +------- .../gtk/org/eclipse/swt/widgets/TreeItem.java | 20 ------------- 6 files changed, 9 insertions(+), 104 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 062f150ac59..ac264052508 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 @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2022 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -1157,7 +1157,7 @@ boolean dragDetect (int x, int y, boolean filter, boolean dragOnTimeout, boolean long [] path = new long [1]; if (GTK.gtk_gesture_drag_get_start_point(dragGesture, startX, startY)) { if (getHeaderVisible()) { - startY[0]-= getHeaderHeightInPixels(); + startY[0]-= getHeaderHeight(); } if (GTK.gtk_tree_view_get_path_at_pos (handle, (int) startX[0], (int) startY[0], path, null, null, null)) { if (path [0] != 0) { @@ -1434,11 +1434,6 @@ TableItem getFocusItem () { */ public int getGridLineWidth () { checkWidget (); - return getGridLineWidthInPixels (); -} - -int getGridLineWidthInPixels () { - checkWidget(); return 0; } @@ -1488,11 +1483,6 @@ public Color getHeaderForeground () { */ public int getHeaderHeight () { checkWidget (); - return getHeaderHeightInPixels (); -} - -int getHeaderHeightInPixels () { - checkWidget(); if (!GTK.gtk_tree_view_get_headers_visible(handle)) return 0; int height = 0; @@ -1598,11 +1588,6 @@ public TableItem getItem (int index) { *

                                            */ public TableItem getItem (Point point) { - checkWidget(); - return getItemInPixels(point); -} - -TableItem getItemInPixels (Point point) { checkWidget(); if (point == null) error (SWT.ERROR_NULL_ARGUMENT); long [] path = new long [1]; @@ -1657,11 +1642,6 @@ public int getItemCount () { */ public int getItemHeight () { checkWidget (); - return getItemHeightInPixels (); -} - -int getItemHeightInPixels () { - checkWidget(); int height = 0; if (itemCount == 0) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java index df5bf3aae62..f030a0fe9d6 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java @@ -319,11 +319,6 @@ public String getToolTipText () { */ public int getWidth () { checkWidget (); - return getWidthInPixels(); -} - -int getWidthInPixels () { - checkWidget(); if (!GTK.gtk_tree_view_column_get_visible (handle)) { return 0; } @@ -507,7 +502,7 @@ public void pack () { } OS.g_free (iter); } - setWidthInPixels(width); + setWidth(width); } @Override @@ -760,11 +755,6 @@ public void setToolTipText(String string) { */ public void setWidth (int width) { checkWidget (); - setWidthInPixels (width); -} - -void setWidthInPixels (int width) { - checkWidget(); if (width < 0) return; if (width == lastWidth) return; if (width > 0) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableItem.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableItem.java index eb67292a881..cc2c8d8ca8c 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableItem.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableItem.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2019 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -394,11 +394,6 @@ public Color getBackground (int index) { */ public Rectangle getBounds (int index) { checkWidget (); - return getBoundsInPixels (index); -} - -Rectangle getBoundsInPixels (int index) { - checkWidget(); if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED); long parentHandle = parent.handle; long column = 0; @@ -601,11 +596,6 @@ public Image getImage (int index) { *
                                          */ public Rectangle getImageBounds (int index) { - checkWidget (); - return getImageBoundsInPixels (index); -} - -Rectangle getImageBoundsInPixels (int index) { checkWidget (); if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED); long parentHandle = parent.handle; @@ -742,11 +732,6 @@ public String getText (int index) { * @since 3.3 */ public Rectangle getTextBounds (int index) { - checkWidget (); - return getTextBoundsInPixels (index); -} - -Rectangle getTextBoundsInPixels (int index) { checkWidget (); if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED); int count = Math.max (1, parent.getColumnCount ()); 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 d81bdc0aa69..1c872174a01 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 @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2022 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -645,7 +645,7 @@ Point computeSizeInPixels (int wHint, int hHint, boolean changed) { * the number of items at the root of the tree. */ if (hHint == SWT.DEFAULT && size.y == getHeaderHeight()) { - int itemHeight = getItemHeightInPixels(); + int itemHeight = getItemHeight(); // Initialize to height of root items & header size.y = getItemCount() * itemHeight + getHeaderHeight(); @@ -1320,7 +1320,7 @@ boolean dragDetect (int x, int y, boolean filter, boolean dragOnTimeout, boolean long [] path = new long [1]; if (GTK.gtk_gesture_drag_get_start_point(dragGesture, startX, startY)) { if (getHeaderVisible()) { - startY[0]-= getHeaderHeightInPixels(); + startY[0]-= getHeaderHeight(); } if (GTK.gtk_tree_view_get_path_at_pos (handle, (int) startX[0], (int) startY[0], path, null, null, null)) { if (path [0] != 0) { @@ -1602,11 +1602,6 @@ TreeItem getFocusItem () { */ public int getGridLineWidth () { checkWidget (); - return getGridLineWidthInPixels (); -} - -int getGridLineWidthInPixels () { - checkWidget(); return 0; } @@ -1656,11 +1651,6 @@ public Color getHeaderForeground () { */ public int getHeaderHeight () { checkWidget (); - return getHeaderHeightInPixels (); -} - -int getHeaderHeightInPixels () { - checkWidget(); if (!GTK.gtk_tree_view_get_headers_visible(handle)) return 0; int height = 0; @@ -1771,11 +1761,6 @@ public TreeItem getItem (int index) { */ public TreeItem getItem (Point point) { checkWidget(); - return getItemInPixels(point); -} - -TreeItem getItemInPixels (Point point) { - checkWidget (); if (point == null) error (SWT.ERROR_NULL_ARGUMENT); long [] path = new long [1]; GTK.gtk_widget_realize (handle); @@ -1846,11 +1831,6 @@ public int getItemCount () { */ public int getItemHeight () { checkWidget (); - return getItemHeightInPixels (); -} - -int getItemHeightInPixels () { - checkWidget(); int height = 0; int itemCount = GTK.gtk_tree_model_iter_n_children(modelHandle, 0); @@ -3462,7 +3442,7 @@ public void setInsertMark (TreeItem item, boolean before) { } if (item.isDisposed()) error (SWT.ERROR_INVALID_ARGUMENT); if (item.parent != this) return; - Rectangle rect = item.getBoundsInPixels(); + Rectangle rect = item.getBounds(); long [] path = new long [1]; GTK.gtk_widget_realize (handle); if (!GTK.gtk_tree_view_get_path_at_pos(handle, rect.x, rect.y, path, null, null, null)) return; diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java index 608ccf9a2dd..3898fc2518d 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java @@ -321,11 +321,6 @@ public String getToolTipText () { */ public int getWidth () { checkWidget (); - return getWidthInPixels (); -} - -int getWidthInPixels () { - checkWidget(); if (!GTK.gtk_tree_view_column_get_visible (handle)) { return 0; } @@ -487,7 +482,7 @@ public void pack () { } OS.g_free (iter); } - setWidthInPixels(width); + setWidth(width); } @Override @@ -736,11 +731,6 @@ public void setToolTipText(String string) { *
                                        */ public void setWidth(int width) { - checkWidget(); - setWidthInPixels(width); -} - -void setWidthInPixels(int width) { checkWidget(); if (width < 0) return; if (width == lastWidth) return; diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeItem.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeItem.java index d6e24d712d5..80bea87334e 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeItem.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeItem.java @@ -407,12 +407,7 @@ public Color getBackground (int index) { */ public Rectangle getBounds (int index) { checkWidget (); - return getBoundsInPixels (index); -} - -Rectangle getBoundsInPixels (int index) { // TODO fully test on early and later versions of GTK - checkWidget(); if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED); long parentHandle = parent.handle; long column = 0; @@ -454,13 +449,8 @@ Rectangle getBoundsInPixels (int index) { */ public Rectangle getBounds () { checkWidget (); - return getBoundsInPixels (); -} - -Rectangle getBoundsInPixels () { // TODO fully test on early and later versions of GTK // shifted a bit too far right on later versions of GTK - however, old Tree also had this problem - checkWidget (); if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED); long parentHandle = parent.handle; long column = GTK.gtk_tree_view_get_column (parentHandle, 0); @@ -694,12 +684,7 @@ public Image getImage (int index) { */ public Rectangle getImageBounds (int index) { checkWidget (); - return getImageBoundsInPixels(index); -} - -Rectangle getImageBoundsInPixels (int index) { // TODO fully test on early and later versions of GTK - checkWidget (); if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED); long parentHandle = parent.handle; long column = 0; @@ -927,11 +912,6 @@ public String getText (int index) { * @since 3.3 */ public Rectangle getTextBounds (int index) { - checkWidget (); - return getTextBoundsInPixels(index); -} - -Rectangle getTextBoundsInPixels (int index) { checkWidget (); if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED); int count = Math.max (1, parent.getColumnCount ()); From ed397b1865962ee8465a084be5489bf2f1834d56 Mon Sep 17 00:00:00 2001 From: Aleksandar Kurtakov Date: Mon, 5 May 2025 19:27:44 +0300 Subject: [PATCH 049/119] [GTK] Remove more *InPixels method They are not needed at all, double some calls (like checkWidget()), and overall complicate debugging and understanding the codebase. Continuation of https://github.com/eclipse-platform/eclipse.platform.swt/pull/2100 --- .../gtk/org/eclipse/swt/widgets/Canvas.java | 8 +-- .../gtk/org/eclipse/swt/widgets/Caret.java | 55 ++----------------- .../gtk/org/eclipse/swt/widgets/Combo.java | 14 +---- .../gtk/org/eclipse/swt/widgets/Control.java | 4 +- .../org/eclipse/swt/widgets/ExpandBar.java | 5 -- .../org/eclipse/swt/widgets/ExpandItem.java | 10 ---- .../gtk/org/eclipse/swt/widgets/List.java | 7 +-- .../gtk/org/eclipse/swt/widgets/Menu.java | 12 +--- .../org/eclipse/swt/widgets/ScrollBar.java | 5 -- .../gtk/org/eclipse/swt/widgets/Shell.java | 49 +++-------------- .../gtk/org/eclipse/swt/widgets/TabItem.java | 5 -- .../gtk/org/eclipse/swt/widgets/Text.java | 12 +--- .../gtk/org/eclipse/swt/widgets/ToolBar.java | 7 +-- .../gtk/org/eclipse/swt/widgets/ToolItem.java | 15 ----- .../gtk/org/eclipse/swt/widgets/ToolTip.java | 12 +--- .../gtk/org/eclipse/swt/widgets/Tracker.java | 16 ------ 16 files changed, 23 insertions(+), 213 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java index c7ca70bca35..5142e0ccb67 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2018 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -317,12 +317,6 @@ public void scroll (int destX, int destY, int x, int y, int width, int height, b * as to why it's unneeded is left as a TODO. See bug 546274. */ if (GTK.GTK4) return; - Point destination = new Point (destX, destY); - Rectangle srcRect = new Rectangle (x, y, width, height); - scrollInPixels(destination.x, destination.y, srcRect.x, srcRect.y, srcRect.width, srcRect.height, all); -} - -void scrollInPixels (int destX, int destY, int x, int y, int width, int height, boolean all) { if ((style & SWT.MIRRORED) != 0) { int clientWidth = getClientWidth (); x = clientWidth - width - x; diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Caret.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Caret.java index 0472cce4956..208ed7f0432 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Caret.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Caret.java @@ -141,11 +141,6 @@ private void drawInCellEditor(long window) { *
                                      */ public Rectangle getBounds () { - checkWidget(); - return getBoundsInPixels(); -} - -Rectangle getBoundsInPixels () { checkWidget(); if (image != null) { Rectangle rect = image.getBoundsInPixels (); @@ -201,11 +196,6 @@ public Image getImage () { *
                                    */ public Point getLocation () { - checkWidget(); - return getLocationInPixels(); -} - -Point getLocationInPixels () { checkWidget(); return new Point (x, y); } @@ -236,11 +226,6 @@ public Canvas getParent () { *
                                  */ public Point getSize () { - checkWidget(); - return getSizeInPixels(); -} - -Point getSizeInPixels () { checkWidget(); if (image != null) { Rectangle rect = image.getBoundsInPixels (); @@ -348,11 +333,6 @@ void releaseWidget () { *
                                */ public void setBounds (int x, int y, int width, int height) { - checkWidget(); - setBounds (new Rectangle (x, y, width, height)); -} - -void setBoundsInPixels (int x, int y, int width, int height) { checkWidget(); if (this.x == x && this.y == y && this.width == width && this.height == height) return; boolean isFocus = isFocusCaret (); @@ -377,14 +357,9 @@ void setBoundsInPixels (int x, int y, int width, int height) { *
                              */ public void setBounds (Rectangle rect) { - checkWidget(); - setBoundsInPixels(rect); -} - -void setBoundsInPixels (Rectangle rect) { checkWidget(); if (rect == null) error (SWT.ERROR_NULL_ARGUMENT); - setBoundsInPixels (rect.x, rect.y, rect.width, rect.height); + setBounds (rect.x, rect.y, rect.width, rect.height); } void setFocus () { @@ -457,12 +432,7 @@ public void setImage (Image image) { */ public void setLocation (int x, int y) { checkWidget(); - setLocation (new Point (x, y)); -} - -void setLocationInPixels (int x, int y) { - checkWidget(); - setBoundsInPixels (x, y, width, height); + setBounds (x, y, width, height); } /** @@ -478,14 +448,9 @@ void setLocationInPixels (int x, int y) { *
                            */ public void setLocation (Point location) { - checkWidget(); - setLocationInPixels (location); -} - -void setLocationInPixels (Point location) { checkWidget(); if (location == null) error (SWT.ERROR_NULL_ARGUMENT); - setLocationInPixels (location.x, location.y); + setLocation (location.x, location.y); } /** @@ -501,12 +466,7 @@ void setLocationInPixels (Point location) { */ public void setSize (int width, int height) { checkWidget(); - setSize (new Point (width,height)); -} - -void setSizeInPixels (int width, int height) { - checkWidget(); - setBoundsInPixels (x, y, width, height); + setBounds (x, y, width, height); } /** @@ -523,14 +483,9 @@ void setSizeInPixels (int width, int height) { *
                          */ public void setSize (Point size) { - checkWidget(); - setSizeInPixels(size); -} - -void setSizeInPixels (Point size) { checkWidget(); if (size == null) error (SWT.ERROR_NULL_ARGUMENT); - setSizeInPixels (size.x, size.y); + setSize (size.x, size.y); } /** diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java index db77f57fdd9..c03ef9f3afa 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java @@ -1080,12 +1080,6 @@ long eventSurface () { * @since 3.8 */ public Point getCaretLocation () { - checkWidget (); - return getCaretLocationInPixels(); -} - - -Point getCaretLocationInPixels () { checkWidget (); if ((style & SWT.READ_ONLY) != 0) { return new Point (0, 0); @@ -1389,12 +1383,6 @@ String getText (int start, int stop) { *
                        */ public int getTextHeight () { - checkWidget(); - return getTextHeightInPixels(); -} - - -int getTextHeightInPixels () { checkWidget(); GtkRequisition requisition = new GtkRequisition (); gtk_widget_get_preferred_size (handle, requisition); @@ -2275,7 +2263,7 @@ void setBackgroundGdkRGBA (long context, long handle, GdkRGBA rgba) { @Override int setBounds (int x, int y, int width, int height, boolean move, boolean resize) { int newHeight = height; - if (resize) newHeight = Math.max (getTextHeightInPixels (), height); + if (resize) newHeight = Math.max (getTextHeight (), height); return super.setBounds (x, y, width, newHeight, move, resize); } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java index e708d5b94eb..b6e6d58d2d4 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java @@ -6320,14 +6320,14 @@ boolean showMenu (int x, int y, int detail) { if (temp != 0) OS.g_object_unref(temp); - menu.setLocationInPixels(x, y); + menu.setLocation(x, y); menu.setVisible(true); return true; } else { Rectangle rect = event.getBounds (); if (rect.x != x || rect.y != y) { - menu.setLocationInPixels (rect.x, rect.y); + menu.setLocation (rect.x, rect.y); } menu.setVisible (true); return true; diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandBar.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandBar.java index 96b966c39d7..cf7146bc71b 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandBar.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandBar.java @@ -483,11 +483,6 @@ void setOrientation (boolean create) { *
                      */ public void setSpacing (int spacing) { - checkWidget (); - setSpacingInPixels(spacing); -} - -void setSpacingInPixels (int spacing) { checkWidget (); if (spacing < 0) return; if (spacing == this.spacing) return; diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandItem.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandItem.java index 4d054a6df38..72c1b76c451 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandItem.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandItem.java @@ -232,11 +232,6 @@ public boolean getExpanded() { */ public int getHeaderHeight () { checkWidget (); - return getHeaderHeightInPixels (); -} - -int getHeaderHeightInPixels() { - checkWidget(); GtkAllocation allocation = new GtkAllocation(); GTK.gtk_widget_get_allocation(GTK.gtk_expander_get_label_widget(handle), allocation); @@ -506,11 +501,6 @@ void setForegroundRGBA (GdkRGBA rgba) { *
                    */ public void setHeight (int height) { - checkWidget (); - setHeightInPixels(height); -} - -void setHeightInPixels (int height) { checkWidget (); if (height < 0) return; this.height = height; diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java index fdb35088057..9cfc95aa86a 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java @@ -275,7 +275,7 @@ Point computeSizeInPixels (int wHint, int hHint, boolean changed) { * based on the number of items in the table */ if (size.y == 0 && hHint == SWT.DEFAULT) { - size.y = getItemCount() * getItemHeightInPixels(); + size.y = getItemCount() * getItemHeight(); } /* @@ -536,11 +536,6 @@ public int getItemCount () { */ public int getItemHeight () { checkWidget(); - return getItemHeightInPixels(); -} - -int getItemHeightInPixels() { - checkWidget(); final int BASE_ITEM_PADDING = 1; diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java index ce5a83fad8b..c702eb7b208 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java @@ -1198,11 +1198,6 @@ public void setEnabled(boolean enabled) { */ public void setLocation (int x, int y) { checkWidget (); - setLocation (new Point (x, y)); -} - -void setLocationInPixels (int x, int y) { - checkWidget(); if ((style & (SWT.BAR | SWT.DROP_DOWN)) != 0) return; this.x = x; this.y = y; @@ -1235,13 +1230,8 @@ void setLocationInPixels (int x, int y) { */ public void setLocation (Point location) { checkWidget (); - setLocationInPixels (location); -} - -void setLocationInPixels (Point location) { - checkWidget(); if (location == null) error (SWT.ERROR_NULL_ARGUMENT); - setLocationInPixels (location.x, location.y); + setLocation (location.x, location.y); } /** diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java index bc1135926fd..3543de09e67 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java @@ -288,11 +288,6 @@ public int getSelection () { *
                  */ public Point getSize () { - checkWidget (); - return getSizeInPixels (); -} - -Point getSizeInPixels () { checkWidget (); if (handle == 0) return new Point (0,0); GtkRequisition requisition = new GtkRequisition (); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java index 183bf9f9a2b..9603ef610d9 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java @@ -1295,11 +1295,6 @@ public boolean getMaximized () { * @since 3.1 */ public Point getMinimumSize () { - checkWidget (); - return getMinimumSizeInPixels (); -} - -Point getMinimumSizeInPixels () { checkWidget (); int width = Math.max (1, geometry.getMinWidth() + trimWidth ()); int height = Math.max (1, geometry.getMinHeight() + trimHeight ()); @@ -1323,12 +1318,6 @@ Point getMinimumSizeInPixels () { */ public Point getMaximumSize () { checkWidget (); - return getMaximumSizeInPixels (); -} - -Point getMaximumSizeInPixels () { - checkWidget (); - int width = Math.min (Integer.MAX_VALUE, geometry.getMaxWidth() + trimWidth ()); int height = Math.min (Integer.MAX_VALUE, geometry.getMaxHeight() + trimHeight ()); return new Point (width, height); @@ -2661,11 +2650,6 @@ public void setMinimized (boolean minimized) { * @since 3.1 */ public void setMinimumSize (int width, int height) { - checkWidget (); - setMinimumSize (new Point (width, height)); -} - -void setMinimumSizeInPixels (int width, int height) { checkWidget (); geometry.setMinWidth(Math.max (width, trimWidth ()) - trimWidth ()); geometry.setMinHeight(Math.max (height, trimHeight ()) - trimHeight ()); @@ -2700,14 +2684,9 @@ void setMinimumSizeInPixels (int width, int height) { * @since 3.1 */ public void setMinimumSize (Point size) { - checkWidget (); - setMinimumSizeInPixels (size); -} - -void setMinimumSizeInPixels (Point size) { checkWidget (); if (size == null) error (SWT.ERROR_NULL_ARGUMENT); - setMinimumSizeInPixels (size.x, size.y); + setMinimumSize (size.x, size.y); } /** @@ -2732,7 +2711,13 @@ void setMinimumSizeInPixels (Point size) { */ public void setMaximumSize (int width, int height) { checkWidget (); - setMaximumSize (new Point (width, height)); + geometry.setMaxWidth(Math.max (width, trimWidth ()) - trimWidth ()); + geometry.setMaxHeight(Math.max (height, trimHeight ()) - trimHeight ()); + int hint = GDK.GDK_HINT_MAX_SIZE; + if (geometry.getMinWidth() > 0 || geometry.getMinHeight() > 0) { + hint = hint | GDK.GDK_HINT_MIN_SIZE; + } + GTK3.gtk_window_set_geometry_hints (shellHandle, 0, (GdkGeometry) geometry, hint); } /** @@ -2758,25 +2743,9 @@ public void setMaximumSize (int width, int height) { * @since 3.116 */ public void setMaximumSize (Point size) { - checkWidget (); - setMaximumSizeInPixels (size); -} - -void setMaximumSizeInPixels (Point size) { checkWidget (); if (size == null) error (SWT.ERROR_NULL_ARGUMENT); - setMaximumSizeInPixels (size.x, size.y); -} - -void setMaximumSizeInPixels (int width, int height) { - checkWidget (); - geometry.setMaxWidth(Math.max (width, trimWidth ()) - trimWidth ()); - geometry.setMaxHeight(Math.max (height, trimHeight ()) - trimHeight ()); - int hint = GDK.GDK_HINT_MAX_SIZE; - if (geometry.getMinWidth() > 0 || geometry.getMinHeight() > 0) { - hint = hint | GDK.GDK_HINT_MIN_SIZE; - } - GTK3.gtk_window_set_geometry_hints (shellHandle, 0, (GdkGeometry) geometry, hint); + setMaximumSize (size.x, size.y); } /** diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabItem.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabItem.java index 1ab01158f26..20bbe33d14a 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabItem.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabItem.java @@ -160,11 +160,6 @@ void destroyWidget () { */ public Rectangle getBounds () { checkWidget (); - return getBoundsInPixels (); -} - -Rectangle getBoundsInPixels () { - checkWidget(); GtkAllocation allocation = new GtkAllocation (); GTK.gtk_widget_get_allocation (handle, allocation); int x = allocation.x; diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java index f5ff444987e..25c1636b8b1 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2021 IBM Corporation and others. + * Copyright (c) 2000, 2025 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -948,11 +948,6 @@ public int getCaretLineNumber () { *
                */ public Point getCaretLocation () { - checkWidget (); - return getCaretLocationInPixels(); -} - -Point getCaretLocationInPixels () { checkWidget (); if ((style & SWT.SINGLE) != 0) { int index = GTK.gtk_editable_get_position (handle); @@ -1532,11 +1527,6 @@ public int getTopIndex () { *
              */ public int getTopPixel () { - checkWidget (); - return getTopPixelInPixels(); -} - -int getTopPixelInPixels () { checkWidget (); if ((style & SWT.SINGLE) != 0) return 0; byte [] position = new byte [ITER_SIZEOF]; diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolBar.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolBar.java index 4cbcad5e4e0..c83fba3694e 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolBar.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolBar.java @@ -302,15 +302,10 @@ public ToolItem getItem (int index) { */ public ToolItem getItem (Point point) { checkWidget(); - return getItemInPixels(point); -} - - -ToolItem getItemInPixels (Point point) { if (point == null) error (SWT.ERROR_NULL_ARGUMENT); ToolItem[] items = getItems(); for (int i=0; i */ public void setLocation (int x, int y) { - checkWidget (); - setLocation (new Point (x, y)); -} - -void setLocationInPixels (int x, int y) { checkWidget (); this.x = x; this.y = y; @@ -745,14 +740,9 @@ void setLocationInPixels (int x, int y) { *
            */ public void setLocation (Point location) { - checkWidget (); - setLocationInPixels(location); -} - -void setLocationInPixels (Point location) { checkWidget (); if (location == null) error (SWT.ERROR_NULL_ARGUMENT); - setLocationInPixels (location.x, location.y); + setLocation (location.x, location.y); } /** diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tracker.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tracker.java index c15797c3f7e..6bcf48ba782 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tracker.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tracker.java @@ -445,16 +445,6 @@ void drawRectangles (Rectangle [] rects) { return result; } -Rectangle [] getRectanglesInPixels () { - checkWidget(); - Rectangle [] result = new Rectangle [rectangles.length]; - for (int i = 0; i < rectangles.length; i++) { - Rectangle current = rectangles [i]; - result [i] = new Rectangle (current.x, current.y, current.width, current.height); - } - return result; -} - /** * Returns true if the rectangles are drawn with a stippled line, false otherwise. * @@ -1154,12 +1144,6 @@ public void setCursor (Cursor newCursor) { *
          */ public void setRectangles (Rectangle [] rectangles) { - checkWidget(); - if (rectangles == null) error (SWT.ERROR_NULL_ARGUMENT); - setRectanglesInPixels (rectangles); -} - -void setRectanglesInPixels (Rectangle [] rectangles) { checkWidget(); if (rectangles == null) error (SWT.ERROR_NULL_ARGUMENT); int length = rectangles.length; From 857e234e2edd14c786523562b7d3028826f73bab Mon Sep 17 00:00:00 2001 From: Aleksandar Kurtakov Date: Tue, 6 May 2025 08:34:10 +0300 Subject: [PATCH 050/119] [GTK] Even more *InPixel method removal Remove nowadays useless extra methods that even has the bad side effect of duplicating checks. Continuation of https://github.com/eclipse-platform/eclipse.platform.swt/pull/2101 --- .../cairo/org/eclipse/swt/graphics/Path.java | 41 +-------------- .../gtk/org/eclipse/swt/graphics/Device.java | 4 -- .../gtk/org/eclipse/swt/graphics/Region.java | 52 ++----------------- .../org/eclipse/swt/widgets/Composite.java | 6 --- .../gtk/org/eclipse/swt/widgets/Control.java | 15 +----- .../gtk/org/eclipse/swt/widgets/Display.java | 28 ++++------ .../gtk/org/eclipse/swt/widgets/Link.java | 4 +- .../org/eclipse/swt/widgets/ScrollBar.java | 10 ---- 8 files changed, 21 insertions(+), 139 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cairo/org/eclipse/swt/graphics/Path.java b/bundles/org.eclipse.swt/Eclipse SWT/cairo/org/eclipse/swt/graphics/Path.java index e1b7ff54a0b..a1d0d5e66e9 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/cairo/org/eclipse/swt/graphics/Path.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/cairo/org/eclipse/swt/graphics/Path.java @@ -218,10 +218,6 @@ public Path (Device device, PathData data) { public void addArc(float x, float y, float width, float height, float startAngle, float arcAngle) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); if (width == 0 || height == 0 || arcAngle == 0) return; - addArcInPixels(x, y, width, height, startAngle, arcAngle); -} - -void addArcInPixels(float x, float y, float width, float height, float startAngle, float arcAngle) { moved = true; if (width == height) { float angle = -startAngle * (float)Math.PI / 180; @@ -287,10 +283,6 @@ public void addPath(Path path) { */ public void addRectangle(float x, float y, float width, float height) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - addRectangleInPixels(x, y, width, height); -} - -void addRectangleInPixels(float x, float y, float width, float height) { moved = false; Cairo.cairo_rectangle(handle, x, y, width, height); closed = true; @@ -320,13 +312,10 @@ public void addString(String string, float x, float y, Font font) { // Scale up the font FontData fd = font.getFontData()[0]; Font scaledFont = new Font(font.getDevice(), fd); - addStringInPixels(string, x, y, scaledFont); - scaledFont.dispose(); // Dispose the scaled up font -} -void addStringInPixels(String string, float x, float y, Font font) { moved = false; - GC.addCairoString(handle, string, x, y, font); + GC.addCairoString(handle, string, x, y, scaledFont); closed = true; + scaledFont.dispose(); // Dispose the scaled up font } /** @@ -372,9 +361,6 @@ public boolean contains(float x, float y, GC gc, boolean outline) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT); - return containsInPixels(x, y, gc, outline); -} -boolean containsInPixels(float x, float y, GC gc, boolean outline) { //TODO - see Windows gc.initCairo(); gc.checkGC(GC.LINE_CAP | GC.LINE_JOIN | GC.LINE_STYLE | GC.LINE_WIDTH); @@ -409,9 +395,6 @@ boolean containsInPixels(float x, float y, GC gc, boolean outline) { */ public void cubicTo(float cx1, float cy1, float cx2, float cy2, float x, float y) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - cubicToInPixels(cx1, cy1, cx2, cy2, x, y); -} -void cubicToInPixels(float cx1, float cy1, float cx2, float cy2, float x, float y) { if (!moved) { double[] currentX = new double[1], currentY = new double[1]; Cairo.cairo_get_current_point(handle, currentX, currentY); @@ -441,9 +424,6 @@ public void getBounds(float[] bounds) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); if (bounds.length < 4) SWT.error(SWT.ERROR_INVALID_ARGUMENT); - getBoundsInPixels(bounds); -} -void getBoundsInPixels(float[] bounds) { long copy = Cairo.cairo_copy_path(handle); if (copy == 0) SWT.error(SWT.ERROR_NO_HANDLES); cairo_path_t path = new cairo_path_t(); @@ -516,10 +496,6 @@ void getBoundsInPixels(float[] bounds) { */ public void getCurrentPoint(float[] point) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - getCurrentPointInPixels(point); -} - -void getCurrentPointInPixels(float[] point) { if (point == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); if (point.length < 2) SWT.error(SWT.ERROR_INVALID_ARGUMENT); double[] x = new double[1], y = new double[1]; @@ -541,10 +517,6 @@ void getCurrentPointInPixels(float[] point) { */ public PathData getPathData() { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - return getPathDataInPixels(); -} - -PathData getPathDataInPixels() { long copy = Cairo.cairo_copy_path(handle); if (copy == 0) SWT.error(SWT.ERROR_NO_HANDLES); cairo_path_t path = new cairo_path_t(); @@ -619,9 +591,6 @@ PathData getPathDataInPixels() { */ public void lineTo(float x, float y) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - lineToInPixels(x, y); -} -void lineToInPixels(float x, float y) { if (!moved) { double[] currentX = new double[1], currentY = new double[1]; Cairo.cairo_get_current_point(handle, currentX, currentY); @@ -646,9 +615,6 @@ void lineToInPixels(float x, float y) { */ public void moveTo(float x, float y) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - moveToInPixels(x, y); -} -void moveToInPixels(float x, float y) { /* * Bug in Cairo. If cairo_move_to() is not called at the * begining of a subpath, the first cairo_line_to() or @@ -675,9 +641,6 @@ void moveToInPixels(float x, float y) { */ public void quadTo(float cx, float cy, float x, float y) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - quadToInPixels(cx, cy, x, y); -} -void quadToInPixels(float cx, float cy, float x, float y) { double[] currentX = new double[1], currentY = new double[1]; Cairo.cairo_get_current_point(handle, currentX, currentY); if (!moved) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Device.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Device.java index a46300f409d..d2a9a4e30eb 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Device.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Device.java @@ -367,10 +367,6 @@ protected void destroy () { */ public Rectangle getBounds () { checkDevice (); - return getBoundsInPixels (); -} - -private Rectangle getBoundsInPixels () { return new Rectangle(0, 0, 0, 0); } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Region.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Region.java index a4cd98057f9..fd89ccc5dea 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Region.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Region.java @@ -155,9 +155,6 @@ static void cairo_region_get_rectangles(long region, long [] rectangles, int[] n public void add (int[] pointArray) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); if (pointArray == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); - addInPixels(pointArray); -} -void addInPixels (int[] pointArray) { /* * Bug in GTK. If gdk_region_polygon() is called with one point, * it segment faults. The fix is to make sure that it is called @@ -186,10 +183,7 @@ void addInPixels (int[] pointArray) { public void add(Rectangle rect) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); if (rect == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); - addInPixels(rect); -} -void addInPixels(Rectangle rect) { - addInPixels (rect.x, rect.y, rect.width, rect.height); + add (rect.x, rect.y, rect.width, rect.height); } /** @@ -213,9 +207,6 @@ void addInPixels(Rectangle rect) { public void add(int x, int y, int width, int height) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); if (width < 0 || height < 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT); - add(new Rectangle(x, y, width, height)); -} -void addInPixels(int x, int y, int width, int height) { cairo_rectangle_int_t rect = new cairo_rectangle_int_t(); rect.x = x; rect.y = y; @@ -261,9 +252,6 @@ public void add(Region region) { */ public boolean contains(int x, int y) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - return contains(new Point(x, y)); -} -boolean containsInPixels(int x, int y) { return Cairo.cairo_region_contains_point(handle, x, y); } @@ -284,11 +272,8 @@ boolean containsInPixels(int x, int y) { */ public boolean contains(Point pt) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - return containsInPixels(pt); -} -boolean containsInPixels(Point pt) { if (pt == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); - return containsInPixels(pt.x, pt.y); + return contains(pt.x, pt.y); } @Override @@ -327,9 +312,6 @@ public boolean equals(Object object) { */ public Rectangle getBounds() { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - return getBoundsInPixels(); -} -Rectangle getBoundsInPixels() { cairo_rectangle_int_t rect = new cairo_rectangle_int_t(); Cairo.cairo_region_get_extents(handle, rect); return new Rectangle(rect.x, rect.y, rect.width, rect.height); @@ -389,11 +371,7 @@ public int hashCode() { public void intersect(Rectangle rect) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); if (rect == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); - intersectInPixels(rect); -} - -void intersectInPixels(Rectangle rect) { - intersectInPixels (rect.x, rect.y, rect.width, rect.height); + intersect (rect.x, rect.y, rect.width, rect.height); } /** @@ -417,10 +395,6 @@ void intersectInPixels(Rectangle rect) { public void intersect(int x, int y, int width, int height) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); if (width < 0 || height < 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT); - intersect(new Rectangle(x, y, width, height)); -} - -void intersectInPixels(int x, int y, int width, int height) { cairo_rectangle_int_t rect = new cairo_rectangle_int_t(); rect.x = x; rect.y = y; @@ -561,10 +535,6 @@ public boolean isEmpty() { public void subtract (int[] pointArray) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); if (pointArray == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); - subtractInPixels(pointArray); -} - -void subtractInPixels (int[] pointArray) { /* * Bug in GTK. If gdk_region_polygon() is called with one point, * it segment faults. The fix is to make sure that it is called @@ -594,11 +564,7 @@ void subtractInPixels (int[] pointArray) { public void subtract(Rectangle rect) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); if (rect == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); - subtractInPixels(rect); -} - -void subtractInPixels(Rectangle rect) { - subtractInPixels (rect.x, rect.y, rect.width, rect.height); + subtract (rect.x, rect.y, rect.width, rect.height); } /** @@ -622,10 +588,6 @@ void subtractInPixels(Rectangle rect) { public void subtract(int x, int y, int width, int height) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); if (width < 0 || height < 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT); - subtract(new Rectangle(x, y, width, height)); -} - -void subtractInPixels(int x, int y, int width, int height) { cairo_rectangle_int_t rect = new cairo_rectangle_int_t (); rect.x = x; rect.y = y; @@ -675,10 +637,6 @@ public void subtract(Region region) { */ public void translate (int x, int y) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - translate(new Point(x, y)); -} - -void translateInPixels (int x, int y) { Cairo.cairo_region_translate (handle, x, y); } @@ -700,7 +658,7 @@ void translateInPixels (int x, int y) { public void translate (Point pt) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); if (pt == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); - translateInPixels(pt.x, pt.y); + translate(pt.x, pt.y); } /** diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java index aa74ec4453b..10dddc457e0 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java @@ -550,12 +550,6 @@ void deregister () { */ public void drawBackground (GC gc, int x, int y, int width, int height, int offsetX, int offsetY) { checkWidget(); - Rectangle rect = new Rectangle (x, y, width, height); - drawBackgroundInPixels(gc, rect.x, rect.y, rect.width, rect.height, offsetX, offsetY); -} - -void drawBackgroundInPixels (GC gc, int x, int y, int width, int height, int offsetX, int offsetY) { - checkWidget (); if (gc == null) error (SWT.ERROR_NULL_ARGUMENT); if (gc.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT); Control control = findBackgroundControl (); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java index b6e6d58d2d4..64f4ec59c6d 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java @@ -1780,12 +1780,6 @@ public Point toDisplay (Point point) { return toDisplay (point.x, point.y); } -Point toDisplayInPixels (Point point) { - checkWidget(); - if (point == null) error (SWT.ERROR_NULL_ARGUMENT); - return toDisplayInPixels (point.x, point.y); -} - /** * GTK4 only function to replace gdk_surface_get_origin * @return the origin of the Control's SWTFixed container relative to the Shell @@ -2693,7 +2687,7 @@ boolean dragDetect (int x, int y, boolean filter, boolean dragOnTimeout, boolean //Note, input params x/y are relative, the two points below are absolute coords. Point startPos = null; Point currPos = null; - startPos = display.getCursorLocationInPixels(); + startPos = display.getCursorLocation(); while (!quit) { long eventPtr = 0; @@ -2709,7 +2703,7 @@ boolean dragDetect (int x, int y, boolean filter, boolean dragOnTimeout, boolean if (eventPtr != 0) { break; } else { - currPos = display.getCursorLocationInPixels(); + currPos = display.getCursorLocation(); dragging = GTK3.gtk_drag_check_threshold (handle, startPos.x, startPos.y, currPos.x, currPos.y); if (dragging) break; @@ -4701,11 +4695,6 @@ void redraw (boolean all) { * @see SWT#DOUBLE_BUFFERED */ public void redraw (int x, int y, int width, int height, boolean all) { - checkWidget(); - redrawInPixels(x, y, width, height, all); -} - -void redrawInPixels (int x, int y, int width, int height, boolean all) { checkWidget(); if (!GTK.gtk_widget_get_visible (topHandle ())) return; if ((style & SWT.MIRRORED) != 0) x = getClientWidth () - width - x; diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java index fdbc86d1589..84bd0177754 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java @@ -1985,10 +1985,6 @@ boolean filters (int eventType) { *
        */ public Point getCursorLocation() { - return getCursorLocationInPixels(); -} - -Point getCursorLocationInPixels() { checkDevice(); int[] x = new int[1], y = new int[1]; @@ -4298,7 +4294,7 @@ public boolean post (Event event) { if (type == SWT.MouseMove) { Rectangle loc = event.getBounds(); - setCursorLocationInPixels(new Point(loc.x, loc.y)); + setCursorLocation(new Point(loc.x, loc.y)); return true; } @@ -5258,17 +5254,6 @@ public void setCursorLocation (int x, int y) { setCursorLocation(new Point (x, y)); } -void setCursorLocationInPixels (Point location) { - long gdkDisplay = GDK.gdk_display_get_default(); - long gdkPointer = GDK.gdk_get_pointer(gdkDisplay); - if (GTK.GTK4) { - //TODO: GTK4 no gdk_device_warp - } else { - long gdkScreen = GDK.gdk_screen_get_default(); - GDK.gdk_device_warp(gdkPointer, gdkScreen, location.x, location.y); - } -} - /** * Sets the location of the on-screen pointer relative to the top left corner * of the screen. Note: It is typically considered bad practice for a @@ -5287,7 +5272,14 @@ void setCursorLocationInPixels (Point location) { public void setCursorLocation (Point point) { checkDevice (); if (point == null) error (SWT.ERROR_NULL_ARGUMENT); - setCursorLocationInPixels(point); + long gdkDisplay = GDK.gdk_display_get_default(); + long gdkPointer = GDK.gdk_get_pointer(gdkDisplay); + if (GTK.GTK4) { + //TODO: GTK4 no gdk_device_warp + } else { + long gdkScreen = GDK.gdk_screen_get_default(); + GDK.gdk_device_warp(gdkPointer, gdkScreen, point.x, point.y); + } } /** @@ -5581,7 +5573,7 @@ void showIMWindow (Control control) { OS.pango_font_description_free (fontDesc); if (pangoAttrs [0] != 0) GTK.gtk_label_set_attributes (preeditLabel, pangoAttrs[0]); GTK.gtk_label_set_text (preeditLabel, preeditString [0]); - Point point = control.toDisplayInPixels (control.getIMCaretPos ()); + Point point = control.toDisplay (control.getIMCaretPos ()); GTK3.gtk_window_move (preeditWindow, point.x, point.y); GtkRequisition requisition = new GtkRequisition (); GTK.gtk_widget_get_preferred_size (preeditLabel, requisition, null); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Link.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Link.java index 4d61a21a360..6968718bd6b 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Link.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Link.java @@ -375,7 +375,7 @@ long gtk_button_press_event (long widget, long event) { oldSelectionY = temp; } Rectangle rect = layout.getBounds (oldSelectionX, oldSelectionY); - redrawInPixels (rect.x, rect.y, rect.width, rect.height, false); + redraw (rect.x, rect.y, rect.width, rect.height, false); } for (int j = 0; j < offsets.length; j++) { Rectangle [] rects = getRectanglesInPixels (j); @@ -551,7 +551,7 @@ long gtk_motion_notify_event (long widget, long event) { newSelection = temp; } Rectangle rect = layout.getBounds (oldSelection, newSelection); - redrawInPixels (rect.x, rect.y, rect.width, rect.height, false); + redraw (rect.x, rect.y, rect.width, rect.height, false); } } else { for (int j = 0; j < offsets.length; j++) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java index 3543de09e67..de543a2b1f4 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java @@ -327,11 +327,6 @@ public int getThumb () { */ public Rectangle getThumbBounds() { checkWidget(); - return getThumbBoundsInPixels(); -} - -Rectangle getThumbBoundsInPixels() { - checkWidget(); int[] slider_start = new int[1], slider_end = new int[1]; long rangeHandle = GTK.GTK4 ? GTK4.gtk_widget_get_first_child(handle) : handle; @@ -396,11 +391,6 @@ Rectangle getThumbBoundsInPixels() { */ public Rectangle getThumbTrackBounds () { checkWidget (); - return getThumbTrackBoundsInPixels(); -} - -Rectangle getThumbTrackBoundsInPixels () { - checkWidget(); int x = 0, y = 0, width, height; /* From aae5714fe7528a4c278bcbf35f3c51eebad02516 Mon Sep 17 00:00:00 2001 From: fedejeanne Date: Mon, 5 May 2025 15:17:04 +0200 Subject: [PATCH 051/119] Remove unused Font constructor --- .../Eclipse SWT/win32/org/eclipse/swt/graphics/Font.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Font.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Font.java index fc7014ec99c..95b51c0c69a 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Font.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Font.java @@ -62,15 +62,6 @@ public final class Font extends Resource { */ private final float fontHeight; -/** - * Prevents uninitialized instances from being created outside the package. - */ -Font(Device device) { - super(device); - this.zoom = DPIUtil.getNativeDeviceZoom(); - this.fontHeight = 0; -} - private Font(Device device, long handle, int zoom) { super(device); this.handle = handle; From 4bdad7140c1561bae65b4c474a745641d8502862 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20L=C3=A4ubrich?= Date: Sat, 3 May 2025 20:09:46 +0200 Subject: [PATCH 052/119] Remove SWT spies --- .../org.eclipse.swt.tools.spies/.classpath | 7 - bundles/org.eclipse.swt.tools.spies/.project | 28 - .../org.eclipse.core.resources.prefs | 2 - .../.settings/org.eclipse.jdt.core.prefs | 104 ---- .../.settings/org.eclipse.jdt.ui.prefs | 64 --- .../META-INF/MANIFEST.MF | 19 - .../org.eclipse.swt.tools.spies/about.html | 36 -- .../build.properties | 23 - .../forceQualifierUpdate.txt | 3 - .../fragment.e4xmi | 9 - .../icons/sleak.gif | Bin 1105 -> 0 bytes .../icons/sleak.png | Bin 606 -> 0 bytes .../icons/sleak@2x.png | Bin 1401 -> 0 bytes .../org.eclipse.swt.tools.spies/icons/spy.gif | Bin 1075 -> 0 bytes .../org.eclipse.swt.tools.spies/icons/spy.png | Bin 466 -> 0 bytes .../icons/spy@2x.png | Bin 857 -> 0 bytes .../plugin.properties | 17 - .../org.eclipse.swt.tools.spies/plugin.xml | 23 - .../org/eclipse/swt/tools/internal/Sleak.java | 543 ------------------ .../swt/tools/internal/SpiesConstants.java | 24 - .../eclipse/swt/tools/views/SleakView.java | 43 -- .../org/eclipse/swt/tools/views/SpyView.java | 517 ----------------- .../org.eclipse.swt.tools.feature/feature.xml | 4 - 23 files changed, 1466 deletions(-) delete mode 100644 bundles/org.eclipse.swt.tools.spies/.classpath delete mode 100644 bundles/org.eclipse.swt.tools.spies/.project delete mode 100644 bundles/org.eclipse.swt.tools.spies/.settings/org.eclipse.core.resources.prefs delete mode 100644 bundles/org.eclipse.swt.tools.spies/.settings/org.eclipse.jdt.core.prefs delete mode 100644 bundles/org.eclipse.swt.tools.spies/.settings/org.eclipse.jdt.ui.prefs delete mode 100644 bundles/org.eclipse.swt.tools.spies/META-INF/MANIFEST.MF delete mode 100644 bundles/org.eclipse.swt.tools.spies/about.html delete mode 100644 bundles/org.eclipse.swt.tools.spies/build.properties delete mode 100644 bundles/org.eclipse.swt.tools.spies/forceQualifierUpdate.txt delete mode 100644 bundles/org.eclipse.swt.tools.spies/fragment.e4xmi delete mode 100644 bundles/org.eclipse.swt.tools.spies/icons/sleak.gif delete mode 100644 bundles/org.eclipse.swt.tools.spies/icons/sleak.png delete mode 100644 bundles/org.eclipse.swt.tools.spies/icons/sleak@2x.png delete mode 100644 bundles/org.eclipse.swt.tools.spies/icons/spy.gif delete mode 100644 bundles/org.eclipse.swt.tools.spies/icons/spy.png delete mode 100644 bundles/org.eclipse.swt.tools.spies/icons/spy@2x.png delete mode 100644 bundles/org.eclipse.swt.tools.spies/plugin.properties delete mode 100644 bundles/org.eclipse.swt.tools.spies/plugin.xml delete mode 100644 bundles/org.eclipse.swt.tools.spies/src/org/eclipse/swt/tools/internal/Sleak.java delete mode 100644 bundles/org.eclipse.swt.tools.spies/src/org/eclipse/swt/tools/internal/SpiesConstants.java delete mode 100644 bundles/org.eclipse.swt.tools.spies/src/org/eclipse/swt/tools/views/SleakView.java delete mode 100644 bundles/org.eclipse.swt.tools.spies/src/org/eclipse/swt/tools/views/SpyView.java diff --git a/bundles/org.eclipse.swt.tools.spies/.classpath b/bundles/org.eclipse.swt.tools.spies/.classpath deleted file mode 100644 index 81fe078c20c..00000000000 --- a/bundles/org.eclipse.swt.tools.spies/.classpath +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/bundles/org.eclipse.swt.tools.spies/.project b/bundles/org.eclipse.swt.tools.spies/.project deleted file mode 100644 index 41790f2b0f0..00000000000 --- a/bundles/org.eclipse.swt.tools.spies/.project +++ /dev/null @@ -1,28 +0,0 @@ - - - org.eclipse.swt.tools.spies - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - - diff --git a/bundles/org.eclipse.swt.tools.spies/.settings/org.eclipse.core.resources.prefs b/bundles/org.eclipse.swt.tools.spies/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 99f26c0203a..00000000000 --- a/bundles/org.eclipse.swt.tools.spies/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding/=UTF-8 diff --git a/bundles/org.eclipse.swt.tools.spies/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.swt.tools.spies/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index e85a06301c4..00000000000 --- a/bundles/org.eclipse.swt.tools.spies/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,104 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled -org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore -org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull -org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault -org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable -org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=17 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.autoboxing=ignore -org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning -org.eclipse.jdt.core.compiler.problem.deadCode=warning -org.eclipse.jdt.core.compiler.problem.deprecation=warning -org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled -org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled -org.eclipse.jdt.core.compiler.problem.discouragedReference=warning -org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore -org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning -org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore -org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled -org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore -org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning -org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning -org.eclipse.jdt.core.compiler.problem.forbiddenReference=error -org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning -org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled -org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning -org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning -org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore -org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore -org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning -org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore -org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore -org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled -org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled -org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning -org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore -org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning -org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning -org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore -org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning -org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error -org.eclipse.jdt.core.compiler.problem.nullReference=warning -org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error -org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning -org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning -org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore -org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore -org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore -org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore -org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning -org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning -org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore -org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning -org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore -org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore -org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore -org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning -org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled -org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning -org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled -org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled -org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled -org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore -org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning -org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled -org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning -org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning -org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore -org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning -org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore -org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore -org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled -org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedImport=warning -org.eclipse.jdt.core.compiler.problem.unusedLabel=warning -org.eclipse.jdt.core.compiler.problem.unusedLocal=warning -org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled -org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning -org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning -org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.release=enabled -org.eclipse.jdt.core.compiler.source=17 diff --git a/bundles/org.eclipse.swt.tools.spies/.settings/org.eclipse.jdt.ui.prefs b/bundles/org.eclipse.swt.tools.spies/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index 9d423fe972d..00000000000 --- a/bundles/org.eclipse.swt.tools.spies/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,64 +0,0 @@ -eclipse.preferences.version=1 -editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true -org.eclipse.jdt.ui.ignorelowercasenames=true -org.eclipse.jdt.ui.importorder=java;javax;org;com; -org.eclipse.jdt.ui.ondemandthreshold=1 -org.eclipse.jdt.ui.staticondemandthreshold=1 -sp_cleanup.add_default_serial_version_id=true -sp_cleanup.add_generated_serial_version_id=false -sp_cleanup.add_missing_annotations=true -sp_cleanup.add_missing_deprecated_annotations=true -sp_cleanup.add_missing_methods=false -sp_cleanup.add_missing_nls_tags=false -sp_cleanup.add_missing_override_annotations=true -sp_cleanup.add_missing_override_annotations_interface_methods=true -sp_cleanup.add_serial_version_id=false -sp_cleanup.always_use_blocks=true -sp_cleanup.always_use_parentheses_in_expressions=false -sp_cleanup.always_use_this_for_non_static_field_access=false -sp_cleanup.always_use_this_for_non_static_method_access=false -sp_cleanup.convert_functional_interfaces=false -sp_cleanup.convert_to_enhanced_for_loop=false -sp_cleanup.correct_indentation=false -sp_cleanup.format_source_code=false -sp_cleanup.format_source_code_changes_only=false -sp_cleanup.insert_inferred_type_arguments=false -sp_cleanup.make_local_variable_final=true -sp_cleanup.make_parameters_final=false -sp_cleanup.make_private_fields_final=true -sp_cleanup.make_type_abstract_if_missing_method=false -sp_cleanup.make_variable_declarations_final=false -sp_cleanup.never_use_blocks=false -sp_cleanup.never_use_parentheses_in_expressions=true -sp_cleanup.on_save_use_additional_actions=true -sp_cleanup.organize_imports=true -sp_cleanup.qualify_static_field_accesses_with_declaring_class=false -sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true -sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true -sp_cleanup.qualify_static_member_accesses_with_declaring_class=false -sp_cleanup.qualify_static_method_accesses_with_declaring_class=false -sp_cleanup.remove_private_constructors=true -sp_cleanup.remove_redundant_type_arguments=true -sp_cleanup.remove_trailing_whitespaces=false -sp_cleanup.remove_trailing_whitespaces_all=true -sp_cleanup.remove_trailing_whitespaces_ignore_empty=false -sp_cleanup.remove_unnecessary_casts=true -sp_cleanup.remove_unnecessary_nls_tags=false -sp_cleanup.remove_unused_imports=false -sp_cleanup.remove_unused_local_variables=false -sp_cleanup.remove_unused_private_fields=true -sp_cleanup.remove_unused_private_members=false -sp_cleanup.remove_unused_private_methods=true -sp_cleanup.remove_unused_private_types=true -sp_cleanup.sort_members=false -sp_cleanup.sort_members_all=false -sp_cleanup.use_anonymous_class_creation=false -sp_cleanup.use_blocks=false -sp_cleanup.use_blocks_only_for_return_and_throw=false -sp_cleanup.use_lambda=true -sp_cleanup.use_parentheses_in_expressions=false -sp_cleanup.use_this_for_non_static_field_access=false -sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true -sp_cleanup.use_this_for_non_static_method_access=false -sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true -sp_cleanup.use_type_arguments=false diff --git a/bundles/org.eclipse.swt.tools.spies/META-INF/MANIFEST.MF b/bundles/org.eclipse.swt.tools.spies/META-INF/MANIFEST.MF deleted file mode 100644 index 69cfd404281..00000000000 --- a/bundles/org.eclipse.swt.tools.spies/META-INF/MANIFEST.MF +++ /dev/null @@ -1,19 +0,0 @@ -Manifest-Version: 1.0 -Bundle-Name: %pluginName -Bundle-Vendor: %providerName -Bundle-SymbolicName: org.eclipse.swt.tools.spies;singleton:=true -Bundle-Version: 3.109.600.qualifier -Bundle-ManifestVersion: 2 -Export-Package: org.eclipse.swt.tools.internal, - org.eclipse.swt.tools.views -Bundle-ActivationPolicy: lazy -Bundle-Localization: plugin -Bundle-RequiredExecutionEnvironment: JavaSE-17 -Require-Bundle: org.eclipse.core.runtime;bundle-version="3.29.0", - org.eclipse.swt.tools.base;bundle-version="3.106.0", - org.eclipse.e4.ui.model.workbench;bundle-version="2.1.400", - org.eclipse.swt;bundle-version="3.119.0", - org.eclipse.ui;bundle-version="3.113.0", - org.eclipse.e4.ui.di;bundle-version="1.2.600" -Automatic-Module-Name: org.eclipse.swt.tools.spies -Import-Package: jakarta.annotation;version="[2.1.0,3.0.0)" diff --git a/bundles/org.eclipse.swt.tools.spies/about.html b/bundles/org.eclipse.swt.tools.spies/about.html deleted file mode 100644 index 164f781a8fd..00000000000 --- a/bundles/org.eclipse.swt.tools.spies/about.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - -About - - -

        About This Content

        - -

        November 30, 2017

        -

        License

        - -

        - The Eclipse Foundation makes available all content in this plug-in - ("Content"). Unless otherwise indicated below, the Content - is provided to you under the terms and conditions of the Eclipse - Public License Version 2.0 ("EPL"). A copy of the EPL is - available at http://www.eclipse.org/legal/epl-2.0. - For purposes of the EPL, "Program" will mean the Content. -

        - -

        - If you did not receive this Content directly from the Eclipse - Foundation, the Content is being redistributed by another party - ("Redistributor") and different terms and conditions may - apply to your use of any object code in the Content. Check the - Redistributor's license that was provided with the Content. If no such - license exists, contact the Redistributor. Unless otherwise indicated - below, the terms and conditions of the EPL still apply to any source - code in the Content and such source code may be obtained at http://www.eclipse.org. -

        - - - \ No newline at end of file diff --git a/bundles/org.eclipse.swt.tools.spies/build.properties b/bundles/org.eclipse.swt.tools.spies/build.properties deleted file mode 100644 index 1b0ce1e600e..00000000000 --- a/bundles/org.eclipse.swt.tools.spies/build.properties +++ /dev/null @@ -1,23 +0,0 @@ -############################################################################### -# Copyright (c) 2003, 2025 IBM Corporation and others. -# -# This program and the accompanying materials -# are made available under the terms of the Eclipse Public License 2.0 -# which accompanies this distribution, and is available at -# https://www.eclipse.org/legal/epl-2.0/ -# -# SPDX-License-Identifier: EPL-2.0 -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### -source.. = src/ -output.. = bin/ -bin.includes = about.html,\ - plugin.xml,\ - plugin.properties,\ - META-INF/,\ - icons/,\ - .,\ - fragment.e4xmi -src.includes = about.html diff --git a/bundles/org.eclipse.swt.tools.spies/forceQualifierUpdate.txt b/bundles/org.eclipse.swt.tools.spies/forceQualifierUpdate.txt deleted file mode 100644 index f7670efb7ae..00000000000 --- a/bundles/org.eclipse.swt.tools.spies/forceQualifierUpdate.txt +++ /dev/null @@ -1,3 +0,0 @@ -Bug 510973 - Missing source bundle for org.eclipse.swt.tools -Bug 527899 [9] Implement JEP 280: Indify String Concatenation -https://github.com/eclipse-platform/eclipse.platform.releng.aggregator/issues/1659 \ No newline at end of file diff --git a/bundles/org.eclipse.swt.tools.spies/fragment.e4xmi b/bundles/org.eclipse.swt.tools.spies/fragment.e4xmi deleted file mode 100644 index ac12910e99c..00000000000 --- a/bundles/org.eclipse.swt.tools.spies/fragment.e4xmi +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - View - - - diff --git a/bundles/org.eclipse.swt.tools.spies/icons/sleak.gif b/bundles/org.eclipse.swt.tools.spies/icons/sleak.gif deleted file mode 100644 index 444bd357121cc7268ec3e30fcd964622d6f0cd7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1105 zcmcIj`%ha17_F!YGh`{j$6SaOWCK}6$7`FCDH0x)iDjh|4Q8+aVZ!9fm?K03%$D$2 z2Dq633Np&W4T`iStUwFcF<_2I=>uqhStw8*g+fc)+k1QO=jD&^{B#~)PR=i1EGy>h zximVBPBZFhjOa?gs78O5Adod0n9vsZMMDs~>J+;v=)yRY(|nFC3}g3&u%Dbx91lzC zI-Oh>a;ZBwxg(6Lh)8)Fk=7rdDmtGjh|C;}%XoY-LmZ#;2j|`Fh?~EWSfJ(<4t-gmODR-k{q!)ksP{^-IIBqVb;;B>JmFg$X} ztr~voe0huQUW>M@&3vmdT+H4m%S~_PQ2-Q`OwyOJdA|cfF+9lmqk$9_3 zsuT>Ud&ESue4%M*Q8b_t$PPN>T7hC&BDaVKG0E^&|KRrE0LX@QLqmjI0WJUF^2Z<> zfz~PgpA)9`33OZmW8b*xg z+nfr97eS`q9a#j;JV=*8u6Hdhnx3t|v;oG}@#!^8wF>_lK)V6jZFIuCZ!p62E{s}i zYnw1;fmt&w?859Gn6_YL*Y(^61{>&5Fk5hw6}MXPZ5x;mU|+k zO5%W0wE%l?DE6rastSN~5eJk(fDH&c;0|!w09*tR1SNr*ThW;hBNOq2D7R)&K{F43Q>Q;4aszm_x5?e)B}5Yvi=P6B!y-0 zGk(_O|5i*^O(^rtGf0244YTqS-VXKlPU!acA$3dW9j{IAMvKkh3Q`y15+<{88$YsqV^NDD!=HMJ0$XKN^s($;xX_ c3QubL{YWLxzrxe|B-_9QD=~x!@gCD<_-{;Hscd4oQU*oPjU#qYc z>~dRr$3F$!cINdmV+MW3r1`J0+?yL zMs>YB6lKrLm+Q6`U`Q@$L&ZuJSEs*Jh9;0j=fGlEDs^xBE$$snbSRzc^iS-g%kUIA zOlMg1s3UA^?@P(1SUM8ler+sKw8yDm*j?apnuTMHf#z)7SQxtVqdI0HbhI%hG>k= zQ&7JqG2|z3-$UT+t@%p5SmzK7INt59<8PT!d9#>UrlAQ^7T!nFIaS|qgp2Q}S)eHYPuOaK4?07*qoM6N<$g5Pl;fdBvi diff --git a/bundles/org.eclipse.swt.tools.spies/icons/sleak@2x.png b/bundles/org.eclipse.swt.tools.spies/icons/sleak@2x.png deleted file mode 100644 index 003a4b06f0f61f72f2a2e85a35a84367e056dbb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1401 zcmV-<1%~>GP)uHAkPVGDrU>c&^m4>WswXVTlc%Ord_o2gOfI&5KS~8a2!c1IjEPMQLRtI!4K( zk3I;_;Hc+gT%IY?6Kt6g*i8mV;cHMzky`#i0x&C#>6ztvf>|+&WCkZRn_R#YYf&<1 zm`E%fOnt9-hQzokqkPnzE*wEM!wzV3xhLK_jRTT6Lx_I)(F=OMYW4dWeWiL~x=^P% zRW^dSx6Lo{sh8Jog!udcbmT(c@R6K*3+Ft*DWUGtUnN@NOw|aq+Qy~@Am6mIAvm1- zkl3H~fH$XjYN_t~)DrCr244eGwPPB5%jt$zyBn&8Y;gEo58A`(_UvYMh0e|Bh2{ke z{!>*-u^JV%n_rLH+;GD(4$bCqV9T`dM`joLExluS3q!Hs-2?E|c_(>lf+>DFZS+cq z8(OAt(>OF4#-Lv7f@AC+h-Ta&cBb6Qd)ME*Uo!W}^JLyIs@FPSk3Sm+If?7Xpg}hV z*R^9HxNC-A8EvpVsrC8x6H5PC2f%nk;*~*kQKp-Q-?X|xLE=UVug7@ZQy0{#T~Iyb zf<#UqZ2hwZMbK}|Zb6;6st!sh9P}g3 zIF!@lIGEFe@7Vd)vWW-q$T42lGl_TGf!ApV4#uyv*?`?_0$NNpd>bVh_c_4+toxpQ zXYWyE^TJ=2Z4ws^Q1?BB7f;|e;M}3`%StQ!ebb8ZO892G*yD46y{x;I-OTQZz3)re z1otNK4jWv>c;PLKw^Dd^ou0&DPq zHUzUx;y~`nH4?Vt;lQzH7TrWt+fd7RbYRmed4m_tgW&3IFwc){Iv%`Cq=7 zu26-?D-an%fZ;cljlA#kB;N20vZZF&bW{!j8w6iBYyZ@ z3Q;LaIL;e@oa=hHh+(p9tSUXw3kD`m{Y7{Qd=^?vEM3bR`Xr=q$(($a(P9+ygJY$v zpqLu#chM4JO_T(!-XVsswuxZnFG5%mQ3ipVN>M-q}E%00!`P$1OLr(sE{|uvD^zkfLE5M-wPaXLOmNky zSe6@{nC6wT9D~3poe7C$-YTigGI!KTrmpSm?0DYVf6yP$@6+>qec(BgD2|Pj`2jzG z8^B)(@CG0N04@N53=oJQ2mql7*b7)|Sd3(*4}-(uY+UaPxI!Q9@!;TK=I*mmQ9A@t zA<@w>f|xx5fdIrOfrHg?adAL$UMLjC$H#}K9uSE{J5zJg($Y>G7iVN-9Fl6KQmO1@ zR%T{qR#sN_shqHqn%vynLRns6UV%LCbYbo#zDna=btY6@p(rXAD=SJ$iWLe)&Uwv6 zRq2&;H_OV(%FD}ZFUZbRw5iqV%F0Sjl?SR-sc!4ET5Ynv3q{dex;yInW}Qw~f7hTf zwCnZydaND8um{FAV}r4=v9Yz$+|t(asN+G$lP4Wd&7GZ{X0!Q)xv#V9vFUlgrKk6m zrT1CihyMQ80|NttZ(h9}d^a@uc6jvt`1ttb`>D_4!=FA|EZ>}8CdaH3_;(NM_o+#I zdU$FYw_2?@j(?pamht()<$0UUwy>};=5WEEG_mBErY05%+~IK8U9(Q7lOPC^u)7En zIvp;TYXN>GNpc3#D=tX7oo=^#8QKj96$2%T{q& zw6)qhmc6=<|Fqi+_)C13675YRTyAzz5c62xwFJqHeaFg?d(Q&LSw`OQCiYWK4wrWw<<^vDoHLeOkjbxj?z-REcbD4xDaP$CsE j6ycn^du4tqMAL+BIgCcM42{T>BgJ)FnbZCOeqjF}ah0&~ diff --git a/bundles/org.eclipse.swt.tools.spies/icons/spy.png b/bundles/org.eclipse.swt.tools.spies/icons/spy.png deleted file mode 100644 index 1016ca8caa075e5b7f291f55c632d66b42077fa0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 466 zcmV;@0WJQCP)cRMY<}eS!b4^alLD+~fEA zYC|XwK?BbB2MAp54fMI(9pC`LJ`R`LeH<>ednBCcaS*|)`DTx=$fa(7mn&U9HJ3U) z`!98P%)iv`KL1jiTmPjtmzs;s4jyM3uowc;bh*oC{pC)t-#|_OFSWbF#RDl3;Du3D{2qFq9Py`nuSiwSViyVKnl=4Td&>Dsg zjt&kCjvX=5_Ih`{o{2*Th7Jr29T+-1-`N1+Pa8_gV)~NLa``2n@4feacPS~!ilctp zpBs65pM$sc69I=hO?c)c$yC3suYj}nzUFN`-~21x{bv?{|I)vK0f4tZ1K!pf^4ryv zf2AjcQt&SebbuLx#fX$l!pB_HJ}s@N}mE}eS$m&?o;QMlO$3T9sq^4F{DTb za33Eb4}r0^NzR}H-DE5&_n{qpOAnAX;1=6-iSK~5(-}+ZTfC37f^Pv?Y;h)3F3c3A zp_tNz7VypA19rX{SW8nVp?knBwU?Yg3hdlnq!C!NN~nD+v8z`VQj4|?V{atr8b0;$=gr)t)`WYsiM z71u&Wq^j?@L_4fm32{h)p1KM2WHnL+Ua~U6LuyR82Lj_R4h>>k#YDeMV4fE4W%Z^ zaExJSgu)vfpg80EpE(gW??4=|d)evA~{!&i{Y;CglG6an-yTa=kb z-c*~nHv*SdtUE>;K_dd!P)__K5VjYk!Q*D?9+3nnjc9)f2c+pJ<|D$35$Q{T9F$+! zUe}03r@9Hhw9-tJT3uSnCbl>19?1>3hs9Rci1^%*Ylwkdnj8yCd6b4XhRz3FgISKB jgIU?h4_dO46|4RN?%W6{5sm^?00000NkvXXu0mjfwh@CU diff --git a/bundles/org.eclipse.swt.tools.spies/plugin.properties b/bundles/org.eclipse.swt.tools.spies/plugin.properties deleted file mode 100644 index fe533e6e5a3..00000000000 --- a/bundles/org.eclipse.swt.tools.spies/plugin.properties +++ /dev/null @@ -1,17 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2015 IBM Corporation and others. -# -# This program and the accompanying materials -# are made available under the terms of the Eclipse Public License 2.0 -# which accompanies this distribution, and is available at -# https://www.eclipse.org/legal/epl-2.0/ -# -# SPDX-License-Identifier: EPL-2.0 -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### -pluginName = SWT Tools Spy -providerName = Eclipse.org -spyViewName = SWT Spy -sleakViewName = Sleak diff --git a/bundles/org.eclipse.swt.tools.spies/plugin.xml b/bundles/org.eclipse.swt.tools.spies/plugin.xml deleted file mode 100644 index 69abd2c8586..00000000000 --- a/bundles/org.eclipse.swt.tools.spies/plugin.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - diff --git a/bundles/org.eclipse.swt.tools.spies/src/org/eclipse/swt/tools/internal/Sleak.java b/bundles/org.eclipse.swt.tools.spies/src/org/eclipse/swt/tools/internal/Sleak.java deleted file mode 100644 index b4987ebd186..00000000000 --- a/bundles/org.eclipse.swt.tools.spies/src/org/eclipse/swt/tools/internal/Sleak.java +++ /dev/null @@ -1,543 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2020 IBM Corporation and others. - * - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License 2.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.swt.tools.internal; - -import java.io.*; -import java.util.*; -import java.util.function.*; -import java.util.stream.*; - -import org.eclipse.swt.*; -import org.eclipse.swt.custom.*; -import org.eclipse.swt.graphics.*; -import org.eclipse.swt.internal.WidgetSpy.*; -import org.eclipse.swt.layout.*; -import org.eclipse.swt.widgets.*; -import org.eclipse.swt.widgets.List; - -/** - * Instructions on how to use the Sleak tool with a standlaone SWT example: - * - * Modify the main method below to launch your application. - * Run Sleak. - */ -@SuppressWarnings("restriction") -public class Sleak { - List list; - Canvas canvas; - Button enableTracking, diff, stackTrace, saveAs, save; - Combo diffType; - Text text; - - String filterPath = ""; - String fileName = "sleakout"; - String selectedName; - boolean incrementFileNames = true; - boolean saveImages = true; - int fileCount; - - java.util.List oldObjects = new ArrayList<> (); - java.util.List objects = new ArrayList<> (); - - NonDisposedWidgetTracker nonDisposedWidgetTracker = new NonDisposedWidgetTracker(); - -public static void main (String [] args) { - DeviceData data = new DeviceData(); - data.tracking = true; - Display display = new Display (data); - Sleak sleak = new Sleak (); - Shell shell = new Shell(display); - shell.setText ("S-Leak"); - Point size = shell.getSize (); - shell.setSize (size.x / 2, size.y / 2); - GridLayout layout = new GridLayout(2, false); - layout.horizontalSpacing = 0; - layout.verticalSpacing = 0; - shell.setLayout(layout); - sleak.create (shell); - shell.open(); - - // Launch your application here - // e.g. -// Shell shell2 = new Shell(display); -// Button button1 = new Button(shell2, SWT.PUSH); -// button1.setBounds(10, 10, 100, 50); -// button1.setText("Hello World"); -// Image image = new Image(display, 20, 20); -// Button button2 = new Button(shell2, SWT.PUSH); -// button2.setBounds(10, 70, 100, 50); -// button2.setImage(image); -// button1.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { -// Font oldFont = button1.getFont(); -// int style = oldFont.getFontData()[0].getStyle() ^ SWT.BOLD; -// button1.setFont(new Font(display, "Arial", 10, style)); -// button1.setForeground(new Color(100,200,100)); -// oldFont.dispose(); -// })); -// shell2.open(); - - while (!shell.isDisposed ()) { - if (!display.readAndDispatch ()) display.sleep (); - } - display.dispose (); -} - -public void create (Composite parent) { - - SashForm sash = new SashForm(parent, SWT.SMOOTH); - sash.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - sash.setOrientation(SWT.HORIZONTAL); - sash.setVisible(true); - - Composite left = new Composite(sash, 0); - left.setLayout(new GridLayout()); - left.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - - Composite right = new Composite(sash, 0); - right.setLayout(new GridLayout()); - - sash.setWeights(new int[] {40,60}); - - // Right side - canvas = new Canvas (right, SWT.BORDER); - canvas.addListener (SWT.Paint, event -> paintCanvas (event)); - canvas.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 10)); - text = new Text (right, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); - text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 10)); - setVisible(text, false); - - // Left side - enableTracking = new Button (left, SWT.CHECK); - enableTracking.setText ("Enable resource tracking"); - enableTracking.setToolTipText("Enable Device resource tracking. Only resources allocated once enabled will be tracked. To track devices created before view is created, turn on tracing options, see https://www.eclipse.org/swt/tools.php"); - enableTracking.addListener (SWT.Selection, e -> toggleEnableTracking ()); - enableTracking.setSelection(enableTracking.getDisplay().isTracking()); - enableTracking.setLayoutData(new GridData(SWT.NONE, SWT.NONE, false, false)); - - Composite buttons = new Composite(left, 0); - buttons.setLayout(new GridLayout(4, false)); - buttons.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false)); - - diff = new Button (buttons, SWT.PUSH); - diff.setText ("Snap && Diff"); - diff.addListener (SWT.Selection, event -> refreshDifference ()); - GridData diffData = new GridData(SWT.FILL, SWT.NONE, true, false); - diffData.horizontalSpan = 2; - diff.setLayoutData(diffData); - - save = new Button (buttons, SWT.PUSH); - save.setText ("Save"); - save.setToolTipText("Saves to the previously selected file."); - save.addListener (SWT.Selection, event -> saveToFile (false)); - save.setLayoutData(new GridData(SWT.FILL, SWT.NONE, false, false)); - - saveAs = new Button (buttons, SWT.PUSH); - saveAs.setText ("Save As..."); - saveAs.setToolTipText("Saves the contents of the list to a file, optionally with the stack traces if selected."); - saveAs.addListener (SWT.Selection, event -> saveToFile (true)); - saveAs.setLayoutData(new GridData(SWT.FILL, SWT.NONE, false, false)); - - Composite checkboxAndCombo = new Composite(left, 0); - checkboxAndCombo.setLayout(new GridLayout(2, false)); - checkboxAndCombo.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false)); - - diffType = new Combo (checkboxAndCombo, SWT.CHECK); - diffType.add ("Object identity"); - diffType.add ("Creator class and line"); - diffType.add ("Creator class"); - diffType.select(0); - diffType.setLayoutData(new GridData(SWT.NONE, SWT.NONE, false, false)); - - stackTrace = new Button (checkboxAndCombo, SWT.CHECK); - stackTrace.setText ("Show Stack"); - stackTrace.addListener (SWT.Selection, e -> toggleStackTrace ()); - stackTrace.setLayoutData(new GridData(SWT.RIGHT, SWT.NONE, true, false)); - - list = new List (left, SWT.BORDER | SWT.V_SCROLL); - list.addListener (SWT.Selection, event -> refreshObject ()); - list.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - - stackTrace.setSelection (false); - filterNonDisposedWidgetTypes(); -} - -private void toggleEnableTracking() { - Display display = enableTracking.getDisplay(); - boolean tracking = display.isTracking(); - display.setTracking(!tracking); - setWidgetTrackingEnabled(tracking); -} - -void refreshLabel (java.util.List createdObjects, java.util.List deletedObjects) { - Function classifier = o -> o.object.getClass().getSimpleName(); - - Map deleted = deletedObjects.stream().collect( - Collectors.groupingBy(classifier, Collectors.counting())); - - Map created = createdObjects.stream().collect( - Collectors.groupingBy(classifier, Collectors.counting())); - - StringBuilder sb = new StringBuilder(); - Stream deletedAndCreated = Stream.concat(deleted.keySet().stream(), created.keySet().stream()); - deletedAndCreated.distinct().sorted().forEach(type -> addCounts(sb, type, deleted.get(type), created.get(type))); - - String description = sb.length() > 0 ? sb.toString() : "0 object(s)"; - list.setToolTipText(description); -} - -static void addCounts (StringBuilder string, String type, Long deleted, Long created) { - if (deleted != null || created != null) { - if (deleted != null) { - string.append("-" + deleted); - if (created != null) { - string.append(" / "); - } - } - if (created != null) { - string.append(created); - } - string.append(" " + type + "(s)\n"); - } -} - -void refreshDifference () { - Display display = canvas.getDisplay(); - DeviceData info = getDeviceData(display); - - boolean hasOldData = !oldObjects.isEmpty(); - - java.util.List old = new ArrayList<>(oldObjects); - java.util.List disposed = new ArrayList<>(); - java.util.List created = new ArrayList<>(); - java.util.List same = collectNewObjects(info, old, disposed, created); - java.util.List nonDisposedWidgets = getNonDisposedWidgets(); - created.addAll(nonDisposedWidgets); - resetNonDisposedWidgets(); - - if (diffType.getSelectionIndex() > 0) { - old.removeAll(same); - if (!old.isEmpty()) { - Iterator createdIter = created.iterator (); - while (createdIter.hasNext ()) { - ObjectWithError createdObj = createdIter.next (); - StackTraceElement stack = createdObj.getCreator (); - Iterator oldIter = old.iterator (); - while (oldIter.hasNext ()) { - ObjectWithError oldObj = oldIter.next(); - if (creatorEquals(stack, oldObj.getCreator ())) { - createdIter.remove (); - break; - } - } - } - } - } - - objects.clear(); - objects.addAll(created); - - oldObjects.clear(); - oldObjects.addAll(same); - oldObjects.addAll(created); - - - list.removeAll (); - text.setText (""); - canvas.redraw (); - if(hasOldData) { - for (ObjectWithError object : created) { - list.add (object.object.toString()); - } - } - if(hasOldData) { - refreshLabel (created, disposed); - } else { - refreshLabel (Collections.emptyList(), Collections.emptyList()); - } -} - -private static java.util.List collectNewObjects(DeviceData info, - java.util.List oldObjects, - java.util.List disposedObjects, - java.util.List createdObjects - ) { - disposedObjects.addAll(oldObjects); - ArrayList sameObjects = new ArrayList<>(); - - for (int i=0; i oldObject = oldObjects.iterator (); - Object infoObject = info.objects [i]; - if (!(infoObject instanceof Color)) { - // Bug 563018: Colors don't require disposal, so exclude them from the list of allocated objects. - while (oldObject.hasNext () && !found) { - ObjectWithError next = oldObject.next (); - if (infoObject == next.object) { - sameObjects.add(next); - found = true; - } - } - if (!found) { - createdObjects.add(new ObjectWithError (infoObject, info.errors[i])); - } - } - } - // objects that were not found in new system state are disposed - disposedObjects.removeAll(sameObjects); - return sameObjects; -} - -private DeviceData getDeviceData(Display display) { - DeviceData info = display.getDeviceData (); - if (!info.tracking) { - Shell shell = canvas.getShell(); - MessageBox dialog = new MessageBox (shell, SWT.ICON_WARNING | SWT.YES | SWT.NO); - dialog.setText (shell.getText ()); - dialog.setMessage ("Warning: Device is not tracking resource allocation\nWould you like to enable tracking now for future created resources?"); - if (SWT.YES == dialog.open ()) { - enableTracking.setSelection(true); - toggleEnableTracking(); - } - } - return info; -} - -boolean creatorEquals (StackTraceElement first, StackTraceElement second) { - switch (diffType.getSelectionIndex()) { - case 1: return first.equals(second); - case 2: return first.getClassName().equals(second.getClassName()); - default: throw new IllegalArgumentException(); - } -} -private void saveToFile(boolean prompt) { - if (prompt || selectedName == null) { - FileDialog dialog = new FileDialog(saveAs.getShell(), SWT.SAVE); - dialog.setFilterPath(filterPath); - dialog.setFileName(fileName); - dialog.setOverwrite(true); - selectedName = dialog.open(); - fileCount = 0; - if (selectedName == null) { - return; - } - filterPath = dialog.getFilterPath(); - fileName = dialog.getFileName(); - - MessageBox msg = new MessageBox(saveAs.getShell(), SWT.ICON_QUESTION | SWT.YES | SWT.NO); - msg.setText("Append incrementing file counter?"); - msg.setMessage("Append an incrementing file count to the file name on each save, starting at 000?"); - incrementFileNames = msg.open() == SWT.YES; - - msg = new MessageBox(saveAs.getShell(), SWT.ICON_QUESTION | SWT.YES | SWT.NO); - msg.setText("Save images for each resource?"); - msg.setMessage("Save an image (png) for each resource?"); - saveImages = msg.open() == SWT.YES; - } - - String fileName = selectedName; - if (incrementFileNames) { - fileName = String.format("%s_%03d", fileName, fileCount++); - } - try (PrintWriter file = new PrintWriter(new FileOutputStream(fileName))) { - - int i = 0; - for (ObjectWithError o : objects) { - Object object = o.object; - Error error = o.error; - file.print(object.toString()); - if (saveImages) { - String suffix = String.format("%05d.png", i++); - String pngName = String.format("%s_%s", fileName, suffix); - Image image = new Image(saveAs.getDisplay(), (gc, width, height) -> draw(gc, object), 100, 100); - try { - ImageLoader loader = new ImageLoader(); - loader.data = new ImageData[] { image.getImageData() }; - loader.save(pngName, SWT.IMAGE_PNG); - } finally { - image.dispose(); - } - - file.print(" -> "); - file.print(suffix); - } - file.println(); - if (stackTrace.getSelection()) { - error.printStackTrace(file); - System.out.println(); - } - } - } catch (IOException e1) { - MessageBox msg = new MessageBox(saveAs.getShell(), SWT.ICON_ERROR | SWT.OK); - msg.setText("Failed to save"); - msg.setMessage("Failed to save S-Leak file.\n" + e1.getMessage()); - msg.open(); - } -} - -void toggleStackTrace () { - refreshObject (); - canvas.getParent().layout (); -} - -void paintCanvas (Event event) { - canvas.setCursor (null); - int index = list.getSelectionIndex (); - if (index == -1) return; - GC gc = event.gc; - Object object = objects.get(index).object; - draw(gc, object); -} - -void draw(GC gc, Object object) { - if (object instanceof Cursor) { - if (((Cursor)object).isDisposed ()) return; - canvas.setCursor ((Cursor) object); - return; - } - if (object instanceof Font) { - if (((Font)object).isDisposed ()) return; - gc.setFont ((Font) object); - String string = ""; - String lf = text.getLineDelimiter (); - for (FontData data : gc.getFont ().getFontData ()) { - String style = "NORMAL"; - int bits = data.getStyle (); - if (bits != 0) { - if ((bits & SWT.BOLD) != 0) style = "BOLD "; - if ((bits & SWT.ITALIC) != 0) style += "ITALIC"; - } - string += data.getName () + " " + data.getHeight () + " " + style + lf; - } - gc.drawString (string, 0, 0); - return; - } - //NOTHING TO DRAW FOR GC -// if (object instanceof GC) { -// return; -// } - if (object instanceof Image) { - if (((Image)object).isDisposed ()) return; - gc.drawImage ((Image) object, 0, 0); - return; - } - if (object instanceof Path) { - if (((Path)object).isDisposed ()) return; - gc.drawPath ((Path) object); - return; - } - if (object instanceof Pattern) { - if (((Pattern)object).isDisposed ()) return; - gc.setBackgroundPattern ((Pattern)object); - gc.fillRectangle (canvas.getClientArea ()); - gc.setBackgroundPattern (null); - return; - } - if (object instanceof Region) { - if (((Region)object).isDisposed ()) return; - String string = ((Region)object).getBounds().toString(); - gc.drawString (string, 0, 0); - return; - } - if (object instanceof TextLayout) { - if (((TextLayout)object).isDisposed ()) return; - ((TextLayout)object).draw (gc, 0, 0); - return; - } - if (object instanceof Transform) { - if (((Transform)object).isDisposed ()) return; - String string = ((Transform)object).toString(); - gc.drawString (string, 0, 0); - return; - } -} - -void refreshObject () { - int index = list.getSelectionIndex (); - if (index == -1) return; - if (stackTrace.getSelection ()) { - text.setText (objects.get(index).getStack()); - setVisible(text, true); - setVisible(canvas, false); - text.getParent().layout(); - } else { - setVisible(canvas, true); - setVisible(text, false); - canvas.redraw (); - } -} - -private void setVisible(Control control, boolean visible) { - control.setVisible(visible); - ((GridData)control.getLayoutData()).exclude = !visible; -} - -private void filterNonDisposedWidgetTypes() { - java.util.List> trackedTypes = Arrays.asList( -// Composite.class, -// Menu.class - ); - nonDisposedWidgetTracker.setTrackedTypes(trackedTypes); -} - -private void setWidgetTrackingEnabled(boolean tracking) { - nonDisposedWidgetTracker.setTrackingEnabled(tracking); -} - -private java.util.List getNonDisposedWidgets() { - java.util.List nonDisposedWidgets = new ArrayList<>(); - nonDisposedWidgetTracker.getNonDisposedWidgets().forEach((w, e) -> nonDisposedWidgets.add(new ObjectWithError(w, e))); - return nonDisposedWidgets; -} - -private void resetNonDisposedWidgets() { - nonDisposedWidgetTracker.startTracking(); -} - -private static final class ObjectWithError { - final Object object; - final Error error; - String stack; - StackTraceElement creator; - - ObjectWithError(Object o, Error e) { - this.object = o; - this.error = e; - } - - StackTraceElement getCreator() { - if (creator == null) { - String objectType = object.getClass().getName(); - Iterator stack = Arrays.asList(error.getStackTrace()).iterator(); - while (stack.hasNext()) { - StackTraceElement element = stack.next(); - if (element.getClassName().equals(objectType) && element.getMethodName().equals("")) { - creator = stack.hasNext() ? stack.next() : null; - break; - } - } - } - return creator; - } - - String getStack() { - if (stack == null) { - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - PrintStream s = new PrintStream(stream); - error.printStackTrace(s); - stack = stream.toString(); - } - return stack; - } -} -} diff --git a/bundles/org.eclipse.swt.tools.spies/src/org/eclipse/swt/tools/internal/SpiesConstants.java b/bundles/org.eclipse.swt.tools.spies/src/org/eclipse/swt/tools/internal/SpiesConstants.java deleted file mode 100644 index 3f8698604b1..00000000000 --- a/bundles/org.eclipse.swt.tools.spies/src/org/eclipse/swt/tools/internal/SpiesConstants.java +++ /dev/null @@ -1,24 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2016 Ericsson and others. - * - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License 2.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - *******************************************************************************/ - -package org.eclipse.swt.tools.internal; - -/** - * Interface containing constants for the Spies plug-in. - */ - -public interface SpiesConstants { - /** - * Identifies the spies plug-in. - */ - public static final String PLUGIN_ID = "org.eclipse.swt.tools.spies"; //$NON-NLS-1$ - -} diff --git a/bundles/org.eclipse.swt.tools.spies/src/org/eclipse/swt/tools/views/SleakView.java b/bundles/org.eclipse.swt.tools.spies/src/org/eclipse/swt/tools/views/SleakView.java deleted file mode 100644 index bbf444c9b8f..00000000000 --- a/bundles/org.eclipse.swt.tools.spies/src/org/eclipse/swt/tools/views/SleakView.java +++ /dev/null @@ -1,43 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2019 IBM Corporation and others. - * - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License 2.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * IBM Corporation - initial API and implementation - * Lars Vogel - Converted to e4 view - *******************************************************************************/ -package org.eclipse.swt.tools.views; - -import org.eclipse.e4.ui.di.*; -import org.eclipse.swt.tools.internal.*; -import org.eclipse.swt.widgets.*; - -import jakarta.annotation.*; - -/** - * Sleak view to trace native handler allocation - */ - -public class SleakView { - - private Composite composite; - - @PostConstruct - public void createPartControl(Composite parent) { - Sleak sleak = new Sleak (); - sleak.create(parent); - composite = parent; - } - - @Focus - public void setFocus() { - composite.setFocus(); - } - -} \ No newline at end of file diff --git a/bundles/org.eclipse.swt.tools.spies/src/org/eclipse/swt/tools/views/SpyView.java b/bundles/org.eclipse.swt.tools.spies/src/org/eclipse/swt/tools/views/SpyView.java deleted file mode 100644 index e1ccca3cfda..00000000000 --- a/bundles/org.eclipse.swt.tools.spies/src/org/eclipse/swt/tools/views/SpyView.java +++ /dev/null @@ -1,517 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2016 IBM Corporation and others. - * - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License 2.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.swt.tools.views; - -import java.io.*; -import java.lang.reflect.*; - -import org.eclipse.core.runtime.*; -import org.eclipse.jface.action.*; -import org.eclipse.jface.resource.*; -import org.eclipse.swt.*; -import org.eclipse.swt.custom.*; -import org.eclipse.swt.tools.internal.*; -import org.eclipse.swt.widgets.*; -import org.eclipse.ui.*; -import org.eclipse.ui.part.*; - -public class SpyView extends ViewPart { - private StyledText output; - private Action spyAction, fullyQualifiedAction; - private Listener keyFilter; - private Runnable timer; - private Control lastControl; - private Field field; - - static final int TIMEOUT = 100; - - private static final ImageDescriptor SPY_IMAGE_DESCRIPTOR = ImageDescriptor.createFromURL( - FileLocator.find(Platform.getBundle(SpiesConstants.PLUGIN_ID), new Path("icons/spy.png"), null)); - /** - * This is a callback that will allow us - * to create the viewer and initialize it. - */ - @Override - public void createPartControl(Composite parent) { - output = new StyledText(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.READ_ONLY); - - keyFilter = e -> { - // If this accelerator changes, change the tooltip text - if (e.keyCode == '.' && e.stateMask == (SWT.ALT | SWT.SHIFT | SWT.CONTROL)) { - if (spyAction.isChecked()) { - spyAction.setChecked(false); - } else { - spyAction.setChecked(true); - spyAction.run(); - } - e.type = SWT.None; - } - }; - parent.getDisplay().addFilter(SWT.KeyDown, keyFilter); - - timer = new Runnable() { - @Override - public void run() { - if (output == null || output.isDisposed() || !spyAction.isChecked()) return; - Display display = output.getDisplay(); - Control control = display.getCursorControl(); - if (control != lastControl) { - StringBuilder text = new StringBuilder(); - if (control != null) { - text.append(getName(control)+"@"+getOSHandle(control)+"\n"); - text.append("\tStyle: "+getStyle(control)+"\n"); - text.append("\tLayout Data: "+getName(control.getLayoutData())+"\n"); - text.append("\tBounds: "+control.getBounds()+"\n"); - if (control instanceof Composite && ((Composite)control).getLayout() != null) { - text.append("\tLayout: "+getName(((Composite)control).getLayout())+"\n"); - } - text.append("\n"); - if (control instanceof Composite) { - text.append("\nChildren:\n"); - for (Control element : ((Composite)control).getChildren()) { - text.append("\t"+getName(element)+"\n"); - } - } - Composite parent = control.getParent(); - if (parent != null) { - text.append("\nPeers:\n"); - for (Control peer : parent.getChildren()) { - text.append("\t"); - if (peer == control) text.append("*"); - text.append(getName(peer)+"@"+getOSHandle(peer)); - text.append(" Layout Data: "+getName(peer.getLayoutData())); - text.append(" Bounds: "+peer.getBounds()); - text.append("\n"); - } - text.append("\nParent Tree:\n"); - Composite[] parents = new Composite[0]; - while (parent != null) { - Composite[] newParents = new Composite[parents.length + 1]; - System.arraycopy(parents, 0, newParents, 0, parents.length); - newParents[parents.length] = parent; - parents = newParents; - parent = parent.getParent(); - } - for (int i = parents.length - 1; i >= 0; i--) { - String prefix = "\t"; - for (int j = 0; j < parents.length - i - 1; j++) { - prefix += "\t"; - } - text.append(prefix + getName(parents[i])+"@"+getOSHandle(parents[i])+"\n"); - text.append(prefix+"\t Style: "+getStyle(parents[i])+"\n"); - text.append(prefix+"\t Bounds: "+parents[i].getBounds()+"\n"); - text.append(prefix+"\t Layout: "+getName(parents[i].getLayout())+"\n"); - text.append(prefix+"\t LayoutData: "+getName(parents[i].getLayoutData())+"\n"); - } - } - Error error = (Error)control.getData("StackTrace"); - if (error != null) { - text.append("\nCreation Stack Trace:\n"); - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - PrintStream s = new PrintStream(stream); - error.printStackTrace(s); - text.append(stream.toString()); - } - } - output.setText(text.toString()); - } - lastControl = control; - display.timerExec(100, this); - } - }; - - makeActions(); - contributeToActionBars(); - } - - String getName(Object object) { - if (object == null) return "null"; - String name = object.toString (); - if (fullyQualifiedAction.isChecked()) { - int index = name.indexOf(' '); - if (index >= 0 && name.length() >= 1) { - name = object.getClass ().getName () + name.substring(index); - } - } - return name; - } - - /** - * Passing the focus request to the viewer's control. - */ - @Override - public void setFocus() { - if (output != null & !output.isDisposed()) output.setFocus(); - } - - private String getOSHandle(Control control) { - if (field == null) { - for (String fieldName : new String[]{"handle", "view"}) { - try { - field = control.getClass().getField(fieldName); - if (field != null) break; - } catch (Throwable e) {} - } - } - try { - return field.get(control).toString(); - } catch (Throwable e) {} - return ""; - } - - private void contributeToActionBars() { - IActionBars bars = getViewSite().getActionBars(); - fillLocalPullDown(bars.getMenuManager()); - fillLocalToolBar(bars.getToolBarManager()); - } - - @Override - public void dispose() { - if (keyFilter != null) { - Display.getCurrent().removeFilter(SWT.KeyDown, keyFilter); - } - super.dispose(); - } - - private void fillLocalPullDown(IMenuManager manager) { - manager.add(spyAction); - manager.add(fullyQualifiedAction); - } - - private void fillLocalToolBar(IToolBarManager manager) { - manager.add(spyAction); - } - - private void makeActions() { - spyAction = new Action("Spy", IAction.AS_CHECK_BOX) { - @Override - public void run() { - Display.getCurrent().timerExec(TIMEOUT, timer); - } - }; - spyAction.setToolTipText("Toggle Spy (CONTROL+ALT+SHIFT+.)"); - spyAction.setImageDescriptor(SPY_IMAGE_DESCRIPTOR); - - fullyQualifiedAction = new Action("Fully Qualify Names", IAction.AS_CHECK_BOX) { - @Override - public void run() { - } - }; - } - - private String getStyle(Widget w) { - //MODELESS = 0; - //BAR = 1 << 1; - //SEPARATOR = 1 << 1; - //TOGGLE = 1 << 1; - //MULTI = 1 << 1; - //INDETERMINATE = 1 << 1; - //DBCS = 1 << 1; - //ALPHA = 1 << 2; - //TOOL = 1 << 2; - //SINGLE = 1 << 2; - //ARROW = 1 << 2; - //DROP_DOWN = 1 << 2; - //SHADOW_IN = 1 << 2; - //POP_UP = 1 << 3; - //PUSH = 1 << 3; - //READ_ONLY = 1 << 3; - //SHADOW_OUT = 1 << 3; - //NO_TRIM = 1 << 3; - //NATIVE = 1 << 3; - //RESIZE = 1 << 4; - //SHADOW_ETCHED_IN = 1 << 4; - //RADIO = 1 << 4; - //PHONETIC = 1 << 4; - //ROMAN = 1 << 5; - //CHECK = 1 << 5; - //SHADOW_NONE = 1 << 5; - //TITLE = 1 << 5; - //DATE = 1 << 5; - //CLOSE = 1 << 6; - //MENU = CLOSE; - //CASCADE = 1 << 6; - //WRAP = 1 << 6; - //SIMPLE = 1 << 6; - //SHADOW_ETCHED_OUT = 1 << 6; - //MIN = 1 << 7; - //UP = 1 << 7; - //TOP = UP; - //TIME = 1 << 7; - //HORIZONTAL = 1 << 8; - //H_SCROLL = 1 << 8; - //V_SCROLL = 1 << 9; - //VERTICAL = 1 << 9; - //MAX = 1 << 10; - //DOWN = 1 << 10; - //BOTTOM = DOWN; - //CALENDAR = 1 << 10; - //BORDER = 1 << 11; - //CLIP_CHILDREN = 1 << 12; - //BALLOON = 1 << 12; - //CLIP_SIBLINGS = 1 << 13; - //ON_TOP = 1 << 14; - //LEAD = 1 << 14; - //LEFT = LEAD; - //PRIMARY_MODAL = 1 << 15; - //HIDE_SELECTION = 1 << 15; - //SHORT = 1 << 15; - //MEDIUM = 1 << 16; - //FULL_SELECTION = 1 << 16; - //SMOOTH = 1 << 16; - //APPLICATION_MODAL = 1 << 16; - //SYSTEM_MODAL = 1 << 17; - //TRAIL = 1 << 17; - //RIGHT = TRAIL; - //NO_BACKGROUND = 1 << 18; - //NO_FOCUS = 1 << 19; - //NO_REDRAW_RESIZE = 1 << 20; - //NO_MERGE_PAINTS = 1 << 21; - //NO_RADIO_GROUP = 1 << 22; - //PASSWORD = 1 << 22; - //FLAT = 1 << 23; - //EMBEDDED = 1 << 24; - //CENTER = 1 << 24; - //LEFT_TO_RIGHT = 1 << 25; - //RIGHT_TO_LEFT = 1 << 26; - //MIRRORED = 1 << 27; - //VIRTUAL = 1 << 28; - //LONG = 1 << 28; - //DOUBLE_BUFFERED = 1 << 29; - - int style = w.getStyle(); - String result = ""; - if (style == SWT.DEFAULT) { - return "DEFAULT - bad!"; - } - if ((style & 1 << 1) != 0) { - if (w instanceof CTabFolder || w instanceof StyledText || w instanceof List || w instanceof Text || w instanceof Table || w instanceof Tree) { - result += "MULTI | "; - } else if (w instanceof Menu) { - result += "BAR | "; - } else if (w instanceof Label || w instanceof MenuItem || w instanceof ToolItem) { - result += "SEPARATOR | "; - } else if (w instanceof Button) { - result += "TOGGLE | "; - } else if (w instanceof ProgressBar) { - result += "INDETERMINATE | "; - } else { - result += "BAR or SEPARATOR or TOGGLE or MULTI or INDETERMINATE or DBCS | "; - } - } - if ((style & 1 << 2) != 0) { - if (w instanceof Menu || w instanceof ToolItem || w instanceof CoolItem || w instanceof Combo) { - result += "DROP_DOWN | "; - } else if (w instanceof Button) { - result += "ARROW | "; - } else if (w instanceof CTabFolder || w instanceof StyledText || w instanceof List || w instanceof Text || w instanceof Table || w instanceof Tree) { - result += "SINGLE | "; - } else if (w instanceof Label || w instanceof Group) { - result += "SHADOW_IN | "; - } else if (w instanceof Decorations) { - result += "TOOL | "; - } else { - result += "ALPHA or TOOL or SINGLE or ARROW or DROP_DOWN or SHADOW_IN | "; - } - } - if ((style & 1 << 3) != 0) { - if (w instanceof Menu) { - result += "POP_UP | "; - } else if (w instanceof Button || w instanceof MenuItem || w instanceof ToolItem) { - result += "PUSH | "; - } else if (w instanceof Combo || w instanceof Text || w instanceof StyledText) { - result += "READ_ONLY | "; - } else if (w instanceof Label || w instanceof Group || w instanceof ToolBar) { - result += "SHADOW_OUT | "; - } else if (w instanceof Decorations) { - result += "NO_TRIM | "; - } else { - result += "POP_UP or PUSH or READ_ONLY or SHADOW_OUT or NO_TRIM or NATIVE | "; - } - } - if ((style & 1 << 4) != 0) { - if (w instanceof Button || w instanceof MenuItem || w instanceof ToolItem) { - result += "RADIO | "; - } else if (w instanceof Group) { - result += "SHADOW_ETCHED_IN | "; - } else if (w instanceof Decorations || w instanceof Tracker) { - result += "RESIZE | "; - } else { - result += "RESIZE or SHADOW_ETCHED_IN or RADIO or PHONETIC | "; - } - } - if ((style & 1 << 5) != 0) { - if (w instanceof Button || w instanceof MenuItem || w instanceof ToolItem || w instanceof Table || w instanceof Tree) { - result += "CHECK | "; - } else if (w instanceof Label || w instanceof Group) { - result += "SHADOW_NONE | "; - } else if (w instanceof Decorations) { - result += "TITLE | "; - } else if (w instanceof DateTime) { - result += "DATE | "; - } else { - result += "ROMAN or CHECK or SHADOW_NONE or TITLE | "; - } - } - if ((style & 1 << 6) != 0) { - if (w instanceof MenuItem) { - result += "CASCADE | "; - } else if (w instanceof StyledText || w instanceof Label || w instanceof Text || w instanceof ToolBar) { - result += "WRAP | "; - } else if (w instanceof Combo) { - result += "SIMPLE | "; - } else if (w instanceof Group) { - result += "SHADOW_ETCHED_OUT | "; - } else if (w instanceof Decorations || w instanceof CTabFolder || w instanceof CTabItem) { - result += "CLOSE | "; - } else { - result += "CLOSE or MENU or CASCADE or WRAP or SIMPLE or SHADOW_ETCHED_OUT | "; - } - } - if ((style & 1 << 7) != 0) { - if (w instanceof Decorations) { - result += "MIN | "; - } else if (w instanceof Button || w instanceof Tracker) { - result += "UP | "; - } else if (w instanceof CTabFolder) { - result += "TOP | "; - } else if (w instanceof DateTime) { - result += "TIME | "; - } else { - result += "MIN or UP or TOP | "; - } - } - if ((style & 1 << 8) != 0) { - result += "HORIZONTAL | "; - } - if ((style & 1 << 9) != 0) { - result += "VERTICAL | "; - } - if ((style & 1 << 10) != 0) { - if (w instanceof Decorations) { - result += "MAX | "; - } else if (w instanceof Button || w instanceof Tracker) { - result += "DOWN | "; - } else if (w instanceof CTabFolder) { - result += "BOTTOM | "; - } else if (w instanceof DateTime) { - result += "CALENDAR | "; - } else { - result += "MAX or DOWN or BOTTOM | "; - } - } - if ((style & 1 << 11) != 0) { - result += "BORDER | "; - } - if ((style & 1 << 12) != 0) { - if (w instanceof ToolTip) { - result += "BALLOON | "; - } else { - result += "CLIP_CHILDREN | "; - } - } - if ((style & 1 << 13) != 0) { - result += "CLIP_SIBLINGS | "; - } - if ((style & 1 << 14) != 0) { - result += "ON_TOP or LEAD or LEFT | "; - } - if ((style & 1 << 15) != 0) { - if (w instanceof Shell) { - result += "PRIMARY_MODAL | "; - } else if (w instanceof Table || w instanceof Tree) { - result += "HIDE_SELECTION | "; - } else if (w instanceof DateTime) { - result += "SHORT | "; - } else { - result += "PRIMARY_MODAL or HIDE_SELECTION | "; - } - } - if ((style & 1 << 16) != 0) { - if (w instanceof StyledText || w instanceof Table || w instanceof Tree) { - result += "FULL_SELECTION | "; - } else if (w instanceof Shell) { - result += "APPLICATION_MODAL | "; - } else if (w instanceof ProgressBar) { - result += "SMOOTH | "; - } else if (w instanceof DateTime) { - result += "MEDIUM | "; - } else { - result += "FULL_SELECTION or SMOOTH or APPLICATION_MODAL | "; - } - } - if ((style & 1 << 17) != 0) { - if (w instanceof Shell) { - result += "SYSTEM_MODAL | "; - } else if (w instanceof Button || w instanceof Label || w instanceof TableColumn || w instanceof Tracker || w instanceof ToolBar) { - result += "TRAIL | "; - } else { - result += "SYSTEM_MODAL or TRAIL or RIGHT | "; - } - } - if ((style & 1 << 18) != 0) { - result += "NO_BACKGROUND | "; - } - if ((style & 1 << 19) != 0) { - result += "NO_FOCUS | "; - } - if ((style & 1 << 20) != 0) { - result += "NO_REDRAW_RESIZE | "; - } - if ((style & 1 << 21) != 0) { - result += "NO_MERGE_PAINTS | "; - } - if ((style & 1 << 22) != 0) { - if (w instanceof Text) { - result += "PASSWORD | "; - } else if (w instanceof Composite) { - result += "NO_RADIO_GROUP | "; - } else { - result += "NO_RADIO_GROUP or PASSWORD | "; - } - } - if ((style & 1 << 23) != 0) { - result += "FLAT | "; - } - if ((style & 1 << 24) != 0) { - if (w instanceof Button || w instanceof Label || w instanceof TableColumn) { - result += "CENTER | "; - } else { - result += "EMBEDDED or CENTER | "; - } - } - if ((style & 1 << 25) != 0) { - result += "LEFT_TO_RIGHT | "; - } - if ((style & 1 << 26) != 0) { - result += "RIGHT_TO_LEFT | "; - } - if ((style & 1 << 27) != 0) { - result += "MIRRORED | "; - } - if ((style & 1 << 28) != 0) { - if (w instanceof DateTime) { - result += "LONG | "; - } else { - result += "VIRTUAL | "; - } - } - if ((style & 1 << 29) != 0) { - result += "DOUBLE_BUFFERED | "; - } - int lastOr = result.lastIndexOf("|"); - if (lastOr == result.length() - 2 ) result = result.substring(0, result.length() - 2); - return result; - } -} diff --git a/features/org.eclipse.swt.tools.feature/feature.xml b/features/org.eclipse.swt.tools.feature/feature.xml index a09ec37968f..df4b0b6849e 100644 --- a/features/org.eclipse.swt.tools.feature/feature.xml +++ b/features/org.eclipse.swt.tools.feature/feature.xml @@ -23,10 +23,6 @@ id="org.eclipse.swt.tools" version="0.0.0"/> - - From efa335357a817ab0314d749fdedffb16159cfcb5 Mon Sep 17 00:00:00 2001 From: Andreas Koch Date: Tue, 6 May 2025 12:16:38 +0200 Subject: [PATCH 053/119] [win32] Adapt/copy all handles on Image copy This commit adapts and copies all handles in the copy constructor in Image. As each image now manages possibly more than one OS handles at the same time in the windows implementation, it is important to apply the operation on all of them. --- .../win32/org/eclipse/swt/graphics/Image.java | 76 +++++++++++-------- .../org/eclipse/swt/snippets/Snippet382.java | 67 ++++++++++------ 2 files changed, 87 insertions(+), 56 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java index f2b96c560b1..90714c8dc80 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java @@ -244,41 +244,45 @@ public Image(Device device, Image srcImage, int flag) { if (srcImage == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); if (srcImage.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT); initialNativeZoom = srcImage.initialNativeZoom; - Rectangle rect = srcImage.getBounds(getZoom()); this.type = srcImage.type; this.imageProvider = srcImage.imageProvider.createCopy(this); this.styleFlag = srcImage.styleFlag | flag; - long srcImageHandle = win32_getHandle(srcImage, getZoom()); switch (flag) { case SWT.IMAGE_COPY: { switch (type) { case SWT.BITMAP: - /* Get the HDC for the device */ - long hDC = device.internal_new_GC(null); - - /* Copy the bitmap */ - long hdcSource = OS.CreateCompatibleDC(hDC); - long hdcDest = OS.CreateCompatibleDC(hDC); - long hOldSrc = OS.SelectObject(hdcSource, srcImageHandle); - BITMAP bm = new BITMAP(); - OS.GetObject(srcImageHandle, BITMAP.sizeof, bm); - imageMetadata = new ImageHandle(OS.CreateCompatibleBitmap(hdcSource, rect.width, bm.bmBits != 0 ? -rect.height : rect.height), getZoom()); - if (imageMetadata.handle == 0) SWT.error(SWT.ERROR_NO_HANDLES); - long hOldDest = OS.SelectObject(hdcDest, imageMetadata.handle); - OS.BitBlt(hdcDest, 0, 0, rect.width, rect.height, hdcSource, 0, 0, OS.SRCCOPY); - OS.SelectObject(hdcSource, hOldSrc); - OS.SelectObject(hdcDest, hOldDest); - OS.DeleteDC(hdcSource); - OS.DeleteDC(hdcDest); - - /* Release the HDC for the device */ - device.internal_dispose_GC(hDC, null); - + for (ImageHandle imageHandle : srcImage.zoomLevelToImageHandle.values()) { + Rectangle rect = imageHandle.getBounds(); + long srcImageHandle = imageHandle.handle; + /* Get the HDC for the device */ + long hDC = device.internal_new_GC(null); + + /* Copy the bitmap */ + long hdcSource = OS.CreateCompatibleDC(hDC); + long hdcDest = OS.CreateCompatibleDC(hDC); + long hOldSrc = OS.SelectObject(hdcSource, srcImageHandle); + BITMAP bm = new BITMAP(); + OS.GetObject(srcImageHandle, BITMAP.sizeof, bm); + imageMetadata = new ImageHandle(OS.CreateCompatibleBitmap(hdcSource, rect.width, bm.bmBits != 0 ? -rect.height : rect.height), imageHandle.zoom); + if (imageMetadata.handle == 0) SWT.error(SWT.ERROR_NO_HANDLES); + long hOldDest = OS.SelectObject(hdcDest, imageMetadata.handle); + OS.BitBlt(hdcDest, 0, 0, rect.width, rect.height, hdcSource, 0, 0, OS.SRCCOPY); + OS.SelectObject(hdcSource, hOldSrc); + OS.SelectObject(hdcDest, hOldDest); + OS.DeleteDC(hdcSource); + OS.DeleteDC(hdcDest); + + /* Release the HDC for the device */ + device.internal_dispose_GC(hDC, null); + } transparentPixel = srcImage.transparentPixel; break; case SWT.ICON: - imageMetadata = new ImageHandle(OS.CopyImage(srcImageHandle, OS.IMAGE_ICON, rect.width, rect.height, 0), getZoom()); - if (imageMetadata.handle == 0) SWT.error(SWT.ERROR_NO_HANDLES); + for (ImageHandle imageHandle : srcImage.zoomLevelToImageHandle.values()) { + Rectangle rect = imageHandle.getBounds(); + imageMetadata = new ImageHandle(OS.CopyImage(imageHandle.handle, OS.IMAGE_ICON, rect.width, rect.height, 0), imageHandle.zoom); + if (imageMetadata.handle == 0) SWT.error(SWT.ERROR_NO_HANDLES); + } break; default: SWT.error(SWT.ERROR_INVALID_IMAGE); @@ -286,15 +290,21 @@ public Image(Device device, Image srcImage, int flag) { break; } case SWT.IMAGE_DISABLE: { - ImageData data = srcImage.getImageData(srcImage.getZoom()); - ImageData newData = applyDisableImageData(data, rect.height, rect.width); - init (newData, getZoom()); + for (ImageHandle imageHandle : srcImage.zoomLevelToImageHandle.values()) { + Rectangle rect = imageHandle.getBounds(); + ImageData data = srcImage.getImageData(imageHandle.zoom); + ImageData newData = applyDisableImageData(data, rect.height, rect.width); + init (newData, imageHandle.zoom); + } break; } case SWT.IMAGE_GRAY: { - ImageData data = srcImage.getImageData(srcImage.getZoom()); - ImageData newData = applyGrayImageData(data, rect.height, rect.width); - init (newData, getZoom()); + for (ImageHandle imageHandle : srcImage.zoomLevelToImageHandle.values()) { + Rectangle rect = imageHandle.getBounds(); + ImageData data = srcImage.getImageData(imageHandle.zoom); + ImageData newData = applyGrayImageData(data, rect.height, rect.width); + init (newData, imageHandle.zoom); + } break; } default: @@ -2558,6 +2568,10 @@ public ImageHandle(long handle, int zoom) { setImageMetadataForHandle(this, zoom); } + public Rectangle getBounds() { + return new Rectangle(0, 0, width, height); + } + private void setBackground(RGB color) { if (transparentPixel == -1) return; diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet382.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet382.java index bb639b08287..502f14dfe65 100644 --- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet382.java +++ b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet382.java @@ -13,6 +13,8 @@ *******************************************************************************/ package org.eclipse.swt.snippets; +import java.util.function.*; + import org.eclipse.swt.*; import org.eclipse.swt.graphics.*; import org.eclipse.swt.layout.*; @@ -65,8 +67,8 @@ public static void main (String [] args) { final Display display = new Display (); final Image imageWithFileNameProvider = new Image (display, filenameProvider); - final Image disabledImageWithFileNameProvider = new Image (display,imageWithFileNameProvider, SWT.IMAGE_DISABLE); - final Image greyImageWithFileNameProvider = new Image (display,imageWithFileNameProvider, SWT.IMAGE_GRAY); + final Supplier disabledImageWithFileNameProvider = () -> new Image (display,imageWithFileNameProvider, SWT.IMAGE_DISABLE); + final Supplier greyImageWithFileNameProvider = () -> new Image (display,imageWithFileNameProvider, SWT.IMAGE_GRAY); final Image imageWithDataProvider = new Image (display, imageDataProvider); final Image disabledImageWithDataProvider = new Image (display,imageWithDataProvider, SWT.IMAGE_DISABLE); @@ -76,6 +78,10 @@ public static void main (String [] args) { final Image disabledImageWithData = new Image (display,imageWithData, SWT.IMAGE_DISABLE); final Image greyImageWithData = new Image (display,imageWithData, SWT.IMAGE_GRAY); + final Supplier imageWithDataCopy = () -> new Image (display, imageWithDataProvider, SWT.IMAGE_COPY); + final Supplier disabledImageWithDataCopy = () -> new Image (display,disabledImageWithDataProvider, SWT.IMAGE_COPY); + final Supplier greyImageWithDataCopy = () -> new Image (display,greyImageWithDataProvider, SWT.IMAGE_COPY); + final ImageGcDrawer imageGcDrawer = (gc, width, height) -> { gc.setBackground(display.getSystemColor(SWT.COLOR_RED)); gc.fillRectangle(0, 0, width, height); @@ -111,42 +117,53 @@ public void handleEvent(Event e) { if (e.type == SWT.Paint) { GC mainGC = e.gc; GCData gcData = mainGC.getGCData(); - + gcData.nativeZoom = 100; try { + mainGC.drawText("--ImageFileNameProvider--", 20, 20); drawImages(mainGC, gcData, "Normal",40, imageWithFileNameProvider); - drawImages(mainGC, gcData, "Disabled",80, disabledImageWithFileNameProvider); - drawImages(mainGC, gcData, "Greyed",120, greyImageWithFileNameProvider); - - drawImages(mainGC, gcData, "Normal",160, imageWithDataProvider); - drawImages(mainGC, gcData, "Disabled",200, disabledImageWithDataProvider); - drawImages(mainGC, gcData, "Greyed",240, greyImageWithDataProvider); - - drawImages(mainGC, gcData, "Normal",280, imageWithDataProvider); - drawImages(mainGC, gcData, "Disabled",320, disabledImageWithData); - drawImages(mainGC, gcData, "Greyed",360, greyImageWithData); - - drawImages(mainGC, gcData, "Normal", 400, imageWithGcDrawer); - drawImages(mainGC, gcData, "Disabled", 440, disabledImageWithGcDrawer); - drawImages(mainGC, gcData, "Greyed", 480, greyImageWithGcDrawer); - - drawImages(mainGC, gcData, "Normal", 520, imageWithTransparentGcDrawer); - drawImages(mainGC, gcData, "Disabled", 560, disabledImageWithTransparentGcDrawer); - drawImages(mainGC, gcData, "Greyed", 600, greyImageWithTransparentGcDrawer); + drawImages(mainGC, gcData, "Disabled",80, disabledImageWithFileNameProvider.get()); + drawImages(mainGC, gcData, "Greyed",120, greyImageWithFileNameProvider.get()); + + mainGC.drawText("--ImageDataProvider--", 20, 150); + drawImages(mainGC, gcData, "Normal",180, imageWithDataProvider); + drawImages(mainGC, gcData, "Disabled",220, disabledImageWithDataProvider); + drawImages(mainGC, gcData, "Greyed",260, greyImageWithDataProvider); + + mainGC.drawText("--Image with ImageData--", 20, 290); + drawImages(mainGC, gcData, "Normal",320, imageWithData); + drawImages(mainGC, gcData, "Disabled",360, disabledImageWithData); + drawImages(mainGC, gcData, "Greyed",400, greyImageWithData); + + mainGC.drawText("--ImageDataProvider Copy--", 20, 430); + drawImages(mainGC, gcData, "Normal",460, imageWithDataCopy.get()); + drawImages(mainGC, gcData, "Disabled",500, disabledImageWithDataCopy.get()); + drawImages(mainGC, gcData, "Greyed",540, greyImageWithDataCopy.get()); + + mainGC.drawText("--ImageGcDrawer--", 20, 570); + drawImages(mainGC, gcData, "Normal", 600, imageWithGcDrawer); + drawImages(mainGC, gcData, "Disabled", 640, disabledImageWithGcDrawer); + drawImages(mainGC, gcData, "Greyed", 680, greyImageWithGcDrawer); + + mainGC.drawText("--Transparent ImageGcDrawer--", 20, 710); + drawImages(mainGC, gcData, "Normal", 740, imageWithTransparentGcDrawer); + drawImages(mainGC, gcData, "Disabled", 780, disabledImageWithTransparentGcDrawer); + drawImages(mainGC, gcData, "Greyed", 820, greyImageWithTransparentGcDrawer); } finally { mainGC.dispose (); } } } - private void drawImages(GC mainGC, GCData gcData, String text, int y, final Image imageWithFileNameProvider) { + private void drawImages(GC mainGC, GCData gcData, String text, int y, final Image image) { gcData.nativeZoom = 100; mainGC.drawText(text, 0, y); - mainGC.drawImage(imageWithFileNameProvider, 50, y); + mainGC.drawImage(image, 50, y); gcData.nativeZoom = 150; - mainGC.drawImage(imageWithFileNameProvider, 100, (int) (y/1.5)); + mainGC.drawImage(image, 100, (int) (y/1.5)); gcData.nativeZoom = 200; - mainGC.drawImage(imageWithFileNameProvider, 150, y/2); + mainGC.drawImage(image, 150, y/2); + gcData.nativeZoom = 100; } }; shell.addListener(SWT.Paint, l); From 3705f038b4ef89877631c5cfa3f8546e6dc7392e Mon Sep 17 00:00:00 2001 From: Andreas Koch Date: Tue, 6 May 2025 12:27:36 +0200 Subject: [PATCH 054/119] [win32] Utilize temporary image handles This commit adapts all places, where operation where executed with OS handles created for a specific zoom that could use any zoom. Therefor now any existing handle is used or, if none exists yet, a temporary handle is created and destroyed afterwards. --- .../win32/org/eclipse/swt/graphics/Image.java | 96 +++++++++++-------- 1 file changed, 55 insertions(+), 41 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java index 90714c8dc80..7263a283a15 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java @@ -1099,47 +1099,49 @@ public Color getBackground() { /* Get the HDC for the device */ long hDC = device.internal_new_GC(null); - long handle = win32_getHandle(this, getZoom()); - - /* Compute the background color */ - BITMAP bm = new BITMAP(); - OS.GetObject(handle, BITMAP.sizeof, bm); - long hdcMem = OS.CreateCompatibleDC(hDC); - long hOldObject = OS.SelectObject(hdcMem, handle); - int red = 0, green = 0, blue = 0; - if (bm.bmBitsPixel <= 8) { - byte[] color = new byte[4]; - OS.GetDIBColorTable(hdcMem, transparentPixel, 1, color); - blue = color[0] & 0xFF; - green = color[1] & 0xFF; - red = color[2] & 0xFF; - } else { - switch (bm.bmBitsPixel) { - case 16: - blue = (transparentPixel & 0x1F) << 3; - green = (transparentPixel & 0x3E0) >> 2; - red = (transparentPixel & 0x7C00) >> 7; - break; - case 24: - blue = (transparentPixel & 0xFF0000) >> 16; - green = (transparentPixel & 0xFF00) >> 8; - red = transparentPixel & 0xFF; - break; - case 32: - blue = (transparentPixel & 0xFF000000) >>> 24; - green = (transparentPixel & 0xFF0000) >> 16; - red = (transparentPixel & 0xFF00) >> 8; - break; - default: - return null; + return applyUsingAnyHandle(imageHandle -> { + long handle = imageHandle.handle; + /* Compute the background color */ + BITMAP bm = new BITMAP(); + OS.GetObject(handle, BITMAP.sizeof, bm); + long hdcMem = OS.CreateCompatibleDC(hDC); + long hOldObject = OS.SelectObject(hdcMem, handle); + int red = 0, green = 0, blue = 0; + if (bm.bmBitsPixel <= 8) { + byte[] color = new byte[4]; + OS.GetDIBColorTable(hdcMem, transparentPixel, 1, color); + blue = color[0] & 0xFF; + green = color[1] & 0xFF; + red = color[2] & 0xFF; + } else { + switch (bm.bmBitsPixel) { + case 16: + blue = (transparentPixel & 0x1F) << 3; + green = (transparentPixel & 0x3E0) >> 2; + red = (transparentPixel & 0x7C00) >> 7; + break; + case 24: + blue = (transparentPixel & 0xFF0000) >> 16; + green = (transparentPixel & 0xFF00) >> 8; + red = transparentPixel & 0xFF; + break; + case 32: + blue = (transparentPixel & 0xFF000000) >>> 24; + green = (transparentPixel & 0xFF0000) >> 16; + red = (transparentPixel & 0xFF00) >> 8; + break; + default: + return null; + } } - } - OS.SelectObject(hdcMem, hOldObject); - OS.DeleteDC(hdcMem); + OS.SelectObject(hdcMem, hOldObject); + OS.DeleteDC(hdcMem); - /* Release the HDC for the device */ - device.internal_dispose_GC(hDC, null); - return Color.win32_new(device, (blue << 16) | (green << 8) | red); + + /* Release the HDC for the device */ + device.internal_dispose_GC(hDC, null); + return Color.win32_new(device, (blue << 16) | (green << 8) | red); + }); } /** @@ -1186,7 +1188,7 @@ Rectangle getBounds(int zoom) { */ @Deprecated public Rectangle getBoundsInPixels() { - return getBounds(getZoom()); + return applyUsingAnyHandle(ImageHandle::getBounds); } /** @@ -1268,7 +1270,7 @@ public ImageData getImageData (int zoom) { */ @Deprecated public ImageData getImageDataAtCurrentZoom() { - return getImageMetadata(getZoom()).getImageData(); + return applyUsingAnyHandle(ImageHandle::getImageData); } /** @@ -1842,6 +1844,18 @@ public String toString () { return "Image {" + zoomLevelToImageHandle + "}"; } + T applyUsingAnyHandle(Function function) { + if (zoomLevelToImageHandle.isEmpty()) { + ImageHandle temporaryHandle = this.imageProvider.newImageHandle(DPIUtil.getDeviceZoom()); + try { + return function.apply(temporaryHandle); + } finally { + temporaryHandle.destroy(); + } + } + return function.apply(zoomLevelToImageHandle.values().iterator().next()); +} + /** * Invokes platform specific functionality to allocate a new image. *

        From 5c1f52f33cef6c5d387ac235a5869e6aff8a819f Mon Sep 17 00:00:00 2001 From: Andreas Koch Date: Tue, 6 May 2025 13:17:01 +0200 Subject: [PATCH 055/119] [win32] Improve GC init for ImageGcDrawer This commits wraps the GC initialization for the ImageGcDrawer to directly pass the zoom from the wrapper when the GC is initialized. In all other cases the GC will be initialized with 100 zoom. --- .../win32/org/eclipse/swt/graphics/Image.java | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java index 7263a283a15..05c3fe8fd89 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java @@ -1719,6 +1719,10 @@ private ImageHandle init(ImageData i, int zoom) { */ @Override public long internal_new_GC (GCData data) { + return configureGC(data, 100); +} + +private long configureGC(GCData data, int zoom) { if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); /* * Create a new GC that can draw into the image. @@ -1743,9 +1747,9 @@ public long internal_new_GC (GCData data) { data.style |= SWT.LEFT_TO_RIGHT; } data.device = device; - data.nativeZoom = initialNativeZoom; + data.nativeZoom = zoom; data.image = this; - data.font = SWTFontProvider.getSystemFont(device, initialNativeZoom); + data.font = SWTFontProvider.getSystemFont(device, zoom); } return imageDC; } @@ -2530,7 +2534,7 @@ protected ImageHandle newImageHandle(int zoom) { } else { image = new Image(device, width, height, zoom); } - GC gc = new GC(image, gcStyle); + GC gc = new GC(new DrawableWrapper(image, zoom), gcStyle); try { gc.data.nativeZoom = zoom; drawer.drawOn(gc, width, height); @@ -2544,6 +2548,26 @@ protected ImageHandle newImageHandle(int zoom) { } } + private class DrawableWrapper implements Drawable { + private final Image image; + private final int zoom; + + public DrawableWrapper(Image image, int zoom) { + this.image = image; + this.zoom = zoom; + } + + @Override + public long internal_new_GC(GCData data) { + return this.image.configureGC(data, zoom); + } + + @Override + public void internal_dispose_GC(long handle, GCData data) { + this.image.internal_dispose_GC(handle, data); + } + } + @Override Object getProvider() { return drawer; From b061c5169fdb137db6630c3ca8dc3cd7898fedfa Mon Sep 17 00:00:00 2001 From: Shahzaib Ibrahim Date: Mon, 5 May 2025 19:31:40 +0200 Subject: [PATCH 056/119] [win32] Encapsulate Font handle with win32_getHandle The handle of Font is encapsulated and exposed only via static method win32_getHandle and direct access to the field is replaced by access to that method. --- .../win32/org/eclipse/swt/graphics/Font.java | 26 ++++++++++++++++--- .../eclipse/swt/internal/SWTFontProvider.java | 6 ++--- .../swt/internal/ScalingSWTFontRegistry.java | 2 +- .../org/eclipse/swt/widgets/Control.java | 2 +- 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Font.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Font.java index 95b51c0c69a..02ba5ca3c79 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Font.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Font.java @@ -46,9 +46,8 @@ public final class Font extends Resource { * platforms and should never be accessed from application code. *

        * - * @noreference This field is not intended to be referenced by clients. */ - public long handle; + private long handle; /** * The zoom in % of the standard resolution used for conversion of point height to pixel height @@ -172,7 +171,8 @@ public Font(Device device, String name, int height, int style) { super(device); if (name == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); this.zoom = DPIUtil.getNativeDeviceZoom(); - init(new FontData (name, height, style)); + FontData fd = new FontData (name, height, style); + init(fd); this.fontHeight = height; init(); } @@ -181,7 +181,8 @@ public Font(Device device, String name, int height, int style) { super(device); if (name == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); this.zoom = DPIUtil.getNativeDeviceZoom(); - init(new FontData (name, height, style)); + FontData fd = new FontData (name, height, style); + init(fd); this.fontHeight = height; init(); } @@ -285,6 +286,23 @@ public String toString () { return "Font {" + handle + "}"; } +/** + * Creates or returns a handle for the requested font. + *

        + * IMPORTANT: This method is not part of the public API for + * Font. It is marked public only so that it can be shared within + * the packages provided by SWT. It is not available on all platforms, and + * should never be called from application code. + * + * @param font the font to get the handle of + * @return handle of the font + * + * @noreference This method is not intended to be referenced by clients. + */ +public static long win32_getHandle(Font font) { + return font.handle; +} + /** * Invokes platform specific functionality to allocate a new font. *

        diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/SWTFontProvider.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/SWTFontProvider.java index f7217445871..4901a2e01f0 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/SWTFontProvider.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/SWTFontProvider.java @@ -48,7 +48,7 @@ public static Font getSystemFont(Device device, int zoom) { } public static long getSystemFontHandle(Device device, int zoom) { - return getSystemFont(device, zoom).handle; + return Font.win32_getHandle(getSystemFont(device, zoom)); } /** @@ -67,14 +67,14 @@ public static Font getFont(Device device, FontData fontData, int zoom) { } public static long getFontHandle(Device device, FontData fontData, int zoom) { - return getFont(device, fontData, zoom).handle; + return Font.win32_getHandle(getFont(device, fontData, zoom)); } public static long getFontHandle(Font font, int zoom) { if (font == null) { SWT.error(SWT.ERROR_NULL_ARGUMENT); } - return getFont(font.getDevice(), font.getFontData()[0], zoom).handle; + return Font.win32_getHandle(getFont(font.getDevice(), font.getFontData()[0], zoom)); } /** diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/ScalingSWTFontRegistry.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/ScalingSWTFontRegistry.java index 55dc435c004..fcd71786440 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/ScalingSWTFontRegistry.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/ScalingSWTFontRegistry.java @@ -44,7 +44,7 @@ private Font getScaledFont(int zoom) { private Font createAndCacheFont(int zoom) { Font newFont = createFont(zoom); - customFontHandlesKeyMap.put(newFont.handle, this); + customFontHandlesKeyMap.put(Font.win32_getHandle(newFont), this); scaledFonts.put(zoom, newFont); return newFont; } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java index 7d4ef4988ea..9c2b0d25393 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java @@ -3439,7 +3439,7 @@ public void setFont (Font font) { long hFont = 0; if (newFont != null) { if (newFont.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT); - hFont = newFont.handle; + hFont = Font.win32_getHandle(newFont); } this.font = newFont; if (hFont == 0) hFont = defaultFont (); From f78ef781939d0d45ad68847972c0bf33c566b812 Mon Sep 17 00:00:00 2001 From: Shahzaib Ibrahim Date: Mon, 5 May 2025 19:33:28 +0200 Subject: [PATCH 057/119] [win32] Create Font handles on demand Handles will no longer be created during initialization but upon first access to the handle via its accessor. Also the destroy condition is changed since handle being 0 doesn't mean that it was destroyed anymore. --- .../win32/org/eclipse/swt/graphics/Font.java | 37 +++++++++++++------ 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Font.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Font.java index 02ba5ca3c79..8f625ed698f 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Font.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Font.java @@ -55,6 +55,16 @@ public final class Font extends Resource { */ int zoom; + /** + * this field is used to mark destroyed fonts + */ + private boolean isDestroyed; + + /** + * this field is used to store fontData provided during initialization + */ + private final FontData fontData; + /** * Font height in points. As the conversion to pixel height involves rounding the fontHeight must * be cached. @@ -63,6 +73,7 @@ public final class Font extends Resource { private Font(Device device, long handle, int zoom) { super(device); + this.fontData = null; this.handle = handle; this.zoom = zoom; this.fontHeight = device.computePoints(fetchLogFontData(), handle, zoom); @@ -90,16 +101,18 @@ private Font(Device device, long handle, int zoom) { */ public Font(Device device, FontData fd) { super(device); + if (fd == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); this.zoom = DPIUtil.getNativeDeviceZoom(); - init(fd); + this.fontData = new FontData(fd.toString()); this.fontHeight = fd.height; init(); } private Font(Device device, FontData fd, int zoom) { super(device); + if (fd == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); this.zoom = zoom; - init(fd); + this.fontData = new FontData(fd.toString()); this.fontHeight = fd.height; init(); } @@ -138,7 +151,7 @@ public Font(Device device, FontData[] fds) { } this.zoom = DPIUtil.getNativeDeviceZoom(); FontData fd = fds[0]; - init(fds[0]); + this.fontData = new FontData(fd.toString()); this.fontHeight = fd.height; init(); } @@ -171,8 +184,7 @@ public Font(Device device, String name, int height, int style) { super(device); if (name == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); this.zoom = DPIUtil.getNativeDeviceZoom(); - FontData fd = new FontData (name, height, style); - init(fd); + this.fontData = new FontData (name, height, style); this.fontHeight = height; init(); } @@ -181,8 +193,7 @@ public Font(Device device, String name, int height, int style) { super(device); if (name == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); this.zoom = DPIUtil.getNativeDeviceZoom(); - FontData fd = new FontData (name, height, style); - init(fd); + this.fontData = new FontData (name, height, style); this.fontHeight = height; init(); } @@ -190,6 +201,7 @@ public Font(Device device, String name, int height, int style) { void destroy() { OS.DeleteObject(handle); handle = 0; + isDestroyed = true; } /** @@ -207,7 +219,7 @@ public boolean equals(Object object) { if (object == this) return true; if (!(object instanceof Font)) return false; Font font = (Font) object; - return device == font.device && handle == font.handle; + return device == font.device && win32_getHandle(this) == win32_getHandle(font); } /** @@ -230,7 +242,7 @@ public FontData[] getFontData() { private LOGFONT fetchLogFontData() { LOGFONT logFont = new LOGFONT (); - OS.GetObject(handle, LOGFONT.sizeof, logFont); + OS.GetObject(win32_getHandle(this), LOGFONT.sizeof, logFont); return logFont; } @@ -246,7 +258,7 @@ private LOGFONT fetchLogFontData() { */ @Override public int hashCode () { - return (int)handle; + return (int) win32_getHandle(this); } void init (FontData fd) { @@ -271,7 +283,7 @@ void init (FontData fd) { */ @Override public boolean isDisposed() { - return handle == 0; + return isDestroyed; } /** @@ -300,6 +312,9 @@ public String toString () { * @noreference This method is not intended to be referenced by clients. */ public static long win32_getHandle(Font font) { + if (font.handle == 0 && font.fontData != null) { + font.init(font.fontData); + } return font.handle; } From 7b21d9a46f1ef1a7484d30770ae58d91a2c3fa46 Mon Sep 17 00:00:00 2001 From: Hannes Wellmann Date: Tue, 6 May 2025 19:33:48 +0200 Subject: [PATCH 058/119] Simplify and modernize ImageLoader and other graphic related tests --- .../Test_org_eclipse_swt_graphics_Cursor.java | 4 +- .../Test_org_eclipse_swt_graphics_Image.java | 9 +- ...st_org_eclipse_swt_graphics_ImageData.java | 11 +- ..._org_eclipse_swt_graphics_ImageLoader.java | 124 +++++++----------- ...t_org_eclipse_swt_widgets_Decorations.java | 21 ++- 5 files changed, 65 insertions(+), 104 deletions(-) diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Cursor.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Cursor.java index 5a52c53a757..4d225025354 100644 --- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Cursor.java +++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Cursor.java @@ -137,10 +137,8 @@ public void test_ConstructorLorg_eclipse_swt_graphics_DeviceI() { @Test public void test_ConstructorLorg_eclipse_swt_graphics_DeviceLorg_eclipse_swt_graphics_ImageDataLorg_eclipse_swt_graphics_ImageDataII() { // Test new Cursor(Device device, ImageData source, ImageData mask, int hotspotX, int hotspotY) - int numFormats = SwtTestUtil.imageFormats.length; String fileName = SwtTestUtil.imageFilenames[0]; - for (int i=0; i new Image(display, stream)); @@ -316,8 +316,7 @@ public void test_ConstructorLorg_eclipse_swt_graphics_DeviceLjava_lang_String() // create valid images for (Display display : displays) { for (String fileName : SwtTestUtil.imageFilenames) { - for (int i = 0; i < SwtTestUtil.imageFormats.length; i++) { - String format = SwtTestUtil.imageFormats[i]; + for (String format : SwtTestUtil.imageFormats) { String pathName = getPath(fileName + "." + format).toString(); Image image = new Image(display, pathName); image.dispose(); @@ -868,10 +867,8 @@ public void test_toString() { /** Test implementation **/ void getImageData1() { - int numFormats = SwtTestUtil.imageFormats.length; String fileName = SwtTestUtil.imageFilenames[0]; - for (int i=0; i tests = new ArrayList<>(); // Compose a list of all supported formats @@ -117,9 +117,10 @@ public void test_blit() throws NoSuchMethodException, SecurityException, Illegal /** * Tests {@link ImageData#blit}: * Ensures that (MSB_FIRST, LSB_FIRST) round trip produces original. + * @throws Exception */ @Test -public void test_blit_MsbLsb() throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { +public void test_blit_MsbLsb() throws Exception { List tests = new ArrayList<>(); { for (int depth : indexedDepths) { @@ -218,10 +219,8 @@ public void test_ConstructorLjava_io_InputStream() throws IOException { assertThrows("No exception thrown for invalid InputStream", SWTException.class, () ->new ImageData(stream1)); } - int numFormats = SwtTestUtil.imageFormats.length; String fileName = SwtTestUtil.imageFilenames[0]; - for (int i=0; i loaderListenerCalled = true; - try { - loader.addImageLoaderListener(null); - fail("No exception thrown for addImageLoaderListener with null argument"); - } catch (IllegalArgumentException e) { - } - + assertThrows(IllegalArgumentException.class, () -> loader.addImageLoaderListener(null), + "No exception thrown for addImageLoaderListener with null argument"); assertFalse(":a:", loader.hasListeners()); loader.addImageLoaderListener(loaderListener); assertTrue(":b:", loader.hasListeners()); @@ -66,13 +64,13 @@ public void test_addImageLoaderListenerLorg_eclipse_swt_graphics_ImageLoaderList loaderListenerCalled = false; try (InputStream stream = SwtTestUtil.class.getResourceAsStream("interlaced_target.png")) { loader.load(stream); - } catch (IOException e) {} + } assertTrue(":c:", loaderListenerCalled); loaderListenerCalled = false; try (InputStream stream = SwtTestUtil.class.getResourceAsStream("target.png")) { loader.load(stream); - } catch (IOException e) {} + } assertFalse(":d:", loaderListenerCalled); loaderListenerCalled = false; @@ -84,86 +82,61 @@ public void test_addImageLoaderListenerLorg_eclipse_swt_graphics_ImageLoaderList } @Test -public void test_loadLjava_io_InputStream() { - ImageLoader loader = new ImageLoader(); - try (InputStream stream = null) { - loader.load(stream); - fail("No exception thrown for load inputStream == null"); - } catch (IllegalArgumentException | IOException e) { - } +public void test_loadLjava_io_InputStream() throws IOException { + ImageLoader loader = new ImageLoader(); + assertThrows(IllegalArgumentException.class, () -> loader.load((InputStream) null), + "No exception thrown for load inputStream == null"); - try (InputStream stream = SwtTestUtil.class.getResourceAsStream("empty.txt")) { - loader.load(stream); - fail("No exception thrown for load from invalid inputStream"); - } catch (IOException|SWTException e) { - } + try (InputStream stream = SwtTestUtil.class.getResourceAsStream("empty.txt")) { + assertThrows(SWTException.class, () -> loader.load(stream), + "No exception thrown for load from invalid inputStream"); + } - int numFormats = SwtTestUtil.imageFormats.length; - String fileName = SwtTestUtil.imageFilenames[0]; - for (int i = 0; i < numFormats; i++) { - String format = SwtTestUtil.imageFormats[i]; - try (InputStream stream = SwtTestUtil.class.getResourceAsStream(fileName + "." + format)) { - loader.load(stream); - } catch (IOException e) { - } + String fileName = SwtTestUtil.imageFilenames[0]; + for (String format : SwtTestUtil.imageFormats) { + try (InputStream stream = SwtTestUtil.class.getResourceAsStream(fileName + "." + format)) { + loader.load(stream); } + } } @Test public void test_loadLjava_lang_String() { ImageLoader loader = new ImageLoader(); String filename = null; - try { - loader.load(filename); - fail("No exception thrown for load filename == null"); - } catch (IllegalArgumentException e) { - } + assertThrows(IllegalArgumentException.class, () -> loader.load(filename), + "No exception thrown for load filename == null"); } @Test -public void test_saveLjava_io_OutputStreamI() { +public void test_saveLjava_io_OutputStreamI() throws IOException { ImageLoader loader = new ImageLoader(); - ByteArrayOutputStream outStream = null; - try { - try { - loader.save(outStream, 0); - fail("No exception thrown for save outputStream == null"); - } catch (IllegalArgumentException e) { - } - outStream = new ByteArrayOutputStream(); - try { - loader.save(outStream, -1); - fail("No exception thrown for save to invalid outputStream format"); - } catch (SWTException e) { + OutputStream outStream1 = null; + assertThrows(IllegalArgumentException.class, () -> loader.save(outStream1, 0), + "No exception thrown for save outputStream == null"); + + OutputStream outStream2 = new ByteArrayOutputStream(); + assertThrows(SWTException.class, () -> loader.save(outStream2, -1), + "No exception thrown for save to invalid outputStream format"); + + boolean jpgSupported = Arrays.asList(SwtTestUtil.imageFormats).contains("jpg"); + if (jpgSupported) { + String filename = SwtTestUtil.imageFilenames[0]; + // must use jpg since save is not implemented yet in png format + String filetype = "jpg"; + try (InputStream inStream = SwtTestUtil.class.getResourceAsStream(filename + "." + filetype)) { + loader.load(inStream); } - boolean jpgSupported = false; - for (String imageFormat : SwtTestUtil.imageFormats) { - if (imageFormat.equals("jpg")) { - jpgSupported = true; + OutputStream outStream = new ByteArrayOutputStream(); + int i = 0; + for (String format : SwtTestUtil.imageFormats) { + if (format.equals(filetype)) { + // save using the appropriate format + loader.save(outStream, i++); break; } } - if (jpgSupported) { - String filename = SwtTestUtil.imageFilenames[0]; - // must use jpg since save is not implemented yet in png format - String filetype = "jpg"; - try (InputStream inStream = SwtTestUtil.class.getResourceAsStream(filename + "." + filetype)) { - loader.load(inStream); - } catch (IOException e) {} - for (int i = 0; i < SwtTestUtil.imageFormats.length; i++) { - if (SwtTestUtil.imageFormats[i].equals(filetype)) { - // save using the appropriate format - loader.save(outStream, i); - break; - } - } - } - } finally { - try { - outStream.close(); - } catch (Exception e) { - } } } @@ -171,11 +144,8 @@ public void test_saveLjava_io_OutputStreamI() { public void test_saveLjava_lang_StringI() { ImageLoader loader = new ImageLoader(); String filename = null; - try { - loader.save(filename, 0); - fail("No exception thrown for save filename == null"); - } catch (IllegalArgumentException e) { - } + assertThrows(IllegalArgumentException.class, () -> loader.save(filename, 0), + "No exception thrown for save filename == null"); } /** diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Decorations.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Decorations.java index 1d51966aae9..556fe2f1873 100644 --- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Decorations.java +++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Decorations.java @@ -21,6 +21,8 @@ import java.io.IOException; import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; @@ -123,9 +125,9 @@ public void test_setDefaultButtonLorg_eclipse_swt_widgets_Button() { public void test_setImageLorg_eclipse_swt_graphics_Image() { assertNull(":a:", decorations.getImage()); loadImages(); - decorations.setImage(images[0]); - assertTrue(":b:", images[0] == decorations.getImage()); - assertTrue(":c:", images[1] != decorations.getImage()); + decorations.setImage(images.get(0)); + assertTrue(":b:", images.get(0) == decorations.getImage()); + assertTrue(":c:", images.get(1) != decorations.getImage()); decorations.setImage(null); assertNull(":d:", decorations.getImage()); freeImages(); @@ -189,7 +191,7 @@ public void test_setVisibleZ() { /* custom */ Decorations decorations; -Image[] images = new Image [SwtTestUtil.imageFormats.length*SwtTestUtil.imageFilenames.length]; +private List images = new ArrayList<>(); @Override protected void setWidget(Widget w) { @@ -201,15 +203,10 @@ protected void setWidget(Widget w) { // this method must be private or protected so the auto-gen tool keeps it private void loadImages() { - int numFormats = SwtTestUtil.imageFormats.length; - int numFiles = SwtTestUtil.imageFilenames.length; - for (int i=0; i Date: Mon, 5 May 2025 17:19:55 +0200 Subject: [PATCH 059/119] [Win32] Move OS-version-related functionality to OsVersion class With the separation of the OS version check to the separate OsVersion class/DLL, version concerns have been spread over the OS and the OsVersion classes. This change consistently moves every such logic to the OsVersion class. It also replaces the manual checks of the current OS version against a specified version by an easy-to-read access to according constants identifying whether the current system is at least a specific Windows build version. --- .../Eclipse SWT PI/win32/library/os.c | 36 ---------- .../Eclipse SWT PI/win32/library/os_stats.h | 2 - .../Eclipse SWT PI/win32/library/os_structs.c | 67 ------------------- .../Eclipse SWT PI/win32/library/os_structs.h | 12 ---- .../org/eclipse/swt/internal/win32/OS.java | 32 +-------- .../swt/internal/win32/OSVERSIONINFOEX.java | 35 ---------- .../swt/internal/win32/version/OsVersion.java | 21 +++--- .../win32/org/eclipse/swt/widgets/Button.java | 7 +- .../org/eclipse/swt/widgets/Display.java | 5 +- .../win32/org/eclipse/swt/widgets/Shell.java | 5 +- 10 files changed, 25 insertions(+), 197 deletions(-) delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OSVERSIONINFOEX.java diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os.c b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os.c index 495e6a69ac5..0d075e66459 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os.c +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os.c @@ -6519,18 +6519,6 @@ JNIEXPORT void JNICALL OS_NATIVE(NotifyWinEvent) } #endif -#ifndef NO_OSVERSIONINFOEX_1sizeof -JNIEXPORT jint JNICALL OS_NATIVE(OSVERSIONINFOEX_1sizeof) - (JNIEnv *env, jclass that) -{ - jint rc = 0; - OS_NATIVE_ENTER(env, that, OSVERSIONINFOEX_1sizeof_FUNC); - rc = (jint)OSVERSIONINFOEX_sizeof(); - OS_NATIVE_EXIT(env, that, OSVERSIONINFOEX_1sizeof_FUNC); - return rc; -} -#endif - #ifndef NO_OUTLINETEXTMETRIC_1sizeof JNIEXPORT jint JNICALL OS_NATIVE(OUTLINETEXTMETRIC_1sizeof) (JNIEnv *env, jclass that) @@ -7322,30 +7310,6 @@ JNIEXPORT jboolean JNICALL OS_NATIVE(RoundRect) } #endif -#ifndef NO_RtlGetVersion -JNIEXPORT jint JNICALL OS_NATIVE(RtlGetVersion) - (JNIEnv *env, jclass that, jobject arg0) -{ - OSVERSIONINFOEX _arg0, *lparg0=NULL; - jint rc = 0; - OS_NATIVE_ENTER(env, that, RtlGetVersion_FUNC); - if (arg0) if ((lparg0 = getOSVERSIONINFOEXFields(env, arg0, &_arg0)) == NULL) goto fail; -/* - rc = (jint)RtlGetVersion(lparg0); -*/ - { - OS_LOAD_FUNCTION(fp, RtlGetVersion) - if (fp) { - rc = (jint)((jint (CALLING_CONVENTION*)(OSVERSIONINFOEX *))fp)(lparg0); - } - } -fail: - if (arg0 && lparg0) setOSVERSIONINFOEXFields(env, arg0, lparg0); - OS_NATIVE_EXIT(env, that, RtlGetVersion_FUNC); - return rc; -} -#endif - #ifndef NO_SAFEARRAYBOUND_1sizeof JNIEXPORT jint JNICALL OS_NATIVE(SAFEARRAYBOUND_1sizeof) (JNIEnv *env, jclass that) diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_stats.h b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_stats.h index 16ce626c546..bc809ece5f4 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_stats.h +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_stats.h @@ -499,7 +499,6 @@ typedef enum { NONCLIENTMETRICS_1sizeof_FUNC, NOTIFYICONDATA_1V2_1SIZE_FUNC, NotifyWinEvent_FUNC, - OSVERSIONINFOEX_1sizeof_FUNC, OUTLINETEXTMETRIC_1sizeof_FUNC, OffsetRect_FUNC, OffsetRgn_FUNC, @@ -554,7 +553,6 @@ typedef enum { ReplyMessage_FUNC, RestoreDC_FUNC, RoundRect_FUNC, - RtlGetVersion_FUNC, SAFEARRAYBOUND_1sizeof_FUNC, SAFEARRAY_1sizeof_FUNC, SCRIPT_1ANALYSIS_1sizeof_FUNC, diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.c b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.c index da11d5aa500..6de84ef4593 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.c +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.c @@ -4213,73 +4213,6 @@ void setNOTIFYICONDATAFields(JNIEnv *env, jobject lpObject, NOTIFYICONDATA *lpSt } #endif -#ifndef NO_OSVERSIONINFOEX -typedef struct OSVERSIONINFOEX_FID_CACHE { - int cached; - jclass clazz; - jfieldID dwOSVersionInfoSize, dwMajorVersion, dwMinorVersion, dwBuildNumber, dwPlatformId, szCSDVersion, wServicePackMajor, wServicePackMinor, wSuiteMask, wProductType, wReserved; -} OSVERSIONINFOEX_FID_CACHE; - -OSVERSIONINFOEX_FID_CACHE OSVERSIONINFOEXFc; - -void cacheOSVERSIONINFOEXFields(JNIEnv *env, jobject lpObject) -{ - if (OSVERSIONINFOEXFc.cached) return; - OSVERSIONINFOEXFc.clazz = (*env)->GetObjectClass(env, lpObject); - OSVERSIONINFOEXFc.dwOSVersionInfoSize = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "dwOSVersionInfoSize", "I"); - OSVERSIONINFOEXFc.dwMajorVersion = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "dwMajorVersion", "I"); - OSVERSIONINFOEXFc.dwMinorVersion = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "dwMinorVersion", "I"); - OSVERSIONINFOEXFc.dwBuildNumber = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "dwBuildNumber", "I"); - OSVERSIONINFOEXFc.dwPlatformId = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "dwPlatformId", "I"); - OSVERSIONINFOEXFc.szCSDVersion = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "szCSDVersion", "[C"); - OSVERSIONINFOEXFc.wServicePackMajor = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "wServicePackMajor", "I"); - OSVERSIONINFOEXFc.wServicePackMinor = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "wServicePackMinor", "I"); - OSVERSIONINFOEXFc.wSuiteMask = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "wSuiteMask", "I"); - OSVERSIONINFOEXFc.wProductType = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "wProductType", "I"); - OSVERSIONINFOEXFc.wReserved = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "wReserved", "I"); - OSVERSIONINFOEXFc.cached = 1; -} - -OSVERSIONINFOEX *getOSVERSIONINFOEXFields(JNIEnv *env, jobject lpObject, OSVERSIONINFOEX *lpStruct) -{ - if (!OSVERSIONINFOEXFc.cached) cacheOSVERSIONINFOEXFields(env, lpObject); - lpStruct->dwOSVersionInfoSize = (*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.dwOSVersionInfoSize); - lpStruct->dwMajorVersion = (*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.dwMajorVersion); - lpStruct->dwMinorVersion = (*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.dwMinorVersion); - lpStruct->dwBuildNumber = (*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.dwBuildNumber); - lpStruct->dwPlatformId = (*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.dwPlatformId); - { - jcharArray lpObject1 = (jcharArray)(*env)->GetObjectField(env, lpObject, OSVERSIONINFOEXFc.szCSDVersion); - (*env)->GetCharArrayRegion(env, lpObject1, 0, sizeof(lpStruct->szCSDVersion) / sizeof(jchar), (jchar *)lpStruct->szCSDVersion); - } - lpStruct->wServicePackMajor = (WORD)(*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.wServicePackMajor); - lpStruct->wServicePackMinor = (WORD)(*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.wServicePackMinor); - lpStruct->wSuiteMask = (WORD)(*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.wSuiteMask); - lpStruct->wProductType = (BYTE)(*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.wProductType); - lpStruct->wReserved = (BYTE)(*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.wReserved); - return lpStruct; -} - -void setOSVERSIONINFOEXFields(JNIEnv *env, jobject lpObject, OSVERSIONINFOEX *lpStruct) -{ - if (!OSVERSIONINFOEXFc.cached) cacheOSVERSIONINFOEXFields(env, lpObject); - (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.dwOSVersionInfoSize, (jint)lpStruct->dwOSVersionInfoSize); - (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.dwMajorVersion, (jint)lpStruct->dwMajorVersion); - (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.dwMinorVersion, (jint)lpStruct->dwMinorVersion); - (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.dwBuildNumber, (jint)lpStruct->dwBuildNumber); - (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.dwPlatformId, (jint)lpStruct->dwPlatformId); - { - jcharArray lpObject1 = (jcharArray)(*env)->GetObjectField(env, lpObject, OSVERSIONINFOEXFc.szCSDVersion); - (*env)->SetCharArrayRegion(env, lpObject1, 0, sizeof(lpStruct->szCSDVersion) / sizeof(jchar), (jchar *)lpStruct->szCSDVersion); - } - (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.wServicePackMajor, (jint)lpStruct->wServicePackMajor); - (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.wServicePackMinor, (jint)lpStruct->wServicePackMinor); - (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.wSuiteMask, (jint)lpStruct->wSuiteMask); - (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.wProductType, (jint)lpStruct->wProductType); - (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.wReserved, (jint)lpStruct->wReserved); -} -#endif - #ifndef NO_OUTLINETEXTMETRIC typedef struct OUTLINETEXTMETRIC_FID_CACHE { int cached; diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.h b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.h index c195326032f..1acb67b74d7 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.h +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.h @@ -965,18 +965,6 @@ void setNOTIFYICONDATAFields(JNIEnv *env, jobject lpObject, NOTIFYICONDATA *lpSt #define NOTIFYICONDATA_sizeof() 0 #endif -#ifndef NO_OSVERSIONINFOEX -void cacheOSVERSIONINFOEXFields(JNIEnv *env, jobject lpObject); -OSVERSIONINFOEX *getOSVERSIONINFOEXFields(JNIEnv *env, jobject lpObject, OSVERSIONINFOEX *lpStruct); -void setOSVERSIONINFOEXFields(JNIEnv *env, jobject lpObject, OSVERSIONINFOEX *lpStruct); -#define OSVERSIONINFOEX_sizeof() sizeof(OSVERSIONINFOEX) -#else -#define cacheOSVERSIONINFOEXFields(a,b) -#define getOSVERSIONINFOEXFields(a,b,c) NULL -#define setOSVERSIONINFOEXFields(a,b,c) -#define OSVERSIONINFOEX_sizeof() 0 -#endif - #ifndef NO_OUTLINETEXTMETRIC void cacheOUTLINETEXTMETRICFields(JNIEnv *env, jobject lpObject); OUTLINETEXTMETRIC *getOUTLINETEXTMETRICFields(JNIEnv *env, jobject lpObject, OUTLINETEXTMETRIC *lpStruct); diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OS.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OS.java index 75e6f4da1c0..73b75f8d3d9 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OS.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OS.java @@ -19,6 +19,7 @@ import org.eclipse.swt.graphics.*; import org.eclipse.swt.internal.*; +import org.eclipse.swt.internal.win32.version.*; import org.eclipse.swt.widgets.*; public class OS extends C { @@ -30,18 +31,6 @@ public class OS extends C { * SWT Windows flags */ public static final boolean IsDBLocale; - /** - * Always reports the correct build number, regardless of manifest and - * compatibility GUIDs. Note that build number alone is sufficient to - * identify Windows version. - */ - public static final int WIN32_BUILD; - /** - * Values taken from https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions - */ - public static final int WIN32_BUILD_WIN10_1809 = 17763; // "Windows 10 October 2018 Update" - public static final int WIN32_BUILD_WIN10_2004 = 19041; // "Windows 10 May 2020 Update" - public static final int WIN32_BUILD_WIN11_21H2 = 22000; // Initial Windows 11 release public static final String NO_MANIFEST = "org.eclipse.swt.internal.win32.OS.NO_MANIFEST"; @@ -53,20 +42,6 @@ public class OS extends C { public static final int SM_IMMENABLED = 0x52; static { - /* - * Starting with Windows 10, GetVersionEx() lies about version unless - * application manifest has a proper entry. RtlGetVersion() always - * reports true version. - */ - OSVERSIONINFOEX osVersionInfoEx = new OSVERSIONINFOEX (); - osVersionInfoEx.dwOSVersionInfoSize = OSVERSIONINFOEX.sizeof; - if (0 == OS.RtlGetVersion (osVersionInfoEx)) { - WIN32_BUILD = osVersionInfoEx.dwBuildNumber; - } else { - System.err.println ("SWT: OS: Failed to detect Windows build number"); - WIN32_BUILD = 0; - } - /* Load the manifest to force the XP Theme */ if (System.getProperty (NO_MANIFEST) == null) { ACTCTX pActCtx = new ACTCTX (); @@ -1974,7 +1949,6 @@ public static int VERSION (int major, int minor) { /** @method flags=const */ public static final native int NOTIFYICONDATA_V2_SIZE (); public static final native int OUTLINETEXTMETRIC_sizeof (); -public static final native int OSVERSIONINFOEX_sizeof (); public static final native int PAINTSTRUCT_sizeof (); public static final native int POINT_sizeof (); public static final native int PRINTDLG_sizeof (); @@ -3964,8 +3938,6 @@ public static int HRESULT_FROM_WIN32(int x) { public static final native boolean RestoreDC (long hdc, int nSavedDC); /** @param hdc cast=(HDC) */ public static final native boolean RoundRect (long hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nWidth, int nHeight); -/** @method flags=dynamic */ -public static final native int RtlGetVersion (OSVERSIONINFOEX lpVersionInformation); /** @param hdc cast=(HDC) */ public static final native int SaveDC (long hdc); /** @param hWnd cast=(HWND) */ @@ -4616,7 +4588,7 @@ public static final native boolean DuplicateHandle(long hSourceProcessHandle, lo public static long OpenThemeData(long hwnd, char[] themeName, int dpi) { - if (OS.WIN32_BUILD >= OS.WIN32_BUILD_WIN10_1809) { + if (OsVersion.IS_WIN10_1809) { return OS.OpenThemeDataForDpi(hwnd, themeName, dpi); } else { return OS.OpenThemeData(hwnd, themeName); diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OSVERSIONINFOEX.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OSVERSIONINFOEX.java deleted file mode 100644 index df6da82d39c..00000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OSVERSIONINFOEX.java +++ /dev/null @@ -1,35 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2021 Syntevo and others. - * - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License 2.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Syntevo - initial API and implementation - *******************************************************************************/ -package org.eclipse.swt.internal.win32; - -public class OSVERSIONINFOEX { - public int dwOSVersionInfoSize; - public int dwMajorVersion; - public int dwMinorVersion; - public int dwBuildNumber; - public int dwPlatformId; - public char[] szCSDVersion = new char[128]; - /** @field cast=(WORD) */ - public int wServicePackMajor; - /** @field cast=(WORD) */ - public int wServicePackMinor; - /** @field cast=(WORD) */ - public int wSuiteMask; - /** @field cast=(BYTE) */ - public int wProductType; - /** @field cast=(BYTE) */ - public int wReserved; - - public static final int sizeof = OS.OSVERSIONINFOEX_sizeof (); -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/version/OsVersion.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/version/OsVersion.java index e02be241ec7..094e78da9ee 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/version/OsVersion.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/version/OsVersion.java @@ -31,20 +31,25 @@ public class OsVersion extends Platform { * compatibility GUIDs. Note that build number alone is sufficient to * identify Windows version. */ - public static final int WIN32_BUILD; + private static final int WIN32_BUILD = getCurrentOsVersion(); + /** * Values taken from https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions */ - public static final int WIN32_BUILD_WIN10_1607 = 14393; // "Windows 10 August 2016 Update" + private static final int WIN10_1607 = 14393; + public static final boolean IS_WIN10_1607 = WIN32_BUILD >= WIN10_1607; // "Windows 10 August 2016 Update" + public static final boolean IS_WIN10_1809 = WIN32_BUILD >= 17763; // "Windows 10 October 2018 Update" + public static final boolean IS_WIN10_2004 = WIN32_BUILD >= 19041; // "Windows 10 May 2020 Update" + public static final boolean IS_WIN11_21H2 = WIN32_BUILD >= 22000; // Initial Windows 11 release /** * The minimum supported Windows build version for using this SWT version */ - public static final int WIN32_MINIMUM_COMPATIBLE_BUILD = WIN32_BUILD_WIN10_1607; + private static final int MINIMUM_COMPATIBLE_BUILD = WIN10_1607; private static final String DISABLE_WINDOWS_VERSION_CHECK_PROPERTY = "swt.disableWindowsVersionCheck"; - static { + private static int getCurrentOsVersion() { /* * Starting with Windows 10, GetVersionEx() lies about version unless * application manifest has a proper entry. RtlGetVersion() always @@ -53,19 +58,19 @@ public class OsVersion extends Platform { OSVERSIONINFOEX osVersionInfoEx = new OSVERSIONINFOEX (); osVersionInfoEx.dwOSVersionInfoSize = OSVERSIONINFOEX.sizeof; if (0 == OsVersion.RtlGetVersion (osVersionInfoEx)) { - WIN32_BUILD = osVersionInfoEx.dwBuildNumber; + return osVersionInfoEx.dwBuildNumber; } else { System.err.println ("SWT: OS: Failed to detect Windows build number"); - WIN32_BUILD = 0; + return 0; } } public static void checkCompatibleWindowsVersion() { String disableVersionCheckPropertyValue = System.getProperty(DISABLE_WINDOWS_VERSION_CHECK_PROPERTY, Boolean.FALSE.toString()); boolean versionCheckDisabled = "".equals(disableVersionCheckPropertyValue) || Boolean.TRUE.toString().equalsIgnoreCase(disableVersionCheckPropertyValue); - if (!versionCheckDisabled && WIN32_BUILD < WIN32_MINIMUM_COMPATIBLE_BUILD) { + if (!versionCheckDisabled && WIN32_BUILD < MINIMUM_COMPATIBLE_BUILD) { System.err.println(String.format("Incompatible OS: Minimum Windows build version is %s but current is %s", - WIN32_MINIMUM_COMPATIBLE_BUILD, WIN32_BUILD)); + MINIMUM_COMPATIBLE_BUILD, WIN32_BUILD)); System.exit(1); } } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Button.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Button.java index ca2f165452e..788d239be88 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Button.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Button.java @@ -20,6 +20,7 @@ import org.eclipse.swt.graphics.*; import org.eclipse.swt.internal.*; import org.eclipse.swt.internal.win32.*; +import org.eclipse.swt.internal.win32.version.*; /** * Instances of this class represent a selectable user interface object that @@ -1351,7 +1352,7 @@ LRESULT wmNotifyChild (NMHDR hdr, long wParam, long lParam) { int inset = 2; int radius = 3; - if (useDarkModeExplorerTheme && (OS.WIN32_BUILD >= OS.WIN32_BUILD_WIN11_21H2)) { + if (useDarkModeExplorerTheme && OsVersion.IS_WIN11_21H2) { // On Win11, Light theme and Dark theme images have different sizes inset = 1; radius = 4; @@ -1362,7 +1363,7 @@ LRESULT wmNotifyChild (NMHDR hdr, long wParam, long lParam) { int r = nmcd.right - inset; int b = nmcd.bottom - inset; - if (OS.WIN32_BUILD >= OS.WIN32_BUILD_WIN11_21H2) { + if (OsVersion.IS_WIN11_21H2) { // 'RoundRect' has left/top pixel reserved for border l += 1; t += 1; @@ -1488,7 +1489,7 @@ static int getThemeStateId(int style, boolean pressed, boolean enabled) { * The workaround is to use hot image in place of default. */ boolean hot = false; - if (OS.WIN32_BUILD >= OS.WIN32_BUILD_WIN11_21H2) { + if (OsVersion.IS_WIN11_21H2) { if (!pressed && enabled) { hot = true; } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java index 38775af168e..766f9176730 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java @@ -25,6 +25,7 @@ import org.eclipse.swt.internal.*; import org.eclipse.swt.internal.ole.win32.*; import org.eclipse.swt.internal.win32.*; +import org.eclipse.swt.internal.win32.version.*; /** * Instances of this class are responsible for managing the @@ -2158,7 +2159,7 @@ public static boolean isSystemDarkTheme () { /* * The registry settings, and Dark Theme itself, is present since Win10 1809 */ - if (OS.WIN32_BUILD >= OS.WIN32_BUILD_WIN10_1809) { + if (OsVersion.IS_WIN10_1809) { int[] result = OS.readRegistryDwords(OS.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", "AppsUseLightTheme"); if (result!=null) { @@ -5397,7 +5398,7 @@ private boolean setDPIAwareness(int desiredDpiAwareness) { } if (desiredDpiAwareness == OS.DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2) { // "Per Monitor V2" only available in more recent Windows version - boolean perMonitorV2Available = OS.WIN32_BUILD >= OS.WIN32_BUILD_WIN10_1809; + boolean perMonitorV2Available = OsVersion.IS_WIN10_1809; if (!perMonitorV2Available) { System.err.println("***WARNING: the OS version does not support DPI awareness mode PerMonitorV2."); return false; diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java index 3033af31782..6cb9cf52dd9 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java @@ -19,6 +19,7 @@ import org.eclipse.swt.graphics.*; import org.eclipse.swt.internal.*; import org.eclipse.swt.internal.win32.*; +import org.eclipse.swt.internal.win32.version.*; /** * Instances of this class represent the "windows" @@ -581,11 +582,11 @@ void createBalloonTipHandle () { void setTitleColoring() { int attributeID = 0; - if (OS.WIN32_BUILD >= OS.WIN32_BUILD_WIN10_2004) { + if (OsVersion.IS_WIN10_2004) { // Documented since build 20348, but was already present since build 19041 final int DWMWA_USE_IMMERSIVE_DARK_MODE = 20; attributeID = DWMWA_USE_IMMERSIVE_DARK_MODE; - } else if (OS.WIN32_BUILD >= OS.WIN32_BUILD_WIN10_1809) { + } else if (OsVersion.IS_WIN10_1809) { // Undocumented value attributeID = 19; } else { From 1ead3837e311d2d5436626d22167486aafb9a996 Mon Sep 17 00:00:00 2001 From: Eclipse Releng Bot Date: Tue, 6 May 2025 20:08:40 +0000 Subject: [PATCH 060/119] v4969r15 --- ...wt-cocoa-4969r14.jnilib => libswt-awt-cocoa-4969r15.jnilib} | 0 ...libswt-cocoa-4969r14.jnilib => libswt-cocoa-4969r15.jnilib} | 0 ...-pi-cocoa-4969r14.jnilib => libswt-pi-cocoa-4969r15.jnilib} | 0 ...wt-cocoa-4969r14.jnilib => libswt-awt-cocoa-4969r15.jnilib} | 0 ...libswt-cocoa-4969r14.jnilib => libswt-cocoa-4969r15.jnilib} | 0 ...-pi-cocoa-4969r14.jnilib => libswt-pi-cocoa-4969r15.jnilib} | 0 .../{libswt-atk-gtk-4969r14.so => libswt-atk-gtk-4969r15.so} | 0 .../{libswt-awt-gtk-4969r14.so => libswt-awt-gtk-4969r15.so} | 0 ...libswt-cairo-gtk-4969r14.so => libswt-cairo-gtk-4969r15.so} | 0 .../{libswt-glx-gtk-4969r14.so => libswt-glx-gtk-4969r15.so} | 0 .../{libswt-gtk-4969r14.so => libswt-gtk-4969r15.so} | 0 .../{libswt-pi3-gtk-4969r14.so => libswt-pi3-gtk-4969r15.so} | 0 ...bswt-webkit-gtk-4969r14.so => libswt-webkit-gtk-4969r15.so} | 0 .../{libswt-atk-gtk-4969r14.so => libswt-atk-gtk-4969r15.so} | 0 .../{libswt-awt-gtk-4969r14.so => libswt-awt-gtk-4969r15.so} | 0 ...libswt-cairo-gtk-4969r14.so => libswt-cairo-gtk-4969r15.so} | 0 .../{libswt-glx-gtk-4969r14.so => libswt-glx-gtk-4969r15.so} | 0 .../{libswt-gtk-4969r14.so => libswt-gtk-4969r15.so} | 0 .../{libswt-pi3-gtk-4969r14.so => libswt-pi3-gtk-4969r15.so} | 0 ...bswt-webkit-gtk-4969r14.so => libswt-webkit-gtk-4969r15.so} | 0 .../{libswt-atk-gtk-4969r14.so => libswt-atk-gtk-4969r15.so} | 0 .../{libswt-awt-gtk-4969r14.so => libswt-awt-gtk-4969r15.so} | 0 ...libswt-cairo-gtk-4969r14.so => libswt-cairo-gtk-4969r15.so} | 0 .../{libswt-glx-gtk-4969r14.so => libswt-glx-gtk-4969r15.so} | 0 .../{libswt-gtk-4969r14.so => libswt-gtk-4969r15.so} | 0 .../{libswt-pi3-gtk-4969r14.so => libswt-pi3-gtk-4969r15.so} | 0 ...bswt-webkit-gtk-4969r14.so => libswt-webkit-gtk-4969r15.so} | 0 .../{libswt-atk-gtk-4969r14.so => libswt-atk-gtk-4969r15.so} | 0 .../{libswt-awt-gtk-4969r14.so => libswt-awt-gtk-4969r15.so} | 0 ...libswt-cairo-gtk-4969r14.so => libswt-cairo-gtk-4969r15.so} | 0 .../{libswt-glx-gtk-4969r14.so => libswt-glx-gtk-4969r15.so} | 0 .../{libswt-gtk-4969r14.so => libswt-gtk-4969r15.so} | 0 .../{libswt-pi3-gtk-4969r14.so => libswt-pi3-gtk-4969r15.so} | 0 .../{libswt-pi4-gtk-4969r14.so => libswt-pi4-gtk-4969r15.so} | 0 ...bswt-webkit-gtk-4969r14.so => libswt-webkit-gtk-4969r15.so} | 0 .../swt-awt-win32-4969r14.dll | 3 --- .../swt-awt-win32-4969r15.dll | 3 +++ .../swt-gdip-win32-4969r14.dll | 3 --- .../swt-gdip-win32-4969r15.dll | 3 +++ .../swt-osversion-win32-4969r14.dll | 3 --- .../swt-osversion-win32-4969r15.dll | 3 +++ .../swt-wgl-win32-4969r14.dll | 3 --- .../swt-wgl-win32-4969r15.dll | 3 +++ .../org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r14.dll | 3 --- .../org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r15.dll | 3 +++ .../swt-awt-win32-4969r14.dll | 3 --- .../swt-awt-win32-4969r15.dll | 3 +++ .../swt-gdip-win32-4969r14.dll | 3 --- .../swt-gdip-win32-4969r15.dll | 3 +++ .../swt-osversion-win32-4969r14.dll | 3 --- .../swt-osversion-win32-4969r15.dll | 3 +++ .../swt-wgl-win32-4969r14.dll | 3 --- .../swt-wgl-win32-4969r15.dll | 3 +++ .../org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r14.dll | 3 --- .../org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r15.dll | 3 +++ .../common/org/eclipse/swt/internal/Library.java | 2 +- .../org.eclipse.swt/Eclipse SWT/common/library/make_common.mak | 2 +- 57 files changed, 32 insertions(+), 32 deletions(-) rename binaries/org.eclipse.swt.cocoa.macosx.aarch64/{libswt-awt-cocoa-4969r14.jnilib => libswt-awt-cocoa-4969r15.jnilib} (100%) rename binaries/org.eclipse.swt.cocoa.macosx.aarch64/{libswt-cocoa-4969r14.jnilib => libswt-cocoa-4969r15.jnilib} (100%) rename binaries/org.eclipse.swt.cocoa.macosx.aarch64/{libswt-pi-cocoa-4969r14.jnilib => libswt-pi-cocoa-4969r15.jnilib} (100%) rename binaries/org.eclipse.swt.cocoa.macosx.x86_64/{libswt-awt-cocoa-4969r14.jnilib => libswt-awt-cocoa-4969r15.jnilib} (100%) rename binaries/org.eclipse.swt.cocoa.macosx.x86_64/{libswt-cocoa-4969r14.jnilib => libswt-cocoa-4969r15.jnilib} (100%) rename binaries/org.eclipse.swt.cocoa.macosx.x86_64/{libswt-pi-cocoa-4969r14.jnilib => libswt-pi-cocoa-4969r15.jnilib} (100%) rename binaries/org.eclipse.swt.gtk.linux.aarch64/{libswt-atk-gtk-4969r14.so => libswt-atk-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.aarch64/{libswt-awt-gtk-4969r14.so => libswt-awt-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.aarch64/{libswt-cairo-gtk-4969r14.so => libswt-cairo-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.aarch64/{libswt-glx-gtk-4969r14.so => libswt-glx-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.aarch64/{libswt-gtk-4969r14.so => libswt-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.aarch64/{libswt-pi3-gtk-4969r14.so => libswt-pi3-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.aarch64/{libswt-webkit-gtk-4969r14.so => libswt-webkit-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.ppc64le/{libswt-atk-gtk-4969r14.so => libswt-atk-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.ppc64le/{libswt-awt-gtk-4969r14.so => libswt-awt-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.ppc64le/{libswt-cairo-gtk-4969r14.so => libswt-cairo-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.ppc64le/{libswt-glx-gtk-4969r14.so => libswt-glx-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.ppc64le/{libswt-gtk-4969r14.so => libswt-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.ppc64le/{libswt-pi3-gtk-4969r14.so => libswt-pi3-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.ppc64le/{libswt-webkit-gtk-4969r14.so => libswt-webkit-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.riscv64/{libswt-atk-gtk-4969r14.so => libswt-atk-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.riscv64/{libswt-awt-gtk-4969r14.so => libswt-awt-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.riscv64/{libswt-cairo-gtk-4969r14.so => libswt-cairo-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.riscv64/{libswt-glx-gtk-4969r14.so => libswt-glx-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.riscv64/{libswt-gtk-4969r14.so => libswt-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.riscv64/{libswt-pi3-gtk-4969r14.so => libswt-pi3-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.riscv64/{libswt-webkit-gtk-4969r14.so => libswt-webkit-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-atk-gtk-4969r14.so => libswt-atk-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-awt-gtk-4969r14.so => libswt-awt-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-cairo-gtk-4969r14.so => libswt-cairo-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-glx-gtk-4969r14.so => libswt-glx-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-gtk-4969r14.so => libswt-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-pi3-gtk-4969r14.so => libswt-pi3-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-pi4-gtk-4969r14.so => libswt-pi4-gtk-4969r15.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-webkit-gtk-4969r14.so => libswt-webkit-gtk-4969r15.so} (100%) delete mode 100755 binaries/org.eclipse.swt.win32.win32.aarch64/swt-awt-win32-4969r14.dll create mode 100755 binaries/org.eclipse.swt.win32.win32.aarch64/swt-awt-win32-4969r15.dll delete mode 100755 binaries/org.eclipse.swt.win32.win32.aarch64/swt-gdip-win32-4969r14.dll create mode 100755 binaries/org.eclipse.swt.win32.win32.aarch64/swt-gdip-win32-4969r15.dll delete mode 100755 binaries/org.eclipse.swt.win32.win32.aarch64/swt-osversion-win32-4969r14.dll create mode 100755 binaries/org.eclipse.swt.win32.win32.aarch64/swt-osversion-win32-4969r15.dll delete mode 100755 binaries/org.eclipse.swt.win32.win32.aarch64/swt-wgl-win32-4969r14.dll create mode 100755 binaries/org.eclipse.swt.win32.win32.aarch64/swt-wgl-win32-4969r15.dll delete mode 100755 binaries/org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r14.dll create mode 100755 binaries/org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r15.dll delete mode 100755 binaries/org.eclipse.swt.win32.win32.x86_64/swt-awt-win32-4969r14.dll create mode 100755 binaries/org.eclipse.swt.win32.win32.x86_64/swt-awt-win32-4969r15.dll delete mode 100755 binaries/org.eclipse.swt.win32.win32.x86_64/swt-gdip-win32-4969r14.dll create mode 100755 binaries/org.eclipse.swt.win32.win32.x86_64/swt-gdip-win32-4969r15.dll delete mode 100755 binaries/org.eclipse.swt.win32.win32.x86_64/swt-osversion-win32-4969r14.dll create mode 100755 binaries/org.eclipse.swt.win32.win32.x86_64/swt-osversion-win32-4969r15.dll delete mode 100755 binaries/org.eclipse.swt.win32.win32.x86_64/swt-wgl-win32-4969r14.dll create mode 100755 binaries/org.eclipse.swt.win32.win32.x86_64/swt-wgl-win32-4969r15.dll delete mode 100755 binaries/org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r14.dll create mode 100755 binaries/org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r15.dll diff --git a/binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-awt-cocoa-4969r14.jnilib b/binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-awt-cocoa-4969r15.jnilib similarity index 100% rename from binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-awt-cocoa-4969r14.jnilib rename to binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-awt-cocoa-4969r15.jnilib diff --git a/binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-cocoa-4969r14.jnilib b/binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-cocoa-4969r15.jnilib similarity index 100% rename from binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-cocoa-4969r14.jnilib rename to binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-cocoa-4969r15.jnilib diff --git a/binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-pi-cocoa-4969r14.jnilib b/binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-pi-cocoa-4969r15.jnilib similarity index 100% rename from binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-pi-cocoa-4969r14.jnilib rename to binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-pi-cocoa-4969r15.jnilib diff --git a/binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-awt-cocoa-4969r14.jnilib b/binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-awt-cocoa-4969r15.jnilib similarity index 100% rename from binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-awt-cocoa-4969r14.jnilib rename to binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-awt-cocoa-4969r15.jnilib diff --git a/binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-cocoa-4969r14.jnilib b/binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-cocoa-4969r15.jnilib similarity index 100% rename from binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-cocoa-4969r14.jnilib rename to binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-cocoa-4969r15.jnilib diff --git a/binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-pi-cocoa-4969r14.jnilib b/binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-pi-cocoa-4969r15.jnilib similarity index 100% rename from binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-pi-cocoa-4969r14.jnilib rename to binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-pi-cocoa-4969r15.jnilib diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-atk-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-atk-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-atk-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-atk-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-awt-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-awt-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-awt-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-awt-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-cairo-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-cairo-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-cairo-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-cairo-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-glx-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-glx-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-glx-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-glx-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-pi3-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-pi3-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-pi3-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-pi3-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-webkit-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-webkit-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-webkit-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-webkit-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-atk-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-atk-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-atk-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-atk-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-awt-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-awt-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-awt-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-awt-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-cairo-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-cairo-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-cairo-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-cairo-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-glx-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-glx-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-glx-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-glx-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-pi3-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-pi3-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-pi3-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-pi3-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-webkit-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-webkit-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-webkit-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-webkit-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-atk-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-atk-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-atk-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-atk-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-awt-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-awt-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-awt-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-awt-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-cairo-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-cairo-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-cairo-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-cairo-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-glx-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-glx-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-glx-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-glx-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-pi3-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-pi3-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-pi3-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-pi3-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-webkit-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-webkit-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-webkit-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-webkit-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-atk-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-atk-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-atk-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-atk-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-awt-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-awt-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-awt-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-awt-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-cairo-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-cairo-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-cairo-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-cairo-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-glx-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-glx-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-glx-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-glx-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi3-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi3-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi3-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi3-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi4-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi4-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi4-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi4-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-webkit-gtk-4969r14.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-webkit-gtk-4969r15.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-webkit-gtk-4969r14.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-webkit-gtk-4969r15.so diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-awt-win32-4969r14.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-awt-win32-4969r14.dll deleted file mode 100755 index b139bf878e0..00000000000 --- a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-awt-win32-4969r14.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b92284f76b7d0f985b5618ab77ad32f45d33e411ee149310d3591a97ceff8cc5 -size 111208 diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-awt-win32-4969r15.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-awt-win32-4969r15.dll new file mode 100755 index 00000000000..baeb6245f21 --- /dev/null +++ b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-awt-win32-4969r15.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a96e17a287de4b9aa55e22af2e304b54311bc64f454ff3350b9e2fcf39e8099 +size 111208 diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-gdip-win32-4969r14.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-gdip-win32-4969r14.dll deleted file mode 100755 index c7098b9b833..00000000000 --- a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-gdip-win32-4969r14.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:167b430709909a9040aa34ae88b95b88dd29ec015c36f288cd70f673b91b7b13 -size 160360 diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-gdip-win32-4969r15.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-gdip-win32-4969r15.dll new file mode 100755 index 00000000000..27e17e0d1e4 --- /dev/null +++ b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-gdip-win32-4969r15.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63b1b1f6b0a7c8abe242aa6b6ef9dc839c5a0b28bb254ec74d7be2828a6bbb19 +size 160360 diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-osversion-win32-4969r14.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-osversion-win32-4969r14.dll deleted file mode 100755 index 0b99972e7b0..00000000000 --- a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-osversion-win32-4969r14.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0ed29b2a5f8f6b204769ed7da71d2b0b196cf26da508549e1676f125d9863930 -size 111720 diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-osversion-win32-4969r15.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-osversion-win32-4969r15.dll new file mode 100755 index 00000000000..b7553e23a24 --- /dev/null +++ b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-osversion-win32-4969r15.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39d83d8268fa5f3ed1fe668f232278ea7a9e7741c15707a575e3a8f3c1cbfdc7 +size 111720 diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-wgl-win32-4969r14.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-wgl-win32-4969r14.dll deleted file mode 100755 index 5e37bb5e6d3..00000000000 --- a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-wgl-win32-4969r14.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0cff188d58767dd1abbc4ca085f703d41ebf9b94d657120c4cb47af11ad65ef4 -size 114280 diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-wgl-win32-4969r15.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-wgl-win32-4969r15.dll new file mode 100755 index 00000000000..1434a6be2c8 --- /dev/null +++ b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-wgl-win32-4969r15.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb41829cae8d859bf2bc3f34f6e0f2189181cc07e9569fde55c0ec7a26e524c6 +size 114280 diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r14.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r14.dll deleted file mode 100755 index a83c522f1f9..00000000000 --- a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r14.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:af7f9e35a4aea619a1f0468ca0c211e19739ed3bc721ba6f908a55f796a02eb3 -size 708200 diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r15.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r15.dll new file mode 100755 index 00000000000..d48f6cbe045 --- /dev/null +++ b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r15.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae7cf216b71cb27aa25d0759c2f20b2ee5f856b39a2e36f66a7b4bb7436ee052 +size 706152 diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-awt-win32-4969r14.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-awt-win32-4969r14.dll deleted file mode 100755 index 7e1354b429a..00000000000 --- a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-awt-win32-4969r14.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b57bebbd78bc182a0040501934a07aa7ca0a7d7eacbb8975454dedf2051e041e -size 121960 diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-awt-win32-4969r15.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-awt-win32-4969r15.dll new file mode 100755 index 00000000000..5c59249c8f2 --- /dev/null +++ b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-awt-win32-4969r15.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6657513800bed667a61824051fcb7440402523d3ee1d2aebc50404bdeefb3c5f +size 121960 diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-gdip-win32-4969r14.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-gdip-win32-4969r14.dll deleted file mode 100755 index 083c829019e..00000000000 --- a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-gdip-win32-4969r14.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:84f5278b6d60579bbc9c1e2e3c1b53bc199043eb84ffedab2834cca9c9d4ca7f -size 170600 diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-gdip-win32-4969r15.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-gdip-win32-4969r15.dll new file mode 100755 index 00000000000..d6ae2192be6 --- /dev/null +++ b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-gdip-win32-4969r15.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:583922f0116489a78897c25d6e9656526710773045254819ce0427e0fb276488 +size 170600 diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-osversion-win32-4969r14.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-osversion-win32-4969r14.dll deleted file mode 100755 index 11def45299f..00000000000 --- a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-osversion-win32-4969r14.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:be1bdf73a49f458d4a36b590b85e3ea397fa7efd1d1e229585a8ffcaff04dd50 -size 123496 diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-osversion-win32-4969r15.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-osversion-win32-4969r15.dll new file mode 100755 index 00000000000..4f9c93be4fd --- /dev/null +++ b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-osversion-win32-4969r15.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7d157ace0d59823281062525f948c16245e9c6a6a9eba4165e8b030a6b2847b +size 123496 diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-wgl-win32-4969r14.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-wgl-win32-4969r14.dll deleted file mode 100755 index 78d9342d03e..00000000000 --- a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-wgl-win32-4969r14.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ca5bccaafa16149c52a520cc67e367c9d5f8423c86f0451ab1c1cd87dae4b2e5 -size 125544 diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-wgl-win32-4969r15.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-wgl-win32-4969r15.dll new file mode 100755 index 00000000000..8cd8415afff --- /dev/null +++ b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-wgl-win32-4969r15.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4832336ae9a1e2a6e82070db3fea34b1b785035d3630ef66c783405c5492cab4 +size 125544 diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r14.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r14.dll deleted file mode 100755 index 6afb16dfe7a..00000000000 --- a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r14.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9b0ff443ec6e1f95ca5b2fd07ad50f0a541e8cf112a755303454bc497a8834d6 -size 792168 diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r15.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r15.dll new file mode 100755 index 00000000000..15852349d8e --- /dev/null +++ b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r15.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ee0c7bdb6eda5ccae24dc0de03de72e95f1e7eabf10dd74e886906e7dccb728 +size 790120 diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/Library.java b/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/Library.java index 4d1541dd2b7..e7ed84fba4e 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/Library.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/Library.java @@ -40,7 +40,7 @@ public class Library { /** * SWT revision number (must be >= 0) */ - static int REVISION = 14; + static int REVISION = 15; /** * The JAVA and SWT versions diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/library/make_common.mak b/bundles/org.eclipse.swt/Eclipse SWT/common/library/make_common.mak index 764acb9dbf1..956088bfff0 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/library/make_common.mak +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/library/make_common.mak @@ -14,4 +14,4 @@ maj_ver=4 min_ver=969 -rev=14 +rev=15 From f1b04f5bc9d1acc22e8785efb377a8a7ce390529 Mon Sep 17 00:00:00 2001 From: Aleksandar Kurtakov Date: Tue, 6 May 2025 09:35:41 +0300 Subject: [PATCH 061/119] Fix surefire warnings in build Remove the override in jenkinsfile so the default is not overriden. Fixes following warnings in the build: ``` [WARNING] useSystemClassLoader setting has no effect when not forking [WARNING] The parameter forkCount should likely not be 0. Forking a JVM for tests improves test accuracy. Ensure to have a >= 1. ``` --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 21eea26b204..23b8db236a3 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -350,7 +350,7 @@ pipeline { dir('eclipse.platform.swt') { sh ''' mvn clean verify \ - --batch-mode --threads 1C -V -U -e -DforkCount=0 \ + --batch-mode --threads 1C -V -U -e \ -Pbree-libs -Papi-check -Pjavadoc \ -Dcompare-version-with-baselines.skip=false \ -Dorg.eclipse.swt.tests.junit.disable.test_isLocal=true \ From 71709bc129048fd221632fae53414ea02a384d25 Mon Sep 17 00:00:00 2001 From: fedejeanne Date: Wed, 7 May 2025 09:00:38 +0200 Subject: [PATCH 062/119] Deactivate toggling test for the Edge browser --- .../swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java index ec02ab81a89..8d3bd8775e3 100644 --- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java +++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java @@ -1141,6 +1141,7 @@ public void test_setText() { */ @Test public void test_setTextContainingScript_applicationLayerProgressListenerMustSeeUpToDateDom() { + assumeFalse("Toggling on Edge since I20250216-1800, see https://github.com/eclipse-platform/eclipse.platform.swt/issues/1843", isEdge); AtomicBoolean completed = new AtomicBoolean(); browser.addProgressListener(ProgressListener.completedAdapter(event -> { String script = """ From c86bf83e43e081fcaf83fccbeddd8f5ad45efe34 Mon Sep 17 00:00:00 2001 From: fedejeanne Date: Tue, 6 May 2025 12:50:15 +0200 Subject: [PATCH 063/119] Remove unused constructors in Color --- .../Eclipse SWT/cocoa/org/eclipse/swt/graphics/Color.java | 4 ---- .../Eclipse SWT/gtk/org/eclipse/swt/graphics/Color.java | 4 ---- .../Eclipse SWT/win32/org/eclipse/swt/graphics/Color.java | 7 ------- 3 files changed, 15 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Color.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Color.java index 3902461306d..6333bfeb234 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Color.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Color.java @@ -48,10 +48,6 @@ public final class Color extends Resource { */ public double [] handle; -Color() { - super(); -} - Color(Device device) { super(device); } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Color.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Color.java index f6260f94275..c9cbd1de6d9 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Color.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Color.java @@ -50,10 +50,6 @@ public final class Color extends Resource { public GdkRGBA handle; int alpha = 0; -Color() { - super(); -} - Color(Device device) { super(device); } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Color.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Color.java index f9547d512ba..319fef5ed2d 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Color.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Color.java @@ -50,13 +50,6 @@ public final class Color extends Resource { public int handle; int alpha = 255; -/** - * Prevents uninitialized instances from being created outside the package. - */ -Color() { - super(); -} - /** * Prevents uninitialized instances from being created outside the package. */ From 17ed881dafb129ac05cabb463aadbcb8cb8cda64 Mon Sep 17 00:00:00 2001 From: Heiko Klare Date: Wed, 7 May 2025 09:37:45 +0200 Subject: [PATCH 064/119] [Win32] Do not initialize font when already disposed The on-demand creation of Font handles does not consider that a font may already have been disposed when first retrieving it's handle, which triggers the on-demand initialization. To avoid that this initialization after disposal fails, this change adds a check for the font being destroyed when performing the initialization. Fixes https://github.com/eclipse-platform/eclipse.platform.ui/issues/2960 --- .../Eclipse SWT/win32/org/eclipse/swt/graphics/Font.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Font.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Font.java index 8f625ed698f..d866f3d111e 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Font.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Font.java @@ -312,7 +312,7 @@ public String toString () { * @noreference This method is not intended to be referenced by clients. */ public static long win32_getHandle(Font font) { - if (font.handle == 0 && font.fontData != null) { + if (font.handle == 0 && font.fontData != null && !font.isDestroyed) { font.init(font.fontData); } return font.handle; From 73272ca162b9d973d59d5439f1979ac801e9ca3d Mon Sep 17 00:00:00 2001 From: Andreas Koch Date: Wed, 2 Apr 2025 13:24:09 +0200 Subject: [PATCH 065/119] [win32] Remove Image#initialNativeZoom This commit removes Image#initialNativeZoom in the windows implementation. To achieve this all usages of this field are replaces by either using a concrete zoom values or by creating a temporary handle. --- .../win32/org/eclipse/swt/graphics/Image.java | 51 ++++++------------- 1 file changed, 15 insertions(+), 36 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java index 05c3fe8fd89..0347cd481da 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java @@ -132,11 +132,6 @@ public final class Image extends Resource implements Drawable { */ private RGB backgroundColor; - /** - * Attribute to cache current native zoom level - */ - private int initialNativeZoom = 100; - /** * specifies the default scanline padding */ @@ -146,7 +141,6 @@ public final class Image extends Resource implements Drawable { private Image (Device device, int type, long handle, int nativeZoom) { super(device); - initialNativeZoom = nativeZoom; this.type = type; this.imageProvider = new ExistingImageHandleProviderWrapper(handle, nativeZoom); this.isInitialized = true; @@ -189,13 +183,7 @@ private Image (Device device, int type, long handle, int nativeZoom) { * @see #dispose() */ public Image(Device device, int width, int height) { - this(device, width, height, DPIUtil.getNativeDeviceZoom()); -} - - -private Image(Device device, int width, int height, int nativeZoom) { super(device); - this.initialNativeZoom = nativeZoom; this.imageProvider = new PlainImageProviderWrapper(width, height); init(); this.device.registerResourceWithZoomSupport(this); @@ -243,7 +231,6 @@ public Image(Device device, Image srcImage, int flag) { ImageHandle imageMetadata; if (srcImage == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); if (srcImage.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT); - initialNativeZoom = srcImage.initialNativeZoom; this.type = srcImage.type; this.imageProvider = srcImage.imageProvider.createCopy(this); this.styleFlag = srcImage.styleFlag | flag; @@ -352,7 +339,6 @@ public Image(Device device, Image srcImage, int flag) { public Image(Device device, Rectangle bounds) { super(device); if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); - initialNativeZoom = DPIUtil.getNativeDeviceZoom(); this.imageProvider = new PlainImageProviderWrapper(bounds.width, bounds.height); init(); this.device.registerResourceWithZoomSupport(this); @@ -384,7 +370,6 @@ public Image(Device device, Rectangle bounds) { public Image(Device device, ImageData data) { super(device); if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); - initialNativeZoom = DPIUtil.getNativeDeviceZoom(); this.imageProvider = new PlainImageDataProviderWrapper(data); init(); this.device.registerResourceWithZoomSupport(this); @@ -393,7 +378,6 @@ public Image(Device device, ImageData data) { private Image(Device device, ImageData data, int zoom) { super(device); if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); - initialNativeZoom = zoom; this.imageProvider = new PlainImageDataProviderWrapper(data, zoom); init(); this.device.registerResourceWithZoomSupport(this); @@ -436,7 +420,6 @@ public Image(Device device, ImageData source, ImageData mask) { if (source.width != mask.width || source.height != mask.height) { SWT.error(SWT.ERROR_INVALID_ARGUMENT); } - initialNativeZoom = DPIUtil.getNativeDeviceZoom(); this.imageProvider = new MaskedImageDataProviderWrapper(source, mask); init(); this.device.registerResourceWithZoomSupport(this); @@ -498,7 +481,6 @@ public Image(Device device, ImageData source, ImageData mask) { public Image (Device device, InputStream stream) { super(device); if (stream == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); - initialNativeZoom = DPIUtil.getNativeDeviceZoom(); this.imageProvider = new ImageDataLoaderStreamProviderWrapper(stream); init(); this.device.registerResourceWithZoomSupport(this); @@ -539,7 +521,6 @@ public Image (Device device, InputStream stream) { public Image (Device device, String filename) { super(device); if (filename == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); - initialNativeZoom = DPIUtil.getNativeDeviceZoom(); this.imageProvider = new ImageFileNameProviderWrapper(zoom -> { if (zoom == 100) { return filename; @@ -582,7 +563,6 @@ public Image (Device device, String filename) { public Image(Device device, ImageFileNameProvider imageFileNameProvider) { super(device); this.imageProvider = new ImageFileNameProviderWrapper(imageFileNameProvider); - initialNativeZoom = DPIUtil.getNativeDeviceZoom(); if (imageFileNameProvider.getImagePath(100) == null) { SWT.error(SWT.ERROR_INVALID_ARGUMENT, null, ": ImageFileNameProvider [" + imageFileNameProvider + "] returns null fileName at 100% zoom."); @@ -623,7 +603,6 @@ public Image(Device device, ImageFileNameProvider imageFileNameProvider) { public Image(Device device, ImageDataProvider imageDataProvider) { super(device); this.imageProvider = new ImageDataProviderWrapper(imageDataProvider); - initialNativeZoom = DPIUtil.getNativeDeviceZoom(); if (imageDataProvider.getImageData(100) == null) { SWT.error(SWT.ERROR_INVALID_ARGUMENT, null, ": ImageDataProvider [" + imageDataProvider + "] returns null ImageData at 100% zoom."); @@ -653,7 +632,6 @@ public Image(Device device, ImageDataProvider imageDataProvider) { public Image(Device device, ImageGcDrawer imageGcDrawer, int width, int height) { super(device); this.imageProvider = new ImageGcDrawerWrapper(imageGcDrawer, width, height); - initialNativeZoom = DPIUtil.getNativeDeviceZoom(); init(); } @@ -848,10 +826,6 @@ public static void drawScaled(GC gc, Image original, int width, int height, floa 0, 0, Math.round (width * scaleFactor), Math.round (height * scaleFactor), false); } -long [] createGdipImage() { - return createGdipImage(this.getZoom()); -} - long [] createGdipImage(Integer zoom) { long handle = Image.win32_getHandle(this, zoom); switch (type) { @@ -1035,9 +1009,7 @@ private void destroyHandles() { @Override void destroyHandlesExcept(Set zoomLevels) { - destroyHandles(zoom -> { - return !zoomLevels.contains(zoom) && zoom != DPIUtil.getZoomForAutoscaleProperty(initialNativeZoom); - }); + destroyHandles(zoom -> !zoomLevels.contains(zoom) || !this.imageProvider.getPreservedZoomLevels().contains(zoom)); } private void destroyHandles(Predicate filter) { @@ -1067,7 +1039,7 @@ public boolean equals (Object object) { if (object == this) return true; if (!(object instanceof Image)) return false; Image image = (Image) object; - if (device != image.device || transparentPixel != image.transparentPixel || getZoom() != image.getZoom()) return false; + if (device != image.device || transparentPixel != image.transparentPixel) return false; return (styleFlag == image.styleFlag) && imageProvider.equals(image.imageProvider); } @@ -1833,9 +1805,6 @@ public void setBackground(Color color) { zoomLevelToImageHandle.values().forEach(imageHandle -> imageHandle.setBackground(backgroundColor)); } -private int getZoom() { - return DPIUtil.getZoomForAutoscaleProperty(initialNativeZoom); -} /** * Returns a string containing a concise, human-readable * description of the receiver. @@ -1885,6 +1854,10 @@ private abstract class AbstractImageProviderWrapper { protected abstract Rectangle getBounds(int zoom); + public Collection getPreservedZoomLevels() { + return Collections.emptySet(); + } + abstract ImageData newImageData(int zoom); abstract AbstractImageProviderWrapper createCopy(Image image); @@ -2091,6 +2064,7 @@ AbstractImageProviderWrapper createCopy(Image image) { private class PlainImageProviderWrapper extends AbstractImageProviderWrapper { private final int width; private final int height; + private int baseZoom; PlainImageProviderWrapper(int width, int height) { if (width <= 0 || height <= 0) { @@ -2101,6 +2075,11 @@ private class PlainImageProviderWrapper extends AbstractImageProviderWrapper { type = SWT.BITMAP; } + @Override + public Collection getPreservedZoomLevels() { + return Collections.singleton(baseZoom); + } + @Override protected Rectangle getBounds(int zoom) { Rectangle rectangle = new Rectangle(0, 0, width, height); @@ -2125,6 +2104,7 @@ protected ImageHandle newImageHandle(int zoom) { private ImageHandle createBaseHandle(int zoom) { long handle = initBaseHandle(zoom); + baseZoom = zoom; ImageHandle imageHandle = new ImageHandle(handle, zoom); zoomLevelToImageHandle.put(zoom, imageHandle); return imageHandle; @@ -2278,7 +2258,7 @@ protected ElementAtZoom loadImageData(int zoom) { @Override public int hashCode() { - return Objects.hash(provider, styleFlag, transparentPixel, getZoom()); + return Objects.hash(provider, styleFlag, transparentPixel); } @Override @@ -2521,7 +2501,6 @@ ImageData newImageData(int zoom) { @Override protected ImageHandle newImageHandle(int zoom) { - initialNativeZoom = zoom; int gcStyle = drawer.getGcStyle(); Image image; if ((gcStyle & SWT.TRANSPARENT) != 0) { @@ -2532,7 +2511,7 @@ protected ImageHandle newImageHandle(int zoom) { resultData.alphaData = new byte [scaledWidth * scaledHeight]; image = new Image(device, resultData, zoom); } else { - image = new Image(device, width, height, zoom); + image = new Image(device, width, height); } GC gc = new GC(new DrawableWrapper(image, zoom), gcStyle); try { From 948c7c12b7ebdc037bad38de1329f7c93de4cfe2 Mon Sep 17 00:00:00 2001 From: Andreas Koch Date: Wed, 7 May 2025 14:27:14 +0200 Subject: [PATCH 066/119] [win32] Fix for Image disablement This commit adjusts the order in the Image copy constructor. As the call to ImageProviderWrapper#createCopy creates cached variants for some implementation. These created variants could be missing disablement/greyed state. Therfor this flag is set before that. --- .../Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java index 0347cd481da..28e125c138d 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java @@ -232,8 +232,8 @@ public Image(Device device, Image srcImage, int flag) { if (srcImage == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); if (srcImage.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT); this.type = srcImage.type; - this.imageProvider = srcImage.imageProvider.createCopy(this); this.styleFlag = srcImage.styleFlag | flag; + this.imageProvider = srcImage.imageProvider.createCopy(this); switch (flag) { case SWT.IMAGE_COPY: { switch (type) { From f64d1a6b672ba47b682f0f707e93104c1ec2ee45 Mon Sep 17 00:00:00 2001 From: Andreas Koch Date: Wed, 7 May 2025 19:07:12 +0200 Subject: [PATCH 067/119] [win32] Fix double buffer paint with ImageGcDrawer This commit fixes a regression introduced with f10721a that did not properly retain the currently drawn zoom level when an ImageGcDrawer is used. That leads to issues with zoom != 100. --- .../win32/org/eclipse/swt/graphics/Image.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java index 28e125c138d..60411808543 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java @@ -1691,7 +1691,7 @@ private ImageHandle init(ImageData i, int zoom) { */ @Override public long internal_new_GC (GCData data) { - return configureGC(data, 100); + return this.imageProvider.configureGCData(data); } private long configureGC(GCData data, int zoom) { @@ -1854,6 +1854,10 @@ private abstract class AbstractImageProviderWrapper { protected abstract Rectangle getBounds(int zoom); + protected long configureGCData(GCData data) { + return configureGC(data, 100); + } + public Collection getPreservedZoomLevels() { return Collections.emptySet(); } @@ -2480,6 +2484,7 @@ private class ImageGcDrawerWrapper extends DynamicImageProviderWrapper { private ImageGcDrawer drawer; private int width; private int height; + private int currentZoom = 100; ImageGcDrawerWrapper(ImageGcDrawer imageGcDrawer, int width, int height) { checkProvider(imageGcDrawer, ImageGcDrawer.class); @@ -2494,6 +2499,11 @@ protected Rectangle getBounds(int zoom) { return DPIUtil.scaleBounds(rectangle, zoom, 100); } + @Override + protected long configureGCData(GCData data) { + return configureGC(data, currentZoom); + } + @Override ImageData newImageData(int zoom) { return getImageMetadata(zoom).getImageData(); @@ -2501,6 +2511,7 @@ ImageData newImageData(int zoom) { @Override protected ImageHandle newImageHandle(int zoom) { + currentZoom = zoom; int gcStyle = drawer.getGcStyle(); Image image; if ((gcStyle & SWT.TRANSPARENT) != 0) { From 4989164a513d44aea2df9eec9b60fc3ad8463dca Mon Sep 17 00:00:00 2001 From: Aleksandar Kurtakov Date: Wed, 7 May 2025 22:10:32 +0300 Subject: [PATCH 068/119] [GTK] Fix webkit download on GTK 4 Webkitgtk on GTK 4 changed the component which handles the download-started signal. This PR adjusts SWT accordingly. --- .../gtk/library/webkitgtk.c | 20 +++++++++++++++++++ .../gtk/library/webkitgtk_stats.h | 1 + .../gtk/org/eclipse/swt/browser/WebKit.java | 6 +++++- .../swt/internal/webkit/WebKitGTK.java | 5 ++++- 4 files changed, 30 insertions(+), 2 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/library/webkitgtk.c b/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/library/webkitgtk.c index f65dacb992f..63ed1f28124 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/library/webkitgtk.c +++ b/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/library/webkitgtk.c @@ -1163,6 +1163,26 @@ JNIEXPORT jlong JNICALL WebKitGTK_NATIVE(webkit_1navigation_1policy_1decision_1g } #endif +#ifndef NO_webkit_1network_1session_1get_1default +JNIEXPORT jlong JNICALL WebKitGTK_NATIVE(webkit_1network_1session_1get_1default) + (JNIEnv *env, jclass that) +{ + jlong rc = 0; + WebKitGTK_NATIVE_ENTER(env, that, webkit_1network_1session_1get_1default_FUNC); +/* + rc = (jlong)webkit_network_session_get_default(); +*/ + { + WebKitGTK_LOAD_FUNCTION(fp, webkit_network_session_get_default) + if (fp) { + rc = (jlong)((jlong (CALLING_CONVENTION*)())fp)(); + } + } + WebKitGTK_NATIVE_EXIT(env, that, webkit_1network_1session_1get_1default_FUNC); + return rc; +} +#endif + #ifndef NO_webkit_1policy_1decision_1download JNIEXPORT void JNICALL WebKitGTK_NATIVE(webkit_1policy_1decision_1download) (JNIEnv *env, jclass that, jlong arg0) diff --git a/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/library/webkitgtk_stats.h b/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/library/webkitgtk_stats.h index 8cfe18f3967..5199504355e 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/library/webkitgtk_stats.h +++ b/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/library/webkitgtk_stats.h @@ -79,6 +79,7 @@ typedef enum { webkit_1javascript_1result_1get_1value_FUNC, webkit_1javascript_1result_1unref_FUNC, webkit_1navigation_1policy_1decision_1get_1request_FUNC, + webkit_1network_1session_1get_1default_FUNC, webkit_1policy_1decision_1download_FUNC, webkit_1policy_1decision_1ignore_FUNC, webkit_1response_1policy_1decision_1get_1request_FUNC, diff --git a/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java b/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java index fdf74bf6e70..c6f5025470b 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java +++ b/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java @@ -703,7 +703,11 @@ public void create (Composite parent, int style) { // (!) Note this one's a 'webContext' signal, not webview. See: // https://webkitgtk.org/reference/webkit2gtk/stable/WebKitWebContext.html#WebKitWebContext-download-started - OS.g_signal_connect (WebKitGTK.webkit_web_context_get_default(), WebKitGTK.download_started, Proc3.getAddress (), DOWNLOAD_STARTED); + if (GTK.GTK4) { + OS.g_signal_connect (WebKitGTK.webkit_network_session_get_default(), WebKitGTK.download_started, Proc3.getAddress (), DOWNLOAD_STARTED); + } else { + OS.g_signal_connect (WebKitGTK.webkit_web_context_get_default(), WebKitGTK.download_started, Proc3.getAddress (), DOWNLOAD_STARTED); + } GTK.gtk_widget_show (webView); GTK.gtk_widget_show (browser.handle); diff --git a/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/internal/webkit/WebKitGTK.java b/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/internal/webkit/WebKitGTK.java index 78b50b51feb..da116e4a1d2 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/internal/webkit/WebKitGTK.java +++ b/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/internal/webkit/WebKitGTK.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2021 IBM Corporation and others. All rights reserved. + * Copyright (c) 2000, 2025 IBM Corporation and others. All rights reserved. * The contents of this file are made available under the terms * of the GNU Lesser General Public License (LGPL) Version 2.1 that * accompanies this distribution (lgpl-v21.txt). The LGPL is also @@ -359,6 +359,9 @@ public class WebKitGTK extends C { /** @method flags=dynamic */ public static final native long webkit_web_context_get_default(); +/** @method flags=dynamic */ +public static final native long webkit_network_session_get_default(); + /** @method flags=dynamic */ public static final native long webkit_web_context_get_cookie_manager(long context); From 2035f5e13ffd83636a4041beb7052b10d8032d77 Mon Sep 17 00:00:00 2001 From: Eclipse Releng Bot Date: Thu, 8 May 2025 06:17:50 +0000 Subject: [PATCH 069/119] v4969r16 --- ...wt-cocoa-4969r15.jnilib => libswt-awt-cocoa-4969r16.jnilib} | 0 ...libswt-cocoa-4969r15.jnilib => libswt-cocoa-4969r16.jnilib} | 0 ...-pi-cocoa-4969r15.jnilib => libswt-pi-cocoa-4969r16.jnilib} | 0 ...wt-cocoa-4969r15.jnilib => libswt-awt-cocoa-4969r16.jnilib} | 0 ...libswt-cocoa-4969r15.jnilib => libswt-cocoa-4969r16.jnilib} | 0 ...-pi-cocoa-4969r15.jnilib => libswt-pi-cocoa-4969r16.jnilib} | 0 .../{libswt-atk-gtk-4969r15.so => libswt-atk-gtk-4969r16.so} | 0 .../{libswt-awt-gtk-4969r15.so => libswt-awt-gtk-4969r16.so} | 0 ...libswt-cairo-gtk-4969r15.so => libswt-cairo-gtk-4969r16.so} | 0 .../{libswt-glx-gtk-4969r15.so => libswt-glx-gtk-4969r16.so} | 0 .../{libswt-gtk-4969r15.so => libswt-gtk-4969r16.so} | 0 .../{libswt-pi3-gtk-4969r15.so => libswt-pi3-gtk-4969r16.so} | 0 .../libswt-webkit-gtk-4969r15.so | 3 --- .../libswt-webkit-gtk-4969r16.so | 3 +++ .../{libswt-atk-gtk-4969r15.so => libswt-atk-gtk-4969r16.so} | 0 .../{libswt-awt-gtk-4969r15.so => libswt-awt-gtk-4969r16.so} | 0 ...libswt-cairo-gtk-4969r15.so => libswt-cairo-gtk-4969r16.so} | 0 .../{libswt-glx-gtk-4969r15.so => libswt-glx-gtk-4969r16.so} | 0 .../{libswt-gtk-4969r15.so => libswt-gtk-4969r16.so} | 0 .../{libswt-pi3-gtk-4969r15.so => libswt-pi3-gtk-4969r16.so} | 0 .../libswt-webkit-gtk-4969r15.so | 3 --- .../libswt-webkit-gtk-4969r16.so | 3 +++ .../{libswt-atk-gtk-4969r15.so => libswt-atk-gtk-4969r16.so} | 0 .../{libswt-awt-gtk-4969r15.so => libswt-awt-gtk-4969r16.so} | 0 ...libswt-cairo-gtk-4969r15.so => libswt-cairo-gtk-4969r16.so} | 0 .../{libswt-glx-gtk-4969r15.so => libswt-glx-gtk-4969r16.so} | 0 .../{libswt-gtk-4969r15.so => libswt-gtk-4969r16.so} | 0 .../{libswt-pi3-gtk-4969r15.so => libswt-pi3-gtk-4969r16.so} | 0 .../libswt-webkit-gtk-4969r15.so | 3 --- .../libswt-webkit-gtk-4969r16.so | 3 +++ .../{libswt-atk-gtk-4969r15.so => libswt-atk-gtk-4969r16.so} | 0 .../{libswt-awt-gtk-4969r15.so => libswt-awt-gtk-4969r16.so} | 0 ...libswt-cairo-gtk-4969r15.so => libswt-cairo-gtk-4969r16.so} | 0 .../{libswt-glx-gtk-4969r15.so => libswt-glx-gtk-4969r16.so} | 0 .../{libswt-gtk-4969r15.so => libswt-gtk-4969r16.so} | 0 .../{libswt-pi3-gtk-4969r15.so => libswt-pi3-gtk-4969r16.so} | 0 .../{libswt-pi4-gtk-4969r15.so => libswt-pi4-gtk-4969r16.so} | 0 .../libswt-webkit-gtk-4969r15.so | 3 --- .../libswt-webkit-gtk-4969r16.so | 3 +++ .../{swt-awt-win32-4969r15.dll => swt-awt-win32-4969r16.dll} | 0 .../{swt-gdip-win32-4969r15.dll => swt-gdip-win32-4969r16.dll} | 0 ...rsion-win32-4969r15.dll => swt-osversion-win32-4969r16.dll} | 0 .../{swt-wgl-win32-4969r15.dll => swt-wgl-win32-4969r16.dll} | 0 .../{swt-win32-4969r15.dll => swt-win32-4969r16.dll} | 0 .../{swt-awt-win32-4969r15.dll => swt-awt-win32-4969r16.dll} | 0 .../{swt-gdip-win32-4969r15.dll => swt-gdip-win32-4969r16.dll} | 0 ...rsion-win32-4969r15.dll => swt-osversion-win32-4969r16.dll} | 0 .../{swt-wgl-win32-4969r15.dll => swt-wgl-win32-4969r16.dll} | 0 .../{swt-win32-4969r15.dll => swt-win32-4969r16.dll} | 0 .../common/org/eclipse/swt/internal/Library.java | 2 +- .../org.eclipse.swt/Eclipse SWT/common/library/make_common.mak | 2 +- 51 files changed, 14 insertions(+), 14 deletions(-) rename binaries/org.eclipse.swt.cocoa.macosx.aarch64/{libswt-awt-cocoa-4969r15.jnilib => libswt-awt-cocoa-4969r16.jnilib} (100%) rename binaries/org.eclipse.swt.cocoa.macosx.aarch64/{libswt-cocoa-4969r15.jnilib => libswt-cocoa-4969r16.jnilib} (100%) rename binaries/org.eclipse.swt.cocoa.macosx.aarch64/{libswt-pi-cocoa-4969r15.jnilib => libswt-pi-cocoa-4969r16.jnilib} (100%) rename binaries/org.eclipse.swt.cocoa.macosx.x86_64/{libswt-awt-cocoa-4969r15.jnilib => libswt-awt-cocoa-4969r16.jnilib} (100%) rename binaries/org.eclipse.swt.cocoa.macosx.x86_64/{libswt-cocoa-4969r15.jnilib => libswt-cocoa-4969r16.jnilib} (100%) rename binaries/org.eclipse.swt.cocoa.macosx.x86_64/{libswt-pi-cocoa-4969r15.jnilib => libswt-pi-cocoa-4969r16.jnilib} (100%) rename binaries/org.eclipse.swt.gtk.linux.aarch64/{libswt-atk-gtk-4969r15.so => libswt-atk-gtk-4969r16.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.aarch64/{libswt-awt-gtk-4969r15.so => libswt-awt-gtk-4969r16.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.aarch64/{libswt-cairo-gtk-4969r15.so => libswt-cairo-gtk-4969r16.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.aarch64/{libswt-glx-gtk-4969r15.so => libswt-glx-gtk-4969r16.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.aarch64/{libswt-gtk-4969r15.so => libswt-gtk-4969r16.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.aarch64/{libswt-pi3-gtk-4969r15.so => libswt-pi3-gtk-4969r16.so} (100%) delete mode 100755 binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-webkit-gtk-4969r15.so create mode 100755 binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-webkit-gtk-4969r16.so rename binaries/org.eclipse.swt.gtk.linux.ppc64le/{libswt-atk-gtk-4969r15.so => libswt-atk-gtk-4969r16.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.ppc64le/{libswt-awt-gtk-4969r15.so => libswt-awt-gtk-4969r16.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.ppc64le/{libswt-cairo-gtk-4969r15.so => libswt-cairo-gtk-4969r16.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.ppc64le/{libswt-glx-gtk-4969r15.so => libswt-glx-gtk-4969r16.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.ppc64le/{libswt-gtk-4969r15.so => libswt-gtk-4969r16.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.ppc64le/{libswt-pi3-gtk-4969r15.so => libswt-pi3-gtk-4969r16.so} (100%) delete mode 100755 binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-webkit-gtk-4969r15.so create mode 100755 binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-webkit-gtk-4969r16.so rename binaries/org.eclipse.swt.gtk.linux.riscv64/{libswt-atk-gtk-4969r15.so => libswt-atk-gtk-4969r16.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.riscv64/{libswt-awt-gtk-4969r15.so => libswt-awt-gtk-4969r16.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.riscv64/{libswt-cairo-gtk-4969r15.so => libswt-cairo-gtk-4969r16.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.riscv64/{libswt-glx-gtk-4969r15.so => libswt-glx-gtk-4969r16.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.riscv64/{libswt-gtk-4969r15.so => libswt-gtk-4969r16.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.riscv64/{libswt-pi3-gtk-4969r15.so => libswt-pi3-gtk-4969r16.so} (100%) delete mode 100755 binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-webkit-gtk-4969r15.so create mode 100755 binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-webkit-gtk-4969r16.so rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-atk-gtk-4969r15.so => libswt-atk-gtk-4969r16.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-awt-gtk-4969r15.so => libswt-awt-gtk-4969r16.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-cairo-gtk-4969r15.so => libswt-cairo-gtk-4969r16.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-glx-gtk-4969r15.so => libswt-glx-gtk-4969r16.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-gtk-4969r15.so => libswt-gtk-4969r16.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-pi3-gtk-4969r15.so => libswt-pi3-gtk-4969r16.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-pi4-gtk-4969r15.so => libswt-pi4-gtk-4969r16.so} (100%) delete mode 100755 binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-webkit-gtk-4969r15.so create mode 100755 binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-webkit-gtk-4969r16.so rename binaries/org.eclipse.swt.win32.win32.aarch64/{swt-awt-win32-4969r15.dll => swt-awt-win32-4969r16.dll} (100%) rename binaries/org.eclipse.swt.win32.win32.aarch64/{swt-gdip-win32-4969r15.dll => swt-gdip-win32-4969r16.dll} (100%) rename binaries/org.eclipse.swt.win32.win32.aarch64/{swt-osversion-win32-4969r15.dll => swt-osversion-win32-4969r16.dll} (100%) rename binaries/org.eclipse.swt.win32.win32.aarch64/{swt-wgl-win32-4969r15.dll => swt-wgl-win32-4969r16.dll} (100%) rename binaries/org.eclipse.swt.win32.win32.aarch64/{swt-win32-4969r15.dll => swt-win32-4969r16.dll} (100%) rename binaries/org.eclipse.swt.win32.win32.x86_64/{swt-awt-win32-4969r15.dll => swt-awt-win32-4969r16.dll} (100%) rename binaries/org.eclipse.swt.win32.win32.x86_64/{swt-gdip-win32-4969r15.dll => swt-gdip-win32-4969r16.dll} (100%) rename binaries/org.eclipse.swt.win32.win32.x86_64/{swt-osversion-win32-4969r15.dll => swt-osversion-win32-4969r16.dll} (100%) rename binaries/org.eclipse.swt.win32.win32.x86_64/{swt-wgl-win32-4969r15.dll => swt-wgl-win32-4969r16.dll} (100%) rename binaries/org.eclipse.swt.win32.win32.x86_64/{swt-win32-4969r15.dll => swt-win32-4969r16.dll} (100%) diff --git a/binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-awt-cocoa-4969r15.jnilib b/binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-awt-cocoa-4969r16.jnilib similarity index 100% rename from binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-awt-cocoa-4969r15.jnilib rename to binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-awt-cocoa-4969r16.jnilib diff --git a/binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-cocoa-4969r15.jnilib b/binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-cocoa-4969r16.jnilib similarity index 100% rename from binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-cocoa-4969r15.jnilib rename to binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-cocoa-4969r16.jnilib diff --git a/binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-pi-cocoa-4969r15.jnilib b/binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-pi-cocoa-4969r16.jnilib similarity index 100% rename from binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-pi-cocoa-4969r15.jnilib rename to binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-pi-cocoa-4969r16.jnilib diff --git a/binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-awt-cocoa-4969r15.jnilib b/binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-awt-cocoa-4969r16.jnilib similarity index 100% rename from binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-awt-cocoa-4969r15.jnilib rename to binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-awt-cocoa-4969r16.jnilib diff --git a/binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-cocoa-4969r15.jnilib b/binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-cocoa-4969r16.jnilib similarity index 100% rename from binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-cocoa-4969r15.jnilib rename to binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-cocoa-4969r16.jnilib diff --git a/binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-pi-cocoa-4969r15.jnilib b/binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-pi-cocoa-4969r16.jnilib similarity index 100% rename from binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-pi-cocoa-4969r15.jnilib rename to binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-pi-cocoa-4969r16.jnilib diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-atk-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-atk-gtk-4969r16.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-atk-gtk-4969r15.so rename to binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-atk-gtk-4969r16.so diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-awt-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-awt-gtk-4969r16.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-awt-gtk-4969r15.so rename to binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-awt-gtk-4969r16.so diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-cairo-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-cairo-gtk-4969r16.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-cairo-gtk-4969r15.so rename to binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-cairo-gtk-4969r16.so diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-glx-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-glx-gtk-4969r16.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-glx-gtk-4969r15.so rename to binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-glx-gtk-4969r16.so diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-gtk-4969r16.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-gtk-4969r15.so rename to binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-gtk-4969r16.so diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-pi3-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-pi3-gtk-4969r16.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-pi3-gtk-4969r15.so rename to binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-pi3-gtk-4969r16.so diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-webkit-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-webkit-gtk-4969r15.so deleted file mode 100755 index 1751d94593c..00000000000 --- a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-webkit-gtk-4969r15.so +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:030678fc1a0dfa5c3a265359cb9c9cf269cc32c648f3c12df44997faa247a781 -size 67856 diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-webkit-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-webkit-gtk-4969r16.so new file mode 100755 index 00000000000..9aee19bcd61 --- /dev/null +++ b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-webkit-gtk-4969r16.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d787117667b78c0c63c46cf860e1c05319fa53e5c0e64fe1419cc9b1869fefa +size 67856 diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-atk-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-atk-gtk-4969r16.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-atk-gtk-4969r15.so rename to binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-atk-gtk-4969r16.so diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-awt-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-awt-gtk-4969r16.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-awt-gtk-4969r15.so rename to binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-awt-gtk-4969r16.so diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-cairo-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-cairo-gtk-4969r16.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-cairo-gtk-4969r15.so rename to binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-cairo-gtk-4969r16.so diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-glx-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-glx-gtk-4969r16.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-glx-gtk-4969r15.so rename to binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-glx-gtk-4969r16.so diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-gtk-4969r16.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-gtk-4969r15.so rename to binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-gtk-4969r16.so diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-pi3-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-pi3-gtk-4969r16.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-pi3-gtk-4969r15.so rename to binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-pi3-gtk-4969r16.so diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-webkit-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-webkit-gtk-4969r15.so deleted file mode 100755 index 7ea28696016..00000000000 --- a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-webkit-gtk-4969r15.so +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c8d29552814eda9c2edf533364e639e3a506e30cc54cfba4b2cf76e2e91360cc -size 133160 diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-webkit-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-webkit-gtk-4969r16.so new file mode 100755 index 00000000000..f24d2db59ba --- /dev/null +++ b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-webkit-gtk-4969r16.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d60df7d59dd0df65cabea925d7d783dc70062a19e1666f62adb0ca9ace418a99 +size 133160 diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-atk-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-atk-gtk-4969r16.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-atk-gtk-4969r15.so rename to binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-atk-gtk-4969r16.so diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-awt-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-awt-gtk-4969r16.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-awt-gtk-4969r15.so rename to binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-awt-gtk-4969r16.so diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-cairo-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-cairo-gtk-4969r16.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-cairo-gtk-4969r15.so rename to binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-cairo-gtk-4969r16.so diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-glx-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-glx-gtk-4969r16.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-glx-gtk-4969r15.so rename to binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-glx-gtk-4969r16.so diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-gtk-4969r16.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-gtk-4969r15.so rename to binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-gtk-4969r16.so diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-pi3-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-pi3-gtk-4969r16.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-pi3-gtk-4969r15.so rename to binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-pi3-gtk-4969r16.so diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-webkit-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-webkit-gtk-4969r15.so deleted file mode 100755 index 15621ce50fe..00000000000 --- a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-webkit-gtk-4969r15.so +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b267bd5dab4b083377e1e619d1885e63f98fcc23993dab1b772c7398a07e97ab -size 47016 diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-webkit-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-webkit-gtk-4969r16.so new file mode 100755 index 00000000000..415f11dbd5a --- /dev/null +++ b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-webkit-gtk-4969r16.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d87dfb002f011e4dad364ff6e2f98fa34bcf70cccf9de8b03116b0ea60a95f13 +size 47016 diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-atk-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-atk-gtk-4969r16.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-atk-gtk-4969r15.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-atk-gtk-4969r16.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-awt-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-awt-gtk-4969r16.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-awt-gtk-4969r15.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-awt-gtk-4969r16.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-cairo-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-cairo-gtk-4969r16.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-cairo-gtk-4969r15.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-cairo-gtk-4969r16.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-glx-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-glx-gtk-4969r16.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-glx-gtk-4969r15.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-glx-gtk-4969r16.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-gtk-4969r16.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-gtk-4969r15.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-gtk-4969r16.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi3-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi3-gtk-4969r16.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi3-gtk-4969r15.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi3-gtk-4969r16.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi4-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi4-gtk-4969r16.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi4-gtk-4969r15.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi4-gtk-4969r16.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-webkit-gtk-4969r15.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-webkit-gtk-4969r15.so deleted file mode 100755 index 3975fee52ef..00000000000 --- a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-webkit-gtk-4969r15.so +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3c7c742d1a8e563b104da16adbaf6e557e8f12cb366224bd30d792f3c25cc111 -size 55240 diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-webkit-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-webkit-gtk-4969r16.so new file mode 100755 index 00000000000..a37816f6a19 --- /dev/null +++ b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-webkit-gtk-4969r16.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31debe2277d64fc1c6c9b99b4bd79983316a13aae7959b50173b21b3a4d9d866 +size 55240 diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-awt-win32-4969r15.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-awt-win32-4969r16.dll similarity index 100% rename from binaries/org.eclipse.swt.win32.win32.aarch64/swt-awt-win32-4969r15.dll rename to binaries/org.eclipse.swt.win32.win32.aarch64/swt-awt-win32-4969r16.dll diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-gdip-win32-4969r15.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-gdip-win32-4969r16.dll similarity index 100% rename from binaries/org.eclipse.swt.win32.win32.aarch64/swt-gdip-win32-4969r15.dll rename to binaries/org.eclipse.swt.win32.win32.aarch64/swt-gdip-win32-4969r16.dll diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-osversion-win32-4969r15.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-osversion-win32-4969r16.dll similarity index 100% rename from binaries/org.eclipse.swt.win32.win32.aarch64/swt-osversion-win32-4969r15.dll rename to binaries/org.eclipse.swt.win32.win32.aarch64/swt-osversion-win32-4969r16.dll diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-wgl-win32-4969r15.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-wgl-win32-4969r16.dll similarity index 100% rename from binaries/org.eclipse.swt.win32.win32.aarch64/swt-wgl-win32-4969r15.dll rename to binaries/org.eclipse.swt.win32.win32.aarch64/swt-wgl-win32-4969r16.dll diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r15.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r16.dll similarity index 100% rename from binaries/org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r15.dll rename to binaries/org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r16.dll diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-awt-win32-4969r15.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-awt-win32-4969r16.dll similarity index 100% rename from binaries/org.eclipse.swt.win32.win32.x86_64/swt-awt-win32-4969r15.dll rename to binaries/org.eclipse.swt.win32.win32.x86_64/swt-awt-win32-4969r16.dll diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-gdip-win32-4969r15.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-gdip-win32-4969r16.dll similarity index 100% rename from binaries/org.eclipse.swt.win32.win32.x86_64/swt-gdip-win32-4969r15.dll rename to binaries/org.eclipse.swt.win32.win32.x86_64/swt-gdip-win32-4969r16.dll diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-osversion-win32-4969r15.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-osversion-win32-4969r16.dll similarity index 100% rename from binaries/org.eclipse.swt.win32.win32.x86_64/swt-osversion-win32-4969r15.dll rename to binaries/org.eclipse.swt.win32.win32.x86_64/swt-osversion-win32-4969r16.dll diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-wgl-win32-4969r15.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-wgl-win32-4969r16.dll similarity index 100% rename from binaries/org.eclipse.swt.win32.win32.x86_64/swt-wgl-win32-4969r15.dll rename to binaries/org.eclipse.swt.win32.win32.x86_64/swt-wgl-win32-4969r16.dll diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r15.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r16.dll similarity index 100% rename from binaries/org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r15.dll rename to binaries/org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r16.dll diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/Library.java b/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/Library.java index e7ed84fba4e..0a3277480d3 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/Library.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/Library.java @@ -40,7 +40,7 @@ public class Library { /** * SWT revision number (must be >= 0) */ - static int REVISION = 15; + static int REVISION = 16; /** * The JAVA and SWT versions diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/library/make_common.mak b/bundles/org.eclipse.swt/Eclipse SWT/common/library/make_common.mak index 956088bfff0..26dbe62385c 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/library/make_common.mak +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/library/make_common.mak @@ -14,4 +14,4 @@ maj_ver=4 min_ver=969 -rev=15 +rev=16 From 992b59548db00f4b8846c210813877513077b171 Mon Sep 17 00:00:00 2001 From: fedejeanne Date: Wed, 7 May 2025 14:29:04 +0200 Subject: [PATCH 070/119] Transform the field DPIUtil.autoScaleMethodSetting to a constant The field was already being used as a constant since it was being initialized in a static block. Also adapt the initialization of the field autoScaleMethod to use the constant. --- .../org/eclipse/swt/internal/DPIUtil.java | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/DPIUtil.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/DPIUtil.java index c48dccc7620..a15f4683ae3 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/DPIUtil.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/DPIUtil.java @@ -15,6 +15,7 @@ *******************************************************************************/ package org.eclipse.swt.internal; +import java.util.*; import java.util.function.*; import org.eclipse.swt.*; @@ -42,9 +43,20 @@ public class DPIUtil { private static int deviceZoom = 100; private static int nativeDeviceZoom = 100; - private static enum AutoScaleMethod { AUTO, NEAREST, SMOOTH } - private static AutoScaleMethod autoScaleMethodSetting = AutoScaleMethod.AUTO; - private static AutoScaleMethod autoScaleMethod = AutoScaleMethod.NEAREST; + private static enum AutoScaleMethod { AUTO, NEAREST, SMOOTH; + + public static Optional forString(String s) { + for (AutoScaleMethod v : values()) { + if (v.name().equalsIgnoreCase(s)) { + return Optional.of(v); + } + } + return Optional.empty(); + } + + } + private static final AutoScaleMethod AUTO_SCALE_METHOD_SETTING; + private static AutoScaleMethod autoScaleMethod; private static String autoScaleValue; private static final boolean USE_CAIRO_AUTOSCALE = SWT.getPlatform().equals("gtk"); @@ -100,13 +112,8 @@ private static enum AutoScaleMethod { AUTO, NEAREST, SMOOTH } autoScaleValue = System.getProperty (SWT_AUTOSCALE); String value = System.getProperty (SWT_AUTOSCALE_METHOD); - if (value != null) { - if (AutoScaleMethod.NEAREST.name().equalsIgnoreCase(value)) { - autoScaleMethod = autoScaleMethodSetting = AutoScaleMethod.NEAREST; - } else if (AutoScaleMethod.SMOOTH.name().equalsIgnoreCase(value)) { - autoScaleMethod = autoScaleMethodSetting = AutoScaleMethod.SMOOTH; - } - } + AUTO_SCALE_METHOD_SETTING = AutoScaleMethod.forString(value).orElse(AutoScaleMethod.AUTO); + autoScaleMethod = AUTO_SCALE_METHOD_SETTING != AutoScaleMethod.AUTO ? AUTO_SCALE_METHOD_SETTING : AutoScaleMethod.NEAREST; } /** @@ -615,7 +622,7 @@ public static void setDeviceZoom (int nativeDeviceZoom) { // in GTK, preserve the current method when switching to a 100% monitor boolean preserveScalingMethod = SWT.getPlatform().equals("gtk") && deviceZoom == 100; - if (!preserveScalingMethod && autoScaleMethodSetting == AutoScaleMethod.AUTO) { + if (!preserveScalingMethod && AUTO_SCALE_METHOD_SETTING == AutoScaleMethod.AUTO) { if (sholdUseSmoothScaling()) { autoScaleMethod = AutoScaleMethod.SMOOTH; } else { From c71e22b2b1d43e9b44e843140a443284af5d6b00 Mon Sep 17 00:00:00 2001 From: fedejeanne Date: Wed, 7 May 2025 15:01:10 +0200 Subject: [PATCH 071/119] Remove unused constructors in Font --- .../Eclipse SWT/cocoa/org/eclipse/swt/graphics/Font.java | 6 ------ .../Eclipse SWT/gtk/org/eclipse/swt/graphics/Font.java | 6 ------ .../Eclipse SWT/win32/org/eclipse/swt/graphics/Font.java | 8 -------- 3 files changed, 20 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Font.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Font.java index a303eb38407..e9729d4055a 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Font.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Font.java @@ -188,12 +188,6 @@ public Font(Device device, String name, int height, int style) { } } -/*public*/ Font(Device device, String name, float height, int style) { - super(device); - init(name, height, style, null); - init(); -} - void addTraits(NSMutableAttributedString attrStr, NSRange range) { if ((extraTraits & OS.NSBoldFontMask) != 0) { attrStr.addAttribute(OS.NSStrokeWidthAttributeName, NSNumber.numberWithDouble(SYNTHETIC_BOLD), range); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Font.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Font.java index 30b80fa9300..a394f1090ae 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Font.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Font.java @@ -147,12 +147,6 @@ public Font(Device device, String name, int height, int style) { init(); } -/*public*/ Font(Device device, String name, float height, int style) { - super(device); - init(name, height, style, null); - init(); -} - @Override void destroy() { OS.pango_font_description_free(handle); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Font.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Font.java index d866f3d111e..b1f3249ab26 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Font.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Font.java @@ -189,14 +189,6 @@ public Font(Device device, String name, int height, int style) { init(); } -/*public*/ Font(Device device, String name, float height, int style) { - super(device); - if (name == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); - this.zoom = DPIUtil.getNativeDeviceZoom(); - this.fontData = new FontData (name, height, style); - this.fontHeight = height; - init(); -} @Override void destroy() { OS.DeleteObject(handle); From ea6ce221293f477fbb22050f45e45010016c172a Mon Sep 17 00:00:00 2001 From: Aleksandar Kurtakov Date: Thu, 8 May 2025 14:23:35 +0300 Subject: [PATCH 072/119] [GTK] Fix Combo.getSelection on GTK 4 Fixes " UnsatisfiedLink 'long org.eclipse.swt.internal.gtk3.GTK3.gtk_entry_get_text(long)'" problem at runtime. --- .../Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java index c03ef9f3afa..b2dbea8ee04 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java @@ -1302,7 +1302,7 @@ public Point getSelection () { int [] end = new int [1]; if (entryHandle != 0) { GTK.gtk_editable_get_selection_bounds (entryHandle, start, end); - long ptr = GTK3.gtk_entry_get_text (entryHandle); + long ptr = GTK.GTK4 ? GTK4.gtk_entry_buffer_get_text(GTK4.gtk_entry_get_buffer(entryHandle)): GTK3.gtk_entry_get_text (entryHandle); start[0] = (int)OS.g_utf8_offset_to_utf16_offset (ptr, start[0]); end[0] = (int)OS.g_utf8_offset_to_utf16_offset (ptr, end[0]); } From cd5fc235857b96d8b84593c6b30d926ea53768f8 Mon Sep 17 00:00:00 2001 From: Shahzaib Ibrahim Date: Fri, 2 May 2025 16:41:37 +0200 Subject: [PATCH 073/119] Deprecate Image(Rectangle) constructor and replace usages Deprecate Image constructor that accepts Rectangle in favor of Image(display, width, height). --- .../cocoa/org/eclipse/swt/graphics/Image.java | 3 ++ .../gtk/org/eclipse/swt/graphics/Image.java | 3 ++ .../win32/org/eclipse/swt/graphics/Image.java | 3 ++ .../org/eclipse/swt/snippets/Snippet215.java | 3 +- .../org/eclipse/swt/snippets/Snippet292.java | 3 +- .../Bug531667_CanvasPrint_does_not_work.java | 2 +- .../Bug547529_ControlPrintBroken.java | 2 +- .../Bug547529_ImageLoaderStriping.java | 4 ++- .../gtk/snippets/Bug547557_ShellPrintGC.java | 2 +- .../Test_org_eclipse_swt_graphics_Image.java | 30 +++++++++++++++++-- ...t_org_eclipse_swt_graphics_TextLayout.java | 3 +- ...Bug529534_CTabFolder_topRight_wrapped.java | 2 +- 12 files changed, 50 insertions(+), 10 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Image.java index 8040df584bf..8ef4c8ff4bb 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Image.java @@ -527,7 +527,10 @@ private void createRepFromSourceAndApplyFlag(NSBitmapImageRep srcRep, int srcWid *

      * * @see #dispose() + * + * @deprecated use {@link Image#Image(Device, int, int)} instead */ +@Deprecated(since = "2025-06", forRemoval = true) public Image(Device device, Rectangle bounds) { super(device); if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java index f174e431738..74158802a5e 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java @@ -403,7 +403,10 @@ public Image(Device device, Image srcImage, int flag) { *
    * * @see #dispose() + * + * @deprecated use {@link Image#Image(Device, int, int)} instead */ +@Deprecated(since = "2025-06", forRemoval = true) public Image(Device device, Rectangle bounds) { super(device); if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java index 60411808543..272cedb319f 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java @@ -335,7 +335,10 @@ public Image(Device device, Image srcImage, int flag) { *
* * @see #dispose() + * + * @deprecated use {@link Image#Image(Device, int, int)} instead */ +@Deprecated(since = "2025-06", forRemoval = true) public Image(Device device, Rectangle bounds) { super(device); if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet215.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet215.java index 3f6d1603356..955d65a9a20 100644 --- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet215.java +++ b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet215.java @@ -38,7 +38,8 @@ public static void main(String[] args) { /* Take the screen shot */ GC gc = new GC(display); - final Image image = new Image(display, display.getBounds()); + Rectangle rect = display.getBounds(); + final Image image = new Image(display, rect.width, rect.height); gc.copyArea(image, 0, 0); gc.dispose(); diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet292.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet292.java index ea8d2dc31c5..1052dff110a 100644 --- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet292.java +++ b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet292.java @@ -55,7 +55,8 @@ public static void main(String[] args) { button.addListener (SWT.Selection, e -> { Image image = label.getImage (); if (image != null) image.dispose (); - image = new Image (display, group.getBounds ()); + Rectangle rect = group.getBounds(); + image = new Image (display, rect.width, rect.height); GC gc = new GC (image); boolean success = group.print (gc); gc.dispose (); diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug531667_CanvasPrint_does_not_work.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug531667_CanvasPrint_does_not_work.java index 97a6567e6fa..f7ac986b7cf 100644 --- a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug531667_CanvasPrint_does_not_work.java +++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug531667_CanvasPrint_does_not_work.java @@ -81,7 +81,7 @@ private static Composite canvas(Display display, Shell shell) { private static void snapshot(Display display, Composite composite, String filename) { Rectangle bounds = composite.getBounds(); - Image image = new Image(display, bounds); + Image image = new Image(display, bounds.width, bounds.height); GC gc = new GC(image); composite.print(gc); gc.dispose(); diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug547529_ControlPrintBroken.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug547529_ControlPrintBroken.java index a8241329b75..c24c3620e8b 100644 --- a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug547529_ControlPrintBroken.java +++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug547529_ControlPrintBroken.java @@ -84,7 +84,7 @@ private static Composite canvas(Display display, Shell shell) { private static void snapshot(Display display, Composite composite, String filename) { Rectangle bounds = composite.getBounds(); - Image image = new Image(display, bounds); + Image image = new Image(display, bounds.width, bounds.height); GC gc = new GC(image); composite.print(gc); gc.dispose(); diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug547529_ImageLoaderStriping.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug547529_ImageLoaderStriping.java index d4fb5cc5284..0ad5c1f5088 100644 --- a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug547529_ImageLoaderStriping.java +++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug547529_ImageLoaderStriping.java @@ -20,6 +20,7 @@ import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.graphics.ImageLoader; +import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Button; @@ -72,7 +73,8 @@ public void widgetSelected(SelectionEvent e) { } private static void saveImage(Control control, String filename, int format) { - Image image = new Image(control.getDisplay(), control.getBounds()); + Rectangle bounds = control.getBounds(); + Image image = new Image(control.getDisplay(), bounds.width, bounds.height); GC gc = new GC(image); control.print(gc); gc.dispose(); diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug547557_ShellPrintGC.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug547557_ShellPrintGC.java index d8ace87a95a..d28589f9d02 100644 --- a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug547557_ShellPrintGC.java +++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug547557_ShellPrintGC.java @@ -66,7 +66,7 @@ public void widgetSelected(SelectionEvent e) { private static void saveImage(Shell shell, String filename, int format) { Rectangle bounds = shell.getBounds(); - Image image = new Image(shell.getDisplay(), bounds); + Image image = new Image(shell.getDisplay(), bounds.width, bounds.height); // Printing the client area will result in a warning and only the client area being printed // Image image = new Image(shell.getDisplay(), shell.getClientArea()); GC gc = new GC(image); diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Image.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Image.java index a4880245eb7..c1b481b9ce8 100644 --- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Image.java +++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Image.java @@ -119,6 +119,7 @@ public void test_ConstructorLorg_eclipse_swt_graphics_DeviceII() { image.dispose(); } +@SuppressWarnings("removal") @Test public void test_ConstructorLorg_eclipse_swt_graphics_DeviceLorg_eclipse_swt_graphics_Rectangle() { Image image; @@ -156,6 +157,31 @@ public void test_ConstructorLorg_eclipse_swt_graphics_DeviceLorg_eclipse_swt_gra image.dispose(); } +@Test +public void test_ConstructorLorg_eclipse_swt_graphics_DeviceLorg_eclipse_swt_graphics_int_int() { + Image image; + IllegalArgumentException e; + + e = assertThrows(IllegalArgumentException.class, () -> new Image(display, -1, 10)); + assertSWTProblem("Incorrect exception thrown for width < 0", SWT.ERROR_INVALID_ARGUMENT, e); + + e = assertThrows(IllegalArgumentException.class, () -> new Image(display, 0, 10)); + assertSWTProblem("Incorrect exception thrown for width == 0", SWT.ERROR_INVALID_ARGUMENT, e); + + e = assertThrows(IllegalArgumentException.class, () -> new Image(display, 10, -1)); + assertSWTProblem("Incorrect exception thrown for height < 0", SWT.ERROR_INVALID_ARGUMENT, e); + + e = assertThrows(IllegalArgumentException.class, () -> new Image(display, 10, 0)); + assertSWTProblem("Incorrect exception thrown for height == 0", SWT.ERROR_INVALID_ARGUMENT, e); + + // valid images + image = new Image(null, 10, 10); + image.dispose(); + + image = new Image(display, 10, 10); + image.dispose(); +} + @Test public void test_ConstructorLorg_eclipse_swt_graphics_DeviceLorg_eclipse_swt_graphics_ImageData() { IllegalArgumentException e; @@ -521,7 +547,7 @@ public void test_getBounds() { image.dispose(); assertEquals(bounds, bounds1); - image = new Image(display, bounds); + image = new Image(display, bounds.width, bounds.height); bounds1 = image.getBounds(); image.dispose(); assertEquals(bounds, bounds1); @@ -693,7 +719,7 @@ void getImageData_int(int zoom) { assertEquals(":a: Size of ImageData returned from Image.getImageData(int) method doesn't return matches with bounds in Pixel values.", scaleBounds(bounds, zoom, 100), boundsAtZoom); // creates second bitmap image and compare size of imageData - image = new Image(display, bounds); + image = new Image(display, bounds.width, bounds.height); imageDataAtZoom = image.getImageData(zoom); boundsAtZoom = new Rectangle(0, 0, imageDataAtZoom.width, imageDataAtZoom.height); bounds = image.getBounds(); diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_TextLayout.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_TextLayout.java index 9fb04790187..3bf72505b9d 100644 --- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_TextLayout.java +++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_TextLayout.java @@ -1009,7 +1009,8 @@ public void test_bug568740_multilineTextStyle() { private Image draw(TextLayout layout, int antialias) { GC gc = null; try { - Image image = new Image(display, layout.getBounds()); + Rectangle rect = layout.getBounds(); + Image image = new Image(display, rect.width, rect.height); gc = new GC(image); gc.setBackground(display.getSystemColor(SWT.COLOR_WHITE)); gc.fillRectangle(image.getBounds()); diff --git a/tests/org.eclipse.swt.tests/ManualTests/org/eclipse/swt/tests/manual/Bug529534_CTabFolder_topRight_wrapped.java b/tests/org.eclipse.swt.tests/ManualTests/org/eclipse/swt/tests/manual/Bug529534_CTabFolder_topRight_wrapped.java index b48c05dd68e..dedb750fca2 100644 --- a/tests/org.eclipse.swt.tests/ManualTests/org/eclipse/swt/tests/manual/Bug529534_CTabFolder_topRight_wrapped.java +++ b/tests/org.eclipse.swt.tests/ManualTests/org/eclipse/swt/tests/manual/Bug529534_CTabFolder_topRight_wrapped.java @@ -96,7 +96,7 @@ public static void main(String[] args) { private static Image image(Display display, int shapeColor) { Rectangle bounds = new Rectangle(0, 0, 16, 16); - Image image = new Image(display, bounds); + Image image = new Image(display, bounds.width, bounds.height); GC gc = new GC(image); gc.setBackground(display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND)); gc.fillRectangle(bounds); From 89cee027839cfac70aecd7b56fdfe98c00e8064e Mon Sep 17 00:00:00 2001 From: Andreas Koch Date: Wed, 7 May 2025 15:40:27 +0200 Subject: [PATCH 074/119] [win32] Reduce calls to Image#win32_getHandle(int) This commit reduces the calls to Image#win32_getHandle(int) in GC. When drawing an image with a GC multiple draw... methods are calling each other for that operation. All those methods are refetching the handle via Image#win32_getHandle(int) with getZoom(). To support use cases where a method uses a different zoom to get a handle to draw the handle is now fetched in the top most methods and are passed to the other methods directly. --- .../win32/org/eclipse/swt/graphics/GC.java | 67 ++++++++++--------- 1 file changed, 35 insertions(+), 32 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/GC.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/GC.java index 42c527d985f..ddaa6da5964 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/GC.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/GC.java @@ -985,20 +985,20 @@ public void drawImage (Image image, int srcX, int srcY, int srcWidth, int srcHei if (image == null) SWT.error (SWT.ERROR_NULL_ARGUMENT); if (image.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT); - int deviceZoom = getZoom(); - Rectangle src = DPIUtil.scaleUp(drawable, new Rectangle(srcX, srcY, srcWidth, srcHeight), deviceZoom); - Rectangle dest = DPIUtil.scaleUp(drawable, new Rectangle(destX, destY, destWidth, destHeight), deviceZoom); - if (deviceZoom != 100) { + int imageZoom = getZoom(); + Rectangle src = DPIUtil.scaleUp(drawable, new Rectangle(srcX, srcY, srcWidth, srcHeight), imageZoom); + Rectangle dest = DPIUtil.scaleUp(drawable, new Rectangle(destX, destY, destWidth, destHeight), imageZoom); + if (imageZoom != 100) { /* * This is a HACK! Due to rounding errors at fractional scale factors, * the coordinates may be slightly off. The workaround is to restrict * coordinates to the allowed bounds. */ - Rectangle b = image.getBounds(deviceZoom); + Rectangle b = image.getBounds(imageZoom); int errX = src.x + src.width - b.width; int errY = src.y + src.height - b.height; if (errX != 0 || errY != 0) { - if (errX <= deviceZoom / 100 && errY <= deviceZoom / 100) { + if (errX <= imageZoom / 100 && errY <= imageZoom / 100) { src.intersect(b); } else { SWT.error (SWT.ERROR_INVALID_ARGUMENT); @@ -1009,12 +1009,14 @@ public void drawImage (Image image, int srcX, int srcY, int srcWidth, int srcHei } void drawImage(Image srcImage, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, boolean simple) { + int imageZoom = getZoom(); if (data.gdipGraphics != 0) { //TODO - cache bitmap - long [] gdipImage = srcImage.createGdipImage(getZoom()); + long [] gdipImage = srcImage.createGdipImage(imageZoom); long img = gdipImage[0]; int imgWidth = Gdip.Image_GetWidth(img); int imgHeight = Gdip.Image_GetHeight(img); + if (simple) { srcWidth = destWidth = imgWidth; srcHeight = destHeight = imgHeight; @@ -1065,17 +1067,18 @@ void drawImage(Image srcImage, int srcX, int srcY, int srcWidth, int srcHeight, } return; } + long imageHandle = Image.win32_getHandle(srcImage, imageZoom); switch (srcImage.type) { case SWT.BITMAP: - drawBitmap(srcImage, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple); + drawBitmap(srcImage, imageHandle, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple); break; case SWT.ICON: - drawIcon(srcImage, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple); + drawIcon(imageHandle, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple); break; } } -void drawIcon(Image srcImage, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, boolean simple) { +void drawIcon(long imageHandle, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, boolean simple) { int technology = OS.GetDeviceCaps(handle, OS.TECHNOLOGY); boolean drawIcon = true; @@ -1099,14 +1102,14 @@ void drawIcon(Image srcImage, int srcX, int srcY, int srcWidth, int srcHeight, i /* Simple case: no stretching, entire icon */ if (simple && technology != OS.DT_RASPRINTER && drawIcon) { if (offsetX != 0 || offsetY != 0) OS.SetWindowOrgEx(handle, 0, 0, null); - OS.DrawIconEx(handle, destX - offsetX, destY - offsetY, Image.win32_getHandle(srcImage, getZoom()), 0, 0, 0, 0, flags); + OS.DrawIconEx(handle, destX - offsetX, destY - offsetY, imageHandle, 0, 0, 0, 0, flags); if (offsetX != 0 || offsetY != 0) OS.SetWindowOrgEx(handle, offsetX, offsetY, null); return; } /* Get the icon info */ ICONINFO srcIconInfo = new ICONINFO(); - OS.GetIconInfo(Image.win32_getHandle(srcImage, getZoom()), srcIconInfo); + OS.GetIconInfo(imageHandle, srcIconInfo); /* Get the icon width and height */ long hBitmap = srcIconInfo.hbmColor; @@ -1128,11 +1131,11 @@ void drawIcon(Image srcImage, int srcX, int srcY, int srcWidth, int srcHeight, i srcWidth == destWidth && srcHeight == destHeight && srcWidth == iconWidth && srcHeight == iconHeight; if (!drawIcon) { - drawBitmapMask(srcImage, srcIconInfo.hbmColor, srcIconInfo.hbmMask, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple, iconWidth, iconHeight, false); + drawBitmapMask(srcIconInfo.hbmColor, srcIconInfo.hbmMask, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple, iconWidth, iconHeight, false); } else if (simple && technology != OS.DT_RASPRINTER) { /* Simple case: no stretching, entire icon */ if (offsetX != 0 || offsetY != 0) OS.SetWindowOrgEx(handle, 0, 0, null); - OS.DrawIconEx(handle, destX - offsetX, destY - offsetY, Image.win32_getHandle(srcImage, getZoom()), 0, 0, 0, 0, flags); + OS.DrawIconEx(handle, destX - offsetX, destY - offsetY, imageHandle, 0, 0, 0, 0, flags); if (offsetX != 0 || offsetY != 0) OS.SetWindowOrgEx(handle, offsetX, offsetY, null); } else { /* Create the icon info and HDC's */ @@ -1205,9 +1208,9 @@ void drawIcon(Image srcImage, int srcX, int srcY, int srcWidth, int srcHeight, i if (failed) SWT.error(SWT.ERROR_INVALID_ARGUMENT); } -void drawBitmap(Image srcImage, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, boolean simple) { +void drawBitmap(Image srcImage, long imageHandle, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, boolean simple) { BITMAP bm = new BITMAP(); - OS.GetObject(Image.win32_getHandle(srcImage, getZoom()), BITMAP.sizeof, bm); + OS.GetObject(imageHandle, BITMAP.sizeof, bm); int imgWidth = bm.bmWidth; int imgHeight = bm.bmHeight; if (simple) { @@ -1235,19 +1238,19 @@ void drawBitmap(Image srcImage, int srcX, int srcY, int srcWidth, int srcHeight, boolean isDib = bm.bmBits != 0; int depth = bm.bmPlanes * bm.bmBitsPixel; if (isDib && depth == 32) { - drawBitmapAlpha(srcImage, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple); + drawBitmapAlpha(imageHandle, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple); } else if (srcImage.transparentPixel != -1) { - drawBitmapTransparent(srcImage, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple, bm, imgWidth, imgHeight); + drawBitmapTransparent(srcImage, imageHandle, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple, bm, imgWidth, imgHeight); } else { - drawBitmapColor(srcImage, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple); + drawBitmapColor(imageHandle, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple); } if (mustRestore) { - long hOldBitmap = OS.SelectObject(memGC.handle, Image.win32_getHandle(srcImage, getZoom())); + long hOldBitmap = OS.SelectObject(memGC.handle, imageHandle); memGC.data.hNullBitmap = hOldBitmap; } } -void drawBitmapAlpha(Image srcImage, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, boolean simple) { +void drawBitmapAlpha(long imageHandle, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, boolean simple) { boolean alphaBlendSupport = true; boolean isPrinter = OS.GetDeviceCaps(handle, OS.TECHNOLOGY) == OS.DT_RASPRINTER; int sourceAlpha = -1; @@ -1255,7 +1258,7 @@ void drawBitmapAlpha(Image srcImage, int srcX, int srcY, int srcWidth, int srcHe int caps = OS.GetDeviceCaps(handle, OS.SHADEBLENDCAPS); if (caps != 0) { long srcHdc = OS.CreateCompatibleDC(handle); - long oldSrcBitmap = OS.SelectObject(srcHdc, Image.win32_getHandle(srcImage, getZoom())); + long oldSrcBitmap = OS.SelectObject(srcHdc, imageHandle); long memDib = Image.createDIB(srcWidth, srcHeight, 32); if (memDib == 0) SWT.error(SWT.ERROR_NO_HANDLES); long memHdc = OS.CreateCompatibleDC(handle); @@ -1282,7 +1285,7 @@ void drawBitmapAlpha(Image srcImage, int srcX, int srcY, int srcWidth, int srcHe if (sourceAlpha != -1) { if (sourceAlpha == 0) return; if (sourceAlpha == 255) { - drawBitmapColor(srcImage, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple); + drawBitmapColor(imageHandle, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple); return; } alphaBlendSupport = (caps & OS.SB_CONST_ALPHA) != 0; @@ -1296,7 +1299,7 @@ void drawBitmapAlpha(Image srcImage, int srcX, int srcY, int srcWidth, int srcHe BLENDFUNCTION blend = new BLENDFUNCTION(); blend.BlendOp = OS.AC_SRC_OVER; long srcHdc = OS.CreateCompatibleDC(handle); - long oldSrcBitmap = OS.SelectObject(srcHdc, Image.win32_getHandle(srcImage, getZoom())); + long oldSrcBitmap = OS.SelectObject(srcHdc, imageHandle); blend.SourceConstantAlpha = (byte)sourceAlpha; blend.AlphaFormat = OS.AC_SRC_ALPHA; OS.AlphaBlend(handle, destX, destY, destWidth, destHeight, srcHdc, srcX, srcY, srcWidth, srcHeight, blend); @@ -1329,7 +1332,7 @@ void drawBitmapAlpha(Image srcImage, int srcX, int srcY, int srcWidth, int srcHe /* Create resources */ long srcHdc = OS.CreateCompatibleDC(handle); - long oldSrcBitmap = OS.SelectObject(srcHdc, Image.win32_getHandle(srcImage, getZoom())); + long oldSrcBitmap = OS.SelectObject(srcHdc, imageHandle); long memHdc = OS.CreateCompatibleDC(handle); long memDib = Image.createDIB(Math.max(srcWidth, destWidth), Math.max(srcHeight, destHeight), 32); if (memDib == 0) SWT.error(SWT.ERROR_NO_HANDLES); @@ -1445,7 +1448,7 @@ void drawBitmapTransparentByClipping(long srcHdc, long maskHdc, int srcX, int sr OS.DeleteObject(rgn); } -void drawBitmapMask(Image srcImage, long srcColor, long srcMask, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, boolean simple, int imgWidth, int imgHeight, boolean offscreen) { +void drawBitmapMask(long srcColor, long srcMask, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, boolean simple, int imgWidth, int imgHeight, boolean offscreen) { int srcColorY = srcY; if (srcColor == 0) { srcColor = srcMask; @@ -1497,11 +1500,11 @@ void drawBitmapMask(Image srcImage, long srcColor, long srcMask, int srcX, int s OS.DeleteDC(srcHdc); } -void drawBitmapTransparent(Image srcImage, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, boolean simple, BITMAP bm, int imgWidth, int imgHeight) { +void drawBitmapTransparent(Image srcImage, long imageHandle, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, boolean simple, BITMAP bm, int imgWidth, int imgHeight) { /* Find the RGB values for the transparent pixel. */ boolean isDib = bm.bmBits != 0; - long hBitmap = Image.win32_getHandle(srcImage, getZoom()); + long hBitmap = imageHandle; long srcHdc = OS.CreateCompatibleDC(handle); long oldSrcBitmap = OS.SelectObject(srcHdc, hBitmap); byte[] originalColors = null; @@ -1546,7 +1549,7 @@ void drawBitmapTransparent(Image srcImage, int srcX, int srcY, int srcWidth, int bmiHeader.biBitCount = bm.bmBitsPixel; byte[] bmi = new byte[BITMAPINFOHEADER.sizeof + numColors * 4]; OS.MoveMemory(bmi, bmiHeader, BITMAPINFOHEADER.sizeof); - OS.GetDIBits(srcHdc, Image.win32_getHandle(srcImage, getZoom()), 0, 0, null, bmi, OS.DIB_RGB_COLORS); + OS.GetDIBits(srcHdc, imageHandle, 0, 0, null, bmi, OS.DIB_RGB_COLORS); int offset = BITMAPINFOHEADER.sizeof + 4 * srcImage.transparentPixel; transRed = bmi[offset + 2] & 0xFF; transGreen = bmi[offset + 1] & 0xFF; @@ -1619,13 +1622,13 @@ void drawBitmapTransparent(Image srcImage, int srcX, int srcY, int srcWidth, int OS.DeleteObject(maskBitmap); } OS.SelectObject(srcHdc, oldSrcBitmap); - if (hBitmap != Image.win32_getHandle(srcImage, getZoom())) OS.DeleteObject(hBitmap); + if (hBitmap != imageHandle) OS.DeleteObject(hBitmap); OS.DeleteDC(srcHdc); } -void drawBitmapColor(Image srcImage, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, boolean simple) { +void drawBitmapColor(long imageHandle, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, boolean simple) { long srcHdc = OS.CreateCompatibleDC(handle); - long oldSrcBitmap = OS.SelectObject(srcHdc, Image.win32_getHandle(srcImage, getZoom())); + long oldSrcBitmap = OS.SelectObject(srcHdc, imageHandle); int dwRop = OS.GetROP2(handle) == OS.R2_XORPEN ? OS.SRCINVERT : OS.SRCCOPY; if (!simple && (srcWidth != destWidth || srcHeight != destHeight)) { int mode = OS.SetStretchBltMode(handle, OS.COLORONCOLOR); From 187082a9a8fe4d376c8c2cedb660472d7abc7bf1 Mon Sep 17 00:00:00 2001 From: Aleksandar Kurtakov Date: Thu, 8 May 2025 16:48:25 +0300 Subject: [PATCH 075/119] Remove dummy assert message in Combo tests These only look awkward in failures. This is also prep step for whenever suite is to be migrated to JUnit 5. --- .../Test_org_eclipse_swt_widgets_Combo.java | 90 +++++++++---------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Combo.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Combo.java index a9fe25c74ec..f40ab7f586a 100644 --- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Combo.java +++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Combo.java @@ -63,7 +63,7 @@ public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() { int[] cases = {SWT.DROP_DOWN, SWT.SIMPLE}; for (int i = 0; i < cases.length; i++) { combo = new Combo(shell, cases[i]); - assertEquals(":a:" + String.valueOf(i), cases[i], (combo.getStyle() & cases[i])); + assertEquals(String.valueOf(i), cases[i], (combo.getStyle() & cases[i])); } } @@ -73,11 +73,11 @@ public void test_addLjava_lang_String() { combo.add(null)); combo.add(""); - assertArrayEquals(":a:", new String[]{""}, combo.getItems()); + assertArrayEquals(new String[]{""}, combo.getItems()); combo.add(""); - assertArrayEquals(":b:", new String[]{"", ""}, combo.getItems()); + assertArrayEquals(new String[]{"", ""}, combo.getItems()); combo.add("fred"); - assertArrayEquals(":c:", new String[]{"", "", "fred"}, combo.getItems()); + assertArrayEquals(new String[]{"", "", "fred"}, combo.getItems()); } @@ -179,7 +179,7 @@ public void widgetDefaultSelected(SelectionEvent event) { assertThrows(IllegalArgumentException.class, () -> combo.addSelectionListener(null)); combo.addSelectionListener(listener); combo.select(0); - assertFalse(":a:", listenerCalled); + assertFalse(listenerCalled); combo.removeSelectionListener(listener); assertThrows(IllegalArgumentException.class, () -> combo.removeSelectionListener(null)); } @@ -191,7 +191,7 @@ public void test_addSelectionListenerWidgetSelectedAdapterLorg_eclipse_swt_event combo.addSelectionListener(listener); combo.select(0); - assertFalse(":a:", listenerCalled); + assertFalse(listenerCalled); combo.removeSelectionListener(listener); listenerCalled = false; @@ -205,14 +205,14 @@ public void test_clearSelection() { for (int i = 0; i < number; i++) combo.add("fred" + i); combo.clearSelection(); - assertEquals(":a:",new Point(0, 0), combo.getSelection()); + assertEquals(new Point(0, 0), combo.getSelection()); combo.setSelection(new Point(0, 5)); - assertEquals(":b:",new Point(0, 0), combo.getSelection()); //nothing is selected + assertEquals(new Point(0, 0), combo.getSelection()); //nothing is selected combo.setText("some text"); combo.setSelection(new Point(0, 5)); - assertEquals(":c:",new Point(0, 5), combo.getSelection()); + assertEquals(new Point(0, 5), combo.getSelection()); combo.clearSelection(); - assertEquals(":d:", combo.getSelection().x, combo.getSelection().y); + assertEquals(combo.getSelection().x, combo.getSelection().y); } @Override @@ -236,7 +236,7 @@ public void test_copy() { combo.copy(); combo.setSelection(new Point(0,0)); combo.paste(); - assertEquals(":a:","23123456", combo.getText()); + assertEquals("23123456", combo.getText()); } @Test @@ -252,7 +252,7 @@ public void test_cut() { combo.setText("123456"); combo.setSelection(new Point(1,3)); combo.cut(); - assertEquals(":a:","1456", combo.getText()); + assertEquals("1456", combo.getText()); } @Test @@ -263,7 +263,7 @@ public void test_deselectAll() { combo.select(0); combo.select(2); combo.deselectAll(); - assertEquals(":a:",-1, combo.getSelectionIndex()); + assertEquals(-1, combo.getSelectionIndex()); } @Test public void test_deselectI() { @@ -282,9 +282,9 @@ public void test_deselectI() { combo.add("fred" + i); for (int i = 0; i < number; i++) { combo.select(i); - assertEquals(":a:" + i,i, combo.getSelectionIndex()); + assertEquals("index "+i,i, combo.getSelectionIndex()); combo.deselect(i); - assertEquals(":b:" + i,-1, combo.getSelectionIndex()); + assertEquals("index "+i,-1, combo.getSelectionIndex()); } } @@ -298,17 +298,17 @@ public void test_getChildren() { public void test_getItemCount() { int number = 10; for (int i = 0; i < number; i++) { - assertEquals(":a:" + i,i, combo.getItemCount()); + assertEquals("index "+i,i, combo.getItemCount()); combo.add("fred" + i); } - assertEquals(":aa:", number, combo.getItemCount()); + assertEquals(number, combo.getItemCount()); for (int i = 0; i < number; i++) { - assertEquals(":b:" + i, number-i, combo.getItemCount()); + assertEquals("index "+i, number-i, combo.getItemCount()); combo.remove(0); } combo.removeAll(); - assertEquals(":c:", 0, combo.getItemCount()); + assertEquals(0, combo.getItemCount()); } @Test @@ -335,10 +335,10 @@ public void test_getItems() { combo.add("2"); combo.add("3"); String[] items = combo.getItems(); - assertEquals(":a:", 3, items.length); - assertEquals(":a:", "1", items[0]); - assertEquals(":a:", "2", items[1]); - assertEquals(":a:", "3", items[2]); + assertEquals(3, items.length); + assertEquals("1", items[0]); + assertEquals("2", items[1]); + assertEquals("3", items[2]); } @Test @@ -351,7 +351,7 @@ public void test_getSelection() { combo.setText("123456"); combo.setSelection(new Point(1,3)); combo.getSelection(); - assertEquals(":a:", new Point(1,3), combo.getSelection()); + assertEquals(new Point(1,3), combo.getSelection()); } @Test @@ -403,7 +403,7 @@ public void test_getText() { String[] cases = {"", "fred", "fredfred"}; for (int i = 0; i < cases.length; i++) { combo.setText(cases[i]); - assertEquals(":a:" + String.valueOf(i), cases[i], combo.getText()); + assertEquals(String.valueOf(i), cases[i], combo.getText()); } } @@ -415,7 +415,7 @@ public void test_getTextHeight() { @Test public void test_getTextLimit() { combo.setTextLimit(3); - assertEquals(":a:", 3, combo.getTextLimit()); + assertEquals(3, combo.getTextLimit()); } @Test @@ -472,18 +472,18 @@ public void test_indexOfLjava_lang_StringI() { for (int i = 0; i < number; i++) combo.add("fred" + i); for (int i = 0; i < number; i++) - assertEquals(":a:" + i, i, combo.indexOf("fred" + i, 0)); + assertEquals("index " + i, i, combo.indexOf("fred" + i, 0)); for (int i = 0; i < number; i++) - assertEquals(":b:" + i, -1, combo.indexOf("fred" + i, i + 1)); + assertEquals("index " + i, -1, combo.indexOf("fred" + i, i + 1)); for (int i = 0; i < number; i++) combo.add("fred" + i); for (int i = 0; i < 3; i++) - assertEquals(":a:" + i, i, combo.indexOf("fred" + i, 0)); + assertEquals("index " + i, i, combo.indexOf("fred" + i, 0)); for (int i = 3; i < number; i++) - assertEquals(":b:" + i, i, combo.indexOf("fred" + i, 3)); + assertEquals("index " + i, i, combo.indexOf("fred" + i, 3)); for (int i = 0; i < number; i++) - assertEquals(":b:" + i, i, combo.indexOf("fred" + i, i)); + assertEquals("index " + i, i, combo.indexOf("fred" + i, i)); } @Test @@ -499,9 +499,9 @@ public void test_paste() { combo.setText("123456"); combo.setSelection(new Point(1,3)); combo.cut(); - assertEquals(":a:", "1456", combo.getText()); + assertEquals("1456", combo.getText()); combo.paste(); - assertEquals(":a:", "123456", combo.getText()); + assertEquals("123456", combo.getText()); } @Test @@ -509,7 +509,7 @@ public void test_removeAll() { combo.add("1"); combo.add("2"); combo.removeAll(); - assertEquals(":a:", 0, combo.getItems().length); + assertEquals(0, combo.getItems().length); } @Test @@ -671,7 +671,7 @@ public void test_selectI() { combo.add("456"); combo.add("789"); combo.select(1); - assertEquals(":a:", 1, combo.getSelectionIndex()); + assertEquals(1, combo.getSelectionIndex()); // indices out of range are ignored combo.select(10); @@ -857,7 +857,7 @@ public void test_setItemILjava_lang_String() { combo.add("fred"); for (int i = 0; i < number; i++) combo.setItem(i, "fred" + i); - assertArrayEquals(":a:", new String[]{"fred0", "fred1", "fred2", "fred3", "fred4"}, combo.getItems()); + assertArrayEquals(new String[]{"fred0", "fred1", "fred2", "fred3", "fred4"}, combo.getItems()); } @Test @@ -869,17 +869,17 @@ public void test_setItemILjava_lang_String() { for (int i = 0 ; i< items.length; i++){ combo.setItems(items[i]); - assertArrayEquals(":a:" + i, items[i], combo.getItems());} + assertArrayEquals("index" + i, items[i], combo.getItems());} } @Test public void test_setOrientationI() { combo.setOrientation(SWT.RIGHT_TO_LEFT); if ((combo.getStyle() & SWT.MIRRORED) != 0) { - assertEquals(":a:", SWT.RIGHT_TO_LEFT, combo.getOrientation()); + assertEquals(SWT.RIGHT_TO_LEFT, combo.getOrientation()); } combo.setOrientation(SWT.LEFT_TO_RIGHT); - assertEquals(":b:", SWT.LEFT_TO_RIGHT, combo.getOrientation()); + assertEquals(SWT.LEFT_TO_RIGHT, combo.getOrientation()); } @Test @@ -891,10 +891,10 @@ public void test_setSelectionLorg_eclipse_swt_graphics_Point() { for (int i = 0; i < number; i++) combo.add("fred" + i); combo.setSelection(new Point(0, 5)); - assertEquals(":a:", new Point(0, 0), combo.getSelection()); + assertEquals(new Point(0, 0), combo.getSelection()); combo.setText("some text"); combo.setSelection(new Point(0, 5)); - assertEquals(":b:", new Point(0, 5), combo.getSelection()); + assertEquals(new Point(0, 5), combo.getSelection()); } @Test @@ -903,7 +903,7 @@ public void test_setTextLimitI() { combo.setTextLimit(0)); combo.setTextLimit(3); - assertEquals(":a:", 3, combo.getTextLimit()); + assertEquals(3, combo.getTextLimit()); } @Test @@ -914,21 +914,21 @@ public void test_setTextLjava_lang_String() { String[] cases = {"", "fred", "fred0"}; for (int i = 0; i < cases.length; i++) { combo.setText(cases[i]); - assertEquals(":a:" + i, cases[i], combo.getText()); + assertEquals("index" + i, cases[i], combo.getText()); } for (int i = 0; i < 5; i++) { combo.add("fred"); } for (int i = 0; i < cases.length; i++) { combo.setText(cases[i]); - assertEquals(":b:" + i,cases[i], combo.getText()); + assertEquals("index" + i,cases[i], combo.getText()); } for (int i = 0; i < 5; i++) { combo.add("fred" + i); } for (int i = 0; i < cases.length; i++) { combo.setText(cases[i]); - assertEquals(":c:" + i, cases[i], combo.getText()); + assertEquals("index" + i, cases[i], combo.getText()); } } From 74bcab3fbcb916149dafc14e80b6701155d3a71b Mon Sep 17 00:00:00 2001 From: Federico Jeanne Date: Wed, 7 May 2025 21:53:33 +0200 Subject: [PATCH 076/119] [Gtk4] Use gtk_widget_set_visible to replace gtk_widget_hide/show #228 Add helper methods that redirect to GTK/GTK3 in Widget for convenience. Contributes to https://github.com/eclipse-platform/eclipse.platform.swt/issues/228 --- .../Eclipse SWT PI/gtk/library/gtk3.c | 23 +++++++++++++--- .../Eclipse SWT PI/gtk/library/gtk3_stats.h | 5 ++-- .../Eclipse SWT PI/gtk/library/gtk4.c | 3 --- .../Eclipse SWT PI/gtk/library/gtk4_stats.h | 3 --- .../Eclipse SWT PI/gtk/library/os.c | 20 -------------- .../Eclipse SWT PI/gtk/library/os_stats.h | 2 -- .../gtk/org/eclipse/swt/internal/gtk/GTK.java | 6 ++--- .../org/eclipse/swt/internal/gtk3/GTK3.java | 4 +++ .../gtk/org/eclipse/swt/browser/WebKit.java | 9 +++++-- .../eclipse/swt/internal/SyncDialogUtil.java | 7 ++++- .../gtk/org/eclipse/swt/widgets/Button.java | 22 ++++++++-------- .../org/eclipse/swt/widgets/Composite.java | 4 +-- .../gtk/org/eclipse/swt/widgets/Control.java | 16 ++++++------ .../gtk/org/eclipse/swt/widgets/DateTime.java | 8 +++--- .../eclipse/swt/widgets/DirectoryDialog.java | 4 +-- .../gtk/org/eclipse/swt/widgets/Display.java | 6 ++--- .../org/eclipse/swt/widgets/ExpandItem.java | 18 ++++++------- .../gtk/org/eclipse/swt/widgets/Group.java | 4 +-- .../gtk/org/eclipse/swt/widgets/Label.java | 18 ++++++------- .../gtk/org/eclipse/swt/widgets/Menu.java | 2 +- .../gtk/org/eclipse/swt/widgets/MenuItem.java | 12 ++++----- .../org/eclipse/swt/widgets/Scrollable.java | 2 +- .../gtk/org/eclipse/swt/widgets/Shell.java | 26 +++++++++---------- .../org/eclipse/swt/widgets/TabFolder.java | 8 +++--- .../gtk/org/eclipse/swt/widgets/TabItem.java | 8 +++--- .../gtk/org/eclipse/swt/widgets/Table.java | 10 +++---- .../org/eclipse/swt/widgets/TableColumn.java | 12 ++++----- .../gtk/org/eclipse/swt/widgets/ToolItem.java | 16 ++++++------ .../gtk/org/eclipse/swt/widgets/ToolTip.java | 6 ++--- .../gtk/org/eclipse/swt/widgets/Tracker.java | 2 +- .../gtk/org/eclipse/swt/widgets/Tree.java | 6 ++--- .../org/eclipse/swt/widgets/TreeColumn.java | 8 +++--- .../gtk/org/eclipse/swt/widgets/Widget.java | 10 +++++++ 33 files changed, 160 insertions(+), 150 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/gtk3.c b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/gtk3.c index bf5b9cb7af1..35e3cc4aa9a 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/gtk3.c +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/gtk3.c @@ -7,9 +7,6 @@ * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * IBM Corporation - initial API and implementation *******************************************************************************/ /* Note: This file was auto-generated by org.eclipse.swt.tools.internal.JNIGenerator */ @@ -2275,6 +2272,16 @@ JNIEXPORT jlong JNICALL GTK3_NATIVE(gtk_1widget_1get_1window) } #endif +#ifndef NO_gtk_1widget_1hide +JNIEXPORT void JNICALL GTK3_NATIVE(gtk_1widget_1hide) + (JNIEnv *env, jclass that, jlong arg0) +{ + GTK3_NATIVE_ENTER(env, that, gtk_1widget_1hide_FUNC); + gtk_widget_hide((GtkWidget *)arg0); + GTK3_NATIVE_EXIT(env, that, gtk_1widget_1hide_FUNC); +} +#endif + #ifndef NO_gtk_1widget_1input_1shape_1combine_1region JNIEXPORT void JNICALL GTK3_NATIVE(gtk_1widget_1input_1shape_1combine_1region) (JNIEnv *env, jclass that, jlong arg0, jlong arg1) @@ -2408,6 +2415,16 @@ JNIEXPORT void JNICALL GTK3_NATIVE(gtk_1widget_1shape_1combine_1region) } #endif +#ifndef NO_gtk_1widget_1show +JNIEXPORT void JNICALL GTK3_NATIVE(gtk_1widget_1show) + (JNIEnv *env, jclass that, jlong arg0) +{ + GTK3_NATIVE_ENTER(env, that, gtk_1widget_1show_FUNC); + gtk_widget_show((GtkWidget *)arg0); + GTK3_NATIVE_EXIT(env, that, gtk_1widget_1show_FUNC); +} +#endif + #ifndef NO_gtk_1widget_1size_1allocate JNIEXPORT void JNICALL GTK3_NATIVE(gtk_1widget_1size_1allocate) (JNIEnv *env, jclass that, jlong arg0, jobject arg1) diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/gtk3_stats.h b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/gtk3_stats.h index 9eed9c0cd17..217b2e2e7a8 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/gtk3_stats.h +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/gtk3_stats.h @@ -7,9 +7,6 @@ * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * IBM Corporation - initial API and implementation *******************************************************************************/ /* Note: This file was auto-generated by org.eclipse.swt.tools.internal.JNIGenerator */ @@ -209,6 +206,7 @@ typedef enum { gtk_1widget_1get_1screen_FUNC, gtk_1widget_1get_1toplevel_FUNC, gtk_1widget_1get_1window_FUNC, + gtk_1widget_1hide_FUNC, gtk_1widget_1input_1shape_1combine_1region_FUNC, gtk_1widget_1override_1font_FUNC, gtk_1widget_1remove_1accelerator_FUNC, @@ -221,6 +219,7 @@ typedef enum { gtk_1widget_1set_1parent_1window_FUNC, gtk_1widget_1set_1redraw_1on_1allocate_FUNC, gtk_1widget_1shape_1combine_1region_FUNC, + gtk_1widget_1show_FUNC, gtk_1widget_1size_1allocate_FUNC, gtk_1widget_1style_1get__J_3B_3IJ_FUNC, gtk_1widget_1style_1get__J_3B_3JJ_FUNC, diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/gtk4.c b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/gtk4.c index f7f7f26124a..155bd6d56a3 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/gtk4.c +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/gtk4.c @@ -7,9 +7,6 @@ * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * IBM Corporation - initial API and implementation *******************************************************************************/ /* Note: This file was auto-generated by org.eclipse.swt.tools.internal.JNIGenerator */ diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/gtk4_stats.h b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/gtk4_stats.h index 7db184262b4..7990914394c 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/gtk4_stats.h +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/gtk4_stats.h @@ -7,9 +7,6 @@ * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * IBM Corporation - initial API and implementation *******************************************************************************/ /* Note: This file was auto-generated by org.eclipse.swt.tools.internal.JNIGenerator */ diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c index 262bfbaf443..bc2e9a63b03 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c @@ -9352,16 +9352,6 @@ JNIEXPORT jboolean JNICALL GTK_NATIVE(gtk_1widget_1has_1focus) } #endif -#ifndef NO_gtk_1widget_1hide -JNIEXPORT void JNICALL GTK_NATIVE(gtk_1widget_1hide) - (JNIEnv *env, jclass that, jlong arg0) -{ - GTK_NATIVE_ENTER(env, that, gtk_1widget_1hide_FUNC); - gtk_widget_hide((GtkWidget *)arg0); - GTK_NATIVE_EXIT(env, that, gtk_1widget_1hide_FUNC); -} -#endif - #ifndef NO_gtk_1widget_1insert_1action_1group JNIEXPORT void JNICALL GTK_NATIVE(gtk_1widget_1insert_1action_1group) (JNIEnv *env, jclass that, jlong arg0, jbyteArray arg1, jlong arg2) @@ -9680,16 +9670,6 @@ JNIEXPORT void JNICALL GTK_NATIVE(gtk_1widget_1set_1visible) } #endif -#ifndef NO_gtk_1widget_1show -JNIEXPORT void JNICALL GTK_NATIVE(gtk_1widget_1show) - (JNIEnv *env, jclass that, jlong arg0) -{ - GTK_NATIVE_ENTER(env, that, gtk_1widget_1show_FUNC); - gtk_widget_show((GtkWidget *)arg0); - GTK_NATIVE_EXIT(env, that, gtk_1widget_1show_FUNC); -} -#endif - #ifndef NO_gtk_1widget_1unparent JNIEXPORT void JNICALL GTK_NATIVE(gtk_1widget_1unparent) (JNIEnv *env, jclass that, jlong arg0) diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h index c483797d324..8d57a7eedcb 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h @@ -748,7 +748,6 @@ typedef enum { gtk_1widget_1grab_1focus_FUNC, gtk_1widget_1has_1default_FUNC, gtk_1widget_1has_1focus_FUNC, - gtk_1widget_1hide_FUNC, gtk_1widget_1insert_1action_1group_FUNC, gtk_1widget_1is_1focus_FUNC, gtk_1widget_1mnemonic_1activate_FUNC, @@ -774,7 +773,6 @@ typedef enum { gtk_1widget_1set_1valign_FUNC, gtk_1widget_1set_1vexpand_FUNC, gtk_1widget_1set_1visible_FUNC, - gtk_1widget_1show_FUNC, gtk_1widget_1unparent_FUNC, gtk_1window_1fullscreen_FUNC, gtk_1window_1get_1default_1size_FUNC, diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/GTK.java b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/GTK.java index a7793a09f6a..cffb588f19c 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/GTK.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/GTK.java @@ -2340,8 +2340,7 @@ public class GTK extends OS { public static final native void gtk_widget_grab_focus(long widget); /** @param widget cast=(GtkWidget *) */ public static final native boolean gtk_widget_has_focus(long widget); - /** @param widget cast=(GtkWidget *) */ - public static final native void gtk_widget_hide(long widget); + /** @param widget cast=(GtkWidget *) */ public static final native boolean gtk_widget_is_focus(long widget); /** @param widget cast=(GtkWidget *) */ @@ -2399,8 +2398,7 @@ public class GTK extends OS { * @param height cast=(gint) */ public static final native void gtk_widget_set_size_request(long widget, int width, int height); - /** @param widget cast=(GtkWidget *) */ - public static final native void gtk_widget_show(long widget); + /** @param widget cast=(GtkWidget *) */ public static final native boolean gtk_widget_activate(long widget); /** @param widget cast=(GtkWidget *) */ diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk3/GTK3.java b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk3/GTK3.java index 5e5c9e278aa..91921218c10 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk3/GTK3.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk3/GTK3.java @@ -1089,5 +1089,9 @@ public class GTK3 { public static final native int GdkEventWindowState_sizeof(); public static final native int GdkGeometry_sizeof(); public static final native int GdkWindowAttr_sizeof(); + /** @param widget cast=(GtkWidget *) */ + public static final native void gtk_widget_show(long widget); + /** @param widget cast=(GtkWidget *) */ + public static final native void gtk_widget_hide(long widget); } diff --git a/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java b/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java index c6f5025470b..5b03fc50f40 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java +++ b/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java @@ -709,8 +709,13 @@ public void create (Composite parent, int style) { OS.g_signal_connect (WebKitGTK.webkit_web_context_get_default(), WebKitGTK.download_started, Proc3.getAddress (), DOWNLOAD_STARTED); } - GTK.gtk_widget_show (webView); - GTK.gtk_widget_show (browser.handle); + if (GTK.GTK4) { + GTK.gtk_widget_set_visible(webView, true); + GTK.gtk_widget_set_visible(browser.handle, true); + } else { + GTK3.gtk_widget_show(webView); + GTK3.gtk_widget_show(browser.handle); + } // Webview 'title' property OS.g_signal_connect (webView, WebKitGTK.notify_title, Proc3.getAddress (), NOTIFY_TITLE); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/internal/SyncDialogUtil.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/internal/SyncDialogUtil.java index bb69ea849e5..19911691033 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/internal/SyncDialogUtil.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/internal/SyncDialogUtil.java @@ -17,6 +17,7 @@ import java.util.function.*; import org.eclipse.swt.internal.gtk.*; +import org.eclipse.swt.internal.gtk3.*; import org.eclipse.swt.widgets.*; /** @@ -76,7 +77,11 @@ static public int run(Display display, long handle, boolean isNativeDialog) { if (isNativeDialog) { GTK.gtk_native_dialog_show(handle); } else { - GTK.gtk_widget_show(handle); + if (GTK.GTK4) { + GTK.gtk_widget_set_visible(handle, true); + } else { + GTK3.gtk_widget_show(handle); + } } while (!display.isDisposed()) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Button.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Button.java index 983ea961e0a..bfe1d77024c 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Button.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Button.java @@ -1295,28 +1295,28 @@ public void setText (String string) { private void updateWidgetsVisibility() { if (text.length() == 0 && image == null) { - GTK.gtk_widget_hide (boxHandle); - GTK.gtk_widget_hide (labelHandle); - GTK.gtk_widget_hide (imageHandle); + gtk_widget_hide (boxHandle); + gtk_widget_hide (labelHandle); + gtk_widget_hide (imageHandle); } else { - GTK.gtk_widget_show (boxHandle); + gtk_widget_show (boxHandle); if (text.length() == 0) - GTK.gtk_widget_hide (labelHandle); + gtk_widget_hide (labelHandle); else - GTK.gtk_widget_show (labelHandle); + gtk_widget_show (labelHandle); if (image == null) - GTK.gtk_widget_hide (imageHandle); + gtk_widget_hide (imageHandle); else - GTK.gtk_widget_show (imageHandle); + gtk_widget_show (imageHandle); } } @Override void showWidget () { super.showWidget (); - if (boxHandle != 0 && ((text != null && text.length() != 0) || image != null)) GTK.gtk_widget_show (boxHandle); - if (labelHandle != 0 && text != null && text.length() != 0) GTK.gtk_widget_show (labelHandle); - if (arrowHandle != 0) GTK.gtk_widget_show (arrowHandle); + if (boxHandle != 0 && ((text != null && text.length() != 0) || image != null)) gtk_widget_show (boxHandle); + if (labelHandle != 0 && text != null && text.length() != 0) gtk_widget_show (labelHandle); + if (arrowHandle != 0) gtk_widget_show (arrowHandle); } @Override diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java index 10dddc457e0..6a64f0b58e0 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java @@ -1660,7 +1660,7 @@ int setBounds (int x, int y, int width, int height, boolean move, boolean resize if (fixedHandle != 0 && handle != 0 && getVisible() && !GTK.gtk_widget_get_visible(topHandle) //if SWT State is not HIDDEN, but widget is hidden on GTK side. && topHandle == fixedHandle && width > 0 && height > 0 && resize) { - GTK.gtk_widget_show(topHandle); + gtk_widget_show(topHandle); } int result = super.setBounds (x, y, width, height, move, resize); @@ -1823,7 +1823,7 @@ public void setTabList (Control [] tabList) { void showWidget () { super.showWidget (); if (socketHandle != 0) { - GTK.gtk_widget_show (socketHandle); + gtk_widget_show (socketHandle); embeddedHandle = GTK.gtk_socket_get_id (socketHandle); } if (scrolledHandle == 0) fixStyle (handle); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java index 64f4ec59c6d..c7e87f7eeac 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java @@ -1145,10 +1145,10 @@ int setBounds (int x, int y, int width, int height, boolean move, boolean resize */ if (!GTK.gtk_widget_get_visible(topHandle)) { Control focusControl = display.getFocusControl(); - GTK.gtk_widget_show(topHandle); + gtk_widget_show(topHandle); gtk_widget_get_preferred_size (topHandle, requisition); gtk_widget_size_allocate(topHandle, allocation, -1); - GTK.gtk_widget_hide(topHandle); + gtk_widget_hide(topHandle); /* Bug 540002: Showing and hiding widget causes original focused control to loose focus, * Reset focus to original focused control after dealing with allocation. */ @@ -1180,7 +1180,7 @@ int setBounds (int x, int y, int width, int height, boolean move, boolean resize } } - GTK.gtk_widget_hide(topHandle); + gtk_widget_hide(topHandle); } else { if ((state & HIDDEN) == 0) { if (!GTK.GTK4) { @@ -1189,7 +1189,7 @@ int setBounds (int x, int y, int width, int height, boolean move, boolean resize } } - GTK.gtk_widget_show(topHandle); + gtk_widget_show(topHandle); } } @@ -6126,7 +6126,7 @@ public void setVisible (boolean visible) { if (!GTK.GTK4) { if (enableWindow != 0) GDK.gdk_window_show_unraised(enableWindow); } - GTK.gtk_widget_show (topHandle); + gtk_widget_show (topHandle); } } else { /* @@ -6151,7 +6151,7 @@ public void setVisible (boolean visible) { if (isDisposed ()) return; GTK.gtk_widget_set_can_focus (topHandle, true); } - GTK.gtk_widget_hide (topHandle); + gtk_widget_hide (topHandle); if (isDisposed ()) return; if (!GTK.GTK4) { if (enableWindow != 0) GDK.gdk_window_hide(enableWindow); @@ -6338,9 +6338,9 @@ void showWidget () { } else { GTK3.gtk_container_add(parentHandle, topHandle); } - if (handle != 0 && handle != topHandle) GTK.gtk_widget_show (handle); + if (handle != 0 && handle != topHandle) gtk_widget_show (handle); if ((state & (ZERO_WIDTH | ZERO_HEIGHT)) == 0) { - if (fixedHandle != 0) GTK.gtk_widget_show (fixedHandle); + if (fixedHandle != 0) gtk_widget_show (fixedHandle); } if (fixedHandle != 0) fixStyle (fixedHandle); } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java index 090a33e9d55..cb9289111e0 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java @@ -434,7 +434,7 @@ private void createHandleForCalendar() { flags |= GTK.GTK_CALENDAR_SHOW_WEEK_NUMBERS; } GTK3.gtk_calendar_set_display_options(handle, flags); - GTK.gtk_widget_show(handle); + gtk_widget_show(handle); } } @@ -457,8 +457,8 @@ private void createHandleForDateWithDropDown () { GTK3.gtk_container_add(fixedHandle, handle); GTK3.gtk_container_add(handle, textEntryHandle); - GTK.gtk_widget_show(containerHandle); - GTK.gtk_widget_show(textEntryHandle); + gtk_widget_show(containerHandle); + gtk_widget_show(textEntryHandle); // In GTK 3 font description is inherited from parent widget which is not how SWT has always worked, @@ -2326,7 +2326,7 @@ void selectAll () { void hideDateTime () { if (isDate () || isTime ()){ - GTK.gtk_widget_hide (fixedHandle); + gtk_widget_hide (fixedHandle); } } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DirectoryDialog.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DirectoryDialog.java index 5d135c46e8b..5bbf30ec8d8 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DirectoryDialog.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DirectoryDialog.java @@ -275,7 +275,7 @@ public long await(long result) { } } } - + Optional result = Optional.empty(); if (response == GTK.GTK_RESPONSE_ACCEPT) { result = Optional.ofNullable(selectedPath); @@ -306,7 +306,7 @@ void GTK3setNativeDialogMessage(long handle, String message) { if (label == 0) error(SWT.ERROR_NO_HANDLES); GTK3.gtk_container_add(box, label); - GTK.gtk_widget_show(label); + GTK3.gtk_widget_show(label); GTK3.gtk_label_set_line_wrap(label, true); GTK.gtk_box_set_homogeneous(box, false); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java index 84bd0177754..dfc3d563a75 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java @@ -5556,7 +5556,7 @@ void showIMWindow (Control control) { GTK4.gtk_window_set_child(preeditWindow, preeditLabel); } else { GTK3.gtk_container_add (preeditWindow, preeditLabel); - GTK.gtk_widget_show (preeditLabel); + GTK3.gtk_widget_show (preeditLabel); } } long [] preeditString = new long [1]; @@ -5578,9 +5578,9 @@ void showIMWindow (Control control) { GtkRequisition requisition = new GtkRequisition (); GTK.gtk_widget_get_preferred_size (preeditLabel, requisition, null); GTK3.gtk_window_resize (preeditWindow, requisition.width, requisition.height); - GTK.gtk_widget_show (preeditWindow); + GTK3.gtk_widget_show (preeditWindow); } else { - GTK.gtk_widget_hide (preeditWindow); + GTK3.gtk_widget_hide (preeditWindow); } if (preeditString [0] != 0) OS.g_free (preeditString [0]); if (pangoAttrs [0] != 0) OS.pango_attr_list_unref (pangoAttrs [0]); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandItem.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandItem.java index 72c1b76c451..6bca156549b 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandItem.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandItem.java @@ -409,7 +409,7 @@ void resizeControl () { * to be zero, and the widget is never shown during a layout operation, similar to * Bug 487757. The fix is to show the control before setting any bounds. */ - if (visible) GTK.gtk_widget_show(control.topHandle ()); + if (visible) gtk_widget_show(control.topHandle ()); control.setBounds (x, y, width, Math.max (0, height), true, true); control.setVisible (visible); @@ -522,16 +522,16 @@ public void setImage (Image image) { } else { GTK3.gtk_image_set_from_surface(imageHandle, image.surface); } - if (text.length () == 0) GTK.gtk_widget_hide (labelHandle); - GTK.gtk_widget_show(imageHandle); + if (text.length () == 0) gtk_widget_hide (labelHandle); + gtk_widget_show(imageHandle); } else { if (GTK.GTK4) { GTK4.gtk_picture_set_paintable(imageHandle, 0); } else { GTK3.gtk_image_set_from_surface(imageHandle, 0); } - GTK.gtk_widget_show(labelHandle); - GTK.gtk_widget_hide(imageHandle); + gtk_widget_show(labelHandle); + gtk_widget_hide(imageHandle); } } @@ -557,12 +557,12 @@ void showWidget (int index) { GTK4.gtk_box_append(parent.handle, handle); gtk_box_set_child_packing (parent.handle, handle, false, false, 0, GTK.GTK_PACK_START); } else { - GTK.gtk_widget_show (handle); - GTK.gtk_widget_show (clientHandle); + gtk_widget_show (handle); + gtk_widget_show (clientHandle); if (labelHandle != 0) - GTK.gtk_widget_show (labelHandle); + gtk_widget_show (labelHandle); if (boxHandle != 0) - GTK.gtk_widget_show (boxHandle); + gtk_widget_show (boxHandle); GTK3.gtk_container_add (parent.handle, handle); gtk_box_set_child_packing (parent.handle, handle, false, false, 0, GTK.GTK_PACK_START); } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Group.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Group.java index 7e20a4986a0..f963ffc1f63 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Group.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Group.java @@ -401,8 +401,8 @@ public void setText (String string) { @Override void showWidget () { super.showWidget (); - if (clientHandle != 0) GTK.gtk_widget_show (clientHandle); - if (labelHandle != 0) GTK.gtk_widget_show (labelHandle); + if (clientHandle != 0) gtk_widget_show (clientHandle); + if (labelHandle != 0) gtk_widget_show (labelHandle); } @Override diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Label.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Label.java index ed2eb59080f..8a8d414436b 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Label.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Label.java @@ -654,16 +654,16 @@ public void setImage (Image image) { } else { GTK3.gtk_image_set_from_surface(imageHandle, image.surface); } - GTK.gtk_widget_hide (labelHandle); - GTK.gtk_widget_show (imageHandle); + gtk_widget_hide (labelHandle); + gtk_widget_show (imageHandle); } else { if (GTK.GTK4) { GTK4.gtk_picture_set_paintable(imageHandle, 0); } else { GTK3.gtk_image_set_from_surface(imageHandle, 0); } - GTK.gtk_widget_show (labelHandle); - GTK.gtk_widget_hide (imageHandle); + gtk_widget_show (labelHandle); + gtk_widget_hide (imageHandle); } } @@ -706,8 +706,8 @@ public void setText (String string) { char [] chars = fixMnemonic (string); byte [] buffer = Converter.wcsToMbcs (chars, true); GTK.gtk_label_set_text_with_mnemonic (labelHandle, buffer); - GTK.gtk_widget_hide (imageHandle); - GTK.gtk_widget_show (labelHandle); + gtk_widget_hide (imageHandle); + gtk_widget_show (labelHandle); } @Override @@ -719,9 +719,9 @@ void setWidgetBackground () { @Override void showWidget () { super.showWidget (); - if (frameHandle != 0) GTK.gtk_widget_show (frameHandle); - if (labelHandle != 0) GTK.gtk_widget_show (labelHandle); - if (boxHandle != 0) GTK.gtk_widget_show (boxHandle); + if (frameHandle != 0) gtk_widget_show (frameHandle); + if (labelHandle != 0) gtk_widget_show (labelHandle); + if (boxHandle != 0) gtk_widget_show (boxHandle); } @Override diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java index c702eb7b208..4e053f85015 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java @@ -1337,7 +1337,7 @@ void verifyMenuPosition (int itemCount) { * We need to "show" the menu before fetching the preferred height. * Note, this does not actually pop-up the menu. */ - GTK.gtk_widget_show(handle); + gtk_widget_show(handle); /* * Menus are height-for-width only: use gtk_widget_get_preferred_height() * instead of gtk_widget_get_preferred_size(). diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/MenuItem.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/MenuItem.java index 1ab9134fff4..85b73d3d362 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/MenuItem.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/MenuItem.java @@ -433,19 +433,19 @@ void createHandle(int index) { } GTK3.gtk_container_add (boxHandle, imageHandle); - GTK.gtk_widget_show (imageHandle); + gtk_widget_show (imageHandle); } if (labelHandle != 0) { GTK.gtk_label_set_xalign (labelHandle, 0); GTK.gtk_widget_set_halign (labelHandle, GTK.GTK_ALIGN_FILL); gtk_box_pack_end (boxHandle, labelHandle, true, true, 0); - GTK.gtk_widget_show (labelHandle); + gtk_widget_show (labelHandle); } if (boxHandle != 0) { GTK3.gtk_container_add (handle, boxHandle); - GTK.gtk_widget_show (boxHandle); + gtk_widget_show (boxHandle); } if ((style & SWT.SEPARATOR) == 0) { @@ -460,7 +460,7 @@ void createHandle(int index) { if (!enabled) GTK.gtk_widget_set_sensitive (parentHandle, true); GTK3.gtk_menu_shell_insert (parentHandle, handle, index); if (!enabled) GTK.gtk_widget_set_sensitive (parentHandle, false); - GTK.gtk_widget_show (handle); + gtk_widget_show (handle); } } @@ -1067,7 +1067,7 @@ private void _setImage (Image image) { GTK3.gtk_image_set_from_surface(imageHandle, surface); } } - GTK.gtk_widget_show(imageHandle); + gtk_widget_show(imageHandle); } else { if (imageHandle != 0) { if (OS.SWT_PADDED_MENU_ITEMS) { @@ -1076,7 +1076,7 @@ private void _setImage (Image image) { if (imageHandle == 0) error (SWT.ERROR_NO_HANDLES); GTK.gtk_image_set_pixel_size (imageHandle, 16); GTK3.gtk_container_add (boxHandle, imageHandle); - GTK.gtk_widget_show (imageHandle); + gtk_widget_show (imageHandle); } else { GTK3.gtk_container_remove(boxHandle, imageHandle); imageHandle = 0; diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scrollable.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scrollable.java index f462cef7922..de4d87922b0 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scrollable.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scrollable.java @@ -592,7 +592,7 @@ void resizeHandle (int width, int height) { @Override void showWidget () { super.showWidget (); - if (scrolledHandle != 0) GTK.gtk_widget_show (scrolledHandle); + if (scrolledHandle != 0) gtk_widget_show (scrolledHandle); } @Override diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java index 9603ef610d9..3ffcf7adb34 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java @@ -2586,7 +2586,7 @@ public void setMenuBar (Menu menu) { if (menuBar != null) { long menuHandle = menuBar.handle; - GTK.gtk_widget_hide (menuHandle); + gtk_widget_hide (menuHandle); if (!GTK.GTK4) { destroyAccelGroup(); @@ -2595,7 +2595,7 @@ public void setMenuBar (Menu menu) { menuBar = menu; if (menuBar != null) { long menuHandle = menu.handle; - GTK.gtk_widget_show (menuHandle); + gtk_widget_show (menuHandle); if (!GTK.GTK4) { createAccelGroup(); @@ -2616,7 +2616,7 @@ public void setMinimized (boolean minimized) { if (this.minimized == minimized) return; super.setMinimized (minimized); if(!GTK.gtk_widget_get_visible(shellHandle)) { - GTK.gtk_widget_show(shellHandle); + gtk_widget_show(shellHandle); } if (minimized) { if (GTK.GTK4) { @@ -2929,13 +2929,13 @@ public void setVisible (boolean visible) { int [] init_width = new int[1], init_height = new int[1]; GTK3.gtk_window_get_size(shellHandle, init_width, init_height); GTK3.gtk_window_resize(shellHandle, 1, 1); - GTK.gtk_widget_show (shellHandle); + gtk_widget_show (shellHandle); GTK3.gtk_window_resize(shellHandle, init_width[0], init_height[0]); resizeBounds (init_width[0], init_height[0], false); oldWidth = init_width[0]; oldHeight = init_height[0]; } else { - GTK.gtk_widget_show (shellHandle); + gtk_widget_show (shellHandle); } /** * Feature in GTK: This handles grabbing the keyboard focus from a SWT.ON_TOP window @@ -3005,7 +3005,7 @@ public void setVisible (boolean visible) { } else { fixActiveShell (); checkAndUngrabFocus(); - GTK.gtk_widget_hide (shellHandle); + gtk_widget_hide (shellHandle); sendEvent (SWT.Hide); } } @@ -3064,9 +3064,9 @@ void showWidget () { GTK3.gtk_container_add (shellHandle, vboxHandle); } - if (scrolledHandle != 0) GTK.gtk_widget_show (scrolledHandle); - if (handle != 0) GTK.gtk_widget_show (handle); - if (vboxHandle != 0) GTK.gtk_widget_show (vboxHandle); + if (scrolledHandle != 0) gtk_widget_show (scrolledHandle); + if (handle != 0) gtk_widget_show (handle); + if (vboxHandle != 0) gtk_widget_show (vboxHandle); } @Override @@ -3104,7 +3104,7 @@ long sizeAllocateProc (long handle, long arg0, long user_data) { @Override long sizeRequestProc (long handle, long arg0, long user_data) { - GTK.gtk_widget_hide (handle); + gtk_widget_hide (handle); return 0; } @@ -3232,12 +3232,12 @@ void updateMinimized (boolean minimized) { if (minimized) { if (shells[i].isVisible ()) { shells[i].showWithParent = true; - GTK.gtk_widget_hide(shells[i].shellHandle); + gtk_widget_hide(shells[i].shellHandle); } } else { if (shells[i].showWithParent) { shells[i].showWithParent = false; - GTK.gtk_widget_show(shells[i].shellHandle); + gtk_widget_show(shells[i].shellHandle); } } } @@ -3319,7 +3319,7 @@ public void dispose () { if (popupChild != null && popupChild.shellHandle != 0 && !popupChild.isDisposed()) { popupChild.dispose(); } - GTK.gtk_widget_hide (shellHandle); + gtk_widget_hide (shellHandle); super.dispose (); } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabFolder.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabFolder.java index 34de4c1dd5d..fd95057d491 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabFolder.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabFolder.java @@ -304,11 +304,11 @@ void createItem (TabItem item, int index) { OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, SWITCH_PAGE); if (GTK.GTK4) { - GTK.gtk_widget_hide(imageHandle); + gtk_widget_hide(imageHandle); } else { - GTK.gtk_widget_show(boxHandle); - GTK.gtk_widget_show(labelHandle); - GTK.gtk_widget_show(pageHandle); + gtk_widget_show(boxHandle); + gtk_widget_show(labelHandle); + gtk_widget_show(pageHandle); } item.state |= HANDLE; diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabItem.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabItem.java index 20bbe33d14a..c93fe2b476e 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabItem.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabItem.java @@ -413,14 +413,14 @@ public void setImage (Image image) { } else { GTK3.gtk_image_set_from_surface(imageHandle, image.surface); } - GTK.gtk_widget_show(imageHandle); + gtk_widget_show(imageHandle); } else { if (GTK.GTK4) { GTK4.gtk_image_clear(imageHandle); } else { GTK3.gtk_image_set_from_surface(imageHandle, 0); } - GTK.gtk_widget_hide(imageHandle); + gtk_widget_hide(imageHandle); } } @@ -468,9 +468,9 @@ public void setText (String string) { byte [] buffer = Converter.wcsToMbcs (chars, true); GTK.gtk_label_set_text_with_mnemonic (labelHandle, buffer); if (string.length () != 0) { - GTK.gtk_widget_show (labelHandle); + gtk_widget_show (labelHandle); } else { - GTK.gtk_widget_hide (labelHandle); + gtk_widget_hide (labelHandle); } } 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 ac264052508..2e358c828a0 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 @@ -737,13 +737,13 @@ void createItem (TableColumn column, int index) { GTK4.gtk_box_append(boxHandle, imageHandle); GTK4.gtk_box_append(boxHandle, labelHandle); - GTK.gtk_widget_hide(imageHandle); + gtk_widget_hide(imageHandle); } else { GTK3.gtk_container_add (boxHandle, imageHandle); GTK3.gtk_container_add (boxHandle, labelHandle); - GTK.gtk_widget_show (boxHandle); - GTK.gtk_widget_show (labelHandle); + gtk_widget_show (boxHandle); + gtk_widget_show (labelHandle); } column.labelHandle = labelHandle; @@ -1492,9 +1492,9 @@ public int getHeaderHeight () { long buttonHandle = columns[i].buttonHandle; if (buttonHandle != 0) { if (!GTK.gtk_widget_get_visible(buttonHandle)) { - GTK.gtk_widget_show(buttonHandle); + gtk_widget_show(buttonHandle); gtk_widget_get_preferred_size(buttonHandle, requisition); - GTK.gtk_widget_hide(buttonHandle); + gtk_widget_hide(buttonHandle); } else { gtk_widget_get_preferred_size(buttonHandle, requisition); } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java index f030a0fe9d6..444e94c5aae 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java @@ -463,10 +463,10 @@ public void pack () { if (buttonHandle != 0) { boolean hideHeader = !GTK.gtk_widget_get_visible(buttonHandle); GtkRequisition requisition = new GtkRequisition (); - GTK.gtk_widget_show(buttonHandle); + gtk_widget_show(buttonHandle); gtk_widget_get_preferred_size (buttonHandle, requisition); if (hideHeader) { - GTK.gtk_widget_hide(buttonHandle); + gtk_widget_hide(buttonHandle); } width = requisition.width; } @@ -627,14 +627,14 @@ public void setImage (Image image) { } else { GTK3.gtk_image_set_from_surface(imageHandle, headerImageList.getSurface(imageIndex)); } - GTK.gtk_widget_show(imageHandle); + gtk_widget_show(imageHandle); } else { if (GTK.GTK4) { GTK4.gtk_image_clear(imageHandle); } else { GTK3.gtk_image_set_from_surface(imageHandle, 0); } - GTK.gtk_widget_hide(imageHandle); + gtk_widget_hide(imageHandle); } } @@ -703,9 +703,9 @@ public void setText (String string) { byte [] buffer = Converter.wcsToMbcs (chars, true); GTK.gtk_label_set_text_with_mnemonic (labelHandle, buffer); if (string.length () != 0) { - GTK.gtk_widget_show (labelHandle); + gtk_widget_show (labelHandle); } else { - GTK.gtk_widget_hide (labelHandle); + gtk_widget_hide (labelHandle); } } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolItem.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolItem.java index acdc80e0690..419aebec04c 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolItem.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolItem.java @@ -306,8 +306,8 @@ void createHandle (int index) { GTK4.gtk_box_append(boxHandle, imageHandle); GTK4.gtk_box_append(boxHandle, labelHandle); - GTK.gtk_widget_hide(imageHandle); - GTK.gtk_widget_hide(labelHandle); + gtk_widget_hide(imageHandle); + gtk_widget_hide(labelHandle); } else { labelHandle = GTK.gtk_label_new_with_mnemonic(null); if (labelHandle == 0) error(SWT.ERROR_NO_HANDLES); @@ -1316,7 +1316,7 @@ void _setImage (Image image) { } if (GTK.GTK4) { - GTK.gtk_widget_show(imageHandle); + gtk_widget_show(imageHandle); long pixbuf = ImageList.createPixbuf(image); long texture = GDK.gdk_texture_new_for_pixbuf(pixbuf); OS.g_object_unref(pixbuf); @@ -1327,7 +1327,7 @@ void _setImage (Image image) { } else { if(GTK.GTK4) { GTK4.gtk_image_clear(imageHandle); - GTK.gtk_widget_hide(imageHandle); + gtk_widget_hide(imageHandle); } else { GTK3.gtk_image_set_from_surface(imageHandle, 0); } @@ -1429,7 +1429,7 @@ public void setText (String string) { byte [] buffer = Converter.wcsToMbcs (chars, true); if (GTK.GTK4) { - GTK.gtk_widget_show(labelHandle); + gtk_widget_show(labelHandle); GTK.gtk_label_set_text_with_mnemonic(labelHandle, buffer); } else { GTK.gtk_label_set_text_with_mnemonic(labelHandle, buffer); @@ -1547,9 +1547,9 @@ void showWidget (int index) { } } } else { - if (handle != 0) GTK.gtk_widget_show (handle); - if (labelHandle != 0) GTK.gtk_widget_show (labelHandle); - if (imageHandle != 0) GTK.gtk_widget_show (imageHandle); + if (handle != 0) gtk_widget_show (handle); + if (labelHandle != 0) gtk_widget_show (labelHandle); + if (imageHandle != 0) gtk_widget_show (imageHandle); GTK3.gtk_toolbar_insert(parent.handle, handle, index); } } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java index e6a8a2fb342..3ec7d860b1d 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java @@ -836,7 +836,7 @@ public void setVisible (boolean visible) { if (visible) { if ((style & SWT.BALLOON) != 0) { configure (); - GTK.gtk_widget_show (handle); + gtk_widget_show (handle); } else { long vboxHandle = parent.vboxHandle; StringBuilder string = new StringBuilder (text); @@ -854,7 +854,7 @@ public void setVisible (boolean visible) { } } else { if ((style & SWT.BALLOON) != 0) { - GTK.gtk_widget_hide (handle); + gtk_widget_hide (handle); } else { long vboxHandle = parent.vboxHandle; byte[] buffer = Converter.wcsToMbcs("", true); @@ -866,7 +866,7 @@ public void setVisible (boolean visible) { @Override long timerProc (long widget) { if ((style & SWT.BALLOON) != 0) { - GTK.gtk_widget_hide (handle); + gtk_widget_hide (handle); } return 0; } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tracker.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tracker.java index 6bcf48ba782..038041ca256 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tracker.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tracker.java @@ -839,7 +839,7 @@ public boolean open () { Rectangle bounds = display.getBoundsInPixels(); GTK3.gtk_window_move (overlay, bounds.x, bounds.y); GTK3.gtk_window_resize (overlay, bounds.width, bounds.height); - GTK.gtk_widget_show (overlay); + gtk_widget_show (overlay); /* Tracker behaves like a Dialog with its own OS event loop. */ Display display = this.display; 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 1c872174a01..073f3882754 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 @@ -926,13 +926,13 @@ void createItem (TreeColumn column, int index) { GTK4.gtk_box_append(boxHandle, imageHandle); GTK4.gtk_box_append(boxHandle, labelHandle); - GTK.gtk_widget_hide(imageHandle); + gtk_widget_hide(imageHandle); } else { GTK3.gtk_container_add (boxHandle, imageHandle); GTK3.gtk_container_add (boxHandle, labelHandle); - GTK.gtk_widget_show (boxHandle); - GTK.gtk_widget_show (labelHandle); + gtk_widget_show (boxHandle); + gtk_widget_show (labelHandle); } column.labelHandle = labelHandle; diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java index 3898fc2518d..ec2d754fa9a 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java @@ -607,14 +607,14 @@ public void setImage (Image image) { } else { GTK3.gtk_image_set_from_surface(imageHandle, headerImageList.getSurface(imageIndex)); } - GTK.gtk_widget_show(imageHandle); + gtk_widget_show(imageHandle); } else { if (GTK.GTK4) { GTK4.gtk_image_clear(imageHandle); } else { GTK3.gtk_image_set_from_surface(imageHandle, 0); } - GTK.gtk_widget_hide(imageHandle); + gtk_widget_hide(imageHandle); } } @@ -681,9 +681,9 @@ public void setText (String string) { byte [] buffer = Converter.wcsToMbcs (chars, true); GTK.gtk_label_set_text_with_mnemonic (labelHandle, buffer); if (string.length () != 0) { - GTK.gtk_widget_show (labelHandle); + gtk_widget_show (labelHandle); } else { - GTK.gtk_widget_hide (labelHandle); + gtk_widget_hide (labelHandle); } } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java index 13d5a7efaf9..92c3f16aafb 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java @@ -2759,4 +2759,14 @@ void notifyDisposalTracker() { } } +void gtk_widget_hide(long widget) { + if (GTK.GTK4) GTK.gtk_widget_set_visible(widget, false); + else GTK3.gtk_widget_hide(widget); +} + +void gtk_widget_show(long widget) { + if (GTK.GTK4) GTK.gtk_widget_set_visible(widget, true); + else GTK3.gtk_widget_show(widget); +} + } From 0277be55cb50ffc562e7faed7b7224e28d06bda0 Mon Sep 17 00:00:00 2001 From: Eclipse Releng Bot Date: Mon, 12 May 2025 09:03:02 +0000 Subject: [PATCH 077/119] v4969r17 --- ...wt-cocoa-4969r16.jnilib => libswt-awt-cocoa-4969r17.jnilib} | 0 ...libswt-cocoa-4969r16.jnilib => libswt-cocoa-4969r17.jnilib} | 0 ...-pi-cocoa-4969r16.jnilib => libswt-pi-cocoa-4969r17.jnilib} | 0 ...wt-cocoa-4969r16.jnilib => libswt-awt-cocoa-4969r17.jnilib} | 0 ...libswt-cocoa-4969r16.jnilib => libswt-cocoa-4969r17.jnilib} | 0 ...-pi-cocoa-4969r16.jnilib => libswt-pi-cocoa-4969r17.jnilib} | 0 .../{libswt-atk-gtk-4969r16.so => libswt-atk-gtk-4969r17.so} | 0 .../{libswt-awt-gtk-4969r16.so => libswt-awt-gtk-4969r17.so} | 0 ...libswt-cairo-gtk-4969r16.so => libswt-cairo-gtk-4969r17.so} | 0 .../{libswt-glx-gtk-4969r16.so => libswt-glx-gtk-4969r17.so} | 0 .../{libswt-gtk-4969r16.so => libswt-gtk-4969r17.so} | 0 .../libswt-pi3-gtk-4969r16.so | 3 --- .../libswt-pi3-gtk-4969r17.so | 3 +++ ...bswt-webkit-gtk-4969r16.so => libswt-webkit-gtk-4969r17.so} | 0 .../{libswt-atk-gtk-4969r16.so => libswt-atk-gtk-4969r17.so} | 0 .../{libswt-awt-gtk-4969r16.so => libswt-awt-gtk-4969r17.so} | 0 ...libswt-cairo-gtk-4969r16.so => libswt-cairo-gtk-4969r17.so} | 0 .../{libswt-glx-gtk-4969r16.so => libswt-glx-gtk-4969r17.so} | 0 .../{libswt-gtk-4969r16.so => libswt-gtk-4969r17.so} | 0 .../libswt-pi3-gtk-4969r16.so | 3 --- .../libswt-pi3-gtk-4969r17.so | 3 +++ ...bswt-webkit-gtk-4969r16.so => libswt-webkit-gtk-4969r17.so} | 0 .../{libswt-atk-gtk-4969r16.so => libswt-atk-gtk-4969r17.so} | 0 .../{libswt-awt-gtk-4969r16.so => libswt-awt-gtk-4969r17.so} | 0 ...libswt-cairo-gtk-4969r16.so => libswt-cairo-gtk-4969r17.so} | 0 .../{libswt-glx-gtk-4969r16.so => libswt-glx-gtk-4969r17.so} | 0 .../{libswt-gtk-4969r16.so => libswt-gtk-4969r17.so} | 0 .../libswt-pi3-gtk-4969r16.so | 3 --- .../libswt-pi3-gtk-4969r17.so | 3 +++ ...bswt-webkit-gtk-4969r16.so => libswt-webkit-gtk-4969r17.so} | 0 .../{libswt-atk-gtk-4969r16.so => libswt-atk-gtk-4969r17.so} | 0 .../{libswt-awt-gtk-4969r16.so => libswt-awt-gtk-4969r17.so} | 0 ...libswt-cairo-gtk-4969r16.so => libswt-cairo-gtk-4969r17.so} | 0 .../{libswt-glx-gtk-4969r16.so => libswt-glx-gtk-4969r17.so} | 0 .../{libswt-gtk-4969r16.so => libswt-gtk-4969r17.so} | 0 .../org.eclipse.swt.gtk.linux.x86_64/libswt-pi3-gtk-4969r16.so | 3 --- .../org.eclipse.swt.gtk.linux.x86_64/libswt-pi3-gtk-4969r17.so | 3 +++ .../org.eclipse.swt.gtk.linux.x86_64/libswt-pi4-gtk-4969r16.so | 3 --- .../org.eclipse.swt.gtk.linux.x86_64/libswt-pi4-gtk-4969r17.so | 3 +++ ...bswt-webkit-gtk-4969r16.so => libswt-webkit-gtk-4969r17.so} | 0 .../{swt-awt-win32-4969r16.dll => swt-awt-win32-4969r17.dll} | 0 .../{swt-gdip-win32-4969r16.dll => swt-gdip-win32-4969r17.dll} | 0 ...rsion-win32-4969r16.dll => swt-osversion-win32-4969r17.dll} | 0 .../{swt-wgl-win32-4969r16.dll => swt-wgl-win32-4969r17.dll} | 0 .../{swt-win32-4969r16.dll => swt-win32-4969r17.dll} | 0 .../{swt-awt-win32-4969r16.dll => swt-awt-win32-4969r17.dll} | 0 .../{swt-gdip-win32-4969r16.dll => swt-gdip-win32-4969r17.dll} | 0 ...rsion-win32-4969r16.dll => swt-osversion-win32-4969r17.dll} | 0 .../{swt-wgl-win32-4969r16.dll => swt-wgl-win32-4969r17.dll} | 0 .../{swt-win32-4969r16.dll => swt-win32-4969r17.dll} | 0 .../common/org/eclipse/swt/internal/Library.java | 2 +- .../org.eclipse.swt/Eclipse SWT/common/library/make_common.mak | 2 +- 52 files changed, 17 insertions(+), 17 deletions(-) rename binaries/org.eclipse.swt.cocoa.macosx.aarch64/{libswt-awt-cocoa-4969r16.jnilib => libswt-awt-cocoa-4969r17.jnilib} (100%) rename binaries/org.eclipse.swt.cocoa.macosx.aarch64/{libswt-cocoa-4969r16.jnilib => libswt-cocoa-4969r17.jnilib} (100%) rename binaries/org.eclipse.swt.cocoa.macosx.aarch64/{libswt-pi-cocoa-4969r16.jnilib => libswt-pi-cocoa-4969r17.jnilib} (100%) rename binaries/org.eclipse.swt.cocoa.macosx.x86_64/{libswt-awt-cocoa-4969r16.jnilib => libswt-awt-cocoa-4969r17.jnilib} (100%) rename binaries/org.eclipse.swt.cocoa.macosx.x86_64/{libswt-cocoa-4969r16.jnilib => libswt-cocoa-4969r17.jnilib} (100%) rename binaries/org.eclipse.swt.cocoa.macosx.x86_64/{libswt-pi-cocoa-4969r16.jnilib => libswt-pi-cocoa-4969r17.jnilib} (100%) rename binaries/org.eclipse.swt.gtk.linux.aarch64/{libswt-atk-gtk-4969r16.so => libswt-atk-gtk-4969r17.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.aarch64/{libswt-awt-gtk-4969r16.so => libswt-awt-gtk-4969r17.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.aarch64/{libswt-cairo-gtk-4969r16.so => libswt-cairo-gtk-4969r17.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.aarch64/{libswt-glx-gtk-4969r16.so => libswt-glx-gtk-4969r17.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.aarch64/{libswt-gtk-4969r16.so => libswt-gtk-4969r17.so} (100%) delete mode 100755 binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-pi3-gtk-4969r16.so create mode 100755 binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-pi3-gtk-4969r17.so rename binaries/org.eclipse.swt.gtk.linux.aarch64/{libswt-webkit-gtk-4969r16.so => libswt-webkit-gtk-4969r17.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.ppc64le/{libswt-atk-gtk-4969r16.so => libswt-atk-gtk-4969r17.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.ppc64le/{libswt-awt-gtk-4969r16.so => libswt-awt-gtk-4969r17.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.ppc64le/{libswt-cairo-gtk-4969r16.so => libswt-cairo-gtk-4969r17.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.ppc64le/{libswt-glx-gtk-4969r16.so => libswt-glx-gtk-4969r17.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.ppc64le/{libswt-gtk-4969r16.so => libswt-gtk-4969r17.so} (100%) delete mode 100755 binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-pi3-gtk-4969r16.so create mode 100755 binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-pi3-gtk-4969r17.so rename binaries/org.eclipse.swt.gtk.linux.ppc64le/{libswt-webkit-gtk-4969r16.so => libswt-webkit-gtk-4969r17.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.riscv64/{libswt-atk-gtk-4969r16.so => libswt-atk-gtk-4969r17.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.riscv64/{libswt-awt-gtk-4969r16.so => libswt-awt-gtk-4969r17.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.riscv64/{libswt-cairo-gtk-4969r16.so => libswt-cairo-gtk-4969r17.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.riscv64/{libswt-glx-gtk-4969r16.so => libswt-glx-gtk-4969r17.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.riscv64/{libswt-gtk-4969r16.so => libswt-gtk-4969r17.so} (100%) delete mode 100755 binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-pi3-gtk-4969r16.so create mode 100755 binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-pi3-gtk-4969r17.so rename binaries/org.eclipse.swt.gtk.linux.riscv64/{libswt-webkit-gtk-4969r16.so => libswt-webkit-gtk-4969r17.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-atk-gtk-4969r16.so => libswt-atk-gtk-4969r17.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-awt-gtk-4969r16.so => libswt-awt-gtk-4969r17.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-cairo-gtk-4969r16.so => libswt-cairo-gtk-4969r17.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-glx-gtk-4969r16.so => libswt-glx-gtk-4969r17.so} (100%) rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-gtk-4969r16.so => libswt-gtk-4969r17.so} (100%) delete mode 100755 binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi3-gtk-4969r16.so create mode 100755 binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi3-gtk-4969r17.so delete mode 100755 binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi4-gtk-4969r16.so create mode 100755 binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi4-gtk-4969r17.so rename binaries/org.eclipse.swt.gtk.linux.x86_64/{libswt-webkit-gtk-4969r16.so => libswt-webkit-gtk-4969r17.so} (100%) rename binaries/org.eclipse.swt.win32.win32.aarch64/{swt-awt-win32-4969r16.dll => swt-awt-win32-4969r17.dll} (100%) rename binaries/org.eclipse.swt.win32.win32.aarch64/{swt-gdip-win32-4969r16.dll => swt-gdip-win32-4969r17.dll} (100%) rename binaries/org.eclipse.swt.win32.win32.aarch64/{swt-osversion-win32-4969r16.dll => swt-osversion-win32-4969r17.dll} (100%) rename binaries/org.eclipse.swt.win32.win32.aarch64/{swt-wgl-win32-4969r16.dll => swt-wgl-win32-4969r17.dll} (100%) rename binaries/org.eclipse.swt.win32.win32.aarch64/{swt-win32-4969r16.dll => swt-win32-4969r17.dll} (100%) rename binaries/org.eclipse.swt.win32.win32.x86_64/{swt-awt-win32-4969r16.dll => swt-awt-win32-4969r17.dll} (100%) rename binaries/org.eclipse.swt.win32.win32.x86_64/{swt-gdip-win32-4969r16.dll => swt-gdip-win32-4969r17.dll} (100%) rename binaries/org.eclipse.swt.win32.win32.x86_64/{swt-osversion-win32-4969r16.dll => swt-osversion-win32-4969r17.dll} (100%) rename binaries/org.eclipse.swt.win32.win32.x86_64/{swt-wgl-win32-4969r16.dll => swt-wgl-win32-4969r17.dll} (100%) rename binaries/org.eclipse.swt.win32.win32.x86_64/{swt-win32-4969r16.dll => swt-win32-4969r17.dll} (100%) diff --git a/binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-awt-cocoa-4969r16.jnilib b/binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-awt-cocoa-4969r17.jnilib similarity index 100% rename from binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-awt-cocoa-4969r16.jnilib rename to binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-awt-cocoa-4969r17.jnilib diff --git a/binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-cocoa-4969r16.jnilib b/binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-cocoa-4969r17.jnilib similarity index 100% rename from binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-cocoa-4969r16.jnilib rename to binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-cocoa-4969r17.jnilib diff --git a/binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-pi-cocoa-4969r16.jnilib b/binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-pi-cocoa-4969r17.jnilib similarity index 100% rename from binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-pi-cocoa-4969r16.jnilib rename to binaries/org.eclipse.swt.cocoa.macosx.aarch64/libswt-pi-cocoa-4969r17.jnilib diff --git a/binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-awt-cocoa-4969r16.jnilib b/binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-awt-cocoa-4969r17.jnilib similarity index 100% rename from binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-awt-cocoa-4969r16.jnilib rename to binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-awt-cocoa-4969r17.jnilib diff --git a/binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-cocoa-4969r16.jnilib b/binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-cocoa-4969r17.jnilib similarity index 100% rename from binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-cocoa-4969r16.jnilib rename to binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-cocoa-4969r17.jnilib diff --git a/binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-pi-cocoa-4969r16.jnilib b/binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-pi-cocoa-4969r17.jnilib similarity index 100% rename from binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-pi-cocoa-4969r16.jnilib rename to binaries/org.eclipse.swt.cocoa.macosx.x86_64/libswt-pi-cocoa-4969r17.jnilib diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-atk-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-atk-gtk-4969r17.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-atk-gtk-4969r16.so rename to binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-atk-gtk-4969r17.so diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-awt-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-awt-gtk-4969r17.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-awt-gtk-4969r16.so rename to binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-awt-gtk-4969r17.so diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-cairo-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-cairo-gtk-4969r17.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-cairo-gtk-4969r16.so rename to binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-cairo-gtk-4969r17.so diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-glx-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-glx-gtk-4969r17.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-glx-gtk-4969r16.so rename to binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-glx-gtk-4969r17.so diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-gtk-4969r17.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-gtk-4969r16.so rename to binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-gtk-4969r17.so diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-pi3-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-pi3-gtk-4969r16.so deleted file mode 100755 index 5a362e5eda7..00000000000 --- a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-pi3-gtk-4969r16.so +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e124b7659cf5fa307d51521bc19bb5e9886aaadd431478503197818329c7b387 -size 536736 diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-pi3-gtk-4969r17.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-pi3-gtk-4969r17.so new file mode 100755 index 00000000000..4463ecd35b7 --- /dev/null +++ b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-pi3-gtk-4969r17.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e86510c208b40c4104587f27d16eaf25ce75be00771f10ae0ef0e93566a2138a +size 536736 diff --git a/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-webkit-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-webkit-gtk-4969r17.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-webkit-gtk-4969r16.so rename to binaries/org.eclipse.swt.gtk.linux.aarch64/libswt-webkit-gtk-4969r17.so diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-atk-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-atk-gtk-4969r17.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-atk-gtk-4969r16.so rename to binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-atk-gtk-4969r17.so diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-awt-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-awt-gtk-4969r17.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-awt-gtk-4969r16.so rename to binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-awt-gtk-4969r17.so diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-cairo-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-cairo-gtk-4969r17.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-cairo-gtk-4969r16.so rename to binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-cairo-gtk-4969r17.so diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-glx-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-glx-gtk-4969r17.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-glx-gtk-4969r16.so rename to binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-glx-gtk-4969r17.so diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-gtk-4969r17.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-gtk-4969r16.so rename to binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-gtk-4969r17.so diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-pi3-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-pi3-gtk-4969r16.so deleted file mode 100755 index 64415d2af9a..00000000000 --- a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-pi3-gtk-4969r16.so +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f4f97bd82533746db4c03ce3014ff0713d72a646ada983c085c22a3a0a8f553a -size 602328 diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-pi3-gtk-4969r17.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-pi3-gtk-4969r17.so new file mode 100755 index 00000000000..bd210632ab9 --- /dev/null +++ b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-pi3-gtk-4969r17.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:739772f93c16177d447006035292bb4c0ed8c27e083eb5a541f658700a91c13f +size 602328 diff --git a/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-webkit-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-webkit-gtk-4969r17.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-webkit-gtk-4969r16.so rename to binaries/org.eclipse.swt.gtk.linux.ppc64le/libswt-webkit-gtk-4969r17.so diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-atk-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-atk-gtk-4969r17.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-atk-gtk-4969r16.so rename to binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-atk-gtk-4969r17.so diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-awt-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-awt-gtk-4969r17.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-awt-gtk-4969r16.so rename to binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-awt-gtk-4969r17.so diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-cairo-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-cairo-gtk-4969r17.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-cairo-gtk-4969r16.so rename to binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-cairo-gtk-4969r17.so diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-glx-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-glx-gtk-4969r17.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-glx-gtk-4969r16.so rename to binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-glx-gtk-4969r17.so diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-gtk-4969r17.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-gtk-4969r16.so rename to binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-gtk-4969r17.so diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-pi3-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-pi3-gtk-4969r16.so deleted file mode 100755 index 6adc83bf75d..00000000000 --- a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-pi3-gtk-4969r16.so +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0177626385a0b9071df0892f1daed083c56e87cfd5df4438de79c05dc1ae9566 -size 442072 diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-pi3-gtk-4969r17.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-pi3-gtk-4969r17.so new file mode 100755 index 00000000000..e79557f7c23 --- /dev/null +++ b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-pi3-gtk-4969r17.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90bc192015265242865ac7809087bdc562e939fb81a332c81280f1f8ac0f7e10 +size 442072 diff --git a/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-webkit-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-webkit-gtk-4969r17.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-webkit-gtk-4969r16.so rename to binaries/org.eclipse.swt.gtk.linux.riscv64/libswt-webkit-gtk-4969r17.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-atk-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-atk-gtk-4969r17.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-atk-gtk-4969r16.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-atk-gtk-4969r17.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-awt-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-awt-gtk-4969r17.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-awt-gtk-4969r16.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-awt-gtk-4969r17.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-cairo-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-cairo-gtk-4969r17.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-cairo-gtk-4969r16.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-cairo-gtk-4969r17.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-glx-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-glx-gtk-4969r17.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-glx-gtk-4969r16.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-glx-gtk-4969r17.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-gtk-4969r17.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-gtk-4969r16.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-gtk-4969r17.so diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi3-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi3-gtk-4969r16.so deleted file mode 100755 index 2a7021af0f5..00000000000 --- a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi3-gtk-4969r16.so +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:47f688357b7420e626db0dbd4086070ac276f67e61f6e25264025ebaac5bb19b -size 458520 diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi3-gtk-4969r17.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi3-gtk-4969r17.so new file mode 100755 index 00000000000..515fed09dfd --- /dev/null +++ b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi3-gtk-4969r17.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e526611f2e5ab38d5e65a38784631efaa48f8224a85a598dc7c9c23e7145962d +size 458520 diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi4-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi4-gtk-4969r16.so deleted file mode 100755 index f57997c4413..00000000000 --- a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi4-gtk-4969r16.so +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8c1451967cebf83199dae545cc9bf043b293d387a9236b515be602e620d5ae80 -size 399880 diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi4-gtk-4969r17.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi4-gtk-4969r17.so new file mode 100755 index 00000000000..3a2322439eb --- /dev/null +++ b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-pi4-gtk-4969r17.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7b6323ac9e6f9f567f289a908743d7ed57e0e83860af32a6ea37a9cd9b93a4e +size 399864 diff --git a/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-webkit-gtk-4969r16.so b/binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-webkit-gtk-4969r17.so similarity index 100% rename from binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-webkit-gtk-4969r16.so rename to binaries/org.eclipse.swt.gtk.linux.x86_64/libswt-webkit-gtk-4969r17.so diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-awt-win32-4969r16.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-awt-win32-4969r17.dll similarity index 100% rename from binaries/org.eclipse.swt.win32.win32.aarch64/swt-awt-win32-4969r16.dll rename to binaries/org.eclipse.swt.win32.win32.aarch64/swt-awt-win32-4969r17.dll diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-gdip-win32-4969r16.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-gdip-win32-4969r17.dll similarity index 100% rename from binaries/org.eclipse.swt.win32.win32.aarch64/swt-gdip-win32-4969r16.dll rename to binaries/org.eclipse.swt.win32.win32.aarch64/swt-gdip-win32-4969r17.dll diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-osversion-win32-4969r16.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-osversion-win32-4969r17.dll similarity index 100% rename from binaries/org.eclipse.swt.win32.win32.aarch64/swt-osversion-win32-4969r16.dll rename to binaries/org.eclipse.swt.win32.win32.aarch64/swt-osversion-win32-4969r17.dll diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-wgl-win32-4969r16.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-wgl-win32-4969r17.dll similarity index 100% rename from binaries/org.eclipse.swt.win32.win32.aarch64/swt-wgl-win32-4969r16.dll rename to binaries/org.eclipse.swt.win32.win32.aarch64/swt-wgl-win32-4969r17.dll diff --git a/binaries/org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r16.dll b/binaries/org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r17.dll similarity index 100% rename from binaries/org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r16.dll rename to binaries/org.eclipse.swt.win32.win32.aarch64/swt-win32-4969r17.dll diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-awt-win32-4969r16.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-awt-win32-4969r17.dll similarity index 100% rename from binaries/org.eclipse.swt.win32.win32.x86_64/swt-awt-win32-4969r16.dll rename to binaries/org.eclipse.swt.win32.win32.x86_64/swt-awt-win32-4969r17.dll diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-gdip-win32-4969r16.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-gdip-win32-4969r17.dll similarity index 100% rename from binaries/org.eclipse.swt.win32.win32.x86_64/swt-gdip-win32-4969r16.dll rename to binaries/org.eclipse.swt.win32.win32.x86_64/swt-gdip-win32-4969r17.dll diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-osversion-win32-4969r16.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-osversion-win32-4969r17.dll similarity index 100% rename from binaries/org.eclipse.swt.win32.win32.x86_64/swt-osversion-win32-4969r16.dll rename to binaries/org.eclipse.swt.win32.win32.x86_64/swt-osversion-win32-4969r17.dll diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-wgl-win32-4969r16.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-wgl-win32-4969r17.dll similarity index 100% rename from binaries/org.eclipse.swt.win32.win32.x86_64/swt-wgl-win32-4969r16.dll rename to binaries/org.eclipse.swt.win32.win32.x86_64/swt-wgl-win32-4969r17.dll diff --git a/binaries/org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r16.dll b/binaries/org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r17.dll similarity index 100% rename from binaries/org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r16.dll rename to binaries/org.eclipse.swt.win32.win32.x86_64/swt-win32-4969r17.dll diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/Library.java b/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/Library.java index 0a3277480d3..63fd11ecb3e 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/Library.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/Library.java @@ -40,7 +40,7 @@ public class Library { /** * SWT revision number (must be >= 0) */ - static int REVISION = 16; + static int REVISION = 17; /** * The JAVA and SWT versions diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/library/make_common.mak b/bundles/org.eclipse.swt/Eclipse SWT/common/library/make_common.mak index 26dbe62385c..2666dc2627e 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/library/make_common.mak +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/library/make_common.mak @@ -14,4 +14,4 @@ maj_ver=4 min_ver=969 -rev=16 +rev=17 From c48ff5adda05c621d6c9192fab01cd7f4172ecf4 Mon Sep 17 00:00:00 2001 From: fedejeanne Date: Mon, 12 May 2025 15:09:44 +0200 Subject: [PATCH 078/119] Preserve handles of images when changing zooms #2139 Preserve the handles of images created out of existing image handles and also from those which are still needed (according to the method AbstractImageProviderWrapper::getPreservedZoomLevels) Fixes https://github.com/eclipse-platform/eclipse.platform.swt/issues/2139 --- .../Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java index 272cedb319f..3d1556a205a 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java @@ -1012,7 +1012,7 @@ private void destroyHandles() { @Override void destroyHandlesExcept(Set zoomLevels) { - destroyHandles(zoom -> !zoomLevels.contains(zoom) || !this.imageProvider.getPreservedZoomLevels().contains(zoom)); + destroyHandles(zoom -> !zoomLevels.contains(zoom) && !this.imageProvider.getPreservedZoomLevels().contains(zoom)); } private void destroyHandles(Predicate filter) { @@ -1930,6 +1930,11 @@ ImageData newImageData(int zoom) { AbstractImageProviderWrapper createCopy(Image image) { return image.new ExistingImageHandleProviderWrapper(handle, zoomForHandle); } + + @Override + public Collection getPreservedZoomLevels() { + return Collections.singleton(zoomForHandle); + } } private abstract class ImageFromImageDataProviderWrapper extends AbstractImageProviderWrapper { From 70bba228c9774fce995782008d62a3b5f1e52914 Mon Sep 17 00:00:00 2001 From: Manuel Killinger <22157689+killingerm@users.noreply.github.com> Date: Fri, 9 May 2025 10:52:26 +0200 Subject: [PATCH 079/119] Add a snippet to demonstrate icon disablement algorithms This adds Snippet384 to inspect the behavior of different different algorithms for the transformations of images to be used as disabled versions. --- examples/org.eclipse.swt.snippets/Snippets.md | 1 + .../previews/Snippet384.png | Bin 0 -> 129017 bytes .../images/aaa_linear_gradient_255x32.png | Bin 0 -> 396 bytes .../battery-charge-level-75-percent-icon.png | Bin 0 -> 388 bytes .../images/checkmark-male-user-color-icon.png | Bin 0 -> 1595 bytes .../Snippet384/images/civil-icon.png | Bin 0 -> 990 bytes .../Snippet384/images/color-wheel-icon.png | Bin 0 -> 1185 bytes .../Snippet384/images/coreldraw-icon.png | Bin 0 -> 1789 bytes .../images/electric-switch-color-icon.png | Bin 0 -> 480 bytes .../Snippet384/images/file-manager-icon.png | Bin 0 -> 381 bytes .../images/magnet-magnetic-icon.png | Bin 0 -> 1393 bytes .../images/man-woman-toilet-color-icon.png | Bin 0 -> 837 bytes .../Snippet384/images/medal-color-icon.png | Bin 0 -> 1341 bytes .../images/message-bubble-white-icon.png | Bin 0 -> 429 bytes .../Snippet384/images/padlock-icon.png | Bin 0 -> 760 bytes .../images/pig-piggy-color-icon.png | Bin 0 -> 1332 bytes .../images/piggy-saving-euro-icon.png | Bin 0 -> 1272 bytes .../Snippet384/images/rooster-color-icon.png | Bin 0 -> 1332 bytes .../Snippet384/images/science-atom-icon.png | Bin 0 -> 1209 bytes .../org/eclipse/swt/snippets/Snippet384.java | 448 ++++++++++++++++++ 20 files changed, 449 insertions(+) create mode 100644 examples/org.eclipse.swt.snippets/previews/Snippet384.png create mode 100644 examples/org.eclipse.swt.snippets/resources/Snippet384/images/aaa_linear_gradient_255x32.png create mode 100644 examples/org.eclipse.swt.snippets/resources/Snippet384/images/battery-charge-level-75-percent-icon.png create mode 100644 examples/org.eclipse.swt.snippets/resources/Snippet384/images/checkmark-male-user-color-icon.png create mode 100644 examples/org.eclipse.swt.snippets/resources/Snippet384/images/civil-icon.png create mode 100644 examples/org.eclipse.swt.snippets/resources/Snippet384/images/color-wheel-icon.png create mode 100644 examples/org.eclipse.swt.snippets/resources/Snippet384/images/coreldraw-icon.png create mode 100644 examples/org.eclipse.swt.snippets/resources/Snippet384/images/electric-switch-color-icon.png create mode 100644 examples/org.eclipse.swt.snippets/resources/Snippet384/images/file-manager-icon.png create mode 100644 examples/org.eclipse.swt.snippets/resources/Snippet384/images/magnet-magnetic-icon.png create mode 100644 examples/org.eclipse.swt.snippets/resources/Snippet384/images/man-woman-toilet-color-icon.png create mode 100644 examples/org.eclipse.swt.snippets/resources/Snippet384/images/medal-color-icon.png create mode 100644 examples/org.eclipse.swt.snippets/resources/Snippet384/images/message-bubble-white-icon.png create mode 100644 examples/org.eclipse.swt.snippets/resources/Snippet384/images/padlock-icon.png create mode 100644 examples/org.eclipse.swt.snippets/resources/Snippet384/images/pig-piggy-color-icon.png create mode 100644 examples/org.eclipse.swt.snippets/resources/Snippet384/images/piggy-saving-euro-icon.png create mode 100644 examples/org.eclipse.swt.snippets/resources/Snippet384/images/rooster-color-icon.png create mode 100644 examples/org.eclipse.swt.snippets/resources/Snippet384/images/science-atom-icon.png create mode 100644 examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet384.java diff --git a/examples/org.eclipse.swt.snippets/Snippets.md b/examples/org.eclipse.swt.snippets/Snippets.md index 6229a212c8d..78eb5bc980b 100644 --- a/examples/org.eclipse.swt.snippets/Snippets.md +++ b/examples/org.eclipse.swt.snippets/Snippets.md @@ -214,6 +214,7 @@ To contribute a new snippet, [create a snippet contribution as a pull request](h - [draw an image scaled to half size and double size](https://github.com/eclipse-platform/eclipse.platform.swt/tree/master/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet355.java) – [(preview)](https://github.com/eclipse-platform/eclipse.platform.swt/blob/master/examples/org.eclipse.swt.snippets/previews/Snippet355.png "Preview for Snippet 355") - [draw an image at various zoom/dpi levels](https://github.com/eclipse-platform/eclipse.platform.swt/tree/master/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet367.java) – [(preview)](https://github.com/eclipse-platform/eclipse.platform.swt/blob/master/examples/org.eclipse.swt.snippets/previews/Snippet367.png "Preview for Snippet 367") - [draw a disabled/grayed image at various zoom levels](https://github.com/eclipse-platform/eclipse.platform.swt/tree/master/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet382.java) – [(preview)](https://github.com/eclipse-platform/eclipse.platform.swt/blob/master/examples/org.eclipse.swt.snippets/previews/Snippet382.png "Preview for Snippet 382") +- [compare algorithms for rendering disabled images](https://github.com/eclipse-platform/eclipse.platform.swt/tree/master/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet384.java) – [(preview)](https://github.com/eclipse-platform/eclipse.platform.swt/blob/master/examples/org.eclipse.swt.snippets/previews/Snippet384.png "Preview for Snippet 384") ### **ImageData** - [display an animated GIF](https://github.com/eclipse-platform/eclipse.platform.swt/tree/master/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet141.java) diff --git a/examples/org.eclipse.swt.snippets/previews/Snippet384.png b/examples/org.eclipse.swt.snippets/previews/Snippet384.png new file mode 100644 index 0000000000000000000000000000000000000000..ae202979753684ba3935a744af127aa6ddb79791 GIT binary patch literal 129017 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νqsLyxK1KOpCSq`%;m)dv-F=oZh{Qh;1)f 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

BpfrbUs|t%n3$wD_-f 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 literal 0 HcmV?d00001 diff --git a/examples/org.eclipse.swt.snippets/resources/Snippet384/images/civil-icon.png b/examples/org.eclipse.swt.snippets/resources/Snippet384/images/civil-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f91510fa69c872cd1cfcfecbb8749cda3de5507a GIT binary patch literal 990 zcmV<410np0P)d++$@W5(`P3@G!4F0Y zI3*w_wVmqC8zP?+$|ymRZ#)8=i^AUXVenr=8`~w03)WEUjWyt7;B9rX{p(!`2z{fj zz}b!U)wjAU*Y)-8pN#F;!>+xDh4HIP^8_0m#+wh*XzuSRiaHa+JGIGnAmfmhAo7g~ z1?GZYXXfuezSh_OU4l3!jzg*7I1ULny4<<_3oDD?=)jBua~liBL?r>CZ|J}raH6K| zAfKo>DiM(LDXNzJJyBDcTc0=dkp(Dl0XPPrC^c%@_$JAa3}mQ}HS?}xT8#@M35a~- z31B*JtLyhw7NF_PqI)`>yIcTpzG%q5&8Q_PWI#IifPlz1jsi!DL0ZKODC%I@ayXK5 zhy?)8iAL4+Y8gmMChhP6j-r4kMI+RD1GT@Z#jTjw;w^#&7~tp&2!AwG;Gk^Ouyrs( z{WBa)xsuq;31}$_4cRDtd=GIPl}(J+xIg(FD?JVxaYPGPhO|(TZ|o*H;T|t#xOe!8 zz(al{%f`7hY^<{U4+_HyJK2*pejU) zxP605uio1E&;#;4Aj9mJ6Z(~Jcixft;~1it1;;|yP9lDxW#BQ-b(TgJU|ROmz-J)enk(WOa9ku}i(=EV$AM4oAvwSy;F8E8 zN|_1>FOYW$;R|gMkZusKkkmRuR`<0bBwgUWG&YY#k~SYMAQdqSyiC%+0dU51oo9i4 zz!{S7z#={c_Ia-JI?1iaP3<=ncuLm3rC&y-Wj~k-x>>OQ1{^4azw5cqo7uxj>m^jw z1Hhu^I?~M5WeyQ>4qbt5faHoh3ovx+uJm=B!wkvJnBf{Fn@t)12g0p5M%)9C%m4rY M07*qoM6N<$f`6{jGynhq literal 0 HcmV?d00001 diff --git a/examples/org.eclipse.swt.snippets/resources/Snippet384/images/color-wheel-icon.png b/examples/org.eclipse.swt.snippets/resources/Snippet384/images/color-wheel-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8db89f1c5068fe0b7f2ab42eb5d9632b8055dae8 GIT binary patch literal 1185 zcmV;S1YY}zP)TdSK^HEzEM07) zd**$*n4Q_#`8vm?-_@CO{^$AsnVI)_-d707#QJ1|SZxMfj}ix>7!#6c7+@6m6G)-j zr%IQ5qV=C3b;Z}XXF z=>#I*J-5~jE?8lM)D2>9<7cg1G+=-TXlLevDg2oW0h}yJioW*mm%MBS7p@Fs;A8Gh zn&(+6Xfppn06yD45(9px!oPjX&7ZuNhJP!)KL!k7BrOXg24NAf4wy5|{P}a9edbc7 z736^|dvvSb%0FzYWDd~1c#R9>LyRKQu8%k!bv=7C#kvPOkJLNRf=Chw*_G#Q6>}!N z+JN2i$$^muW4Q~|R}llS`S#B@)()q()Lr^~sFu##btI}QzU{Wp_ARNU12T#;*ND>W zXAX@17<vjmF-CwEe4N%q` zN*Dv}2x?v^jnk2Pw3{u}X&D#2_v*=Y$65>-fh#_uIo6t%hYeti-9<@ju0YBl^!pW4C7C#t zi3T;llzlgf@I?S=pK-)?0e;IY)G*ua-qUM+LqtqLfGALaFkT`k&8--of zlnt{TFZ{UU0;8(5XYo3YCF-VyZoGQ4{(+%IAqj+Dja;$s%Xys zw3iiIRg(y(?9QkAN<$oOlA|9%(YklB?ZEXZb7TF?gV6hT+#LUFqt&Tf*TiaJP!$6F zu;a0DBWwfi<;>k6+wEyJYKKTzg?lL5Uva)JoDs^-1>4R~#Gib^?P01r)}$|-ww~A^ zVehS(b7Rxlh1*g!(|5j6m$Is>Df&5l2x5NSD631&tG?WkFlqI&s}v41In8E>Cve!Y zvT8WKxa?E}0S>2odTmTZ+JLvHuyyMTr}3n0U}gl)h;nc^zIbMb(^7W#WE+e~vxsaY zw~JZ;gf52Dc0%kJFeH!y`W-7>f4mS2bUgnL3802!n)X#N00000NkvXXu0mjf9vC_; literal 0 HcmV?d00001 diff --git a/examples/org.eclipse.swt.snippets/resources/Snippet384/images/coreldraw-icon.png b/examples/org.eclipse.swt.snippets/resources/Snippet384/images/coreldraw-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..65ef6de7ba31f775824643bfcf0357ebdad431a2 GIT binary patch literal 1789 zcmVztQx1z~S4#FQ0&-HP%Ft&4%u!7nVw zuySR!PDsSE{Dsi;`;H~^@}uRXks92S{&@0&eCa)BIVpZdIsAZ~FkOoLpJ@i1WBv*N0U!%e z%snT?^b4hB*Z+XFd@&}yI0r$jf+KdJ90+c^kltI?k{o!mppg)b zYG%a6z~y9FUmr$r2NW@YF?h9MUZtL{OauoXTOt0Zhmeq^14+V1Wi2(33J^iT6$ORb zvg8T$H7bZK1#k!~D*!YNYhcdxZ8J)N`Y@NnRNo`xcd^(`$s)4>4v*Z3%6J29z;z}$C!Nrl34~}{OOa{WrHU#1s1K(Wv$(O?LI1`Bj*5b<{YHVi5XgBX@Do7++?rMFF!E;bf)Wpd}#SumGDD z>`Fd4`;XJr>D$}Q>DxQ%fD2&4c?duRHEz7E##YmkJxf}!E0yVX6 zx<7y4w66N)lX~>LszU2^V>|~y*UHa*l0ijW?q9G|1b0~yzU78KVu5#4S#8idS`aKx zr1{0UssEIv`!IyJgmD)Ub`B*pqyY{7O~mByjT>)gJjfss^fqjpagPE3Qn=)EI!*=r z=-7{VMf8lWwu)^4u;ZUK3c$?(pcHlh_y#GwF=_)pIr8M$L@9G79`t77rCf8Ql&xVa zx(EQi_A{rs=5*f)sIdzC^q6BvS{Y@75z*WX01;bmtd4}^ltM}vJ_xN3ElhWf+5i9~ zO4(;4rR;jwWVhNT2W`B&0U-Il*LLrZ3;xueqIo)T923b`wlEyxyegPB0I-Dbb}iO5 zakCY`dZqB(<#aAT=5=H>-C??wPv zd|%t)NmT`>`jl;K2<$!sM*$$F!!KyzSq||_7W2cdEk7JiV^{;9SDMQa*n_L|}N zhn)cc_)_`SYy1zOOrCTC&!=;t|9n=v`O+Ew0(Ih1a{5Y;}oS7SGBx zjm$hs0|2lno&IgK%I%Vz)yN^;j~wk4k05yh6=|>4q3>5p-m!_h>Sy`C8!hjs4FEt@ zwfiewP`lx&Ta>T%i%*OItV-A)`O&l`8fv%gSg&0P=ZKrIGJ5Zn* z%=~hBPARo!+xG1Tu9R!gjc7DMpcH@wWhqurqdIn#aYd(~Kele)c9w{m02lyolZ=G7Y>S)I6SUTa z007**yz&)du)?M-Kq-aeIE4Y&Th+DVIu#AE6QE3p)N`+tLTk-*I{o#;LI^sY4z_J) z2LM>DR&=}F*ollWD5YY@EtgBQ*3@dX{Q#=fD(!YV*3()iE|crJ%x1G)(mT4B;O_yv&F7iC+yGk5W+pE;fJUQ{$xG7C%ScMe zVzG$54cF^6l}aUcoH2%ay^inu`vIg~r)dwCji*Mj$Fk(7B)VE zkD`sj`VeAoWu@h2il`xoh@d1rU*jW_0de~I(7qQuoo`?ZqkTUei3p|T6QwiY bkpIX#eJfi-qBdPX00000NkvXXu0mjfCD5NN literal 0 HcmV?d00001 diff --git a/examples/org.eclipse.swt.snippets/resources/Snippet384/images/magnet-magnetic-icon.png b/examples/org.eclipse.swt.snippets/resources/Snippet384/images/magnet-magnetic-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..49604619e087db1d0d1b4845b517ba66305bedeb GIT binary patch literal 1393 zcmV-%1&;cOP)xj{Yv7T8%cuum)mz_pfmB8jR3bO_YnFsbV7Xao#d1F=x!WP?P31psF2 z56Gs?q|#}6;=LI-K()e~qk#`8AQo!8TVNM3!RwEI^a=4@KMz*nzl>IZGYEW_o1)iRw6#?vRBNT8LV#}If!aw`AC6W)P7TCDjSmT|_WCT!X*Z4Azvaldan^bH zr5Kf!^J*tm6;$m2@vpC=)Lt+FE44s9LLw_57HS9!@)MrS2ZNut4aPB#*0t_DT`1f} zt__N7n)$OL*!N!WBaWS801nnQlnJtiylu~eCj}M1p z{`zX-Bv~-@I8Nx4WiNl+KTX#&q40;!d+E* za^W4u$gH}yT_=mlHaUCwB48PSLiku<;gZYZtLG%j?8(lPSg3KGz`YsAIh!V7 zvsXPW5USr3X)gxex-T{z*ovp70{)V-B|hij>hZx1-nmAgE;CS|*XF!4pA`#lzVX%| zr_ZeS!b^M({t{ogh^#;G+aD|T9X^_U01a?OW{^^gx9kMA6a#Oo4I51)K6RHrcZqf$ zu>g)Slm@a|46xiWrqS!j{yNBg?=D6_%4HcaQ%{~W?(;7gBD-yAsejE+6~yCdRlTQreDJ6@)+l5j7QdK*4Z>ub)Tc*)SE=$Ha8btR z6Je~=-|Lv>7MvwZpQ#=nY#JDEfUhzG0ZL77!V0f7*Myh0PPsX6Cz@-*Gga9ET-m>% zP~rG;5>fc#TvyjygC!vCwbRT6;@DL8x?m zIJrmJ?xNEsM7IrEYXT4pHQp}pO~#p4<+Pj1moSVuB2<_>_z8>Ncy)AJ=TLD5peow* zt-{)j( z4P^#-N8ph{78qdLE&AX{+diy-jKxBYw+g%h++4sq9SSRw)?GWXZAZcX3x^euu|uJT zDT2(CJ|R^Kvo>q#QHnS>p?+Kh4;s*b9|)pWs}U7c5D^bjWbH|`tg@s@DP>JO%w#)e zGfCDBh|oU_@7MGGpZ~n`JkOi(f5p<`(!S-TLsL8D$)yLCMze^=aSdLnl?p!(+I0Wo z(sW1n%Z=_|NAPMEdAnMl!x5avi}|R$-ft83IuC#H2YiTU@ie}zG@3Jmh&#HuWbdva z&S&s-!gT_t&R6SUzuo3Un7e8gdsAyg9LRDo2JXi0)cDqr*-QaJw{s57zV+1|2hfErfY%p_EgZ&K{E6eWQsIk#>pdTpzrwME>nsjWN99((T@I3OJ&!$jEfLnKG@6g# zn_8*x({`MN=j1XQKbjB2IA%9zd{!%I@9 z+lNc-YJE8$mEV^bJvYpGf~P8t=Cxxu-zCnXEawtmM|*=1bEAk8yDbqs0Q3GC`B~W4 zs@A7_#39yD8(_GGcTyro;hv<8Y|SY62%ljpU?EM~NuGXW&1d0Y(*BOZfc3rNVh8u7 z1?(8DxboeMbzGfcR&==*9GIwpASMj)F-k*BcjH&gwX5~Hi3yM#DLxekV;1&{V*w6M zL_jOPWP0~T6T`0Qd7Mi6_l9WU!Z7~6b_)V-5+Ci4xPFA*BF~cn2a#wKY2m!>wx`GqATB+~@R2rLUyCIHbP%9PIaC#WqbX2~GC)#mw zd3Ou}`}0wGkqKr&f;;s6%F4299ep!rOylif7T+iR8^v{hT^y8C;s9NRAP8o0W}*V} zQTZfJLc3c3MSQ(~fLm|_PUoZYa(d6CKf$(fMZgsSX#wey+v^W2(W8*&yU;hciBuYP zpCM@BZQbswAh?M41~G?%jgD>ymxc&<6c6Be%-|usu)TK}f=T^3{m=0?(euk~fc^oY P00000NkvXXu0mjfLt&3D literal 0 HcmV?d00001 diff --git a/examples/org.eclipse.swt.snippets/resources/Snippet384/images/medal-color-icon.png b/examples/org.eclipse.swt.snippets/resources/Snippet384/images/medal-color-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..79c287db25e953ad196c934323f859ff93d8b3fa GIT binary patch literal 1341 zcmV-D1;YA?P)y%-NYUEAWVOZ6TSATL)^J2NnrS&GqUl7gBMi@fs%`ZM^L7 za8=13ui-@8+O0J&jGV2z1f=i6KRrFlMWNa3!+qNmvQ)CWrD+YCcK}jRd$~#&Ur*KD zbotVDSOFm5UA2|ANda`XL}qKv!Ev>!n_Zz%pnnSf|J4sM22^Ez1bpRg755i5it#6> zTO-qyD^36p7W9qPJbZ1ZQR%!j8F!x}-V5E(dw^*Lr8BM+OU=*pXf|PH54u|$QLZ>p z!WEp_fZ2e9Dh0ff*yfRc|3;MYpDPXr*fZU+J$Wu*{10-u%u09f!#e;0!Np6Z${ z-7S%Oy~=7EGX!k$9%sMNp}X>c3!8+{?LgE+!>19u$^fvYI65T&fUf0Dhk*4N zA8OZ7=0+~1Y|)pd?!2D;MHFipnFARrdFb-YSEZ4v@wb>^=)&Bw5B6v zB>+l|pi)ERo?sVzzoX2HI12HQ(V;Kh6#zj0C&7c&kH((QbQ@R|^DrysAY}fJU8@A? z_*qi%GoUk@r+JPq?9IGbPQNTb><{K6I05*D3}9EULYj4DfmM2#xp15;76F))lU|gE5|`OPQIX7i(UOB2ou1EVDIHOZBGkNfLJHZz%l?UFdu2w z7WIst>t(dJr&!di#R@FUo-V6jpKP8o0I&%FVPICwDJp8Eh@C%A?814pD&9WKiU+cH z;f_{`Fue-EBLIfgfDoDYi%KR*-@1jHh~r$niaRz2z^%Vd;%f+FRQNHgs*tuHAuJ55 z0oUovX-ySi27oZCa*5RNFhj?VqEe~6#*yA0=P zhpAuPh7l;MY z0Dl9h)K$=KUctFBlsOOrWJV%2G?YKBT~z8yp4LXzk=_l?u-{VeB{($ys2wkT(9>XAv?8K=R5!!CFIdU;w)@lhbO9 z#PDIXN&sBYE_0?mUiwq7{HwT=HsE^zY1ClXJcW>6pL^uYlQ)l`(!<%*Gr?wl@ams% zGm3TcKJW&BkbbP-Vod)midRpOPFx}t`!jpx03QUK*;!71LV%Iqgp{`41H6_Sl76HW zK^mFuSi2**sR6W#k01R=CB^HNPiU{N?8yOSBi6}A;A6n^tN3>O3%nX^=G)2WP8t9p zb{rp)=YS2sVj%lRr5`v6976F;@G%@Ojl%dJ4$iJ-aRH6O00000NkvXXu0mjfO7?5@ literal 0 HcmV?d00001 diff --git a/examples/org.eclipse.swt.snippets/resources/Snippet384/images/message-bubble-white-icon.png b/examples/org.eclipse.swt.snippets/resources/Snippet384/images/message-bubble-white-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3bd42a5cb0526bd8bf86097b5db424dd96f2ef40 GIT binary patch literal 429 zcmV;e0aE^nP)$YITrO0EP*7NttEkC^yABI~!3EL6#KZu9 z!-5bh8Y>z!#zrhG?Dzv-cW-Iqu9Jy?UxxF(SS!4F=c3yVhx0A`tK*b5_ z5zwy4|2e2uBnO~TrMxas7x*U%G$-({z$b?L#G?fN0Q7+#(2CeE;Ps8;88DwTI6mL< zJf8!|vJCZI#PVf(@Vww6H}c8Fu2X|^qMAzz?(Z1_;G7Q-JP&K>+oRNxPy3n?U_}fMJ z3h2yA4%5%T74STS@Nrh+vI6m}oB~fm2tQ{nPssp^w~+V1`hCfhQM>Ay`Xag!{h#>* X^jx6qOhagZ00000NkvXXu0mjf?QOuX literal 0 HcmV?d00001 diff --git a/examples/org.eclipse.swt.snippets/resources/Snippet384/images/padlock-icon.png b/examples/org.eclipse.swt.snippets/resources/Snippet384/images/padlock-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..642d0c032276db4ee83cff8e717af4fb6ed82a68 GIT binary patch literal 760 zcmV(J93-JRXpVOPJG zdGGsvzu)(}znyvWMoqGZ~?dhM1V%MGzAO-Pb9qlXy~TXn!;&dI2vmQ9s$P+ zgnj~U#|?eBWCp^~*mdAB;NP*7R@Yqot+=5-EmYg%K>R$=YZ3Va^ayCy{HCV)O-(>E z(4*Ei4fU$ryvW;ua5NSG#(;pL;zDqFs9&GS6@Q{Lc0fvA0AWSV0WEPupR>~_)PZ{z z@o^#Ov=avy>epw4pc5EZR6y0Rg>47I(O4xg3)Cp;Y~0Y_7BIY-dj@!;rYRs8H}sWU zvH3c1+9E#UR2)FXj;Lvks+AM@41_FW!>PDUPRK4OpMjud{KJI-YfjKED4zkZWxVdf zfHlW!7gTT`C^xd6g0*D(RUx>PnAjJYU8pz$(A2Q@p{Zf*TQP+vrhSJerhO*?g0&l8 z+nQDfrR1frb@;ihfpoIH(Ic3oe4Q~($w7bX@YE);O-Kj=WfTYSD2)tJMlna&a|5=I zM1QCJ0npL5%+W*X0vRPVU?emi^wwg^|MO?>_jCW|0@1eRqH7iX7f1;Y`)ant z0Zhe7X`fdz14}C&=2I0}{Cui{rIq4usiHHgHIw?fjV!*tZi8yg@mbWp0f6qVMf~1O zzx`fGch{nuQtk{yT2{Gp@$c6B+NmWXEvvg{0N~wdWoG=j5*PQMdjr3Idl~(nIf+lt zc^RAZ?Vf>GLseP7cpy>b%7CklD7_BnLOV7c$KO~bFmU%u%AHyc?D@-R`+30K*{>+< q)YxXglrkxyuUz61`b;U4R_-5lhQY+hIocZl00009$*Im literal 0 HcmV?d00001 diff --git a/examples/org.eclipse.swt.snippets/resources/Snippet384/images/pig-piggy-color-icon.png b/examples/org.eclipse.swt.snippets/resources/Snippet384/images/pig-piggy-color-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a1f33d93e69914c778d32aa0e7c31cdb57098235 GIT binary patch literal 1332 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 + * Various parameters can be adjusted, and the background color can be selected to match typical Eclipse themes light, dark, and darker. + *

+ *

Usage

+ *
    + *
  1. Select a folder containing images. Example images are provided in: + *
    /org.eclipse.swt.snippets/resources/Snippet384/images
  2. + *
  3. Adjust the algorithms parameters to experiment with different disabled effects. Defaults match what is used in Eclipse.
  4. + *
  5. Switch between themes to see how the result looks on various backgrounds.
  6. + *
+ * + * This snippet was created to help evaluate and pick a new image-disabling algorithm for Eclipse. + *

+ * Related discussion: + *
https://github.com/eclipse-platform/eclipse.platform.swt/discussions/1741 + *

+ *

+ * Pull Request: + *
https://github.com/eclipse-platform/eclipse.platform.swt/pull/1936 + *

+ *

+ * For a complete list of SWT example snippets, visit: + *
https://www.eclipse.org/swt/snippets/ + *

+ */ +public class Snippet384 { + + private static Display display = new Display(); + + private static final Color LIGHT_THEME_BACKGROUND = display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND); + private static final Color DARK_THEME_GRAY = new Color(47, 47, 47); + private static final Color DARK_THEME_GRAY_DARKER = new Color(72, 72, 76); + + // colors and thresholds used in the current Win32/macOS algorithm + private static final RGB GRAY_LOW = display.getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW).getRGB(); // == RGB(160, 160, 160) on Windows + private static final RGB GRAY_HIGH = display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND).getRGB(); // == RGB(240, 240,240) on Windows + private static final int WIN32_COCOA_THRESHOLD = 98304; // == 3 * 2^15, this is the threshold used in the legacy win32/macOS disabling algorithm + private static final int BACKGROUND_THRESHOLD = GRAY_HIGH.red * GRAY_HIGH.red + GRAY_HIGH.green + GRAY_HIGH.green + GRAY_HIGH.blue * GRAY_HIGH.blue; // == on windows 240^2 * 3 + private static final int MAX_BRIGHTNESS = 255 * 255 * 3; + + // change these to adjust the sliders default values + private static final int ADJUSTABLE_THRESHOLD_LOW_DEFAULT = WIN32_COCOA_THRESHOLD; + private static final int ADJUSTABLE_THRESHOLD_HIGH_DEFAULT = BACKGROUND_THRESHOLD; + private static final RGB ADDITIONAL_GRAY_MID_DEFAULT = new RGB(214, 214, 214); // seems to be good middle ground + + private static final int HSB_DISABLING_BRIGHTNESS_DEFAULT = 90; + private static final int HSB_DISABLING_ALPHA_DEFAULT = 50; + private static final int HSB_DISABLING_SATURATION_DEFAULT = 20; + + private static final int ECLIPSE_RENDER_MOJOE_BRIGHTNESS_DEFAULT = 290; + private static final int ECLIPSE_RENDER_MOJO_ALPHA_DEFAULT = 100; + + public static void main(String[] args) { + + Shell shell = new Shell(display); + shell.setText("Disabled Icon Viewer"); //$NON-NLS-1$ + shell.setLayout(new GridLayout(1, false)); + + DirectoryDialog directoryDialog = new DirectoryDialog(shell); + directoryDialog.setText("Select Image Folder"); //$NON-NLS-1$ + directoryDialog.setMessage("Select a folder containing images"); //$NON-NLS-1$ + directoryDialog.setFilterPath(new File("resources/Snippet384/images").getAbsolutePath()); + String selectedDirectory = directoryDialog.open(); + + if (selectedDirectory == null) { + System.out.println("No folder selected, exiting..."); //$NON-NLS-1$ + display.dispose(); + return; + } + + Map> imageRowStorage = new HashMap<>(); + List originalImages = loadImagesFromFolder(selectedDirectory, display); + + // define PixelTransformers + HSBConversionDisablingTransformer desaturatedTransformer = new HSBConversionDisablingTransformer(HSB_DISABLING_BRIGHTNESS_DEFAULT / 100.f, HSB_DISABLING_ALPHA_DEFAULT / 100.f, HSB_DISABLING_SATURATION_DEFAULT / 100.f); + GTKDisablingTransformer gtkTransformer = new GTKDisablingTransformer(); + ThresholdBasedDisablingTransformer win32MacTransformer = new ThresholdBasedDisablingTransformer(GRAY_LOW, GRAY_HIGH, GRAY_HIGH, WIN32_COCOA_THRESHOLD, WIN32_COCOA_THRESHOLD, 1.f); + EclipseRenderMojoDisablingTransformer eclipseMojoTransformer = new EclipseRenderMojoDisablingTransformer(ECLIPSE_RENDER_MOJOE_BRIGHTNESS_DEFAULT / 100f, ECLIPSE_RENDER_MOJO_ALPHA_DEFAULT / 100.f); + HSBConversionDisablingTransformer hsbTransformer = new HSBConversionDisablingTransformer(HSB_DISABLING_BRIGHTNESS_DEFAULT / 100.f, HSB_DISABLING_ALPHA_DEFAULT / 100.f, HSB_DISABLING_SATURATION_DEFAULT / 100.f); + ThresholdBasedDisablingTransformer adjThreshAdditGray = new ThresholdBasedDisablingTransformer(GRAY_LOW, ADDITIONAL_GRAY_MID_DEFAULT, GRAY_HIGH, ADJUSTABLE_THRESHOLD_LOW_DEFAULT, ADJUSTABLE_THRESHOLD_HIGH_DEFAULT, 1.f); + + // create transformed icon rows + Composite imagesComposite = new Composite(shell, SWT.NONE); + imagesComposite.setBackgroundMode(SWT.INHERIT_DEFAULT); + imagesComposite.setLayout(new GridLayout(2, false)); + addTransformationRow(imagesComposite, "Original Images:", rgba -> rgba, originalImages, imageRowStorage); + addTransformationRow(imagesComposite, "(current) Desaturated, Eclipse Default:", desaturatedTransformer, originalImages, imageRowStorage); + addTransformationRow(imagesComposite, "(legacy) Win32/macOS:", win32MacTransformer, originalImages, imageRowStorage); + addTransformationRow(imagesComposite, "(legacy) GTK+:", gtkTransformer, originalImages, imageRowStorage); + addTransformationRow(imagesComposite, "(legacy) Eclipse Pre-Disabling Mojo:", eclipseMojoTransformer, originalImages, imageRowStorage); + addTransformationRow(imagesComposite, "(experimental) HSB Transformation:", hsbTransformer, originalImages, imageRowStorage); + addTransformationRow(imagesComposite, "(experimental) Adjustable Threshold + 3rd Gray Tone:", adjThreshAdditGray, originalImages, imageRowStorage); + + // add sliders + Composite eclipseMojoSliderComposite = new Composite(shell, SWT.NONE); + eclipseMojoSliderComposite.setBackgroundMode(SWT.INHERIT_DEFAULT); + eclipseMojoSliderComposite.setLayout(new GridLayout(9, false)); + Scale eclipsePreDisablingBrightness = addScale(eclipseMojoSliderComposite, "Eclipse Mojo Brightness %:", 40, 350, ECLIPSE_RENDER_MOJOE_BRIGHTNESS_DEFAULT); + Scale eclipsePreDisablingAlpha = addScale(eclipseMojoSliderComposite, "Eclipse Mojo Alpha %:", 0, 100, ECLIPSE_RENDER_MOJO_ALPHA_DEFAULT); + + Composite hsbSliderComposite = new Composite(shell, SWT.NONE); + hsbSliderComposite.setBackgroundMode(SWT.INHERIT_DEFAULT); + hsbSliderComposite.setLayout(new GridLayout(9, false)); + Scale hsbDisablingBrightness = addScale(hsbSliderComposite, "HSB Brightness %:", 40, 140, HSB_DISABLING_BRIGHTNESS_DEFAULT); + Scale hsbDisablingSaturation = addScale(hsbSliderComposite, "HSB Saturation %:", 0, 100, HSB_DISABLING_SATURATION_DEFAULT); + Scale hsbDisablingAlpha = addScale(hsbSliderComposite, "HSB Alpha %:", 0, 100, HSB_DISABLING_ALPHA_DEFAULT); + + Composite adjThreshAddGraySliderComposite = new Composite(shell, SWT.NONE); + adjThreshAddGraySliderComposite.setLayout(new GridLayout(12, false)); + adjThreshAddGraySliderComposite.setBackgroundMode(SWT.INHERIT_DEFAULT); + Scale lowScale = addScale(adjThreshAddGraySliderComposite, "Adjustable Threshold Low:", 0, MAX_BRIGHTNESS, WIN32_COCOA_THRESHOLD); + Scale highScale = addScale(adjThreshAddGraySliderComposite, "Adjustable Threshold High:", 0, MAX_BRIGHTNESS, ADJUSTABLE_THRESHOLD_HIGH_DEFAULT); + Scale thirdGray = addScale(adjThreshAddGraySliderComposite, "3rd Gray (set R,G,B to):", GRAY_LOW.red, GRAY_HIGH.red, ADDITIONAL_GRAY_MID_DEFAULT.red); + Scale adjThreshAlphaChange = addScale(adjThreshAddGraySliderComposite, "Alpha %:", 0, 100, 100); + + // update images on slider change + addImageUpdateScaleListener(hsbDisablingBrightness, hsbTransformer, value -> hsbTransformer.setBrightnessChange(value / 100.f), imageRowStorage, originalImages); + addImageUpdateScaleListener(hsbDisablingAlpha, hsbTransformer, value -> hsbTransformer.setAlphaChange(value / 100.f), imageRowStorage, originalImages); + addImageUpdateScaleListener(hsbDisablingSaturation, hsbTransformer, value -> hsbTransformer.setSaturationChange(value / 100.f), imageRowStorage, originalImages); + + addImageUpdateScaleListener(eclipsePreDisablingBrightness, eclipseMojoTransformer, value -> eclipseMojoTransformer.setBrightnessChange(value / 100.f), imageRowStorage, originalImages); + addImageUpdateScaleListener(eclipsePreDisablingAlpha, eclipseMojoTransformer, value -> eclipseMojoTransformer.setAlphaChange(value / 100.f), imageRowStorage, originalImages); + + addImageUpdateScaleListener(lowScale, adjThreshAdditGray, adjThreshAdditGray::setThresholdLow, imageRowStorage, originalImages); + addImageUpdateScaleListener(highScale, adjThreshAdditGray, adjThreshAdditGray::setThresholdHigh, imageRowStorage, originalImages); + addImageUpdateScaleListener(thirdGray, adjThreshAdditGray, value -> adjThreshAdditGray.setGrayMid(new RGB(value, value, value)), imageRowStorage, originalImages); + addImageUpdateScaleListener(adjThreshAlphaChange, adjThreshAdditGray, value -> adjThreshAdditGray.setAlphaChange(value / 100.f), imageRowStorage, originalImages); + + // combo box for theme selection + Combo themeCombo = new Combo(shell, SWT.DROP_DOWN | SWT.READ_ONLY); + themeCombo.setItems("Light Theme", "Dark Theme", "Darker Theme"); + themeCombo.select(0); + themeCombo.addListener(SWT.Selection, e -> { + int selected = themeCombo.getSelectionIndex(); + switch (selected) { + case 1: + shell.setBackground(DARK_THEME_GRAY); + imagesComposite.setBackground(DARK_THEME_GRAY_DARKER); + break; + case 2: + shell.setBackground(DARK_THEME_GRAY_DARKER); + imagesComposite.setBackground(DARK_THEME_GRAY); + break; + default: + shell.setBackground(LIGHT_THEME_BACKGROUND); + imagesComposite.setBackground(LIGHT_THEME_BACKGROUND); + } + }); + + shell.open(); + shell.layout(); + + while (!shell.isDisposed()) { + if (!display.readAndDispatch()) { + display.sleep(); + } + } + + originalImages.forEach(Image::dispose); + display.dispose(); + } + + private static void addTransformationRow(Composite parent, String labelText, PixelTransformer transformer, + List originalImages, Map> imageRowStorage) { + Label label = new Label(parent, SWT.NONE); + label.setText(labelText); + + Composite composite = new Composite(parent, SWT.NONE); + composite.setLayout(new GridLayout(originalImages.size(), false)); + + List