window_frame_kit 0.2.2
window_frame_kit: ^0.2.2 copied to clipboard
Frame takeover and full window management for Flutter desktop (Windows, Linux, macOS): frameless windows, native 4-edge resizing, and window-manager parity APIs.
Changelog #
All notable changes to this project are documented in this file. The format follows Keep a Changelog and the project adheres to Semantic Versioning.
0.2.1 - 2026-09-05 #
Fixed #
- Windows: the top band shrank by the full resize width, making the
system paint a titlebar-black strip above the self-drawn titlebar. The
top now keeps exactly 1px of non-client area (the DWM border line,
bitsdojo's
top -= 1recipe), and top-edge resize is served by a self-computedHTTOPover the client top band.
0.2.0 - 2026-09-05 #
Changed #
- Windows:
customFrameredesigned from pure borderless (client collapses to the full window rect) to equal-width NC bands — the client shrinks by one DPI-scaled band on all four sides, giving:- self-drawn titlebar plus the system border (Win11 1px border and
rounded corners survive,
WS_CAPTIONis never touched); - uniform 4-edge + 4-corner native resize bands (including the top edge,
which upstream window_manager's
hiddenbranch leaves dead on Win11); - no themed-border flash during drag-resize (the band is real non-client area, so the resize loop repaints the band itself);
- fullscreen (both the plugin's own and an external
WS_OVERLAPPEDWINDOWstrip) collapses the band entirely — no NC area, no resize.
- self-drawn titlebar plus the system border (Win11 1px border and
rounded corners survive,
- No child-window subclass needed anymore (edge hit-testing is native); the child subclass from 0.1.x is gone.
0.1.1 - 2026-09-05 #
Fixed #
- Windows: the themed border flashed back during a drag-resize. The
graft now drops
WS_CAPTION(keepingWS_THICKFRAMEfor native edge resizing) while enabled and restores the exact pre-graft style on disable — the Chromium/Electron frameless recipe. Without it,DefWindowProcrepainted the non-client area computed fromWS_CAPTIONinside the resize modal loop, ignoring theWM_NCCALCSIZEreturn 0 mapping.
0.1.0 - 2026-09-05 #
Initial public release.
Added #
- Verbatim port of window_manager 0.5.2's full Dart facade and event system
(
windowManager,WindowListener, 15 window events, 60+ methods), with the native Windows / Linux / macOS implementations ported mechanically. - Custom frame takeover (
WindowOptions(customFrame: true)orwindowManager.setCustomFrame(bool), default off):- Windows: borderless
WM_NCCALCSIZE(no themed border, no Win11 8px top inset), per-monitor-DPI four-edge/four-cornerWM_NCHITTESTresizing (top edge included), cooperativeWM_GETMINMAXINFO(minimum/maximum size enforced natively; maximized windows clamp to the monitor work area), and resizing force-disabled in fullscreen — covering both the plugin's own fullscreen state and an external fullscreen path that stripsWS_OVERLAPPEDWINDOW. - Linux: reversible
gtk_window_set_decoratedtoggle with snapshot restore. - macOS: reversible
fullSizeContentView+ transparent-titlebar toggle that keeps the.titledbit so the window stays key-capable.
- Windows: borderless
- C++-only Windows implementation — the package has no
win32Dart dependency, unlockingwin32 6.x/file_picker 12.x/flutter_secure_storage 11.xin downstream apps. DragToMoveArea,DragToResizeArea,WindowCaptionwidgets from the upstream port.