dsimcha wrote: > == Quote from dsimcha (dsim...@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:jeber...@free.fr http://jeberger.free.fr Jabber: jeber...@jabber.fr
signature.asc
Description: OpenPGP digital signature