6 #include <Foundation/Foundation.h>
25 @property(readonly, nonatomic) NSWindow* window;
28 - (instancetype)initWithWindow:(NSWindow*)window
43 [
self setContentSize:NSMakeSize(contentSize.width, contentSize.height)];
47 NSSize size = [
self frameRectForContentRect:self.frame].size;
48 NSSize originalSize = size;
49 [
self setContentMinSize:NSMakeSize(constraints.min_width, constraints.min_height)];
50 size.width = std::max(size.width, constraints.
min_width);
51 size.height = std::max(size.height, constraints.
min_height);
53 [
self setContentMaxSize:NSMakeSize(constraints.max_width, constraints.max_height)];
54 size.width = std::min(size.width, constraints.
max_width);
55 size.height = std::min(size.height, constraints.
max_height);
57 [
self setContentMaxSize:NSMakeSize(CGFLOAT_MAX, CGFLOAT_MAX)];
59 if (!NSEqualSizes(originalSize, size)) {
60 [
self setContentSize:size];
71 - (instancetype)initWithWindow:(NSWindow*)window
74 if (
self = [super init]) {
83 - (void)windowDidBecomeKey:(NSNotification*)notification {
84 [_flutterViewController.engine windowDidBecomeKey:_flutterViewController.viewIdentifier];
87 - (void)windowDidResignKey:(NSNotification*)notification {
88 [_flutterViewController.engine windowDidResignKey:_flutterViewController.viewIdentifier];
91 - (BOOL)windowShouldClose:(NSWindow*)sender {
97 - (void)windowDidResize:(NSNotification*)notification {
104 - (void)windowDidMiniaturize:(NSNotification*)notification {
111 - (void)windowDidDeminiaturize:(NSNotification*)notification {
116 - (void)windowWillEnterFullScreen:(NSNotification*)notification {
121 - (void)windowWillExitFullScreen:(NSNotification*)notification {
136 - (instancetype)init {
139 _windows = [NSMutableArray array];
149 NSWindow* window = [[NSWindow alloc] init];
152 [window setReleasedWhenClosed:NO];
154 window.contentViewController = c;
155 window.styleMask = NSWindowStyleMaskResizable | NSWindowStyleMaskTitled |
156 NSWindowStyleMaskClosable | NSWindowStyleMaskMiniaturizable;
158 [window flutterSetContentSize:request->size];
161 [window flutterSetConstraints:request->constraints];
163 [window setIsVisible:YES];
164 [window makeKeyAndOrderFront:nil];
167 flutterViewController:c
168 creationRequest:*request];
170 [_windows addObject:w];
175 - (void)destroyWindow:(NSWindow*)window {
178 if (o.window == window) {
184 [_windows removeObject:owner];
187 [owner.flutterViewController dispose];
188 owner.
window.delegate = nil;
189 [owner.window close];
195 [owner.flutterViewController dispose];
196 [owner.window close];
198 [_windows removeAllObjects];
209 [engine enableMultiView];
210 return [engine.windowController createRegularWindow:request];
214 NSWindow* w = (__bridge NSWindow*)window;
216 [engine.windowController destroyWindow:w];
222 return (__bridge
void*)controller.view.window;
226 NSWindow* w = (__bridge NSWindow*)window;
227 NSRect contentRect = [w contentRectForFrameRect:w.frame];
229 .
width = contentRect.size.width,
230 .height = contentRect.size.height,
235 NSWindow* w = (__bridge NSWindow*)window;
236 [w flutterSetContentSize:*size];
242 NSWindow* w = (__bridge NSWindow*)window;
243 [w flutterSetConstraints:*constraints];
247 NSWindow* w = (__bridge NSWindow*)window;
248 w.title = [NSString stringWithUTF8String:title];
252 NSWindow* w = (__bridge NSWindow*)window;
253 if (maximized & !w.isZoomed) {
255 }
else if (!maximized && w.isZoomed) {
261 NSWindow* w = (__bridge NSWindow*)window;
266 NSWindow* w = (__bridge NSWindow*)window;
271 NSWindow* w = (__bridge NSWindow*)window;
272 [w deminiaturize:nil];
276 NSWindow* w = (__bridge NSWindow*)window;
277 return w.isMiniaturized;
281 NSWindow* w = (__bridge NSWindow*)window;
282 bool isFullScreen = (w.styleMask & NSWindowStyleMaskFullScreen) != 0;
283 if (fullScreen && !isFullScreen) {
284 [w toggleFullScreen:nil];
285 }
else if (!fullScreen && isFullScreen) {
286 [w toggleFullScreen:nil];
291 NSWindow* w = (__bridge NSWindow*)window;
292 return (w.styleMask & NSWindowStyleMaskFullScreen) != 0;
296 NSWindow* w = (__bridge NSWindow*)window;
297 [NSApplication.sharedApplication activateIgnoringOtherApps:YES];
298 [w makeKeyAndOrderFront:nil];
302 NSWindow* w = (__bridge NSWindow*)window;
303 return strdup(w.title.UTF8String);
307 NSWindow* w = (__bridge NSWindow*)window;
308 return w.isKeyWindow;
#define FLUTTER_DARWIN_EXPORT
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)
FLUTTER_DARWIN_EXPORT void InternalFlutter_Window_SetConstraints(void *window, const FlutterWindowConstraints *constraints)
bool InternalFlutter_Window_IsActivated(void *window)
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_SetContentSize(void *window, const FlutterWindowSize *size)
void InternalFlutter_Window_Minimize(void *window)
char * InternalFlutter_Window_GetTitle(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
void(* notify_listeners)()