[Squeak-ja: 4570] Re: BitBltの録画・再生が完全には成功しない

Yoshiki Ohshima yoshiki @ vpri.org
2011年 5月 12日 (木) 14:07:50 JST


At Thu, 12 May 2011 11:15:34 +0900,
Hiroki Horiuchi wrote:
> 
> On 2011年05月12日 02:36, Yoshiki Ohshima wrote:
> 
> > 面白い企画ですね。
> 
> ありがとうございます。励みになります。
> 
> > たとえば、Squeak 4.2イメージで、MVC
> > Projectを開き、そのなかで同様の処理をした場合はいかがでしょうか。
> 
> MVCプロジェクト内でウィンドウタイトルは、正常に表示されました。

  Displayや他のFormを操作するためのエンジンとしては、昔からのBitBltの
他にBalloonEngineというものがあって、グラデーションやアンチエイリア
シング付のポリゴン描画などはそちらが使われるようになっています。これが
補足されていないために完全になっていないのではないかと推測しています。

> > もしそれで動くとすれば、asBalloonCanvasのsendersを見て、
> > BalloonCanvas経由で描画しているところをFormCanvasの機能でエミュレート
> > するようにするとよいかもしれません。
> 
> これがよくわかりません。あてずっぽうで、BalloonCanvas>>asBalloonCanvasを
> 削除したところ、結果は同じ(グラデーションが再現されない)でした。
> FormCanvas>>asBalloonCanvasを^ self や^ self copyにしたところ、システム
> がフリーズしました。

FormCanvas>>drawPolygon:fillStyle:borderWidth:borderColor:

drawPolygon: vertices fillStyle: aFillStyle borderWidth: bw borderColor: bc
	"Use a BalloonCanvas"
	self asBalloonCanvas 
		drawPolygon: vertices asArray
		fillStyle: (self shadowColor ifNil:[aFillStyle])
		borderWidth: bw 
		borderColor: bc

というようになっているので、asBalloonCanvasが自分自身を返すと無限ルー
プになってしまいますね。

  BalloonCanvas経由の描画をどのように完全に補足するかというのはちょっ
と考える必要がありますね。原理的には、copyBitsを補足するのと同様に、
#flushの前でのEngineの状態をコピーすることでできるのかもしれませんが。

-- Yoshiki


Squeak-ja メーリングリストの案内