6

プレーン C から使用でき、少なくとも Linux 上で動作し、独自のイベントループを使用する必要がない GUI ツールキットを探しています。 Xイベントがやってくる。

そのようなものは見つかりませんでした。必要なものを取得するには、ツールキット ライブラリにパッチを適用する必要がありますか?

4

4 に答える 4

1

ニュークレア。

https://github.com/Immediate-Mode-UI/Nuklear

Nuklear は、ウィジェット、ボタン、ラベルなどを作成するだけで、レンダリング バックエンドを単独で使用しない GUI ツールキットです。そのためのレンダリング バックエンドを提供する必要があります。レンダリングには Xlib/X11 を使用できます。Xlib はメインループを必要としません。次のようなことができます。

  1. X11 サーバーへの接続を作成し、windows を作成します。
  2. ウィンドウを初期化します (イベント マスクの設定、フォントの読み込みなど)。
  3. Nuklear コンテキストを初期化する
  4. X11 ソケットからのイベントを確認し、Nukear に送信します
  5. GUI を Nuklear に描画する
  6. グラフィックプリミティブを Nuklear から X11-Server に送信します。
  7. あなたがする必要がある他のすべてのことをしてください
  8. XConnectionNumber() を使用して、X11-Socket のファイル記述子を取得します
  9. pselect() を使用して、このファイル記述子で読み取りを待機し、他のすべてを待機します。
  10. 手順 4 を繰り返します。

Nuklear には、Nuklear と Xlib を組み合わせるために必要な関数を提供するヘッダー ファイルの例があり、手順 4 と 6 で役立ちます: https://github.com/Immediate-Mode-UI/Nuklear/blob/master/demo/x11 /nuklear_xlib.h

Nuklear には、次の機能と欠点があります。

  • それを完全に制御できます。
  • C89で書かれている
  • 標準ヘッダーでさえも、外部ライブラリ自体は必要ありません
  • 単一ヘッダーの実装
  • 必要なレンダリング バックエンドを使用できます。
  • ファイル処理や画像の読み込みなどの無関係な機能はありません。他のライブラリが必要か、そのために独自の関数を作成します。
  • Qt のようなツールキットに比べてグラフィカルな可能性が限られている
于 2020-08-20T17:12:40.743 に答える
0

すべてのツールキットがこの操作モードをサポートしています。

独自のイベント エンジンで X サーバー接続ソケットを監視する必要があります。データが利用可能になったら、(疑似コードで)実行します

while (PendingEvent())
  ProcessEvent()

各ツールキットには独自のバージョンの ProcessEvent() と、おそらく PendingEvent() もあります (ただし、いつでも使用できますXPending(Display*))。すなわち、

  • Gtk+ にはgtk_events_pending()gtk_main_iteration()
  • Xt ベースのツールキットにはXtAppPending()XtDispatchEvent()
  • (c++) wxWidgets にはwxApp::.Pending()wxApp::Dispatch()
  • (c++) Qt には があり、独自のおよび/またはクラスをQApplication::processEvents()実装することもできますQAbstractEventDispatcherQEventLoop

積極的に開発された C ツールキットはそれほど多くありません。Gtk+ が唯一の合理的な選択肢だと思います。

編集少なくとも GTK では、この手法はツールキットに追加されたタイムアウトでは機能しません。つまり、処理する他のツールキット イベントがない限り、カーソルの点滅は点滅しません。gtk_main_iteration_do(FALSE)保留中のイベントがなくても、これを「修正」する定期的な呼び出しがありますが、別のスレッドでツールキットのループを実行すると、より堅牢になります。

于 2013-11-06T21:58:13.403 に答える