A framework for creating user interfaces for GNOME with an API similar to SwiftUI https://adwaita-swift.aparoksha.dev/
Go to file
2023-11-11 16:03:31 +01:00
.github Initial Commit 2023-09-12 08:17:52 +02:00
Documentation/Reference Add modifiers for modifying child views of a view 2023-11-11 16:03:31 +01:00
Icons Update docs 2023-11-11 11:44:19 +01:00
Sources/Adwaita Add modifiers for modifying child views of a view 2023-11-11 16:03:31 +01:00
Tests Add modifiers for modifying child views of a view 2023-11-11 16:03:31 +01:00
user-manual Update docs 2023-11-11 11:44:19 +01:00
.gitignore Initial Commit 2023-09-12 08:17:52 +02:00
.swiftlint.yml Add widgets and demo application 2023-09-26 15:35:15 +02:00
CONTRIBUTING.md Fix typos 2023-09-13 06:30:47 +02:00
Contributors.md Initial Commit 2023-09-12 08:17:52 +02:00
LICENSE.md Initial Commit 2023-09-12 08:17:52 +02:00
Makefile Initial Commit 2023-09-12 08:17:52 +02:00
Package.swift Add widgets and demo application 2023-09-26 15:35:15 +02:00
README.md Add modifiers for modifying child views of a view 2023-11-11 16:03:31 +01:00
SUMMARY.md Add support for keyboard shortcuts 2023-10-20 07:39:40 +02:00

Adwaita Icon

Adwaita

User Manual · GitHub · Contributor Docs

Adwaita is a framework for creating user interfaces for GNOME with an API similar to SwiftUI.

The following code:

struct Example: View {

    @State private var count = 0

    var view: Body {
        Text("\(count)")
            .style("title-1")
            .padding(50)
            .topToolbar {
                HeaderBar.start {
                    Button(icon: .default(icon: .goPrevious)) {
                        count -= 1
                    }
                    Button(icon: .default(icon: .goNext)) {
                        count += 1
                    }
                }
            }
    }

}

Creates a simple counter view:

Counter Example

More examples are available in the demo app:

Demo App

Table of Contents

Goals

Adwaitas main goal is to provide an easy-to-use interface for creating GNOME apps. The backend should stay as simple as possible, while not limiting the possibilities there are with Libadwaita and GTK.

If you want to use Adwaita in a project, but there are widgets missing, open an issue on GitHub.

Widgets

Name Description Widget
Button A widget that triggers a function when being clicked. GtkButton
EitherView A widget that displays one of its child views based on a boolean. GtkStack
HeaderBar A widget for creating custom title bars for windows. GtkHeaderBar
Text A widget for displaying a small amount of text. GtkLabel
VStack A widget which arranges child widgets into a single column. GtkBox
HStack A widget which arranges child widgets into a single row. GtkBox
List A widget which arranges child widgets vertically into rows. GtkListBox
Menu A widget showing a button that toggles the appearance of a menu. GtkMenuButton
NavigationSplitView A widget presenting sidebar and content side by side. AdwNavigationSplitView
ScrollView A container that makes its child scrollable. GtkScrolledWindow
StatusPage A page with an icon, title, and optionally description and widget. AdwStatusPage
StateWrapper A wrapper not affecting the UI which stores state information. -

View Modifiers

Syntax Description
inspect(_:) Edit the underlying GTUI widget.
padding(_:_:) Add empty space around a view.
hexpand(_:) Enable or disable the horizontal expansion of a view.
vexpand(_:) Enable or disable the vertical expansion of a view.
halign(_:) Set the horizontal alignment of a view.
valign(_:) Set the vertical alignment of a view.
frame(minWidth:minHeight:) Set the views minimal width or height.
frame(maxSize:) Set the views maximal size.
transition(_:) Assign a transition with the view that is used if it is a direct child of an EitherView.
onUpdate(_:) Run a function every time a view gets updated.
navigationTitle(_:) Add a title that is used if the view is a direct child of a NavigationView.
style(_:) Add a style class to the view.
onAppear(_:) Run when the view is rendered for the first time.
topToolbar(visible:_:) Add a native toolbar to the view. Normally, it contains a HeaderBar.
bottomToolbar(visible:_:) Add a native bottom toolbar to the view.
modifyContent(_:modify:) Replace all occurrences of a certain view type with another view.
stopModifiers() Ignore all the modifyContent(_:modify:) modifiers from higher above in the view tree.

Button Modifiers

Syntax Description
keyboardShortcut(_:window:) Create a keyboard shortcut for the window with the button's action.
keyboardShortcut(_:app:) Create a keyboard shortcut for the application with the button's action.

HeaderBar Modifiers

Syntax Description
headerBarTitle(view:) Customize the title view in the header bar.

List Modifiers

Syntax Description
sidebarStyle() Change the style of the list to match a sidebar.

Window Types

Name Description Widget
Window A simple application window. AdwApplicationWindow

Window Modifiers

Syntax Description
appKeyboardShortcut(_:action:) Create a keyboard shortcut available in the whole the application.
quitShortcut() Create a keyboard shortcut for quitting the application with "Ctrl + q".

Window Modifiers

Syntax Description
keyboardShortcut(_:action:) Create a keyboard shortcut available in one window.
closeShortcut() Create a keyboard shortcut for closing the window with "Ctrl + w".
overlay(windows:) Add windows that attach to a window of this type when being presented.

Menu Widgets

Name Description Widget
MenuButton A button in a menu. GMenuItem
MenuSection A collection of menu widgets grouped with lines. GMenuItem
Submenu A collection of menu widgets grouped by navigation. GMenuItem

MenuButton Modifiers

Syntax Description
keyboardShortcut(_:) Assign a keyboard shortcut to the button's action.

Installation

Dependencies

If you are using a Linux distribution, install libadwaita-devel or libadwaita (or something similar, based on the package manager) as well as gtk4-devel, gtk4 or similar.

On macOS, follow these steps:

  1. Install Homebrew.
  2. Install Libadwaita (and thereby GTK 4):
brew install libadwaita

Swift Package

  1. Open your Swift package in GNOME Builder, Xcode, or any other IDE.
  2. Open the Package.swift file.
  3. Into the Package initializer, under dependencies, paste:
.package(url: "https://github.com/david-swift/Adwaita", from: "0.1.0")   

Usage

Basics

Advanced

Thanks

Dependencies

Other Thanks