ExposeListenerを用います。 bit noExposeCallback(Widget widget) bit ExposeCallback(Widget widget) widgetが重なると呼び出されます 注意 widgetはwindowに貼り付けるようなオブジェのBaseとなるクラスです。
import dui.All; public: class HelloWorld : MainWindow , ExposeListener { public : this() { super("Draw"); DrawingArea area = new DrawingArea(); area.setSizeRequest(120,120); add(area); setSizeRequest(120,120); show(); Dispatcher dis = new Dispatcher(); dis.addExposeListener(this,area); } bit noExposeCallback(Widget widget) { return false; } bit exposeCallback(Widget widget) { widget.getDrawable().drawRectangle(false,10,10,100,100); return true; } } void main(char [][]args) { DUI dui = DUI.dui(args); // GTK can receive and process it's own parameters new HelloWorld(); dui.go(); // start the main event loop }での
bit exposeCallback(Widget widget) { GC gc = widget.getFGgc(); gc.setForeground(new Color(255,0,0)); widget.getDrawable().drawRectangle(true,10,10,100,100); return true; }
extern (C) void gdk_draw_point(GdkDrawable * drawable, GdkGC * gc, gint x, gint y); extern (C) void gdk_draw_line(GdkDrawable * drawable, GdkGC * gc, gint x1_, gint y1_, gint x2_, gint y2_);と関数が呼び出されていて。
void drawPoint(gint x, gint y) { gdk_draw_point(drawable,gc.getGDKgc(), x, y); } void drawLine(gint x1, gint y1, gint x2, gint y2) { gdk_draw_line(gDraw(),gc.getGDKgc(), gc.getGDKgc(), x1, y1, x2, y2); }となっています。 うーん、どうもgDraw()がうまくのうしてなてようですね。調べてみましょう。
if( Area.getDrawable().gDraw() == null) { printf("gDraw is null\n"); } else { printf("gdraw is not null\n"); } if( Area.getWindow() == null) { printf("getWindow() is null"); } else { printf("getWindow() is not null"); }はい、うまくうごいていないようです。そこでDrawable.dを 書き換えることにしました。
gdk_draw_line(drawable, gc.getGDKgc(), x1, y1, x2, y2);はい、線が描画されるようになりました。ふー、よかった。 注意( * ダブルバッファのときは drawableがうまく動きません。 詳しくは次項にて) 戻る
PC用眼鏡【管理人も使ってますがマジで疲れません】 解約手数料0円【あしたでんき】 Yahoo 楽天 NTT-X Store