2010-11-18 9 views

答えて

0

いくつかのオプションがあります。

  • スタイルを調整します。ベースセットには真円度オプションはありません。いくつかのテーマエンジンは、ボーダー画像の仕様や真円度を提供するかもしれませんが、どこでも動作しません。
  • あなたの好みのように見えるテーマを強制します。これはあなたが望むテーマを指定するgtkrc文字列をロードするだけではあまり難しくありません。ユーザーがテーマを持っていることを確認するか、フォールバックを確認する必要があります。
  • ボタンをサブクラス化して自分で描画します。 1つの方法は、ボーダーとレリーフを0に設定し、イメージをパックし、状態変更イベントに応答して、適切なプレライト(ホバー)イメージを使用することです。別の方法は、エクスポーズイベントを書き換えて、望むようにボタンを描画することです。
+0

この提案をいただきありがとうございます。エクスポーズイベントメソッドで描画ボタンが実行されるサンプルをポストできますか? – boom

+0

G_DEFINE_TYPE(RButton、rbutton、GTK_TYPE_BUTTON) static void rbutton_class_init(RButtonClass * klass){ ((GtkWidgetClass *)klass) - > expose_event = rbutton_expose; } – Rubinium

+0

以下でgtk_button_paintを交換: 静的GINTのrbutton_expose(GtkWidget *ウィジェット、GdkEventExpose *イベント){ IF(GTK_WIDGET_DRAWABLE(ウィジェット)){ GtkWidget *子供= GTK_BIN(ウィジェット) - >子。 GtkButton * button = GTK_BUTTON(ウィジェット); GtkStateType state_type = GTK_WIDGET_STATE(ウィジェット); GtkShadowType shadow_type = button->落ち込んでいますか?GTK_SHADOW_IN:GTK_SHADOW_OUT; _gtk_button_paint(button、&event-> area、state_type、shadow_type、 "button"、 "buttondefault"); (子供) gtk_container_propagate_expose } 戻り値FALSE; } – Rubinium

0

受け入れ答えは言った:

基本セットには丸みのオプションはありません。

さて、今はあります。特殊なケースで

https://developer.gnome.org/gtk3/stable/GtkButton.html

、ボタンが.circularスタイルクラスを追加することにより、ラウンド行うことができます。

ので、例えば:

gtk_style_context_add_class(
    gtk_widget_get_style_context(GTK_WIDGET(button)), 
    "circular" 
); 

これは、標準的なテーマ、アドワイチャと高コントラストの両方を使用して動作します。

問題があります:これは、expandプロパティが設定されていないか手動でアップサイズされていないボタンに対しては問題なく機能します。私はこれがのexpandのサイズを持っていて動作させることができるかどうかを考え出していません。これは私がこれを望んでいた拡大ボタンと同じように丸みを帯びていますが、 :/私の推測では、開発者は考えていない、または気に... circularスタイルクラスを持つ大きなボタンをサポートしています。 IRCでいつかお尋ねします。

関連する問題