Login
Immutable PageDiscussionInfoAttachments
Diff for "clear/wm_devel/2013-02-10"

MMA
Differences between revisions 3 and 4
Revision 3 as of 2013-02-10 17:37:47
Size: 2751
Editor: clear
Comment:
Revision 4 as of 2013-02-10 22:31:44
Size: 3879
Editor: clear
Comment:
Deletions are marked like this. Additions are marked like this.
Line 44: Line 44:
各フィールドについて
 * サイズを指定するフィールドにはウィンドウ枠の分は含まれない
 * min_width=max_widthかつmin_height=max_heightの場合、ウィンドウが固定サイズであることを示す(EWMH Implementation NoteのFixed size Windowsの項)
 * base_widthとbase_height、width_incとheight_incの組み合わせでウィンドウのリサイズ単位を示す
  * width = base_width + (i * width_inc)
  * height = base_height + (i * height_inc)
  * i,jは非負整数。要するに、「baseを最小としてinc単位でリサイズする」
   * 典型的な例は端末エミュレータ(文字単位でのリサイズを可能にする)
   * WMがユーザにウィンドウサイズを示す際は、実際の幅と高さではなくiとjを使う方が良い
 * アスペクト比のチェックを行う際、base_widthおよびbase_heightが設定されていればウィンドウサイズから引く
  * 設定されていなければ何も引かない(min_widthおよびmin_heightを代わりに使うことはしない)

gravityについて(未完)

サイズヒントについて

Xにおいてウィンドウの配置は全てWMが取り仕切ることになっているが、クライアント側から配置方法について注文したい場合がある(例:固定サイズウィンドウ)。このようなときにサイズヒントが用いられる。

WMがサイズヒントを無視した場合考えられる弊害:

  • 固定サイズのはずのウィンドウがリサイズできてしまう
    • UI崩壊
  • アスペクト比がクライアントの意図しない値になる
    • 動画再生用のウィンドウとかだと困る
  • ウィンドウ位置が少しおかしくなる

サイズヒントに関連する資料:

  • ICCCM 4.1.2.3
    • サイズヒントの実体であるWM_NORMAL_HINTSの説明
  • EWMH Implementation NotesのWindow Geometryの項
    • ICCCMがあまりにも分かりにくいので補足がなされた
  • Xlib - C Language Interface 3.2.3 Gravity Attributes
    • gravityの意味
  • EWMH Other Propertiesの_NET_WM_FULL_PLACEMENT

    • WMがクライアントによる座標指定を制限することをクライアントに対して示す
    • WMが十分な配置能力を備えていることを明示する効果がある

WM_NORMAL_HINTSプロパティの型はWM_SIZE_HINTSで、そのメンバは以下の通り:

フィールド

対応するフラグ

意味

備考

min_width

INT32

PMinSize

最小幅

存在しなければbase_width

min_height

INT32

PMinSize

最小高さ

存在しなければbase_height

max_width

INT32

PMaxSize

最大幅

max_height

INT32

PMaxSize

最大高さ

width_inc

INT32

PResizeInc

幅の増分

height_inc

INT32

PResizeInc

高さの増分

min_aspect

(INT32,INT32)

PAspect

最小アスペクト比

(1つめの値/2つめの値)で表される

max_aspect

(INT32,INT32)

PAspect

最大アスペクト比

同上

base_width

INT32

PBaseSize

基底幅

存在しなければmin_width

base_height

INT32

PBaseSize

基底高さ

存在しなければmin_height

win_gravity

INT32

PWinGravity

ウィンドウグラビティ

存在しなければNorthWest

さらに、対応するメンバが存在しないフラグが存在する:

フラグ

意味

USPosition

ウィンドウの座標がユーザによって指定された

USSize

上のサイズ版

PPosition

ウィンドウの座標が(ユーザの操作なしに)プログラムによって指定された

PSize

上のサイズ版

  • 座標とサイズはウィンドウ自体のもの
    • 昔はサイズヒントにメンバがあったが、今はウィンドウ自体の値を使うことになっている

各フィールドについて

  • サイズを指定するフィールドにはウィンドウ枠の分は含まれない
  • min_width=max_widthかつmin_height=max_heightの場合、ウィンドウが固定サイズであることを示す(EWMH Implementation NoteのFixed size Windowsの項)
  • base_widthとbase_height、width_incとheight_incの組み合わせでウィンドウのリサイズ単位を示す
    • width = base_width + (i * width_inc)
    • height = base_height + (i * height_inc)
    • i,jは非負整数。要するに、「baseを最小としてinc単位でリサイズする」
      • 典型的な例は端末エミュレータ(文字単位でのリサイズを可能にする)
      • WMがユーザにウィンドウサイズを示す際は、実際の幅と高さではなくiとjを使う方が良い
  • アスペクト比のチェックを行う際、base_widthおよびbase_heightが設定されていればウィンドウサイズから引く
    • 設定されていなければ何も引かない(min_widthおよびmin_heightを代わりに使うことはしない)

gravityについて(未完)

clear/wm_devel/2013-02-10 (last edited 2013-02-28 15:29:20 by clear)