Fontクラスのプロパティをオーバーライドしてみる

吉里吉里のFontクラスは特殊な位置付けで、ユーザが任意にnewする事が出来ません。
ただし、Layerクラスのfontプロパティとしてぶら下がっているFontオブジェクトのメンバに対しては、上書きが可能のようです。
これを利用して、こんな珍妙なLayerクラスが作れます。
//縦書きレイヤ
class VerticalLayer extends Layer {
var fontAngle; //font.angleプロパティ
var fontFace; //font.faceプロパティ
//コンストラクタ
function VerticalLayer(*) {
super.Layer(*);
font.angle += 2700;
fontAngle = &font.angle;
&font.angle = &myFontAngle;
font.face = "@" + font.face;
fontFace = &font.face;
&font.face = &myFontFace;
}
//デストラクタ
function finalize() {
super.finalize();
}
//他の描画系メソッドも似た様なやり方でオーバーライドすればいい感じに動くはず
function drawText(x, y, *) {
super.drawText(height - y, x, *);
}
property width {
setter(v) {
super.height = v;
}
getter {
return super.height;
}
}
property height {
setter(v) {
super.width = v;
}
getter {
return super.width;
}
}
property myFontAngle {
setter(v) {
fontAngle = v + 2700; //3600以上を指定すると自動的に丸められるみたいです。
}
getter {
return fontAngle + 900;
}
}
property myFontFace {
setter(v) {
fontFace = "@" + v;
}
getter {
return fontFace.substring(1);
}
}
}
(^-^)v
もちろん、メソッドに関しても同様のやり方でオーバーライド出来ます。
ただ、見て判るとおり、このレイヤはかなり特殊な振る舞いをしますので、あんまり人に勧められるもんじゃねーかもです。
今、KAGで言うMessageLayer的な文字描画用レイヤを書いてる最中なんですが、最初はMessageLayer同様、真偽値を取るverticalというメンバを持たせて処理を分けてたんですね。
でもなんか、めんどくせーのよこれが。縦書きの時だけ一時レイヤに描画して、affine変換で回転させてべちゃっと貼り付けるか? とも思ったんですが、描画系のメソッドはなんか重そうというファジーな理由で却下しました。^^;
そのうち、気が向いたら今書いてる文字描画レイヤもここに載せるかもです。例のごとく、超簡単なやつですよ?



