親愛なるimguiと偉大なGo Binding Imgui-Goに基づいたGOのための迅速なクロスプラットフォームGUIフレームワーク。
貢献(機能、ウィジェット、チュートリアル、ドキュメントなど)は大歓迎です!
(このライブラリは無料で許容免許の下で利用できますが、継続的な改善を維持するために財政的支援が必要です。メンテナンスと安定性に加えて、まだ追加されていない多くの望ましい機能があります。GIUを使用している場合は、手を差し伸べてください。)
企業:請求書の技術サポート、メンテナンス、スポンサー契約による継続的な開発とメンテナンスのサポート:
電子メール:[email protected]
個人:ここでの継続的な開発とメンテナンスをサポートしています。
ドキュメントについては、wiki、例、godocを参照するか、コードのコメントをご覧ください。
GIUはGLFW v3.3に基づいて構築されているため、理想的にはGIUはGLFW v3.3がサポートするすべてのプラットフォームをサポートできます。
他の親愛なるImgui Golang Bindingsと比較して、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
内に配置されたウィジェットは垂直に配置されます。
ウィジェットの行を作成するには(つまり、ウィジェットを1つずつ水平に配置します)、 Row()
メソッドを使用します。たとえば、 giu.Row(Label(...), Button(...))
ボタンの横にラベルを作成します。
列内でウィジェットの列(つまり、垂直に1つずつウィジェットを配置する)を作成するには、 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
赤い帽子ベースの分布について:
sudo dnf install libX11-devel libXcursor-devel libXrandr-devel libXinerama-devel libXi-devel libGL-devel libXxf86vm-devel
また、C/C ++コンパイラ(G ++など)がまだインストールされていない場合は、インストールする必要がある場合があります。 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
あらゆる種類のプルリクエスト(ドキュメント、デモ、スクリーンショット、コードなど)は大歓迎です!