以前 にも触れたけど, 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 windowTitleFont
と SystemWindow 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 件のコメント:
コメントを投稿