83 lines
3.2 KiB
Swift
83 lines
3.2 KiB
Swift
// Generated by PorticoGen. DO NOT EDIT. See Sources/PorticoGen to make changes.
|
||
|
||
import Adw
|
||
import Gtk
|
||
import Gio
|
||
import Gdk
|
||
|
||
// PorticoGen: generateStruct | source: Gtk.Fixed
|
||
/// Places its child widgets at fixed positions and with fixed sizes.
|
||
///
|
||
/// `GtkFixed` performs no automatic layout management.
|
||
///
|
||
/// For most applications, you should not use this container! It keeps
|
||
/// you from having to learn about the other GTK containers, but it
|
||
/// results in broken applications. With `GtkFixed`, the following
|
||
/// things will result in truncated text, overlapping widgets, and
|
||
/// other display bugs:
|
||
///
|
||
/// - Themes, which may change widget sizes.
|
||
///
|
||
/// - Fonts other than the one you used to write the app will of course
|
||
/// change the size of widgets containing text; keep in mind that
|
||
/// users may use a larger font because of difficulty reading the
|
||
/// default, or they may be using a different OS that provides different fonts.
|
||
///
|
||
/// - Translation of text into other languages changes its size. Also,
|
||
/// display of non-English text will use a different font in many
|
||
/// cases.
|
||
///
|
||
/// In addition, `GtkFixed` does not pay attention to text direction and
|
||
/// thus may produce unwanted results if your app is run under right-to-left
|
||
/// languages such as Hebrew or Arabic. That is: normally GTK will order
|
||
/// containers appropriately for the text direction, e.g. to put labels to
|
||
/// the right of the thing they label when using an RTL language, but it can’t
|
||
/// do that with `GtkFixed`. So if you need to reorder widgets depending on
|
||
/// the text direction, you would need to manually detect it and adjust child
|
||
/// positions accordingly.
|
||
///
|
||
/// Finally, fixed positioning makes it kind of annoying to add/remove
|
||
/// UI elements, since you have to reposition all the other elements. This
|
||
/// is a long-term maintenance problem for your application.
|
||
///
|
||
/// If you know none of these things are an issue for your application,
|
||
/// and prefer the simplicity of `GtkFixed`, by all means use the
|
||
/// widget. But you should be aware of the tradeoffs.
|
||
///
|
||
/// A Portico view that mounts a `Gtk.Fixed`.
|
||
@MainActor public struct Fixed: View {
|
||
private let make: (MountContext) -> Gtk.Fixed
|
||
private var configure: [(Gtk.Fixed, MountContext) -> Void] = []
|
||
|
||
public var body: Never { fatalError() }
|
||
|
||
// PorticoGen: generateInits(static) | source: Gtk.Fixed.init()
|
||
/// Creates a new `GtkFixed`.
|
||
///
|
||
/// Applied once at mount; use the `Binding` or closure overload for values that change.
|
||
/// Optional value parameters are applied only when non-`nil`; a `nil` argument leaves the widget's own default in place and cannot clear a nullable property - use the matching modifier for that.
|
||
public init() {
|
||
make = { _ in Gtk.Fixed() }
|
||
}
|
||
|
||
}
|
||
|
||
extension Fixed: WidgetView {
|
||
public typealias Target = Gtk.Fixed
|
||
|
||
@_spi(Portico) public func appending(
|
||
_ step: @escaping (Gtk.Fixed, MountContext) -> Void
|
||
) -> Self {
|
||
var c = self
|
||
c.configure.append(step)
|
||
return c
|
||
}
|
||
}
|
||
|
||
@_spi(Portico) extension Fixed: Mountable {
|
||
@_spi(Portico) public func mount(_ ctx: MountContext) -> Gtk.Widget {
|
||
let w = make(ctx)
|
||
for step in configure { step(w, ctx) }
|
||
return w
|
||
}
|
||
}
|