package cairo;
import org.freedesktop.cairo.Context;
import org.freedesktop.cairo.LinearPattern;
import org.freedesktop.cairo.Pattern;
import org.freedesktop.cairo.RadialPattern;
import org.gnome.gdk.Event;
import org.gnome.gdk.EventExpose;
import org.gnome.gdk.Rectangle;
import org.gnome.gtk.DrawingArea;
import org.gnome.gtk.Gtk;
import org.gnome.gtk.Widget;
import org.gnome.gtk.Window;
/**
* Exercise drawing with the Cairo API. If you are rendering a custom Widget
* or otherwise drawing stuff with Cairo that is to be presented by GTK, you
* are expected to do this in the Widget.ExposeEvent handler for that Widget.
*
* @author Andrew Cowie
* @author Carl Worth
*/
TODO
public class ExampleDrawingInExposeEvent
{
public static void main(String[] args) {
final Window w;
final DrawingArea d;
Gtk.init(args);
w = new Window();
w.setTitle("Expose");
w.setDefaultSize(150, 150);
d = new DrawingArea();
w.add(d);
w.showAll();
d.connect(new Widget.ExposeEvent() {
public boolean onExposeEvent(Widget source, EventExpose event) {
final Context cr;
final Rectangle rect;
final Pattern linear, radial;
rect = event.getArea();
System.out.println("Widget.ExposeEvent bounded by " + rect.getWidth() + "x"
+ rect.getHeight() + " at " + rect.getX() + "," + rect.getY());
cr = new Context(source.getWindow());
cr.setSource(1.0, 0.1, 0.0, 1.0);
cr.moveTo(10, 40);
cr.lineTo(120, 145);
cr.stroke();
cr.setSource(225 / 255.0, 148 / 255.0, 11 / 255.0, 1.0);
cr.rectangle(70, 70, 20, 40);
cr.fill();
linear = new LinearPattern(0, 0, 150, 150);
linear.addColorStopRGB(0.0, 0.0, 0.3, 0.8);
linear.addColorStopRGB(1.0, 0.0, 0.8, 0.3);
radial = new RadialPattern(75, 75, 15, 75, 75, 60);
radial.addColorStopRGBA(0, 0.0, 0.0, 0.0, 0.0);
radial.addColorStopRGBA(1, 0.0, 0.0, 0.0, 1.0);
cr.setSource(linear);
cr.mask(radial);
return true;
}
});
w.connect(new Window.DeleteEvent() {
public boolean onDeleteEvent(Widget source, Event event) {
Gtk.mainQuit();
return false;
}
});
Gtk.main();
}
}