친애하는 imgui와 imgui-go를 바인딩하는 Go를 기반으로 한 빠른 크로스 플랫폼 GUI 프레임 워크.
모든 기여 (기능, 위젯, 튜토리얼, 문서 등)에 감사드립니다!
(이 라이브러리는 무료 및 허용 라이센스로 제공되지만 지속적인 개선을 유지하기 위해 재정 지원이 필요합니다. 유지 보수 및 안정성 외에도 아직 추가되지 않은 바람직한 기능이 있습니다. GIU를 사용하는 경우 연락을 고려하십시오.)
비즈니스 : 송장 기술 지원, 유지 보수, 후원 계약을 통한 지속적인 개발 및 유지 보수 지원 :
이메일 : [email protected]
개인 : 지속적인 개발 및 유지 보수 지원.
문서화는 Wiki, 예제, Godoc 또는 코드의 의견을 살펴보십시오.
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 )
}
결과는 다음과 같습니다.
즉각적인 모드 GUI 시스템은 UI 컨트롤이 상태와 가치를 유지하지 않음을 의미합니다. 예를 들어, giu.InputText(&str)
에 전화하면 화면에 입력 텍스트 상자가 표시되며 사용자가 입력 한 값은 &str
에 저장됩니다. 입력 텍스트 상자는 그것에 대해 아무것도 모릅니다.
Hello World 예제의 loop
메소드는 전달 된 매개 변수를 기반으로 모든 위젯을 그려야 합니다. 이 방법은 대화식 상태 (클릭, 호버링, 가치 변화 등)를 반영하기 위해 초당 30 회 호출됩니다. UI 구조를 정의하는 곳이 될 것입니다.
기본적으로 컨테이너 Layout
내부에 배치 된 위젯은 수직으로 배치됩니다.
위젯 행 (예 : 위젯을 하나씩 하나씩 배치)을 만들려면 Row()
메소드를 사용하십시오. 예를 들어 giu.Row(Label(...), Button(...))
버튼 옆에 레이블을 만듭니다.
열 안에 위젯 열 (예 : 위젯을 하나씩 배치)을 만들려면 Column()
메소드를 사용하십시오.
Size()
메소드가있는 위젯은 크기를 명시 적으로 설정할 수 있습니다. 음수 값을 Size()
로 전달할 수 있으며 나머지 너비/높이 값을 채 웁니다. 예를 들어, InputText(...).Size(giu.Auto)
컨테이너가 남은 폭이 가장 긴 입력 텍스트 상자를 만듭니다.
MasterWindow
OS에서 구현 한 플랫폼 기본 창을 의미합니다. 모든 하위 바람과 위젯이 그 안에 배치됩니다.
Window
제목 표시 줄이있는 컨테이너이며 무너질 수 있습니다. SingleWindow
는 MasterWindow
의 모든 공간을 차지하는 특별한 종류의 창입니다.
Child
다른 GUI 프레임 워크의 패널과 같습니다. 배경색과 테두리가있을 수 있습니다.
모든 종류의 위젯에 대한 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
Red Hat 기반 분포 :
sudo dnf install libX11-devel libXcursor-devel libXrandr-devel libXinerama-devel libXi-devel libGL-devel libXxf86vm-devel
C/C ++ 컴파일러가 아직 설치되지 않은 경우 설치해야 할 수도 있습니다. GO 컴파일러 프롬프트를 따르십시오.
그러면 간단한 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
모든 종류의 풀 요청 (문서, 데모, 스크린 샷, 코드 등)은 환영합니다!