Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public void testCalculateGetBoundsWithVerticalIndent() {
scaledLayout.setText(text);
Rectangle scaledBounds = scaledLayout.getBounds();

assertNotEquals(layout.nativeZoom, scaledLayout.nativeZoom, "The native zoom for the TextLayouts must differ");
assertNotEquals(layout.fontZoom, scaledLayout.fontZoom, "The font zooms for the TextLayouts must differ");
assertEquals(unscaledBounds.height, scaledBounds.height, 1, "The public API for getBounds with vertical indent > 0 should give a similar result for any zoom level");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,7 @@ public static Optional<AutoScaleMethod> forString(String s) {
}
private static final AutoScaleMethod AUTO_SCALE_METHOD_SETTING;
private static AutoScaleMethod autoScaleMethod;

private static String autoScaleValue;
private static AutoScaleConfig autoScaleConfig;

/**
* System property that controls the autoScale functionality.
Expand Down Expand Up @@ -97,21 +96,41 @@ public static Optional<AutoScaleMethod> forString(String s) {
private static final String SWT_AUTOSCALE_METHOD = "swt.autoScale.method";

static {
autoScaleValue = System.getProperty (SWT_AUTOSCALE);

setAutoScaleValue(System.getProperty (SWT_AUTOSCALE));
String value = System.getProperty (SWT_AUTOSCALE_METHOD);
AUTO_SCALE_METHOD_SETTING = AutoScaleMethod.forString(value).orElse(AutoScaleMethod.AUTO);
autoScaleMethod = AUTO_SCALE_METHOD_SETTING != AutoScaleMethod.AUTO ? AUTO_SCALE_METHOD_SETTING : AutoScaleMethod.NEAREST;
}

static String getAutoScaleValue() {
return autoScaleValue;
return autoScaleConfig.value;
}

static void setAutoScaleValue(String autoScaleValueArg) {
autoScaleValue = autoScaleValueArg;
autoScaleConfig = new AutoScaleConfig(autoScaleValueArg);
}

private static final class AutoScaleConfig {
private final String value;
private final boolean useAutoScaledFontZoom;

AutoScaleConfig(String value) {
this.value = value;
useAutoScaledFontZoom = isIntegerAutoScale(value);
}

private static boolean isIntegerAutoScale(String value) {
if (value == null)
return false;
try {
Integer.parseInt(value);
return true;
} catch (NumberFormatException e) {
return false;
}
}
}

public static int pixelToPoint(int size, int zoom) {
if (zoom == 100 || size == SWT.DEFAULT) return size;
float scaleFactor = getScalingFactor (zoom);
Expand Down Expand Up @@ -343,7 +362,15 @@ static void setUseSmoothScalingByDefaultProvider(UseSmoothScalingProvider provid
}

public static int getZoomForAutoscaleProperty (int nativeDeviceZoom) {
return getZoomForAutoscaleProperty(nativeDeviceZoom, autoScaleValue);
return getZoomForAutoscaleProperty(nativeDeviceZoom, autoScaleConfig.value);
}

public static int getFontZoomForAutoscaleProperty(int nativeDeviceZoom) {
if (autoScaleConfig.useAutoScaledFontZoom ) {
return getZoomForAutoscaleProperty(nativeDeviceZoom);
} else {
return nativeDeviceZoom;
}
}

private static int getZoomForAutoscaleProperty (int nativeDeviceZoom, String autoScaleValue) {
Expand Down Expand Up @@ -376,13 +403,13 @@ private static int getZoomForAutoscaleProperty (int nativeDeviceZoom, String aut
}

public static void runWithAutoScaleValue(String autoScaleValue, Runnable runnable) {
String initialAutoScaleValue = DPIUtil.autoScaleValue;
DPIUtil.autoScaleValue = autoScaleValue;
String initialAutoScaleValue = autoScaleConfig.value;
setAutoScaleValue(autoScaleValue);
DPIUtil.deviceZoom = getZoomForAutoscaleProperty(nativeDeviceZoom);
try {
runnable.run();
} finally {
DPIUtil.autoScaleValue = initialAutoScaleValue;
setAutoScaleValue(initialAutoScaleValue);
DPIUtil.deviceZoom = getZoomForAutoscaleProperty(nativeDeviceZoom);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -342,7 +342,7 @@ void checkGC(int mask) {
}
}
if ((state & FONT) != 0) {
long fontHandle = SWTFontProvider.getFontHandle(data.font, data.nativeZoom);
long fontHandle = SWTFontProvider.getFontHandle(data.font, getFontZoom());
OS.SelectObject(handle, fontHandle);
long[] hFont = new long[1];
long gdipFont = createGdipFont(handle, fontHandle, gdipGraphics, device.fontCollection, null, hFont);
Expand Down Expand Up @@ -463,7 +463,7 @@ void checkGC(int mask) {
OS.SetTextColor(handle, data.foreground);
}
if ((state & FONT) != 0) {
long fontHandle = SWTFontProvider.getFontHandle(data.font, data.nativeZoom);
long fontHandle = SWTFontProvider.getFontHandle(data.font, getFontZoom());
OS.SelectObject(handle, fontHandle);
}
}
Expand Down Expand Up @@ -2712,7 +2712,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 = SWTFontProvider.getFontHandle(data.font, data.nativeZoom);
if (hFont == 0 && data.font != null) hFont = SWTFontProvider.getFontHandle(data.font, getFontZoom());
long oldFont = 0;
if (hFont != 0) oldFont = OS.SelectObject(hdc, hFont);
TEXTMETRIC lptm = new TEXTMETRIC();
Expand Down Expand Up @@ -2802,7 +2802,7 @@ private RectF drawText(long gdipGraphics, char[] buffer, int start, int length,
}
long hdc = Gdip.Graphics_GetHDC(gdipGraphics);
long hFont = data.hGDIFont;
if (hFont == 0 && data.font != null) hFont = SWTFontProvider.getFontHandle(data.font, data.nativeZoom);
if (hFont == 0 && data.font != null) hFont = SWTFontProvider.getFontHandle(data.font, getFontZoom());
long oldFont = 0;
if (hFont != 0) oldFont = OS.SelectObject(hdc, hFont);
if (start != 0) {
Expand Down Expand Up @@ -3945,7 +3945,7 @@ public FontMetrics getFontMetrics() {
checkGC(FONT);
TEXTMETRIC lptm = new TEXTMETRIC();
OS.GetTextMetrics(handle, lptm);
return FontMetrics.win32_new(lptm, data.nativeZoom);
return FontMetrics.win32_new(lptm, getFontZoom());
}

/**
Expand Down Expand Up @@ -4378,9 +4378,9 @@ private void init(Drawable drawable, GCData data, long hDC) {
}
if (data.font != null) {
data.state &= ~FONT;
data.font = Font.win32_new(data.font, data.nativeZoom);
data.font = Font.win32_new(data.font, DPIUtil.getFontZoomForAutoscaleProperty(data.nativeZoom));
} else {
data.font = SWTFontProvider.getFont(device, OS.GetCurrentObject(hDC, OS.OBJ_FONT), data.nativeZoom);
data.font = SWTFontProvider.getFont(device, OS.GetCurrentObject(hDC, OS.OBJ_FONT), DPIUtil.getFontZoomForAutoscaleProperty(data.nativeZoom));
}
Image image = data.image;
if (image != null) {
Expand Down Expand Up @@ -5015,12 +5015,12 @@ private class SetFontOperation extends Operation {
private final Font font;

SetFontOperation(Font font) {
this.font = font != null ? SWTFontProvider.getFont(font.getDevice(), font.getFontData()[0], data.nativeZoom) : null;
this.font = font != null ? SWTFontProvider.getFont(font.getDevice(), font.getFontData()[0], getFontZoom()) : null;
}

@Override
void apply() {
data.font = font != null ? SWTFontProvider.getFont(font.getDevice(), font.getFontData()[0], data.nativeZoom) : SWTFontProvider.getSystemFont(device, data.nativeZoom);
data.font = font != null ? SWTFontProvider.getFont(font.getDevice(), font.getFontData()[0], getFontZoom()) : SWTFontProvider.getSystemFont(device, getFontZoom());
data.state &= ~FONT;
}
}
Expand Down Expand Up @@ -5725,7 +5725,7 @@ void apply() {
*/
public Point stringExtent (String string) {
if (string == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
return Win32DPIUtils.pixelToPoint(drawable, stringExtentInPixels(string), data.font.zoom);
return Win32DPIUtils.pixelToPoint(drawable, stringExtentInPixels(string), getZoom());
}

Point stringExtentInPixels (String string) {
Expand Down Expand Up @@ -5805,7 +5805,7 @@ public Point textExtent (String string) {
* </ul>
*/
public Point textExtent (String string, int flags) {
return Win32DPIUtils.pixelToPoint(drawable, textExtentInPixels(string, flags), data.font.zoom);
return Win32DPIUtils.pixelToPoint(drawable, textExtentInPixels(string, flags), getZoom());
}

Point textExtentInPixels(String string, int flags) {
Expand Down Expand Up @@ -5942,6 +5942,10 @@ int getZoom() {
return DPIUtil.getZoomForAutoscaleProperty(data.nativeZoom);
}

int getFontZoom() {
return DPIUtil.getFontZoomForAutoscaleProperty(data.nativeZoom);
}

private void storeAndApplyOperationForExistingHandle(Operation operation) {
operations.add(operation);
operation.apply();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ public final class TextLayout extends Resource {

private MetricsAdapter metricsAdapter = new MetricsAdapter();

int nativeZoom = DPIUtil.getNativeDeviceZoom();
int fontZoom = DPIUtil.getFontZoomForAutoscaleProperty(DPIUtil.getNativeDeviceZoom());

static final char LTR_MARK = '\u200E', RTL_MARK = '\u200F';
static final int SCRIPT_VISATTR_SIZEOF = 2;
Expand Down Expand Up @@ -363,9 +363,9 @@ void checkLayout () {
* Break paragraphs into lines, wraps the text, and initialize caches.
*/
void computeRuns (GC gc) {
int newNativeZoom = getNativeZoom(gc);
if (nativeZoom != newNativeZoom) {
nativeZoom = newNativeZoom;
int newFontZoom = getFontZoom(gc);
if (fontZoom != newFontZoom) {
fontZoom = newFontZoom;
freeRuns();
}
if (runs != null) return;
Expand Down Expand Up @@ -768,19 +768,19 @@ public void draw (GC gc, int x, int y, int selectionStart, int selectionEnd, Col
drawInPixels(gc, x, y, selectionStart, selectionEnd, selectionForeground, selectionBackground, flags);
}

private int getNativeZoom(GC gc) {
private int getFontZoom(GC gc) {
if (gc != null) {
return gc.data.nativeZoom;
return DPIUtil.getFontZoomForAutoscaleProperty(gc.data.nativeZoom);
}
return nativeZoom;
return fontZoom;
}

private int getZoom(GC gc){
return DPIUtil.getZoomForAutoscaleProperty(getNativeZoom(gc));
return DPIUtil.getZoomForAutoscaleProperty(getFontZoom(gc));
}

private int getZoom() {
return DPIUtil.getZoomForAutoscaleProperty(nativeZoom);
return DPIUtil.getZoomForAutoscaleProperty(fontZoom);
}

void drawInPixels (GC gc, int xInPoints, int yInPoints) {
Expand Down Expand Up @@ -1970,7 +1970,7 @@ public boolean getJustify () {

long getItemFont (StyleItem item, GC gc) {
if (item.fallbackFont != 0) return item.fallbackFont;
final int zoom = getNativeZoom(gc);
final int zoom = getFontZoom(gc);
if (item.style != null && item.style.font != null) {
return SWTFontProvider.getFontHandle(item.style.font, zoom);
}
Expand Down Expand Up @@ -2157,7 +2157,7 @@ public FontMetrics getLineMetrics (int lineIndex) {
lptm.tmHeight = Win32DPIUtils.pointToPixel(this.device, ascentInPoints + descentInPoints, zoom);
lptm.tmInternalLeading = Win32DPIUtils.pointToPixel(this.device, leadingInPoints, zoom);
lptm.tmAveCharWidth = 0;
return FontMetrics.win32_new(lptm, nativeZoom);
return FontMetrics.win32_new(lptm, fontZoom);
}

/**
Expand Down Expand Up @@ -3258,7 +3258,7 @@ public void setFont (Font font) {
Font oldFont = this.font;
if (oldFont == font) return;
this.font = font;
this.nativeZoom = this.font == null ? nativeZoom : this.font.zoom;
this.fontZoom = this.font == null ? fontZoom : this.font.zoom;
if (oldFont != null && oldFont.equals(font)) return;
freeRuns();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1763,7 +1763,7 @@ public long internal_new_GC (GCData data) {
if (font != null) {
data.font = font;
} else {
data.font = SWTFontProvider.getFont(display, OS.SendMessage (hwnd, OS.WM_GETFONT, 0, 0), data.nativeZoom);
data.font = SWTFontProvider.getFont(display, OS.SendMessage (hwnd, OS.WM_GETFONT, 0, 0), DPIUtil.getFontZoomForAutoscaleProperty(data.nativeZoom));
}
data.uiState = (int)OS.SendMessage (hwnd, OS.WM_QUERYUISTATE, 0, 0);
}
Expand Down
Loading