GoのネイティブUIライブラリ

Goに関するよくある質問の1つは、Goに優れたクロスプラットフォームUIライブラリがあるかどうかです。 原則として、質問者はgo-qmlまたはandilabs / ui (各プラットフォームのネイティブUIのC実装へのバインド)に送信されましたが、一般にネイティブGo UIには価値のあるプロジェクトはまだありませんでした。 先日、Googleの数人の開発者がオープンソースの世界のためにgxuiプロジェクトを開きました。これはGoのネイティブUIライブラリのニッチを埋めることを目指しています。



プロジェクトはまだ未加工ですが、見栄えが良く、有望です。



よく見てみましょう。







プロジェクトのアドレス: github.com/google/gxui 、そしてそれ自体が素晴らしいREADMEです:

これは実験的なコードであり、大幅な変更が加えられます。 自由に試してみてください。APIが大幅に再設計されても心配する必要はありません。



これまでのところ、コードは文書化されておらず、間違いなく「イディオマティック」なGoではありません。 今後数ヶ月で、彼は強くリファクタリングされます。



これは公式のGoogle製品ではなく、たまたまGoogleに属していたコードです。




私は同意します、readmeは刺激的ではありませんが、現時点で何が起こっているか見てみましょう。 サンプル/ディレクトリ内の例を流studiedに研究し、試した後、私は平凡なモーダルウィンドウを記述しようとしました。



package main import ( "fmt" "github.com/google/gxui" "github.com/google/gxui/drivers/gl" "github.com/google/gxui/themes/dark" ) func appMain(driver gxui.Driver) { theme := dark.CreateTheme(driver) label := theme.CreateLabel() label.SetText("Are you sure?") yesButton := theme.CreateButton() yesButton.SetText("Yes") yesButton.OnClick(func(ev gxui.MouseEvent) { fmt.Println("Yes") }) noButton := theme.CreateButton() noButton.SetText("No") noButton.OnClick(func(ev gxui.MouseEvent) { fmt.Println("No") }) layout := theme.CreateLinearLayout() layout.AddChild(label) btnLayout := theme.CreateLinearLayout() btnLayout.AddChild(yesButton) btnLayout.AddChild(noButton) btnLayout.SetOrientation(gxui.Horizontal) layout.AddChild(btnLayout) layout.SetHorizontalAlignment(gxui.AlignCenter) layout.SetVerticalAlignment(gxui.AlignMiddle) window := theme.CreateWindow(120, 60, "Message Box") window.AddChild(layout) window.OnClose(driver.Terminate) gxui.EventLoop(driver) } func main() { gl.StartDriver("", appMain) }
      
      







GTKやQtのようですね。 私の意見では、これは良いです-GTK / Qtの経験がある人-ライブラリを操作するロジックを理解するのが簡単になり、UIのコードジェネレーターに関しては、よく踏まれたパスに沿って進むことも可能になりますGladeまたはQt Designerをこのライブラリに適合させますか?)。



これまでのところ、グラフィックサブシステムとのやり取りにはOpenGLのみが使用されていますが、ライブラリの設計により、少なくとも他の出力ドライバー、少なくともAsciiArt、少なくともDirectXを将来追加できます。



結果は次のようになります。





ウィンドウのサイズを変更するときに、ウィジェットを正しく配置、サイズ変更、または再レイアウトする方法をまだ見つけていません(ただし、この機能はあるようです)。 フォントでも、すべてが最小限のレベルにあります。



ソースからのいくつかの例を次に示します。



アニメーションの進行状況バー。



ポリゴン



サイズを変更してタブを切り替えることができるパネル



リスト





一般的に、デスクトップUIの需要は年々小さくなっており、Webソリューションはここで強力な位置を占めています。 また、デスクトップUIの必要性はまだありますが、この傾向により、ライブラリの作成者の熱意と動機が失われる可能性があります。 同時に、完全に機能するUIライブラリ、およびクロスプラットフォームライブラリを作成するタスクの複雑さは膨大であり、これを効率的かつ正しく実行するには膨大なリソースが必要であることを理解することが重要です。 これらすべてを考えると、私は個人的にこのプロジェクトにあまり投資しなかっただろうが、特にAPIが安定しているとREADMEが言った時点で、プレイするのは面白いだろう。

しかし、一方で、プロジェクトはすでにgithubで1345個の星を収集しており、twitter / redditの反応から判断すると、多くの人がそのようなライブラリを待っています。



だから、それが面白い人には、試して、貢献して、プロジェクトをフォローしてください。



All Articles