7

すべてのピクセルが自分の制御下にある (つまり、GTK+ のような標準のウィジェットを使用しない) GUI を構築したいと考えています。Renoiseは、私が制作しようとしているものの良い例です。

Xlib または XCB レベルに到達するのが最善の方法ですか、それとも GTK+ (おそらく PyGTK) などのより高いレベルのフレームワークでこれを達成することは可能ですか? 絵を描くためにカイロを見るべきですか?

できれば Python か Ruby で作業したいのですが、C でも構いません。

4

6 に答える 6

7

Clutterツールキット (またはその他のキャンバス ウィジェット/ツールキット) を使用すると、そのようなインターフェイスを構築できます。Xlib/XCB または DrawingArea のレベルに進むことはお勧めしません。キャンバスに既に存在する汎用機能の多くを実装する必要があるからです。

于 2010-05-03T14:11:28.583 に答える
5

X では、このアプローチには考慮されていない問題が 1 つあります。フォント サイズはポイント単位 (1 ポイントは 1/72 インチ) で測定されるため、解像度とモニター サイズによって (ピクセル) サイズが異なります。テキスト文字列も言語によって長さが異なるため、ボタンなどをどのくらいの大きさにする必要があるかを判断することは実際には不可能です。X の一般的な GUI ツールキットは、これを念頭に置いて設計されています。それとは別に、(Cairo[1] または GDK[2] を使用して) すべてのウィジェットを正確に描画する GTK 用の独自のテーマ エンジンを作成し、アプリケーションで常にそのテーマを使用するようにすることは簡単です。おそらく、アプリケーションで DPI に基づいてデフォルトのフォント サイズ (ポイント単位) を設定して、常に同じサイズのピクセルを取得することもできます (もちろん、アプリケーションを翻訳可能にすることはできません)。

AGAR[4]、PicoGUI[5]、Guichan[6] など、SDL[3] に基づくこのピクセル パーフェクト アプローチを使用する GUI が少なくともいくつかあります。それらのほとんどは C++ で書かれており、一部は C で書かれており、私が知る限り、Python や Ruby のバインディングを持っているものはありません。次に、SDL を使用すると、アプリケーション (または使用する GUI ツールキット) がさまざまなダイアログなどを管理する独自のウィンドウを実行する必要があることを意味する、1 つのトップレベル ウィンドウしか持つことができません。しかし、とにかくそれはあなたが意図したものだったと思います。

[1] cairographics.org/
[2] library.gnome.org/devel/gdk/unstable/index.html
[3] www.libsdl.org/
[4] libagar.org/
[5] picogui.org/
[6 ] ] guichan.sourceforge.net/wiki/index.php/Main_Page

于 2010-05-24T16:11:24.697 に答える
3

その場合、おそらくpygameのようなものが必要になるでしょう。

于 2010-05-03T08:51:08.700 に答える
1

簡単に言えば、外接する四角形と自由に描画できるものが必要です。このようなオブジェクトは、一般に「キャンバス」と呼ばれます。Fox ツールキットから入手できる FXCanvas クラスを使用して (Ruby で) これを行ったことがありますが、他にも使用できるものがあります (たとえば、wxWidgets ですが、このツールキットを個人的に使用した経験はありません)。

ただし、注意してください。このような低レベルのインターフェースは柔軟性に優れていますが、多くの作業が必要になります。

于 2010-05-03T22:27:20.240 に答える
1

http://www.oluyede.org/blog/writing-a-widget-using-cairo-and-pygtk-28/は、PyGTK と Cairo を使用して単純なウィジェットを作成する方法を示しています。

于 2010-05-03T22:10:40.163 に答える
1

GTK と PyGTK は、おそらく使用するのに不適切なツールです。アプリケーション全体を 1 つの大きなものにすることはできますがgtk.DrawingArea(実際に意味のある例はGargoyleです)、どんな種類の複雑な GUI でも狂ってしまいます。

于 2010-05-03T10:10:55.940 に答える