Loading

Paste #ph3bmjszg

  1. using Gtk;
  2. using Cairo;
  3. using Gdk;
  4.  
  5. Gtk.Window window;
  6.  
  7. double r = 0;
  8. double g = 0;
  9. double b = 0;
  10. double delta = 0.01;
  11.  
  12. bool do_redraw(Gtk.Widget w, Cairo.Context cr) {
  13.     var color = Gdk.RGBA();
  14.     color.red = r;
  15.     color.green = g;
  16.     color.blue = b;
  17.     color.alpha = 1;
  18.     r += delta;
  19.     if (r >= 1) {
  20.         r = 0;
  21.         g += delta;
  22.         if (g >= 1) {
  23.             g = 0;
  24.             b += delta;
  25.             if (b >= 1) {
  26.                 b = 0;
  27.             }
  28.         }
  29.     }
  30.     Gdk.cairo_set_source_rgba(cr, color);
  31.     cr.paint();
  32.     return false;
  33. }
  34.  
  35. bool do_motion(Gdk.EventMotion event) {
  36.     window.queue_draw();
  37.     return false;
  38. }
  39.  
  40. int main(string[] argv) {
  41.  
  42.     Gtk.init(ref argv);
  43.     window = new Gtk.Window();
  44.     window.set_app_paintable(true);
  45.     window.draw.connect(do_redraw);
  46.     window.add_events(Gdk.EventMask.POINTER_MOTION_MASK |
  47.                       Gdk.EventMask.BUTTON_PRESS_MASK |
  48.                       Gdk.EventMask.BUTTON_RELEASE_MASK |
  49.                       Gdk.EventMask.KEY_RELEASE_MASK);
  50.     window.motion_notify_event.connect(do_motion);
  51.     window.show_all();
  52.     Gtk.main();
  53.     return 0;
  54. }