2017-09-07 11 views
1

DrawingAreaウィジェット(Gtk.Buttonでテスト済み)で呼び出されたset_size_request(800,600)は、サイズが958 x 791 pxのウィンドウになるのに対して、Window上で呼び出されるset_default_size(800,600)は、ウィンドウのスクリーンショットを撮って解像度を見て)私は、ウィンドウのヘッダーバーのために、高さの少しの不一致があるかどうかを理解するだろうが、そのような幅と高さの違いは私には意味をなさない。ドキュメンテーションはそのようなことを何も示唆していません。誰かが私を啓発することができれば、それは素晴らしいだろう!ここでGtk.Widget.set_size_requestとGtk.Window.set_default_sizeは、同じ値を持つ異なるウィンドウサイズになるのはなぜですか?

はヴァラで書かれたコードの例です:

using Gtk; 
using Cairo; 

public class SizeTest : Gtk.Window { 

    public SizeTest() { 
     this.title = "Size test"; 
     this.destroy.connect (Gtk.main_quit); 
     //set_default_size (800, 600); // Window size -> 800 x 600 px 

     var drawing_area = new DrawingArea(); 
     drawing_area.set_size_request (800, 600); // Window size -> 958 x 791 px 
     add (drawing_area); 
    } 

    static int main (string[] args) { 
     Gtk.init (ref args); 

     var test = new SizeTest(); 
     test.show_all(); 

     Gtk.main(); 

     return 0; 
    } 
} 

@Zongren張、それをテストしていただきありがとうございます。私はあなたのように2つのアプリケーションでそれを分割して、もう一度試しました。両方のウィンドウのサイズは私にとってはかなり異なっています。私は両方のモニターで同じことを試しました。

Btw、私は基本OS 0.4.1を使用しています。Loki、libgtk-3-0がインストールされています。バージョンは3.18.9です。

+0

AFAIK Gtkはウィンドウの初期サイズについて約束していません。初期サイズやジオメトリヒントを設定しない場合、初期サイズは何でもかまいません。あなたのウィンドウマネージャーによって異なる可能性があります。 –

+0

しかし、ほとんど私を混乱させるのは、800x600ピクセル(画面上の実際の物理ピクセルですよね?)は、DrawingAreaとは異なるウィンドウのようです。ウィンドウのデフォルトサイズとして設定されている場合、そのスクリーンショットはその解像度とまったく同じです。一方、DrawingAreaのサイズとして設定すると、799,599で描画された四角形が右下に表示され、0,0のオブジェクトは左上隅に表示されます。もちろん、DrawingAreaに対応するためにウィンドウサイズが調整されますが、ウィンドウは両方向で150ピクセル以上大きくなりました。 – Heiko

+0

@Rawing私はそれを理解したと思う!あなたは正しいのですが、ウィンドウのデフォルトサイズを設定することは、それが実際にそのサイズで表示されることを保証するものではありません。ヒントありがとう!デフォルトのウィンドウサイズが異なると実際のサイズが違うのですが、それは私をだましています。これは決して適切なサイズではありません。スクリーンショットツールはさらに私をだました; D。 Gimpでスクリーンショットを開くと、ウィンドウの周りに透明なスペースがあることがわかりました。それはどうにかしてそのデフォルトサイズを取得し、ウィンドウのスクリーンショットを撮ってから、ウィンドウに割り当てられたスペースを作るが、それは透明では使われない。 – Heiko

答えて

1

コメントから、サイズは同じですが実際の回答に変換しているようです。

ウィンドウサイズをお知らせするための信号を追加します:

this.configure_event.connect ((event) => { 
    print ("Window::Size (px) Width: %d Height: %d\n", event.width, event.height); 
    return false; 
}); 

結果のコードは次のようになりますオプション(Gtk.Window.set_default_sizeGtk.Widget.set_default_size)のいずれかを使用してテストアプリケーションを実行

using Gtk; 

public class SizeTest : Gtk.Window { 

    public SizeTest() { 
     this.title = "Size test"; 
     this.destroy.connect (Gtk.main_quit); 
     this.configure_event.connect ((event) => { 
      print ("Window::Size (px) Width: %d Height: %d\n", event.width, event.height); 
      return false; 
     }); 
     set_default_size (800, 600); // Window size -> 800 x 600 px 

     var drawing_area = new DrawingArea(); 
     //drawing_area.set_size_request (800, 600); // Window size -> 800 x 600 px 
     add (drawing_area); 
    } 

    static int main (string[] args) { 
     Gtk.init (ref args); 

     var test = new SizeTest(); 
     test.show_all(); 

     Gtk.main(); 

     return 0; 
    } 
} 

ウィンドウサイズ(px)幅:800高さ:600

は、初期サイズの下に「縮小」するウィンドウを可能にするGtk.Window.set_default_sizeを使用しているウィジェットが指定したサイズ(および結果としてGtk.Window)よりも小さくすることを許可しませんGtk.Widget.set_size_requestを使用して、しかし違いがあります。 APIから

  • Gtk.Widget.set_default_size

    ウィンドウのデフォルトサイズを設定します

    ウィンドウの「自然な」サイズ(サイズ要求)が のデフォルト値より大きい場合、デフォルトは無視されます。より一般的には、デフォルトの サイズがウィンドウのジオメトリヒントに従わない場合( set_geometry_hintsを使用してこれらを明示的に設定できます)、デフォルトの サイズは最も近い許容サイズにクランプされます。ウィジェットと のサイズ要求は、このように、ウィンドウを縮小するからユーザーを続けるだろう設定set_size_requestとは異なり

    、この関数は唯一 ユーザーがウィンドウ 自体をリサイズした場合と同様に、初期サイズを設定します。ユーザーは通常通り、ウィンドウを再び縮小することができます。 既定のサイズを-1に設定すると、「自然」既定値の (ウィンドウのサイズ要求)を使用することを意味します。

  • Gtk.Widget.set_size_request:ウィジェットの最小サイズを設定

    。すなわち、ウィジェットのサイズ要求 は、少なくとも高さごとの幅になります。

    この機能を使用して、ウィジェットを通常よりも大きくすることができます( )。

    多くの場合、set_default_sizeは、この機能よりも上にある ウィンドウに最も適しています。既定のサイズを設定すると、 ユーザーはウィンドウを縮小することができます。サイズ要求を設定すると、少なくともサイズ要求と同じ大きさのウィンドウを離れるように、 が強制的に設定されます。 ウィンドウサイズを扱う場合、set_geometry_hintsは便利な関数になります 。

    固定サイズテーマ、 他の言語への翻訳、さまざまなフォント、およびユーザーアクション のすべてを、指定されたウィジェットの適切なサイズに変更することができます。だから、 は、常に正しいサイズをハードコードすることは基本的に不可能です。

    ウィジェットのサイズリクエストは、ウィジェットが受け入れることができる最小サイズであり、まだ正常に動作し、正しく描画されています。 しかし、 で、いくつかの奇妙なケースでは、ウィジェットが要求されたサイズよりも小さく割り当てられることがあります。多くの場合、ウィジェットは、 よりも多くのスペースを割り当てられます。 ...ここで設定されたサイズリクエストには、ウィジェットプロパティmargin-left、margin-right、margin-top、および margin-bottomからのマージン は含まれていませんが、他のすべてのパディングまたはほぼ ボーダープロパティの設定Widgetの任意のサブクラスによって定義されます。

関連する問題