mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
53 lines
1.8 KiB
Swift
53 lines
1.8 KiB
Swift
// Copyright 2014 The Flutter Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import Cocoa
|
|
import FlutterMacOS
|
|
|
|
extension NSWindow {
|
|
var titlebarHeight: CGFloat {
|
|
frame.height - contentRect(forFrameRect: frame).height
|
|
}
|
|
}
|
|
|
|
class MainFlutterWindow: NSWindow {
|
|
override func awakeFromNib() {
|
|
let flutterViewController = FlutterViewController.init()
|
|
let windowFrame = self.frame
|
|
self.contentViewController = flutterViewController
|
|
self.setFrame(windowFrame, display: true)
|
|
|
|
RegisterMethodChannel(registry: flutterViewController)
|
|
RegisterGeneratedPlugins(registry: flutterViewController)
|
|
|
|
super.awakeFromNib()
|
|
}
|
|
|
|
func RegisterMethodChannel(registry: FlutterPluginRegistry) {
|
|
let registrar = registry.registrar(forPlugin: "resize")
|
|
let channel = FlutterMethodChannel(name: "samples.flutter.dev/resize",
|
|
binaryMessenger: registrar.messenger)
|
|
channel.setMethodCallHandler({ (call, result) in
|
|
if call.method == "resize" {
|
|
if let args = call.arguments as? Dictionary<String, Any>,
|
|
let width = args["width"] as? Double,
|
|
var height = args["height"] as? Double {
|
|
height += self.titlebarHeight
|
|
let currentFrame: NSRect = self.frame
|
|
let nextFrame: NSRect = NSMakeRect(
|
|
currentFrame.minX - (width - currentFrame.width) / 2,
|
|
currentFrame.minY - (height - currentFrame.height) / 2,
|
|
width,
|
|
height
|
|
)
|
|
self.setFrame(nextFrame, display: true, animate: false)
|
|
result(true)
|
|
} else {
|
|
result(FlutterError.init(code: "bad args", message: nil, details: nil))
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|