Class SWTAccessor


  • public class SWTAccessor
    extends Object
    • Field Detail

      • isOSX

        public static final boolean isOSX
      • isWindows

        public static final boolean isWindows
      • isX11

        public static final boolean isX11
      • isX11GTK

        public static final boolean isX11GTK
      • OS_gtk_class

        public static final Class<?> OS_gtk_class
      • OS_gtk_version

        public static final VersionNumber OS_gtk_version
    • Constructor Detail

      • SWTAccessor

        public SWTAccessor()
    • Method Detail

      • initSingleton

        public static void initSingleton()
        Call this method, if this class shall be initialized before any other of its methods are called within the regular workflow. This could be desired to ensure initialization before AWT. This method does nothing, but initializes this class's static SWT accessors if using this class for the first time.
      • isUsingLongHandles

        public static boolean isUsingLongHandles()
      • useX11GTK

        public static boolean useX11GTK()
      • gdk_widget_get_window

        public static long gdk_widget_get_window​(long handle)
      • gdk_window_get_xdisplay

        public static long gdk_window_get_xdisplay​(long window)
      • gdk_window_get_xwindow

        public static long gdk_window_get_xwindow​(long window)
      • printInfo

        public static void printInfo​(PrintStream out,
                                     org.eclipse.swt.widgets.Display d)
      • getAutoScalingFactor

        public static float getAutoScalingFactor()
                                          throws NativeWindowException
        Returns SWT compatible auto scale-factor, used by DPIUtil

        We need to keep track of SWT's implementation in this regard!

        Throws:
        NativeWindowException
      • autoScaleUp

        public static int autoScaleUp​(int v)
        Returns SWT auto scaled-up value v, compatible with DPIUtil.autoScaleUp(int)

        We need to keep track of SWT's implementation in this regard!

      • autoScaleDown

        public static int autoScaleDown​(int v)
        Returns SWT auto scaled-down value v, compatible with DPIUtil.autoScaleDown(int)

        We need to keep track of SWT's implementation in this regard!

      • getDeviceZoomScalingFactor

        public static float getDeviceZoomScalingFactor()
        Returns SWT derived scale-factor based on DPIUtil.getDeviceZoom() only, not considering higher-toolkit's compensation like DPIUtil.useCairoAutoScale().

        This method should be used instead of getAutoScalingFactor() for native toolkits not caring about DPI scaling like X11 or GDI.

        We need to keep track of SWT's implementation in this regard!

      • deviceZoomScaleUp

        public static int deviceZoomScaleUp​(int v)
        Returns SWT derived scaled-up value v, based on DPIUtil.getDeviceZoom() only, not considering higher-toolkit's compensation like DPIUtil.useCairoAutoScale().

        This method should be used instead of autoScaleUp(int) for native toolkits not caring about DPI scaling like X11 or GDI.

        We need to keep track of SWT's implementation in this regard!

      • deviceZoomScaleDown

        public static int deviceZoomScaleDown​(int v)
        Returns SWT derived scaled-down value v, based on DPIUtil.getDeviceZoom() only, not considering higher-toolkit's compensation like DPIUtil.useCairoAutoScale().

        This method should be used instead of autoScaleDown(int) for native toolkits not caring about DPI scaling like X11 or GDI.

        We need to keep track of SWT's implementation in this regard!

      • deviceZoomScaleUp

        public static Point deviceZoomScaleUp​(Point v)
        Returns SWT derived scaled-up value v, based on DPIUtil.getDeviceZoom() only, not considering higher-toolkit's compensation like DPIUtil.useCairoAutoScale().

        This method should be used instead of #autoScaleUp(com.jogamp.nativewindow.util.Point) for native toolkits not caring about DPI scaling like X11 or GDI.

        We need to keep track of SWT's implementation in this regard!

      • deviceZoomScaleDown

        public static Point deviceZoomScaleDown​(Point v)
        Returns SWT derived scaled-down value v, based on DPIUtil.getDeviceZoom() only, not considering higher-toolkit's compensation like DPIUtil.useCairoAutoScale().

        This method should be used instead of #autoScaleDown(com.jogamp.nativewindow.util.Point) for native toolkits not caring about DPI scaling like X11 or GDI.

        We need to keep track of SWT's implementation in this regard!

      • getClientAreaInPixels

        public static org.eclipse.swt.graphics.Rectangle getClientAreaInPixels​(org.eclipse.swt.widgets.Scrollable s)
                                                                        throws NativeWindowException
        Returns the unscaled Scrollable.getClientArea() in pixels.

        If the package restricted method Scrollable.getClientAreaInPixels() is implemented, we return its result.

        Fallback is to return DPIUtil#autoScaleUp(Scrollable.getClientArea()), reverting Scrollable.getClientArea()'s DPIUtil.autoScaleDown(Rectangle).

        Note to SWT's API spec writers: You need to allow access to the unscaled value, scale properties and define what is being scaled (fonts, images, ..). Further more the scale should be separate for x/y coordinates, as DPI differs here.

        Note to Eclipse authors: Scaling up the fonts and images hardly works on GTK/SWT/Eclipse. GDK_SCALE, GDK_DPI_SCALE and swt.autoScale produce inconsistent results with Eclipse. Broken High-DPI for .. some years now. This is especially true for using native high-dpi w/ scaling-factor 1f.

        Requires SWT >= 3.105 (DPIUtil)
        Parameters:
        s - the Scrollable instance
        Returns:
        unscaled client area in pixels, see above
        Throws:
        NativeWindowException - during invocation of the method, if any
      • getHandle

        public static long getHandle​(org.eclipse.swt.widgets.Control swtControl)
                              throws NativeWindowException
        Parameters:
        swtControl - the SWT Control to retrieve the native widget-handle from
        Returns:
        the native widget-handle
        Throws:
        NativeWindowException - if the widget handle is null
      • getScreen

        public static AbstractGraphicsScreen getScreen​(AbstractGraphicsDevice device,
                                                       int screen)
        Parameters:
        device -
        screen - -1 is default screen of the given device, e.g. maybe 0 or determined by native API. >= 0 is specific screen
        Returns:
      • getNativeVisualID

        public static int getNativeVisualID​(AbstractGraphicsDevice device,
                                            long windowHandle)
      • newGC

        public static long newGC​(org.eclipse.swt.widgets.Control swtControl,
                                 org.eclipse.swt.graphics.GCData gcData)
      • disposeGC

        public static void disposeGC​(org.eclipse.swt.widgets.Control swtControl,
                                     long gc,
                                     org.eclipse.swt.graphics.GCData gcData)
      • invokeOnOSTKThread

        public static void invokeOnOSTKThread​(boolean blocking,
                                              Runnable runnable)
        Runs the specified action in an SWT compatible OS toolkit thread, which is:
        • Mac OSX
          • Main Thread: Run on OSX UI main thread. 'wait' is implemented on Java site via lock/wait on RunnableTask to not freeze OSX main thread.
        • Linux, Windows, ..
          • Current thread.
        See Also:
        Platform.AWT_AVAILABLE, Platform.getOSType()
      • invokeOnSWTThread

        public static void invokeOnSWTThread​(org.eclipse.swt.widgets.Display display,
                                             boolean blocking,
                                             Runnable runnable)
        Runs the specified action on the SWT UI thread.

        If blocking is true implementation uses Display.syncExec(Runnable), otherwise Display.asyncExec(Runnable).

        If display is null or disposed or the current thread is the SWT UI thread invokeOnOSTKThread(boolean, Runnable) is being used.

        See Also:
        invokeOnOSTKThread(boolean, Runnable)
      • isOnSWTThread

        public static boolean isOnSWTThread​(org.eclipse.swt.widgets.Display display)
        Return true if the current thread is the SWT UI thread, otherwise false.
      • createCompatibleX11ChildWindow

        public static long createCompatibleX11ChildWindow​(AbstractGraphicsScreen screen,
                                                          org.eclipse.swt.widgets.Control swtControl,
                                                          int visualID,
                                                          int width,
                                                          int height)
      • resizeX11Window

        public static void resizeX11Window​(AbstractGraphicsDevice device,
                                           org.eclipse.swt.graphics.Rectangle clientArea,
                                           long x11Window)
      • createCompatibleGDKChildWindow

        public static long createCompatibleGDKChildWindow​(org.eclipse.swt.widgets.Control swtControl,
                                                          int visualID,
                                                          int width,
                                                          int height)
      • showGDKWindow

        public static void showGDKWindow​(long gdkWindow)
      • focusGDKWindow

        public static void focusGDKWindow​(long gdkWindow)
      • resizeGDKWindow

        public static void resizeGDKWindow​(org.eclipse.swt.graphics.Rectangle clientArea,
                                           long gdkWindow)
      • destroyGDKWindow

        public static void destroyGDKWindow​(long gdkWindow)