Login
Immutable PageDiscussionInfoAttachments
clear/wm_devel/2013-02-10

MMA

サイズヒントについて

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

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

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

WM_NORMAL_HINTS

ウィンドウのサイズヒントは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

上のサイズ版

各フィールドについて

gravity

WMのフレームウィンドウに対してクライアントウィンドウを配置する基準点を示す。ICCCMとEWMHの記述をまとめるとたぶん以下のような感じ:

基準点(refx, refy)の計算に用いる表(EWMH Implementation Noteより)

gravity

rexf

refy

(refx,refy)に置かれる点

備考

Static

x

y

クライアントウィンドウの左上角

クライアントウィンドウは不動

NorthWest

x-bw

y-bw

フレームウィンドウの左上角

デフォルト

North

x+(w/2)

y-bw

フレームウィンドウの上辺の中心

NorthEast

x+w+bw

y-bw

フレームウィンドウの右上角

East

x+w+bw

y+(h/2)

フレームウィンドウの右辺の中心

SouthEast

x+w+bw

y+h+bw

フレームウィンドウの右下角

South

x+(w/2)

y+h+bw

フレームウィンドウの底辺の中心

SouthWest

x-bw

y+h+bw

フレームウィンドウの左下角

West

x-bw

y+(h/2)

フレームウィンドウの左辺の中心

Center

x+(w/2)

y+(h/2)

フレームウィンドウの中心

gravityを正しく処理するただひとつの方法

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