ログイン
編集不可のページディスカッション情報添付ファイル
"clear/wm_devel/2013-02-10"の差分

MMA
1と3のリビジョン間の差分 (その間の編集: 2回)
2013-02-10 16:20:29時点のリビジョン1
サイズ: 441
編集者: clear
コメント:
2013-02-10 17:37:47時点のリビジョン3
サイズ: 2751
編集者: clear
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 3: 行 3:
ウィンドウの装飾を行う際その位置をどのように調整すべきか調べていたら、クライアントのサイズヒントを考慮しない訳には行かないことが分かったのでまとめておく。
 * サイズヒント: クライアントがWMに対して特定の方法でウィンドウを配置するよう要求するためのプロパティ
Xにおいてウィンドウの配置は全てWMが取り仕切ることになっているが、クライアント側から配置方法について注文したい場合がある(例:固定サイズウィンドウ)。このようなときにサイズヒントが用いられる。
行 6: 行 5:
(後で追記する) 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||上のサイズ版||
 * 座標とサイズはウィンドウ自体のもの
  * 昔はサイズヒントにメンバがあったが、今はウィンドウ自体の値を使うことになっている

サイズヒントについて

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

上のサイズ版

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

clear/wm_devel/2013-02-10 (最終更新日時 2013-02-28 15:29:20 更新者 clear)