Быстрый кроссплатформенный графический интерфейс для GO на основе дорогих Imgui и Great Go, связывающий Imgui-Go.
Любой вклад (функции, виджеты, учебные пособия, документы и т. Д.) Повышен!
(Эта библиотека доступна по бесплатной и разрешающей лицензии, но требует финансовой поддержки для поддержания его дальнейших улучшений. В дополнение к техническому обслуживанию и стабильности есть много желаемых функций, которые еще предстоит добавить. Если вы используете GIU, пожалуйста, рассмотрите возможность обратиться.)
Предприятия: Поддержка продолжения разработки и технического обслуживания с помощью технической поддержки, технической поддержки, технического обслуживания, спонсорских контрактов:
Электронная почта: [email protected]
Физические лица: Поддержка продолжения развития и технического обслуживания здесь.
Для документации см. В нашу вики, примеры, Гоход или просто взгляните на комментарии в коде.
GIU построен на GLFW V3.3, поэтому в идеале GIU может поддерживать все платформы, которые поддерживает GLFW V3.3.
По сравнению с другими дорогими привязками Imgui Golang, GIU имеет следующие функции:



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 )
}Вот результат:

Графин -система немедленного режима означает, что управление пользовательским интерфейсом не сохраняет свое состояние и значение. Например, &str giu.InputText(&str) Входной текстовый поле ничего не знает об этом.
И метод loop в примере Hello World отвечает за рисование всех виджетов на основе параметров, передаваемых в них. Этот метод будет вызван 30 раз в секунду, чтобы отражать интерактивные состояния (например, щелчок, зависал, изменяется стоимостью и т. Д.). Это будет место, где вы определяете структуру пользовательского интерфейса.
По умолчанию любой виджет, помещенный в Layout контейнера, будет размещен по вертикали.
Чтобы создать ряд виджетов (т.е. разместите виджеты один за другим горизонтально), используйте метод Row() . Например, giu.Row(Label(...), Button(...)) создаст метку рядом с кнопкой.
Чтобы создать столбец виджетов (то есть разместите виджеты один за одной вертикально) внутри строки, используйте метод Column() .
Любой виджет, который имеет метод Size() , может явно установить свой размер. Обратите внимание, что вы можете передать отрицательное значение по Size() , которое заполнит оставшуюся ширину/высоту. Например, InputText(...).Size(giu.Auto) создаст входное текстовое поле с самой длинной шириной, которую остался его контейнер.
MasterWindow означает нативное окно платформы, реализованное ОС. Все субворот и виджеты будут размещены внутри него.
Window - это контейнер с строкой заголовка, и его можно обезтьте. SingleWindow - это особый вид окна, которое будет занимать все доступное пространство MasterWindow .
Child похож на панель в других структурах графического интерфейса - он может иметь цвет фона и границу.
Проверьте examples/widgets на все виды виджетов.
Бэкэнд GIU зависит от OpenGL 3.3, убедитесь, что ваша среда поддерживает ее (насколько я знаю, некоторые виртуальные машины, такие как VirtualBox, не поддерживают ее).
xcode-select --install
go get github.com/AllenDang/giuСначала вам нужно установить необходимые зависимости:
sudo apt install libx11-dev libxcursor-dev libxrandr-dev libxinerama-dev libxi-dev libglx-dev libgl1-mesa-dev libxxf86vm-devНа распределениях на основе красной шляпы:
sudo dnf install libX11-devel libXcursor-devel libXrandr-devel libXinerama-devel libXi-devel libGL-devel libXxf86vm-develВам также может потребоваться установить компилятор C/C ++ (например, G ++), если он еще не установлен. Следуйте за подсказками компилятора.
Тогда простая go build будет работать.
Кросс-компилирование немного сложнее. Допустим, вы хотите построить для ARM64. Это то, что вам нужно сделать:
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 -vgo build -ldflags " -s -w " .go build -ldflags " -s -w -H=windowsgui -extldflags=-static " .на Mac:
brew install mingw-w64на Linux:
sudo dnf install mingw64-gcc mingw64-gcc-c++ mingw64-winpthreads-staticcat > 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Все виды запросов на вытяжение (документ, демонстрация, скриншоты, код и т. Д.) Приглашаются более чем приветствуются!