プレーン C から使用でき、少なくとも Linux 上で動作し、独自のイベントループを使用する必要がない GUI ツールキットを探しています。 Xイベントがやってくる。
そのようなものは見つかりませんでした。必要なものを取得するには、ツールキット ライブラリにパッチを適用する必要がありますか?
プレーン C から使用でき、少なくとも Linux 上で動作し、独自のイベントループを使用する必要がない GUI ツールキットを探しています。 Xイベントがやってくる。
そのようなものは見つかりませんでした。必要なものを取得するには、ツールキット ライブラリにパッチを適用する必要がありますか?
https://github.com/Immediate-Mode-UI/Nuklear
Nuklear は、ウィジェット、ボタン、ラベルなどを作成するだけで、レンダリング バックエンドを単独で使用しない GUI ツールキットです。そのためのレンダリング バックエンドを提供する必要があります。レンダリングには Xlib/X11 を使用できます。Xlib はメインループを必要としません。次のようなことができます。
Nuklear には、Nuklear と Xlib を組み合わせるために必要な関数を提供するヘッダー ファイルの例があり、手順 4 と 6 で役立ちます: https://github.com/Immediate-Mode-UI/Nuklear/blob/master/demo/x11 /nuklear_xlib.h
Nuklear には、次の機能と欠点があります。
すべてのツールキットがこの操作モードをサポートしています。
独自のイベント エンジンで X サーバー接続ソケットを監視する必要があります。データが利用可能になったら、(疑似コードで)実行します
while (PendingEvent())
ProcessEvent()
各ツールキットには独自のバージョンの ProcessEvent() と、おそらく PendingEvent() もあります (ただし、いつでも使用できますXPending(Display*)
)。すなわち、
gtk_events_pending()
、gtk_main_iteration()
XtAppPending()
、XtDispatchEvent()
wxApp::.Pending()
、wxApp::Dispatch()
QApplication::processEvents()
実装することもできますQAbstractEventDispatcher
QEventLoop
積極的に開発された C ツールキットはそれほど多くありません。Gtk+ が唯一の合理的な選択肢だと思います。
編集少なくとも GTK では、この手法はツールキットに追加されたタイムアウトでは機能しません。つまり、処理する他のツールキット イベントがない限り、カーソルの点滅は点滅しません。gtk_main_iteration_do(FALSE)
保留中のイベントがなくても、これを「修正」する定期的な呼び出しがありますが、別のスレッドでツールキットのループを実行すると、より堅牢になります。