Files
plezy/lib/services/fullscreen_window_delegate.dart
T
2025-12-15 02:29:03 +01:00

65 lines
2.4 KiB
Dart

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);
}
}