Repository navigation
New Features
Native macOS full-screen support
VFrame.setFullScreen now opts windows into macOS's native full-screen mode via reflective com.apple.eawt.FullScreenUtilities, enabling the system green title-bar button and the Ctrl-Cmd-F shortcut. No new dependency required; no-ops silently on non-macOS JVMs.
Bug Fixes
-
Multi-monitor full-screen sizing (
VFrame).
setFullScreenpreviously sized the frame to the primary display viaToolkit.getDefaultToolkit().getScreenSize(), which is wrong when the frame lives on a secondary or HiDPI display. Each display now uses its ownGraphicsConfigurationbounds. -
VolatileImage lifecycle, HiDPI, and multi-monitor glyph rendering.
The glyph cache previously stored a singleVolatileImageper key, created against the default screen'sGraphicsConfigurationand refreshed only oncontentsLost(). Windows on non-default monitors (or HiDPI displays with a different scale) received images sized for the wrong device, producing blurry or incorrectly scaled glyphs;validate()was never called, soIMAGE_INCOMPATIBLEtransitions were silently ignored; and on restore/loss the entry was invalidated and re-rendered from scratch. The cache now stores aGlyphEntrypairing an immutableBufferedImagesource with an optionalVolatileImagetied to a specificGraphicsConfiguration; the accelerated image is validated against the caller's GC on every lookup, recreated onIMAGE_INCOMPATIBLEor GC mismatch, and redrawn cheaply from the cached source onIMAGE_RESTORED/contentsLost. -
White-tile rendering on hardware-accelerated paths.
High-quality rendering hints trigger a hardware-accelerated path that does not initializeVolatileImagepixel memory. Switched the copy toAlphaComposite.Srcso uninitialized (opaque white) pixels are overwritten where the source is transparent, resolving tiles appearing as solid white. -
Paint method concurrency.
DroppedsynchronizedfromVCheckBoxUI.paintandVRadioButtonUI.paint— Swing painting runs exclusively on the EDT, so the monitor acquisition was dead weight. MarkedVTerminalLookAndFeel.highQualityRenderingDefaultvolatileso writes from a non-EDT setter are visible to EDT paint reads without relying on incidental happens-before ordering. -
Test assertions for newer JDK rendering hints.
BufferedImage.getGraphics()on newer JDKs returns aGraphics2DwithVALUE_ANTIALIAS_OFFalready set rather thannull. The affected assertions now check thatVALUE_ANTIALIAS_ONis not set, rather than asserting the hint isnull.
Performance
Zero per-paint allocations in the glyph render hot path.
FontMetricsis now cached once in theVFontconstructor instead of rebuilding a 1x1BufferedImage+Graphics2Don every glyph render.- Added a memoized
VColor.opaque()soVPanel.paintComponentno longer allocates two throwawayColorobjects per tile per paint when the panel is opaque.