# Class DPIUtil

java.lang.Object
org.eclipse.swt.internal.DPIUtil

public class DPIUtil extends Object
This class hold common constants and utility functions w.r.t. to SWT high DPI functionality.

Since:
  3.105

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`static final record`
`DPIUtil.ElementAtZoom<T>`
Represents an element, such as some image data, at a specific zoom level.

## Constructor Summary

Constructors
Constructor
Description
`DPIUtil()`

## Method Summary

Modifier and Type
Method
Description
`static ImageData`
`autoScaleImageData(Device device, ImageData imageData, float scaleFactor)`
`static ImageData`
`autoScaleImageData(Device device, ImageData imageData, int imageDataZoomFactor)`
Auto-scale ImageData to device zoom that are at given zoom factor.
`static ImageData`
`autoScaleImageData(Device device, ImageData imageData, int targetWidth, int targetHeight)`
`static int`
`getDeviceZoom()`
Returns the zoom of the UI and its controls according to SWT autoscaling settings.
`static String`
`getEffectiveAutoScaleValue()`
`static int`
`getNativeDeviceZoom()`
Returns the native zoom of the UI and its controls according to the adapted OS elements.
`static float`
`getScalingFactor(int zoom)`
Returns scaling factor from the given device zoom
`static float`
`getScalingFactor(int targetZoom, int currentZoom)`
`static int`
`getZoomForAutoscaleProperty(int nativeDeviceZoom)`
`static boolean`
`isCustomAutoScale()`
`static boolean`
`isMonitorSpecificScalingActive()`
`static boolean`
`isSetupCompatibleToMonitorSpecificScaling()`
Returns `true` only if the current setup is compatible with monitor-specific scaling.
`static boolean`
`isSmoothScalingEnabled()`
`static int`
`mapDPIToZoom(int dpi)`
Compute the zoom value based on the DPI value.
`static int`
`mapZoomToDPI(int zoom)`
Compute the DPI value value based on the zoom.
`static double`
`pixelToPoint(double size, int zoom)`
`static float`
`pixelToPoint(float size, int zoom)`
`static int`
`pixelToPoint(int size, int zoom)`
`static int`
`pointToPixel(int size, int zoom)`
`static void`
`runWithAutoScaleValue(String autoScaleValue, Runnable runnable)`
`static ImageData`
`scaleImageData(Device device, ImageData imageData, int targetZoom, int currentZoom)`
Auto-scale image with ImageData
`static ImageData`
`scaleImageData(Device device, DPIUtil.ElementAtZoom<ImageData> elementAtZoom, int targetZoom)`
`static void`
`setDeviceZoom(int nativeDeviceZoom)`
`static void`
`setMonitorSpecificScaling(boolean activate)`
`static DPIUtil.ElementAtZoom<ImageData>`
`validateAndGetImageDataAtZoom(ImageDataProvider provider, int zoom)`
Gets ImageData that are appropriate for the specified zoom level together with the zoom level at which the image data are.
`static DPIUtil.ElementAtZoom<String>`
`validateAndGetImagePathAtZoom(ImageFileNameProvider provider, int zoom)`
Gets the image file path that are appropriate for the specified zoom level together with the zoom level at which the image data are.
`static void`
`validateLinearScaling(ImageDataProvider provider)`

### Methods inherited from class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### DPIUtil

public DPIUtil()

## Method Details

### isCustomAutoScale

public static boolean isCustomAutoScale()

### getEffectiveAutoScaleValue

public static String getEffectiveAutoScaleValue()

### isSetupCompatibleToMonitorSpecificScaling

public static boolean isSetupCompatibleToMonitorSpecificScaling()
Returns `true` only if the current setup is compatible with monitor-specific scaling. Returns `false` if:

- Not running on Windows
- The current auto-scale mode is incompatible

The supported auto-scale modes are "quarter" and "exact" or explicit zoom values given by the value itself or "false". Every other value will be treated as "integer" and is thus not supported.

Background information: Monitor-specific scaling on Windows only supports auto-scale modes in which all elements (font, images, control bounds etc.) are scaled equally or almost equally. The previously default mode "integer", which rounded the scale factor for everything but fonts to multiples of 100, is complex and difficult to realize with monitor-specific rescaling of UI elements. Since a uniform scale factor for everything should perspectively be used anyway, there will be no support for complex auto-scale modes for monitor-specific scaling.

### setMonitorSpecificScaling

public static void setMonitorSpecificScaling(boolean activate)

### isMonitorSpecificScalingActive

public static boolean isMonitorSpecificScalingActive()

### pixelToPoint

public static int pixelToPoint(int size, int zoom)

### pixelToPoint

public static float pixelToPoint(float size, int zoom)

### pixelToPoint

public static double pixelToPoint(double size, int zoom)

### scaleImageData

public static ImageData scaleImageData(Device device, ImageData imageData, int targetZoom, int currentZoom)
Auto-scale image with ImageData

### scaleImageData

public static ImageData scaleImageData(Device device, DPIUtil.ElementAtZoom<ImageData> elementAtZoom, int targetZoom)

### autoScaleImageData

public static ImageData autoScaleImageData(Device device, ImageData imageData, float scaleFactor)

### autoScaleImageData

public static ImageData autoScaleImageData(Device device, ImageData imageData, int targetWidth, int targetHeight)

### isSmoothScalingEnabled

public static boolean isSmoothScalingEnabled()

### autoScaleImageData

public static ImageData autoScaleImageData(Device device, ImageData imageData, int imageDataZoomFactor)
Auto-scale ImageData to device zoom that are at given zoom factor.

### getScalingFactor

public static float getScalingFactor(int zoom)
Returns scaling factor from the given device zoom

Returns:
  float scaling factor

### getScalingFactor

public static float getScalingFactor(int targetZoom, int currentZoom)

### mapDPIToZoom

public static int mapDPIToZoom(int dpi)
Compute the zoom value based on the DPI value.

Returns:
  zoom

### mapZoomToDPI

public static int mapZoomToDPI(int zoom)
Compute the DPI value value based on the zoom.

Returns:
  DPI

### validateLinearScaling

public static void validateLinearScaling(ImageDataProvider provider)

### pointToPixel

public static int pointToPixel(int size, int zoom)

### validateAndGetImageDataAtZoom

public static DPIUtil.ElementAtZoom<ImageData> validateAndGetImageDataAtZoom(ImageDataProvider provider, int zoom)
Gets ImageData that are appropriate for the specified zoom level together with the zoom level at which the image data are. If there is an image at the specified zoom level, it is returned. Otherwise the next larger image at 150% and 200% is returned, if existing. If none of these is found, the 100% image is returned as a fallback. If provider or fallback image is not available, an error is thrown.

### validateAndGetImagePathAtZoom

public static DPIUtil.ElementAtZoom<String> validateAndGetImagePathAtZoom(ImageFileNameProvider provider, int zoom)
Gets the image file path that are appropriate for the specified zoom level together with the zoom level at which the image data are. If there is an image at the specified zoom level, it is returned. Otherwise the next larger image at 150% and 200% is returned, if existing. If none of these is found, the 100% image is returned as a fallback. If provider or fallback image is not available, an error is thrown.

### getNativeDeviceZoom

public static int getNativeDeviceZoom()
Returns the native zoom of the UI and its controls according to the adapted OS elements. Particularly on Windows, this is the zoom used for fonts by the OS, no matter what autoscaling of SWT might be applied on top.

Warning: When using monitor-specific scaling on Windows, this value may not be reasonable as there is no single zoom for the application but one per shell and its monitor. In that case, this method will return the native zoom for the shell whose zoom has last been changed (via moving the shell to another monitor or changing the zoom of a monitor).

### getDeviceZoom

public static int getDeviceZoom()
Returns the zoom of the UI and its controls according to SWT autoscaling settings. It is an adapted value of `getNativeDeviceZoom()` based on the setting of the `swt.autoScale` property.

Warning: When using monitor-specific scaling on Windows, this value may not be reasonable as there is no single zoom for the application but one per shell and its monitor. In that case, this method will return the autoscaling zoom for the shell whose zoom has last been changed (via moving the shell to another monitor or changing the zoom of a monitor).

### setDeviceZoom

public static void setDeviceZoom(int nativeDeviceZoom)

### getZoomForAutoscaleProperty

public static int getZoomForAutoscaleProperty(int nativeDeviceZoom)

### runWithAutoScaleValue

public static void runWithAutoScaleValue(String autoScaleValue, Runnable runnable)