forked from aparoksha/adwaita-swift
Add support for maximizing and unmaximizing window
This commit is contained in:
parent
dca0ed14e0
commit
e3be7299eb
@ -41,6 +41,8 @@ public struct Window: WindowScene {
|
|||||||
var height: Binding<Int>?
|
var height: Binding<Int>?
|
||||||
/// Whether to update the default size.
|
/// Whether to update the default size.
|
||||||
var setDefaultSize = false
|
var setDefaultSize = false
|
||||||
|
/// Whether the window is maximized.
|
||||||
|
var maximized: Binding<Bool>?
|
||||||
|
|
||||||
/// Create a window type with a certain identifier and user interface.
|
/// Create a window type with a certain identifier and user interface.
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
@ -135,6 +137,11 @@ public struct Window: WindowScene {
|
|||||||
}
|
}
|
||||||
window.setResizability(template.resizable)
|
window.setResizability(template.resizable)
|
||||||
window.setDeletability(template.deletable)
|
window.setDeletability(template.deletable)
|
||||||
|
if !(template.maximized?.wrappedValue ?? false) {
|
||||||
|
gtk_window_unmaximize(window.pointer)
|
||||||
|
} else {
|
||||||
|
gtk_window_maximize(window.pointer)
|
||||||
|
}
|
||||||
var storage = window.fields["storage"] as? ViewStorage
|
var storage = window.fields["storage"] as? ViewStorage
|
||||||
if storage == nil {
|
if storage == nil {
|
||||||
storage = .init(window.pointer?.opaque())
|
storage = .init(window.pointer?.opaque())
|
||||||
@ -153,6 +160,11 @@ public struct Window: WindowScene {
|
|||||||
updateSize(window: window, template: template)
|
updateSize(window: window, template: template)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if template.maximized != nil {
|
||||||
|
storage?.notify(name: "maximized") {
|
||||||
|
updateSize(window: window, template: template)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Update the window's size.
|
/// Update the window's size.
|
||||||
@ -163,12 +175,16 @@ public struct Window: WindowScene {
|
|||||||
var width: Int32 = 0
|
var width: Int32 = 0
|
||||||
var height: Int32 = 0
|
var height: Int32 = 0
|
||||||
gtk_window_get_default_size(window.pointer, &width, &height)
|
gtk_window_get_default_size(window.pointer, &width, &height)
|
||||||
if width != template.width?.wrappedValue ?? 0 {
|
let maximized = gtk_window_is_maximized(window.pointer) != 0
|
||||||
|
if width != template.width?.wrappedValue ?? -1 {
|
||||||
template.width?.wrappedValue = .init(width)
|
template.width?.wrappedValue = .init(width)
|
||||||
}
|
}
|
||||||
if height != template.height?.wrappedValue ?? 0 {
|
if height != template.height?.wrappedValue ?? -1 {
|
||||||
template.height?.wrappedValue = .init(height)
|
template.height?.wrappedValue = .init(height)
|
||||||
}
|
}
|
||||||
|
if maximized != template.maximized?.wrappedValue {
|
||||||
|
template.maximized?.wrappedValue = maximized
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Add windows that overlay the last instance of this window if presented.
|
/// Add windows that overlay the last instance of this window if presented.
|
||||||
@ -304,7 +320,7 @@ public struct Window: WindowScene {
|
|||||||
return newSelf
|
return newSelf
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Add a tooltip to the widget.
|
/// Get the window's width and height.
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - width: The window's actual width.
|
/// - width: The window's actual width.
|
||||||
/// - height: The window's actual height.
|
/// - height: The window's actual height.
|
||||||
@ -316,6 +332,15 @@ public struct Window: WindowScene {
|
|||||||
return newSelf
|
return newSelf
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get and set whether the window is maximized.
|
||||||
|
/// - Parameter maximized: Whether the window is maximized.
|
||||||
|
/// - Returns: The window.
|
||||||
|
public func maximized(_ maximized: Binding<Bool>) -> Self {
|
||||||
|
var newSelf = self
|
||||||
|
newSelf.maximized = maximized
|
||||||
|
return newSelf
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// swiftlint:enable discouraged_optional_collection
|
// swiftlint:enable discouraged_optional_collection
|
||||||
|
|||||||
@ -81,6 +81,8 @@ struct Demo: App {
|
|||||||
private var width = 650
|
private var width = 650
|
||||||
@State("height")
|
@State("height")
|
||||||
private var height = 450
|
private var height = 450
|
||||||
|
@State("maximized")
|
||||||
|
private var maximized = false
|
||||||
var window: GTUIApplicationWindow
|
var window: GTUIApplicationWindow
|
||||||
var app: GTUIApp!
|
var app: GTUIApp!
|
||||||
|
|
||||||
@ -158,6 +160,7 @@ struct Demo: App {
|
|||||||
func window(_ window: Window) -> Window {
|
func window(_ window: Window) -> Window {
|
||||||
window
|
window
|
||||||
.size(width: $width, height: $height)
|
.size(width: $width, height: $height)
|
||||||
|
.maximized($maximized)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -165,6 +165,8 @@ There are many more widgets available using auto-generation. Learn [how to use t
|
|||||||
| `title(_:)` | Set the window's title. |
|
| `title(_:)` | Set the window's title. |
|
||||||
| `resizable(_:)` | Set the window's resizability. |
|
| `resizable(_:)` | Set the window's resizability. |
|
||||||
| `deletable(_:)` | Set the window's deletability. |
|
| `deletable(_:)` | Set the window's deletability. |
|
||||||
|
| `maximized(_:)` | Get and set whether the window is maximized. |
|
||||||
|
| `size(width:height:)` | Get and set the window's width and height. |
|
||||||
|
|
||||||
### `AboutWindow` Modifiers
|
### `AboutWindow` Modifiers
|
||||||
| Syntax | Description |
|
| Syntax | Description |
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user