blob: a52288a4c68c4f1da43c811405d75d9b24f09e4f [file] [log] [blame]
// 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))
}
}
})
}
}