Ein schnelles plattformübergreifendes GUI-Framework für GO basierend auf Dear Imgui und The Great Go Binding Imgi-Go.
Jeder Beitrag (Funktionen, Widgets, Tutorials, Dokumente usw.) wird geschätzt!
(Diese Bibliothek ist im Rahmen einer kostenlosen und zulässigen Lizenz erhältlich, erfordert jedoch finanzielle Unterstützung, um ihre fortgesetzten Verbesserungen aufrechtzuerhalten. Zusätzlich zu Wartung und Stabilität gibt es noch viele wünschenswerte Funktionen.
Unternehmen: Support Fortsetzung der Entwicklung und Wartung durch den technischen Support, die Wartung, das Sponsoring von Verträgen: Sponsoring -Verträge:
E-Mail: [email protected]
Einzelpersonen: Unterstützung weiterentwicklung und Wartung hier.
Für die Dokumentation finden Sie unser Wiki, Beispiele, Godoc oder schauen Sie sich nur Kommentare im Code an.
GIU basiert auf GLFW v3.3, daher kann GIU alle Plattformen unterstützen, die GLFW v3.3 unterstützt.
Im Vergleich zu anderen lieben Imgui Golang -Bindungen hat GIU die folgenden Merkmale:
package main
import (
"fmt"
g "github.com/AllenDang/giu"
)
func onClickMe () {
fmt . Println ( "Hello world!" )
}
func onImSoCute () {
fmt . Println ( "Im sooooooo cute!!" )
}
func loop () {
g . SingleWindow (). Layout (
g . Label ( "Hello world from giu" ),
g . Row (
g . Button ( "Click Me" ). OnClick ( onClickMe ),
g . Button ( "I'm so cute" ). OnClick ( onImSoCute ),
),
)
}
func main () {
wnd := g . NewMasterWindow ( "Hello world" , 400 , 200 , g . MasterWindowFlagsNotResizable )
wnd . Run ( loop )
}
Hier ist das Ergebnis:
Sofortiges Modus -GUI -System bedeutet, dass die UI -Steuerung ihren Zustand und seinen Wert nicht behält. Wenn Sie beispielsweise giu.InputText(&str)
aufrufen, wird auf dem Bildschirm ein Eingabetastfeld angezeigt, und der Benutzer wird in &str
gespeichert. Eingabtextfeld weiß nichts darüber.
Und die loop
in der Hello World -Beispiel ist für das Zeichnen aller Widgets verantwortlich, basierend auf den in sie übergebenen Parametern. Diese Methode wird 30-mal pro Sekunde aufgerufen, um interaktive Zustände widerzuspiegeln (wie geklickt, schwebend, wertverpackt usw.). Es wird der Ort sein, an dem Sie die UI -Struktur definieren.
Standardmäßig wird jedes Widget in Layout
eines Containers vertikal platziert.
Verwenden Sie die Methode Row()
, um eine Reihe von Widgets zu erstellen (dh widgets einzeln nacheinander platzieren). Zum Beispiel wird giu.Row(Label(...), Button(...))
eine Etikett neben einer Schaltfläche erstellt.
Um eine Spalte mit Widgets zu erstellen (dh Widgets einzeln nacheinander vertikal) in einer Zeile, verwenden Sie die Methode Column()
.
Jedes Widget mit einer Size()
-Methode kann seine Größe explizit festlegen. Beachten Sie, dass Sie einen negativen Wert an Size()
übergeben können, wodurch der verbleibende Breite/Höhenwert gefüllt wird. Beispielsweise erstellt InputText(...).Size(giu.Auto)
ein Eingabegextfeld mit der längsten Breite, die sein Container hinterlassen hat.
Ein MasterWindow
bedeutet das vom Betriebssystem implementierte native Plattformfenster. Alle Unterwindows und Widgets werden darin platziert.
Ein Window
ist ein Container mit einer Titelleiste und kann zusammengebrochen werden. SingleWindow
ist eine besondere Art von Fenster, die den verfügbaren Raum von MasterWindow
belegt.
Ein Child
ist wie ein Panel in anderen GUI -Frameworks - es kann eine Hintergrundfarbe und einen Rand haben.
Überprüfen Sie examples/widgets
für alle Arten von Widgets.
Das Backend von GIU hängt von OpenGL 3.3 ab. Stellen Sie sicher, dass Ihre Umgebung sie unterstützt (soweit ich weiß, einige virtuelle Maschinen wie VirtualBox unterstützen es nicht).
xcode-select --install
go get github.com/AllenDang/giu
Zuerst müssen Sie die erforderlichen Abhängigkeiten installieren:
sudo apt install libx11-dev libxcursor-dev libxrandr-dev libxinerama-dev libxi-dev libglx-dev libgl1-mesa-dev libxxf86vm-dev
auf Red Hat -basierten Verteilungen:
sudo dnf install libX11-devel libXcursor-devel libXrandr-devel libXinerama-devel libXi-devel libGL-devel libXxf86vm-devel
Möglicherweise müssen Sie auch den C/C ++ - Compiler (wie G ++) installieren, wenn es noch nicht installiert ist. Folgen Sie Go Go Compiler -Eingabeaufforderungen.
Dann funktioniert ein einfacher go build
.
Cross-Compiling ist etwas komplizierter. Nehmen wir an, Sie möchten für ARM64 bauen. Das müssten Sie tun:
sudo dpkg --add-architecture arm64
sudo apt update
sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
libx11-dev:arm64 libxcursor-dev:arm64 libxrandr-dev:arm64 libxinerama-dev:arm64 libxi-dev:arm64 libglx-dev:arm64 libgl1-mesa-dev:arm64 libxxf86vm-dev:arm64
GOOS=linux GOARCH=arm64 CGO_ENABLED=1 CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ HOST=aarch64-linux-gnu go build -v
go build -ldflags " -s -w " .
go build -ldflags " -s -w -H=windowsgui -extldflags=-static " .
Auf Mac:
brew install mingw-w64
unter Linux:
sudo dnf install mingw64-gcc mingw64-gcc-c++ mingw64-winpthreads-static
cat > YourExeName.rc << EOL
id ICON "./res/app_win.ico"
GLFW_ICON ICON "./res/app_win.ico"
EOL
x86_64-w64-mingw32-windres YourExeName.rc -O coff -o YourExeName.syso
GOOS=windows GOARCH=amd64 CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ HOST=x86_64-w64-mingw32 go build -ldflags " -s -w -H=windowsgui -extldflags=-static " -p 4 -v -o YourExeName.exe
rm YourExeName.syso
rm YourExeName.rc
Alle Arten von Pull -Anfragen (Dokument, Demo, Screenshots, Code usw.) sind mehr als willkommen!