4 // template for new widgets
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
);
38 /* Mouse button got pressed over widget */
39 public override bool button_press_event (Gdk
.EventButton event
) {
44 /* Mouse button got released */
45 public override bool button_release_event (Gdk
.EventButton event
) {
50 /* Mouse pointer moved over widget */
51 public override bool motion_notify_event (Gdk
.EventMotion event
) {
56 static int main (string[] args
) {
58 var window
= new Gtk
.Window (Gtk
.WindowType
.TOPLEVEL
);
59 var widget
= new
CustomWidget ();
61 window
.destroy
+= Gtk
.main_quit
;
68 } // namespace Prolooks