ダブルブァッファ
ダブルブァッファってなんだ〜〜〜〜。う〜ん、
これは難しい。 今までの描画ほうほう
(
線を引いたり 四角形を描画したり
)
に不満はありませんか。 はい、せっかく描画したのに
描画した内容が消えてしまいますね。ダブルブァッファは
この「せっかく描画した内容が消えてしまう」という問題
を解決してくれます。
import dui.All;
public:
class HelloWorld : MainWindow , ExposeListener
{
public :
Pixmap buffer;
this()
{
super("mosskite");
DrawingArea area = new DrawingArea();
area.setSizeRequest(100,100);
add(area);
setSizeRequest(200,200);
show();
Dispatcher dis = new Dispatcher();
dis.addExposeListener(this,area);
}
bit noExposeCallback(Widget widget)
{
return false;
}
bit exposeCallback(Widget widget)
{
static int flag = 0;
if( widget.getWindow() != null && flag == 0)
{
flag =1;
buffer = new Pixmap(new Pixmap(widget.getWindow()),100,100,-1);
GC gc = widget.getFGgc();
gc.setForeground(new Color(255,255,255));
buffer.drawRectangle(gc,true,0,0,100,100);
}
else
{
widget.getDrawable().drawDrawable(widget.getFGgc(),buffer,0,0,0,0,100,100);
}
return true;
}
}
void main(char [][]args)
{
DUI dui = DUI.dui(args);
new HelloWorld();
dui.go();
}
白色の四角形をPixmap上に描画を行っあとに DrawinArea上にPixmap上に
描かれた内容を描画しています。
現在Pixmapのコンストラクターは2つ存在します。
Drawable.dの変更。widget.getDrawable().gDraw()とするとgDraw()で かえされるはずのGDKDrawableはnullをかえします。 かわりにGDKDrawableはDrawableないのdrawableがもっているようです。さらに Pixmap().gDraw()とするとgDraw()ないのGDKDrawableは値を持っています。が Drawableないのdrawableはnullとなっています。これは、まぎらわしいですね。この紛らわしい内容のために私はとても苦労をしました ( 線を引いたり 四角形を描画したり )では Drawable.dをかきかえてしまいました。 今回の場合 Drawable.drawDrawableを使用するのは前者であり。 しかしDrawable.drawRectangleは後者です。 だから取りあえず以下のように変更してしまいました。
void drawRectangle
(GC gc, bit filled, gint x, gint y, gint width, gint height)
{
gdk_draw_rectangle
(gDraw(), gc.getGDKgc(), filled, x, y, width, height);
}
void drawDrawable
(GC gc, Drawable drawable, gint xsrc, gint ysrc, gint xdest,
gint ydest, gint width, gint height)
{
gdk_draw_drawable
(this.drawable, gc.getGDKgc(), drawable.gDraw(),
xsrc, ysrc, xdest, ydest, width, height);
}
とりあえずこれで動作しました。以上です。 注意(本当は DrawAbleを継承して 変更するメソッドをOverridするのが良いと思いますが、 説明が入り組んでしまうので今回は直接書き換えました。後、 書き換えた後 goMake.batを実行することを忘れないでね) |
PC用眼鏡【管理人も使ってますがマジで疲れません】 解約手数料0円【あしたでんき】
Yahoo 楽天 NTT-X Store