2010年8月15日日曜日

Mosaic 6 defはoverrideできない

変数のオーバライドで、varは出来て、defは出来ない。なぜだろう?といっても出来ないものは出来ないのだが。

例えばプリセット感覚でLinearGradientの値を設定したものをそのままクラスとして定義できると自分の感覚に合っていて良いのだが。繰り返し数の多い少ないではなく、感覚の問題。他人が作ったグラデーションをただ黙って使いたい。あるいは自分の好きなグラデーションを有無を言わせず使わせたい。

で、いろいろやってみると、自分で定義したクラスの中で宣言した変数にしろ関数(でLinearGradientを返す)にしろ、それをRectangleのfillにセットすると、そのRectangle自体がずれるというか表示されない(完全に消えたのか、ずれたのかは不明)。

だがMain.fxに直に書いた変数にLinearGradientをセットし、それをfillに代入する分には問題ない。
 
def crecendo = LinearGradient {
startX: 0.0, startY: 0.0, endX: 0.0, endY: 1.0
proportional: true
stops: [
Stop { offset: 0.0 color: Color.GRAY },
Stop { offset: 0.5 color: Color.BLACK }
]
}
var bottomRect : Rectangle = Rectangle {
y: bind (height - bottomRect.height)
// make the bottom rect slightly bigger to fit in TV 'safe area'
height: bind (tagTextBox.boundsInLocal.height + 35)
width: bind width
fill:crecendo
/*
fill: LinearGradient {
startX: 0.0, startY: 0.0, endX: 0.0, endY: 1.0
proportional: true
stops: [
Stop { offset: 0.0 color: Color.GRAY },
Stop { offset: 0.5 color: Color.BLACK }
]
}
*/
}

LinearGradientのproportionalがtrue(相対)だから、変数だと参照時に参照するRectangleに合わせるからかと思ったが、同じ変数を別なRectangleにセットしても問題ないので、そういうわけでもなさそう。

var tempRect : Rectangle = Rectangle {
y: bind (height - bottomRect.height - 50)
height: 35
width: bind width
fill:crecendo
}

bottomRectとtempRectは両方ともちゃんと表示される。


まあよくわからないが、これ以上追求してもしょうがないので、現状はそういうものだということで好しとする。そもそもfill:LinearGradient {...}って書くならfill:SomeDesignersGrandientって書けてもいいじゃないか的な発想でしかないので。

0 件のコメント:

コメントを投稿