代码之家  ›  专栏  ›  技术社区  ›  dsimcha

gtkD:最小绘图示例?

  •  7
  • dsimcha  · 技术社区  · 14 年前

    DrawingArea 并将结果显示在 MainWindow

    import gtk.DrawingArea, gtk.Main, gtk.MainWindow, gdk.GC, gdk.Drawable,
        gdk.Color;
    
    void main(string[] args) {
        Main.init(args);
    
        auto win = new MainWindow("Hello, world");
        win.setDefaultSize(800, 600);
        auto drawingArea = new DrawingArea(800, 600);
        win.add(drawingArea);
        drawingArea.realize();
    
        auto drawable = drawingArea.getWindow();
        auto gc = new GC(drawable);
        gc.setForeground(new Color(255, 0, 0));
        gc.setBackground(new Color(255, 255, 255));
        drawable.drawLine(gc, 0, 0, 100, 100);
    
        drawingArea.showAll();
        drawingArea.queueDraw();
        win.showAll();
    
        Main.run();
    }
    
    1 回复  |  直到 14 年前
        1
  •  4
  •   ptomato    14 年前

    我在D方面没有任何经验,但在GTK方面有很多经验,因此在gtkD教程的帮助下,我成功地创建了一个最小的示例:

    import gtk.DrawingArea, gtk.Main, gtk.MainWindow, gdk.GC, gdk.Drawable,
        gdk.Color, gtk.Widget;
    
    class DrawingTest : MainWindow
    {
        this()
        {
            super("Hello, world");
            setDefaultSize(800, 600);
            auto drawingArea = new DrawingArea(800, 600);
            add(drawingArea);
            drawingArea.addOnExpose(&drawStuff);
            showAll();
        }
    
        bool drawStuff(GdkEventExpose *event, Widget self) 
        {
            auto drawable = self.getWindow();
            auto gc = new GC(drawable);
            gc.setForeground(new Color(cast(ubyte)255, cast(ubyte)0, cast(ubyte)0));
            gc.setBackground(new Color(cast(ubyte)255, cast(ubyte)255, cast(ubyte)255));
            drawable.drawLine(gc, 0, 0, 100, 100);
            return true;
        }
    }
    
    void main(string[] args) {
        Main.init(args);
        new DrawingTest();
        Main.run();
    }
    

    DrawingArea 实际上只是一个空白的小部件供您绘制,而绘制小部件必须始终在 expose-event

    我知道不能将函数连接为信号回调,只能连接委托,所以这就是 DrawingTest 班级。