Быстрый кроссплатформенный графический интерфейс для 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 -v
go 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-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
Все виды запросов на вытяжение (документ, демонстрация, скриншоты, код и т. Д.) Приглашаются более чем приветствуются!