NEWT Soft-PixelScale (p1): WindowImpl: Separate window and pixel units for size and position via atomic-replacable int arrays (details)
NEWT Soft-PixelScale (p2): MonitorDevice: Add getOrientationTo(..) to determine the orientation of this monitor to the other incl. the 'move_diff' (details)
NEWT Soft-PixelScale (p3): WindowImpl.createNativeImpl(..): Add boolean positionModified[] return value, allowing to not wait for the previous custom position (details)
NEWT Soft-PixelScale (p4): WindowImpl: Change SetSizeAction to optionally set a custom position additionally to size (details)
NEWT Soft-PixelScale (p5): Add WindowImpl.applySoftPixelScale(..) for general usage (details)
NEWT Soft-PixelScale (p6): Implement Soft-PixelScale for X11 and Windows ... (working state) (details)
Fix comment for WindowImpl.insets: value is in window units (details)
NEWT Regression: Move superSizeChangedOffThread() back to iOS/MacOS WindowDriver, used to call the super class method. (details)
NEWT WindowImpl: Bring back DEBUG output on positionChanged(..) (details)
NEWT Soft-PixelScale (p1): WindowImpl: Separate window and pixel units for size and position via atomic-replacable int arrays
NEWT's Soft-PixelScale supports software pixel-scale by multiplying the underlying surface pixel-size with the scale-factor and dividing the window position and size by same scale-factor.
Hence the window position and size space is kept virtually steady at virtually assumed DPI 96 at higher actual screen DPI and the surface size is adjusted.
+++
This window- and pixel-unit separation also includes all callbacks for the native driver implementations, hence the changes native code - allowing to determine whether window- or pixel-units were given.
NEWT Soft-PixelScale (p3): WindowImpl.createNativeImpl(..): Add boolean positionModified[] return value, allowing to not wait for the previous custom position
This is required if createNativeImpl(..) modifies the target position, i.e. due to soft-pixel-scale.
NEWT Soft-PixelScale (p6): Implement Soft-PixelScale for X11 and Windows ... (working state)
Both: - Using Soft-PixelScale mode, i.e. converting all given window-units to pixel-units for native GDI/X11 ops - Using scaled pixel-sized surface - Adjusting NEWT's Monitor's window-unit viewport value to pixel-scale
For X11: - Using global scale factor from environment variable, either: "GDK_SCALE", "QT_SCALE_FACTOR" or "SOFT_SCALE". The latter is for testing only. See https://wiki.archlinux.org/title/HiDPI
For Windows: - Using actual monitor's pixel-scale via native SHC API (Shellscaling API, shcore.dll)
Misc: - SurfaceScaleUtils.getGlobalPixelScaleEnv() reads a float value from given env names, first come, first serve - MonitorModeProps.streamInMonitorDevice(..): Add `invscale_wuviewport` argument to scale wuvieport for soft-pixel-scale - TestGearsNEWT: Enhance GL2 demo to be suitable for manual tests, this since my Windows KVM machine doesn't support ES2 - TestGLContextDrawableSwitch10NEWT: Add a few more test constraints .. working
Tested: - Manually on a Windows virtual machine (KVM) using - 2 virtualized 'Video QXL' cards and - and 'remote-viewer' to see the 2 monitors since `Virtual Machine Manager` build-in doesn't support - remote-viewer spice://localhost:5917
- Manually on a Linux machine w/ SOFT_SCALE
- Both, X11 and Windows - Place window on each monitor - Move window across monitors w/ pixel-scale change (or not)
- TODO: Test and fix utilization with AWT, i.e. NewtCanvasAWT