12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- import Cocoa
- import FlutterMacOS
- private let kTrafficLightOffetTop = 22
- class MainFlutterWindow: NSWindow {
- func registerMethodChannel(flutterViewController: FlutterViewController) {
- let cocoaWindowChannel = FlutterMethodChannel(name: "flutter/cocoaWindow", binaryMessenger: flutterViewController.engine.binaryMessenger)
- cocoaWindowChannel.setMethodCallHandler({
- (call: FlutterMethodCall, result: FlutterResult) -> Void in
- if call.method == "setWindowPosition" {
- guard let position = call.arguments as? NSArray else {
- result(nil)
- return
- }
- let nX = position[0] as! NSNumber
- let nY = position[1] as! NSNumber
- let x = nX.doubleValue
- let y = nY.doubleValue
-
- self.setFrameOrigin(NSPoint(x: x, y: y))
- result(nil)
- return
- } else if call.method == "getWindowPosition" {
- let frame = self.frame
- result([frame.origin.x, frame.origin.y])
- return
- } else if call.method == "zoom" {
- self.zoom(self)
- result(nil)
- return
- }
-
- result(FlutterMethodNotImplemented)
- })
- }
- func layoutTrafficLightButton(titlebarView: NSView, button: NSButton, offsetTop: CGFloat, offsetLeft: CGFloat) {
- button.translatesAutoresizingMaskIntoConstraints = false;
- titlebarView.addConstraint(NSLayoutConstraint.init(
- item: button,
- attribute: NSLayoutConstraint.Attribute.top, relatedBy: NSLayoutConstraint.Relation.equal, toItem: titlebarView, attribute: NSLayoutConstraint.Attribute.top, multiplier: 1, constant: offsetTop))
- titlebarView.addConstraint(NSLayoutConstraint.init(
- item: button,
- attribute: NSLayoutConstraint.Attribute.left, relatedBy: NSLayoutConstraint.Relation.equal, toItem: titlebarView, attribute: NSLayoutConstraint.Attribute.left, multiplier: 1, constant: offsetLeft))
- }
- func layoutTrafficLights() {
- let closeButton = self.standardWindowButton(ButtonType.closeButton)!
- let minButton = self.standardWindowButton(ButtonType.miniaturizeButton)!
- let zoomButton = self.standardWindowButton(ButtonType.zoomButton)!
- let titlebarView = closeButton.superview!
- self.layoutTrafficLightButton(titlebarView: titlebarView, button: closeButton, offsetTop: CGFloat(kTrafficLightOffetTop), offsetLeft: 20)
- self.layoutTrafficLightButton(titlebarView: titlebarView, button: minButton, offsetTop: CGFloat(kTrafficLightOffetTop), offsetLeft: 38)
- self.layoutTrafficLightButton(titlebarView: titlebarView, button: zoomButton, offsetTop: CGFloat(kTrafficLightOffetTop), offsetLeft: 56)
- let customToolbar = NSTitlebarAccessoryViewController()
- let newView = NSView()
- newView.frame = NSRect(origin: CGPoint(), size: CGSize(width: 0, height: 40)) // only the height is cared
- customToolbar.view = newView
- self.addTitlebarAccessoryViewController(customToolbar)
- }
- override func awakeFromNib() {
- let flutterViewController = FlutterViewController.init()
- let windowFrame = self.frame
- self.contentViewController = flutterViewController
- self.registerMethodChannel(flutterViewController: flutterViewController)
- self.setFrame(windowFrame, display: true)
- self.titlebarAppearsTransparent = true
- self.titleVisibility = .hidden
- self.styleMask.insert(StyleMask.fullSizeContentView)
- self.isMovableByWindowBackground = true
- self.isMovable = false
- self.layoutTrafficLights()
- RegisterGeneratedPlugins(registry: flutterViewController)
- super.awakeFromNib()
- }
- }
|