6 #include <Foundation/Foundation.h>
25 @property(readonly, nonatomic) NSWindow* window;
28 - (instancetype)initWithWindow:(NSWindow*)window
43 [
self setContentSize:NSMakeSize(contentSize.width, contentSize.height)];
46 [
self setContentMinSize:NSMakeSize(contentSize.min_width, contentSize.min_height)];
48 [
self setContentMaxSize:NSMakeSize(contentSize.max_width, contentSize.max_height)];
50 [
self setContentMaxSize:NSMakeSize(CGFLOAT_MAX, CGFLOAT_MAX)];
62 - (instancetype)initWithWindow:(NSWindow*)window
65 if (
self = [super init]) {
74 - (void)windowDidBecomeKey:(NSNotification*)notification {
75 [_flutterViewController.engine windowDidBecomeKey:_flutterViewController.viewIdentifier];
78 - (void)windowDidResignKey:(NSNotification*)notification {
79 [_flutterViewController.engine windowDidResignKey:_flutterViewController.viewIdentifier];
82 - (BOOL)windowShouldClose:(NSWindow*)sender {
88 - (void)windowDidResize:(NSNotification*)notification {
95 - (void)windowDidMiniaturize:(NSNotification*)notification {
102 - (void)windowDidDeminiaturize:(NSNotification*)notification {
117 - (instancetype)init {
120 _windows = [NSMutableArray array];
130 NSWindow* window = [[NSWindow alloc] init];
133 [window setReleasedWhenClosed:NO];
135 window.contentViewController = c;
136 window.styleMask = NSWindowStyleMaskResizable | NSWindowStyleMaskTitled |
137 NSWindowStyleMaskClosable | NSWindowStyleMaskMiniaturizable;
138 [window flutterSetContentSize:request->contentSize];
139 [window setIsVisible:YES];
140 [window makeKeyAndOrderFront:nil];
143 flutterViewController:c
144 creationRequest:*request];
146 [_windows addObject:w];
151 - (void)destroyWindow:(NSWindow*)window {
154 if (o.window == window) {
160 [_windows removeObject:owner];
163 [owner.flutterViewController dispose];
164 owner.
window.delegate = nil;
165 [owner.window close];
171 [owner.flutterViewController dispose];
172 [owner.window close];
174 [_windows removeAllObjects];
185 [engine enableMultiView];
186 return [engine.windowController createRegularWindow:request];
190 NSWindow* w = (__bridge NSWindow*)window;
192 [engine.windowController destroyWindow:w];
198 return (__bridge
void*)controller.view.window;
202 NSWindow* w = (__bridge NSWindow*)window;
204 .width = w.frame.size.width,
205 .height = w.frame.size.height,
210 NSWindow* w = (__bridge NSWindow*)window;
211 [w flutterSetContentSize:*size];
215 NSWindow* w = (__bridge NSWindow*)window;
216 w.title = [NSString stringWithUTF8String:title];
220 NSWindow* w = (__bridge NSWindow*)window;
221 if (maximized & !w.isZoomed) {
223 }
else if (!maximized && w.isZoomed) {
229 NSWindow* w = (__bridge NSWindow*)window;
234 NSWindow* w = (__bridge NSWindow*)window;
239 NSWindow* w = (__bridge NSWindow*)window;
240 [w deminiaturize:nil];
244 NSWindow* w = (__bridge NSWindow*)window;
245 return w.isMiniaturized;
249 NSWindow* w = (__bridge NSWindow*)window;
250 bool isFullScreen = (w.styleMask & NSWindowStyleMaskFullScreen) != 0;
251 if (fullScreen && !isFullScreen) {
252 [w toggleFullScreen:nil];
253 }
else if (!fullScreen && isFullScreen) {
254 [w toggleFullScreen:nil];
259 NSWindow* w = (__bridge NSWindow*)window;
260 return (w.styleMask & NSWindowStyleMaskFullScreen) != 0;
264 NSWindow* w = (__bridge NSWindow*)window;
265 [NSApplication.sharedApplication activateIgnoringOtherApps:YES];
266 [w makeKeyAndOrderFront:nil];
int64_t FlutterViewIdentifier
void InternalFlutter_Window_Activate(void *window)
void * InternalFlutter_Window_GetHandle(int64_t engine_id, FlutterViewIdentifier view_id)
bool InternalFlutter_Window_IsMaximized(void *window)
void InternalFlutter_Window_SetContentSize(void *window, const FlutterWindowSizing *size)
int64_t InternalFlutter_WindowController_CreateRegularWindow(int64_t engine_id, const FlutterWindowCreationRequest *request)
void InternalFlutter_Window_SetFullScreen(void *window, bool fullScreen)
bool InternalFlutter_Window_IsFullScreen(void *window)
void InternalFlutter_Window_Minimize(void *window)
void InternalFlutter_Window_SetTitle(void *window, const char *title)
bool InternalFlutter_Window_IsMinimized(void *window)
void InternalFlutter_Window_Destroy(int64_t engine_id, void *window)
void InternalFlutter_Window_SetMaximized(void *window, bool maximized)
FlutterWindowSize InternalFlutter_Window_GetContentSize(void *window)
void InternalFlutter_Window_Unminimize(void *window)
NSMutableArray< FlutterWindowOwner * > * _windows
FlutterViewIdentifier viewIdentifier
FlutterViewController * _flutterViewController
FlutterViewController * flutterViewController
std::optional< flutter::Isolate > _isolate
FlutterWindowCreationRequest _creationRequest