run-demo.sh: added program to run demos
[libprolooks.git] / prolooks / CustomWidget.vala
blob9ca6884024d2380a139c5aa47c4d0059db291ce2
1 using Gtk;
2 using Gdk;
4 // template for new widgets
6 namespace Prolooks {
8 public class CustomWidget : DrawingArea {
10 public CustomWidget () {
12 // Enable the events you wish to get notified about.
13 // The 'expose' event is already enabled by the DrawingArea.
14 add_events (Gdk.EventMask.BUTTON_PRESS_MASK
15 | Gdk.EventMask.BUTTON_RELEASE_MASK
16 | Gdk.EventMask.POINTER_MOTION_MASK);
18 // Set favored widget size
19 set_size_request (100, 100);
22 /* Widget is asked to draw itself */
23 public override bool expose_event (Gdk.EventExpose event) {
25 // Create a Cairo context
26 var cr = Gdk.cairo_create (this.window);
28 // Set clipping area in order to avoid unnecessary drawing
29 cr.rectangle (event.area.x, event.area.y,
30 event.area.width, event.area.height);
31 cr.clip ();
33 // ...
35 return false;
38 /* Mouse button got pressed over widget */
39 public override bool button_press_event (Gdk.EventButton event) {
40 // ...
41 return false;
44 /* Mouse button got released */
45 public override bool button_release_event (Gdk.EventButton event) {
46 // ...
47 return false;
50 /* Mouse pointer moved over widget */
51 public override bool motion_notify_event (Gdk.EventMotion event) {
52 // ...
53 return false;
56 static int main (string[] args) {
57 Gtk.init (ref args);
58 var window = new Gtk.Window (Gtk.WindowType.TOPLEVEL);
59 var widget = new CustomWidget ();
60 window.add (widget);
61 window.destroy += Gtk.main_quit;
62 window.show_all ();
63 Gtk.main ();
64 return 0;
68 } // namespace Prolooks