dflplot/Plot2Kill, Most Mature *nix GUI For D2

"Jérôme M. Berger" jeberger at free.fr
Fri Jul 16 22:57:55 PDT 2010


dsimcha wrote:
> == Quote from dsimcha (dsimcha at yahoo.com)'s article
>> 1.  Doesn't Window mean that the plot would have to exist in its own window?  I'd
>> like to be able to make a plot go to one section of a larger window.
>> 2.  When I do:
>> drawable = (new DrawingArea(800, 600)).getWindow();
>> drawable somehow ends up null.
> 
> Never mind, I figured this stuff out, though the documentation is rather obtuse
> and in serious need of examples of how to accomplish simple things.  However, I
> can't get the DrawingArea to actually show up on the screen.  I just get a blank
> window.  Here's a reduced test case.  Can someone tell me what's wrong w/ it
> and/or provide minimal example code to get stuff drawn via DrawingArea to show up
> on screen?
> 
> 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();
> }
	The problem is that gtk.DrawingArea is stateless. This means that
it won't remember what you draw on it. There are two solutions to this:
- Use a Canvas widget. There isn't one in gtk, but there are some
options out there. I don't know if any of them have a D wrapper;
- Define a callback for the "expose_event" signal on your
drawingArea and put your drawing code in there.

	Try the following (untested) code:
========================================8<----------------------------------------
import gtk.DrawingArea, gtk.Main, gtk.MainWindow, gdk.GC,
    gdk.Drawable, gdk.Color;

bool onExposeEvent (GdkEventExpose*, Widget drawingArea) {
    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);
}

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();

    drawingArea.addOnExpose ((GdkEventExpose* event,
                              Widget drawingArea) {
        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);
	return true;
    });

    drawingArea.showAll();
    drawingArea.queueDraw();
    win.showAll();

    Main.run();
}
---------------------------------------->8========================================

		Jerome
-- 
mailto:jeberger at free.fr
http://jeberger.free.fr
Jabber: jeberger at jabber.fr

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: OpenPGP digital signature
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20100717/49a55cf6/attachment.pgp>


More information about the Digitalmars-d mailing list