diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/SkijaGC.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/SkijaGC.java index cc2711d0ee3..1273904006f 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/SkijaGC.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/SkijaGC.java @@ -781,8 +781,9 @@ public void fillRoundRectangle(int x, int y, int width, int height, int arcWidth @Override public Point textExtent(String string, int flags) { - Rect textExtent = this.font.measureText(replaceMnemonics(string)); - return DPIUtil.autoScaleDown(new Point(Math.round(textExtent.getWidth()), getFontMetrics().getHeight())); + float height = font.getMetrics().getHeight(); + float width = font.measureTextWidth(replaceMnemonics(string)); + return new Point((int) DPIUtil.autoScaleDown(width), (int) DPIUtil.autoScaleDown(height)); } @Override diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllGraphicsTests.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllGraphicsTests.java index 67ebf64c7f9..03868bcd36f 100644 --- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllGraphicsTests.java +++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllGraphicsTests.java @@ -38,7 +38,9 @@ Test_org_eclipse_swt_graphics_RGBA.class, Test_org_eclipse_swt_graphics_TextLayout.class, Test_org_eclipse_swt_graphics_ImageLoader.class, - Test_org_eclipse_swt_graphics_ImageLoaderEvent.class }) + Test_org_eclipse_swt_graphics_ImageLoaderEvent.class, + SkijaGCTest.class, +}) public class AllGraphicsTests { public static void main(String[] args) { JUnitCore.main(AllGraphicsTests.class.getName()); diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/SkijaGCTest.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/SkijaGCTest.java new file mode 100644 index 00000000000..ef4f0e7f78b --- /dev/null +++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/SkijaGCTest.java @@ -0,0 +1,40 @@ +/******************************************************************************* + * 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.tests.junit; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + +import org.eclipse.swt.graphics.NativeGC; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.graphics.SkijaGC; +import org.eclipse.swt.widgets.Display; +import org.junit.Test; + +public class SkijaGCTest { + + @Test + public void textExtent() { + NativeGC nativeGC = new NativeGC(Display.getDefault()); + SkijaGC gc = SkijaGC.createDefaultInstance(new NativeGC(Display.getDefault())); + Point extentA = gc.textExtent("A"); + assertEquals(gc.getFontMetrics().getHeight(), extentA.y); + Point extentAwhitespace = gc.textExtent("A "); + assertNotEquals(extentA.x, extentAwhitespace.x); + assertEquals(gc.getFontMetrics().getHeight(), extentAwhitespace.y); + Point extentAwhitespaceA = gc.textExtent("A A"); + assertNotEquals(extentAwhitespace.x, extentAwhitespaceA.x); + assertEquals(gc.getFontMetrics().getHeight(), extentAwhitespaceA.y); + gc.dispose(); + nativeGC.dispose(); + } + +}