dflplot/Plot2Kill, Most Mature *nix GUI For D2
dsimcha
dsimcha at yahoo.com
Sat Jul 17 06:08:01 PDT 2010
Thanks. The GTK port is officially off the ground, i.e. I've now at least got a
basic plot window up. Now, to decipher gtkD's font API.
== Quote from "Jérôme M. Berger" (jeberger at free.fr)'s article
> This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
> --------------enigEB95B6E017DCC321C6AC57B2
> Content-Type: text/plain; charset=UTF-8
> Content-Transfer-Encoding: quoted-printable
> dsimcha wrote:
> > =3D=3D Quote from dsimcha (dsimcha at yahoo.com)'s article
> >> 1. Doesn't Window mean that the plot would have to exist in its own w=
> indow? I'd
> >> like to be able to make a plot go to one section of a larger window.
> >> 2. When I do:
> >> drawable =3D (new DrawingArea(800, 600)).getWindow();
> >> drawable somehow ends up null.
> >=20
> > Never mind, I figured this stuff out, though the documentation is rathe=
> r obtuse
> > and in serious need of examples of how to accomplish simple things. Ho=
> wever, I
> > can't get the DrawingArea to actually show up on the screen. I just ge=
> t 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?
> >=20
> > import gtk.DrawingArea, gtk.Main, gtk.MainWindow, gdk.GC, gdk.Drawable,=
> > gdk.Color;
> >=20
> > void main(string[] args) {
> > Main.init(args);
> >=20
> > auto win =3D new MainWindow("Hello, world");
> > win.setDefaultSize(800, 600);
> > auto drawingArea =3D new DrawingArea(800, 600);
> > win.add(drawingArea);
> > drawingArea.realize();
> >=20
> > auto drawable =3D drawingArea.getWindow();
> > auto gc =3D new GC(drawable);
> > gc.setForeground(new Color(255, 0, 0));
> > gc.setBackground(new Color(255, 255, 255));
> > drawable.drawLine(gc, 0, 0, 100, 100);
> >=20
> > drawingArea.showAll();
> > drawingArea.queueDraw();
> > win.showAll();
> >=20
> > 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:
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D8<--------------------------=
> --------------
> import gtk.DrawingArea, gtk.Main, gtk.MainWindow, gdk.GC,
> gdk.Drawable, gdk.Color;
> bool onExposeEvent (GdkEventExpose*, Widget drawingArea) {
> auto drawable =3D drawingArea.getWindow();
> auto gc =3D 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 =3D new MainWindow("Hello, world");
> win.setDefaultSize(800, 600);
> auto drawingArea =3D new DrawingArea(800, 600);
> win.add(drawingArea);
> drawingArea.realize();
> drawingArea.addOnExpose ((GdkEventExpose* event,
> Widget drawingArea) {
> auto drawable =3D drawingArea.getWindow();
> auto gc =3D 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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
> =3D=3D=3D=3D
> Jerome
> --=20
> mailto:jeberger at free.fr
> http://jeberger.free.fr
> Jabber: jeberger at jabber.fr
> --------------enigEB95B6E017DCC321C6AC57B2
> Content-Type: application/pgp-signature; name="signature.asc"
> Content-Description: OpenPGP digital signature
> Content-Disposition: attachment; filename="signature.asc"
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.10 (GNU/Linux)
> iEYEARECAAYFAkxBRmkACgkQd0kWM4JG3k9XSQCcC3JbX8BbPAhKP10SCVnWkEaM
> ELYAnjxrivlSDZC54vcx5wJtIqOYXVTF
> =RscJ
> -----END PGP SIGNATURE-----
> --------------enigEB95B6E017DCC321C6AC57B2--
More information about the Digitalmars-d
mailing list