ぐる式 (貳) より引っ越し作業中.未完.

2007年7月2日月曜日

Squeak: グリップ・モルフ位置の修正

LeyoutFrames of GripMorphs

以前 にも触れたけど, 3.9 から導入された Top[Left|Right]GripMorph は Preferences windowTitleFont に追随しないという症状があって,これは Squeak3.10alpha.7108 になってもまだ直っていない.右の画像は Squeak3.10alpha latest update: #7108 での実行例.

元のソースは以下のような具合になっていて,オフセットの値として定数を突っ込んでるだけ (これは無限欠陥法 (infinite defects methodology)っすか[Joel Spolsky "Joel on Software", 青木靖 訳, オーム社, 2005, 2006, ISBN4-274-06630-4, p. 27., (Joel Spolsky "Joel on Software", 2004) (Joel on Software), The Joel Test: 12 Steps to Better Code - Joel on Software]) なので, Preferences setWindowTitleFontTo: aFont でフォントを変更しても変わらないわけである.

"Browser fullOnClass: TopRightGripMorph selector: #gripLayoutFrame."gripLayoutFrame    ^ LayoutFrame        fractions: (1 @ 0 corner: 1 @ 0)        offsets: (0 - self defaultWidth @ -27 corner: 0 @ 0)
"Browser fullOnClass: TopLeftGripMorph selector: #gripLayoutFrame."gripLayoutFrame    ^ LayoutFrame        fractions: (0 @ 0 corner: 0 @ 0)        offsets: (0 @ -27 corner: self defaultWidth @ 0)

Mantis でも放置されてるようなので, [FIX] を書いてみた.定数 -27 を Preferences windowTitleFontSystemWindow borderWidth を見て計算するようにすれば佳い.

defaultOffsetheightOffset    ^ (Preferences windowTitleFont emphasis: 0) height rounded +             (SystemWindow borderWidth * 2) * 2 - self defaultHeight

emphasis: 0 の意味は "Browser fullOnClass: SystemWindow selector: #initializeLabelArea." を,rounded の意味は "Browser fullOnClass: Morph selector: #extent:." を,レイアウト・フレームのオフセット値は "Browser fullOnClass: SystemWindow selector: #setFramesForLabelArea." を参照.

あとはテスト・ケースを書いてテスト.こっちの方に時間が掛かった orz. Mantis に揚げたあとで気付いたが, defaultOffset というメソッド名は,返す値が可変であるから heightOffset の方が佳かったな.このままじゃ如何にも定数を返しそうな名前だ orz2.→ 結局,リネームして再度アップロードした (笑).

0005386: The top 'grips' in a System Window are mis-positioned - Mantis

0 件のコメント:

コメントを投稿