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.Gtk;
import org.gnome.gtk.Image;
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 EXPOSE_EVENT handler for that Widget.
*
* @author
* @author
*/
TODO
public class ExampleDrawingInExposeEvent
{
public static void main(String[] args) {
final Window w;
final Image i;
Gtk.init(args);
w = new Window();
w.setTitle("Expose");
w.setDefaultSize(150, 150);
i = new Image();
w.add(i);
w.showAll();
i.connect(new Widget.EXPOSE_EVENT() {
public boolean onExposeEvent(Widget source, EventExpose event) {
final Context cr;
final Rectangle rect;
final Pattern linear, radial;
rect = event.getArea();
System.out.println("EXPOSE_EVENT bounded by " + rect.getWidth() + "x" + rect.getHeight()
+ " at " + rect.getX() + "," + rect.getY());
cr = new Context(source.getWindow());
cr.setSourceRGBA(1.0, 0.1, 0.0, 1.0);
cr.moveTo(10, 40);
cr.lineTo(120, 145);
cr.stroke();
cr.setSourceRGBA(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 false;
}
});
w.connect(new Window.DELETE_EVENT() {
public boolean onDeleteEvent(Widget source, Event event) {
Gtk.mainQuit();
return false;
}
});
Gtk.main();
}
}