This commit is contained in:
edde746
2025-10-22 12:45:29 +02:00
commit a6effe208b
152 changed files with 16289 additions and 0 deletions
@@ -0,0 +1,70 @@
import 'package:macos_window_utils/macos_window_utils.dart';
import 'package:macos_window_utils/macos/ns_window_delegate.dart';
import 'package:macos_window_utils/macos/ns_window_button_type.dart';
import 'package:flutter/material.dart' show Offset;
import 'fullscreen_state_manager.dart';
/// Custom window delegate that manages titlebar configuration during fullscreen transitions
class FullscreenWindowDelegate extends NSWindowDelegate {
static const double _customButtonY = 21.0;
@override
void windowWillEnterFullScreen() {
// Notify global state manager
FullscreenStateManager().setFullscreen(true);
// Remove toolbar and restore default titlebar before entering fullscreen
_prepareForFullscreen();
}
@override
void windowWillExitFullScreen() {
// Hide title and make transparent immediately (safe to do before transition)
WindowManipulator.hideTitle();
WindowManipulator.makeTitlebarTransparent();
}
@override
void windowDidExitFullScreen() {
// Notify global state manager
FullscreenStateManager().setFullscreen(false);
// Add toolbar and reposition traffic lights after transition completes
WindowManipulator.addToolbar();
// Restore custom traffic light positions
WindowManipulator.overrideStandardWindowButtonPosition(
buttonType: NSWindowButtonType.closeButton,
offset: const Offset(20, _customButtonY),
);
WindowManipulator.overrideStandardWindowButtonPosition(
buttonType: NSWindowButtonType.miniaturizeButton,
offset: const Offset(40, _customButtonY),
);
WindowManipulator.overrideStandardWindowButtonPosition(
buttonType: NSWindowButtonType.zoomButton,
offset: const Offset(60, _customButtonY),
);
}
/// Prepare titlebar for fullscreen mode
void _prepareForFullscreen() {
WindowManipulator.removeToolbar();
WindowManipulator.showTitle();
WindowManipulator.makeTitlebarOpaque();
// Set traffic lights to standard fullscreen positions (null = default)
WindowManipulator.overrideStandardWindowButtonPosition(
buttonType: NSWindowButtonType.closeButton,
offset: null,
);
WindowManipulator.overrideStandardWindowButtonPosition(
buttonType: NSWindowButtonType.miniaturizeButton,
offset: null,
);
WindowManipulator.overrideStandardWindowButtonPosition(
buttonType: NSWindowButtonType.zoomButton,
offset: null,
);
}
}