mirror of
https://github.com/zydeco/minivmac4ios.git
synced 2024-11-22 03:30:59 +00:00
52 lines
2.0 KiB
Swift
52 lines
2.0 KiB
Swift
//
|
|
// KeyboardSceneDelegate.swift
|
|
// Mini vMac
|
|
//
|
|
// Created by Jesús A. Álvarez on 2024-02-10.
|
|
// Copyright © 2024 namedfork. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
#if os(visionOS)
|
|
class KeyboardSceneDelegate: UIResponder, UIWindowSceneDelegate {
|
|
var window: UIWindow?
|
|
|
|
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
|
|
guard let windowScene = scene as? UIWindowScene else {
|
|
fatalError("Expected scene of type UIWindowScene but got an unexpected type")
|
|
}
|
|
guard let mainViewController = AppDelegate.shared.window.rootViewController as? ViewController else {
|
|
fatalError("No main view controller")
|
|
}
|
|
|
|
scene.activationConditions.canActivateForTargetContentIdentifierPredicate = NSPredicate(format: "self == 'net.namedfork.keyboard'", argumentArray: nil)
|
|
let defaultSize = mainViewController.keyboardViewController.preferredContentSize
|
|
let minSize = defaultSize.applying(.init(scaleX: 0.75, y: 0.75))
|
|
let maxSize = defaultSize.applying(.init(scaleX: 1.25, y: 1.25))
|
|
windowScene.sizeRestrictions?.minimumSize = minSize
|
|
windowScene.sizeRestrictions?.maximumSize = maxSize
|
|
windowScene.requestGeometryUpdate(UIWindowScene.GeometryPreferences.Vision(
|
|
size: defaultSize,
|
|
minimumSize: minSize,
|
|
maximumSize: maxSize,
|
|
resizingRestrictions: .uniform
|
|
))
|
|
window = UIWindow(windowScene: windowScene)
|
|
|
|
// destroy existing keyboard window
|
|
if let oldWindow = mainViewController.keyboardViewController?.view?.window {
|
|
oldWindow.rootViewController = nil
|
|
if let oldScene = oldWindow.windowScene?.session.scene {
|
|
UIApplication.shared.requestSceneSessionDestruction(oldScene.session, options: nil)
|
|
}
|
|
}
|
|
|
|
if let window {
|
|
window.rootViewController = mainViewController.keyboardViewController
|
|
window.makeKeyAndVisible()
|
|
}
|
|
}
|
|
}
|
|
#endif
|