[gtkmm] demos: Update demos that use DrawingArea



commit 8a284804b18701a6ffc538957c041eab96019e0e
Author: Kjell Ahlstedt <kjell ahlstedt bredband net>
Date:   Thu Nov 24 08:56:48 2016 +0100

    demos: Update demos that use DrawingArea
    
    Use set_draw_func() instead of signal_draw().connect().

 demos/gtk-demo/example_colorsel.cc    |   16 ++++++------
 demos/gtk-demo/example_drawingarea.cc |   45 +++++++++++++++++----------------
 demos/gtk-demo/example_flowbox.cc     |   15 ++++++-----
 demos/gtk-demo/example_gestures.cc    |   15 ++++------
 demos/gtk-demo/example_pixbufs.cc     |   17 ++++--------
 5 files changed, 51 insertions(+), 57 deletions(-)
---
diff --git a/demos/gtk-demo/example_colorsel.cc b/demos/gtk-demo/example_colorsel.cc
index 38bab06..ac29ad9 100644
--- a/demos/gtk-demo/example_colorsel.cc
+++ b/demos/gtk-demo/example_colorsel.cc
@@ -13,9 +13,11 @@ public:
   ~Example_ColorSel() override;
 
 protected:
-  //Signal handlers:
+  //Signal handler:
   void on_button_clicked();
-  bool on_drawing_area_draw(const Cairo::RefPtr<Cairo::Context>& cr);
+
+  //Drawing function:
+  void on_drawing_area_draw(const Cairo::RefPtr<Cairo::Context>& cr, int width, int height);
 
   //Member widgets:
   Gtk::Box m_VBox;
@@ -45,11 +47,12 @@ Example_ColorSel::Example_ColorSel()
   m_VBox.pack_start(m_Frame);
 
   // set a fixed size
-  m_DrawingArea.set_size_request(200, 200);
+  m_DrawingArea.set_content_width(200);
+  m_DrawingArea.set_content_height(200);
 
   // set the color
   m_Color.set_rgba(0, 0, 1, 1);
-  m_DrawingArea.signal_draw().connect(sigc::mem_fun(*this, &Example_ColorSel::on_drawing_area_draw));
+  m_DrawingArea.set_draw_func(sigc::mem_fun(*this, &Example_ColorSel::on_drawing_area_draw));
 
   m_Frame.add(m_DrawingArea);
 
@@ -81,11 +84,8 @@ void Example_ColorSel::on_button_clicked()
   }
 }
 
-bool Example_ColorSel::on_drawing_area_draw(const Cairo::RefPtr<Cairo::Context>& cr)
+void Example_ColorSel::on_drawing_area_draw(const Cairo::RefPtr<Cairo::Context>& cr, int, int)
 {
   Gdk::Cairo::set_source_rgba(cr, m_Color);
   cr->paint();
-
-  return true;
 }
-
diff --git a/demos/gtk-demo/example_drawingarea.cc b/demos/gtk-demo/example_drawingarea.cc
index 1195cc5..83d5f74 100644
--- a/demos/gtk-demo/example_drawingarea.cc
+++ b/demos/gtk-demo/example_drawingarea.cc
@@ -1,11 +1,11 @@
 /* Drawing Area
  *
- * GtkDrawingArea is a blank area where you can draw custom displays
+ * Gtk::DrawingArea is a blank area where you can draw custom displays
  * of various kinds.
  *
  * This demo has two drawing areas. The checkerboard area shows
  * how you can just draw something; all you have to do is write
- * a signal handler for draw, as shown here.
+ * a draw function, as shown here.
  *
  * The "scribble" area is a bit more advanced, and shows how to handle
  * events such as button presses and mouse motion. Click the mouse
@@ -22,9 +22,11 @@ public:
   ~Example_DrawingArea() override;
 
 protected:
+  //draw functions:
+  void on_drawingarea_checkerboard_draw(const Cairo::RefPtr<Cairo::Context>& cr, int width, int height);
+  void on_drawingarea_scribble_draw(const Cairo::RefPtr<Cairo::Context>& cr, int width, int height);
+
   //signal handlers:
-  bool on_drawingarea_checkerboard_draw(const Cairo::RefPtr<Cairo::Context>& cr);
-  bool on_drawingarea_scribble_draw(const Cairo::RefPtr<Cairo::Context>& cr);
   bool on_drawingarea_scribble_configure_event(GdkEventConfigure* event);
   bool on_drawingarea_scribble_motion_notify_event(GdkEventMotion* event);
   bool on_drawingarea_scribble_button_press_event(GdkEventButton* event);
@@ -65,10 +67,11 @@ Example_DrawingArea::Example_DrawingArea()
   m_VBox.pack_start(m_Frame_Checkerboard);
 
   /* set a minimum size */
-  m_DrawingArea_Checkerboard.set_size_request(100, 100);
+  m_DrawingArea_Checkerboard.set_content_width(100);
+  m_DrawingArea_Checkerboard.set_content_height(100);
   m_Frame_Checkerboard.add(m_DrawingArea_Checkerboard);
 
-  m_DrawingArea_Checkerboard.signal_draw().connect(
+  m_DrawingArea_Checkerboard.set_draw_func(
       sigc::mem_fun(*this, &Example_DrawingArea::on_drawingarea_checkerboard_draw));
 
   /*
@@ -81,12 +84,14 @@ Example_DrawingArea::Example_DrawingArea()
   m_VBox.pack_start(m_Frame_Scribble);
 
   /* set a minimum size */
-  m_DrawingArea_Scribble.set_size_request(100, 100);
+  m_DrawingArea_Scribble.set_content_width(100);
+  m_DrawingArea_Scribble.set_content_height(100);
   m_Frame_Scribble.add(m_DrawingArea_Scribble);
 
-  /* Signals used to handle backing pixmap */
-  m_DrawingArea_Scribble.signal_draw().connect(
+  m_DrawingArea_Scribble.set_draw_func(
       sigc::mem_fun(*this, &Example_DrawingArea::on_drawingarea_scribble_draw));
+
+  /* Signal used to handle backing surface */
   m_DrawingArea_Scribble.signal_configure_event().connect(
       sigc::mem_fun(*this, &Example_DrawingArea::on_drawingarea_scribble_configure_event));
 
@@ -102,7 +107,7 @@ Example_DrawingArea::Example_DrawingArea()
   m_DrawingArea_Scribble.add_events(Gdk::LEAVE_NOTIFY_MASK |
                                     Gdk::BUTTON_PRESS_MASK |
                                     Gdk::POINTER_MOTION_MASK |
-                                    Gdk::POINTER_MOTION_HINT_MASK);
+                                    Gdk::STRUCTURE_MASK);
   show_all();
 }
 
@@ -110,7 +115,8 @@ Example_DrawingArea::~Example_DrawingArea()
 {
 }
 
-bool Example_DrawingArea::on_drawingarea_checkerboard_draw(const Cairo::RefPtr<Cairo::Context>& cr)
+void Example_DrawingArea::on_drawingarea_checkerboard_draw(const Cairo::RefPtr<Cairo::Context>& cr,
+  int width, int height)
 {
   enum { CHECK_SIZE = 10, SPACING = 2 };
 
@@ -123,8 +129,6 @@ bool Example_DrawingArea::on_drawingarea_checkerboard_draw(const Cairo::RefPtr<C
 
   int xcount = 0;
 
-  const int width = m_DrawingArea_Checkerboard.get_allocated_width();
-  const int height = m_DrawingArea_Checkerboard.get_allocated_height();
   int i = SPACING;
   while (i < width)
   {
@@ -151,19 +155,16 @@ bool Example_DrawingArea::on_drawingarea_checkerboard_draw(const Cairo::RefPtr<C
     i += CHECK_SIZE + SPACING;
     ++xcount;
   }
-
-  /* return true because we've handled this event, so no
-   * further processing is required.
-   */
-  return true;
 }
 
-bool Example_DrawingArea::on_drawingarea_scribble_draw(const Cairo::RefPtr<Cairo::Context>& cr)
+void Example_DrawingArea::on_drawingarea_scribble_draw(const Cairo::RefPtr<Cairo::Context>& cr,
+  int, int)
 {
-  cr->set_source(m_surface, 0, 0); //TODO: Add =0 default parameters to cairomm.
-  cr->paint();
+  if (!m_surface)
+    return; // paranoia check, in case we haven't gotten a configure event
 
-  return false;
+  cr->set_source(m_surface, 0, 0);
+  cr->paint();
 }
 
 bool Example_DrawingArea::on_drawingarea_scribble_configure_event(GdkEventConfigure*)
diff --git a/demos/gtk-demo/example_flowbox.cc b/demos/gtk-demo/example_flowbox.cc
index 05e46cd..49570c4 100644
--- a/demos/gtk-demo/example_flowbox.cc
+++ b/demos/gtk-demo/example_flowbox.cc
@@ -15,8 +15,9 @@ public:
   ~Example_FlowBox() override;
 
 protected:
-  //Signal handlers:
-  bool on_drawing_area_draw(const Cairo::RefPtr<Cairo::Context>& cr, int swatch_i);
+  // Draw function
+  void on_drawing_area_draw(const Cairo::RefPtr<Cairo::Context>& cr,
+    int width, int height, int swatch_i);
 
   // Containers
   Gtk::ScrolledWindow m_scrolled_window;
@@ -74,21 +75,21 @@ Gtk::Button* Example_FlowBox::create_color_swatch(int swatch_i)
   Gtk::DrawingArea* drawing_area = Gtk::manage(new Gtk::DrawingArea());
   Gtk::Button* color_swatch = Gtk::manage(new Gtk::Button());
 
-  drawing_area->set_size_request(24, 24);
+  drawing_area->set_content_width(24);
+  drawing_area->set_content_height(24);
 
   color_swatch->add(*drawing_area);
-  drawing_area->signal_draw().connect(sigc::bind(sigc::mem_fun(*this, 
&Example_FlowBox::on_drawing_area_draw), swatch_i));
+  drawing_area->set_draw_func(sigc::bind(sigc::mem_fun(*this, &Example_FlowBox::on_drawing_area_draw), 
swatch_i));
 
   return color_swatch;
 }
 
-bool Example_FlowBox::on_drawing_area_draw(const Cairo::RefPtr<Cairo::Context>& cr, int swatch_i)
+void Example_FlowBox::on_drawing_area_draw(const Cairo::RefPtr<Cairo::Context>& cr,
+  int, int, int swatch_i)
 {
   Gdk::RGBA rgba(m_color_names[swatch_i]);
   Gdk::Cairo::set_source_rgba(cr, rgba);
   cr->paint();
-
-  return true;
 }
 
 void Example_FlowBox::fill_color_names()
diff --git a/demos/gtk-demo/example_gestures.cc b/demos/gtk-demo/example_gestures.cc
index 0c3b0cb..c4b9a26 100644
--- a/demos/gtk-demo/example_gestures.cc
+++ b/demos/gtk-demo/example_gestures.cc
@@ -14,9 +14,9 @@ public:
   ~Example_Gestures() override;
 
 protected:
+  void on_drawing_area_draw(const ::Cairo::RefPtr< ::Cairo::Context>& cr, int width, int height);
 
   // Signal handlers:
-  bool on_drawing_area_draw(const ::Cairo::RefPtr< ::Cairo::Context>& cr);
   void on_gesture_swipe_swipe(double velocity_x, double velocity_y);
   void on_gesture_long_press_pressed(double x, double y);
   void on_gesture_long_press_end(GdkEventSequence* sequence);
@@ -54,7 +54,7 @@ Example_Gestures::Example_Gestures()
   add(m_DrawingArea);
   m_DrawingArea.add_events(Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK |
                            Gdk::POINTER_MOTION_MASK | Gdk::TOUCH_MASK);
-  m_DrawingArea.signal_draw().connect(sigc::mem_fun(*this, &Example_Gestures::on_drawing_area_draw));
+  m_DrawingArea.set_draw_func(sigc::mem_fun(*this, &Example_Gestures::on_drawing_area_draw));
 
   // Create gestures.
   m_GestureSwipe = Gtk::GestureSwipe::create(m_DrawingArea);
@@ -83,13 +83,12 @@ Example_Gestures::~Example_Gestures()
 {
 }
 
-bool Example_Gestures::on_drawing_area_draw(const ::Cairo::RefPtr< ::Cairo::Context>& cr)
+void Example_Gestures::on_drawing_area_draw(const ::Cairo::RefPtr< ::Cairo::Context>& cr,
+  int width, int height)
 {
-  Gtk::Allocation allocation = m_DrawingArea.get_allocation();
-
   // Coordinates for the center of the window
-  const int xc = allocation.get_width() / 2;
-  const int yc = allocation.get_height() / 2;
+  const int xc = width / 2;
+  const int yc = height / 2;
 
   if (m_GestureRotate->is_recognized() || m_GestureZoom->is_recognized())
   {
@@ -132,8 +131,6 @@ bool Example_Gestures::on_drawing_area_draw(const ::Cairo::RefPtr< ::Cairo::Cont
     cr->stroke();
     cr->restore();
   }
-
-  return true;
 }
 
 void Example_Gestures::on_gesture_swipe_swipe(double velocity_x, double velocity_y)
diff --git a/demos/gtk-demo/example_pixbufs.cc b/demos/gtk-demo/example_pixbufs.cc
index f400b8e..38008a7 100644
--- a/demos/gtk-demo/example_pixbufs.cc
+++ b/demos/gtk-demo/example_pixbufs.cc
@@ -1,19 +1,16 @@
 /* Pixbufs
  *
- * A GdkPixbuf represents an image, normally in RGB or RGBA format.
+ * A Gdk::Pixbuf represents an image, normally in RGB or RGBA format.
  * Pixbufs are normally used to load files from disk and perform
  * image scaling.
  *
  * This demo is not all that educational, but looks cool. It was written
  * by Extreme Pixbuf Hacker Federico Mena Quintero. It also shows
- * off how to use GtkDrawingArea to do a simple animation.
+ * off how to use Gtk::DrawingArea to do a simple animation.
  *
  * Look at the Image demo for additional pixbuf usage examples.
- *
  */
 
-//#include <config.h>
-
 #include <gtkmm.h>
 #include <math.h>
 
@@ -50,9 +47,9 @@ public:
 
 protected:
   virtual void load_pixbufs();
+  void on_drawingarea_draw(const Cairo::RefPtr<Cairo::Context>& cr, int width, int height);
 
-  //signal handlers:
-  virtual bool on_drawingarea_draw(const Cairo::RefPtr<Cairo::Context>& cr);
+  //signal handler:
   virtual bool on_timeout();
 
   //Member widgets:
@@ -87,7 +84,7 @@ Example_Pixbufs::Example_Pixbufs()
 
     set_size_request(m_back_width, m_back_height);
     m_refPixbuf = Gdk::Pixbuf::create(Gdk::COLORSPACE_RGB, FALSE, 8, m_back_width, m_back_height);
-    m_DrawingArea.signal_draw().connect(sigc::mem_fun(*this, &Example_Pixbufs::on_drawingarea_draw));
+    m_DrawingArea.set_draw_func(sigc::mem_fun(*this, &Example_Pixbufs::on_drawingarea_draw));
     add(m_DrawingArea);
 
     m_TimeoutConnection = Glib::signal_timeout().connect(
@@ -134,12 +131,10 @@ void Example_Pixbufs::load_pixbufs()
 }
 
 /* Draw callback for the drawing area */
-bool Example_Pixbufs::on_drawingarea_draw(const Cairo::RefPtr<Cairo::Context>& cr)
+void Example_Pixbufs::on_drawingarea_draw(const Cairo::RefPtr<Cairo::Context>& cr, int, int)
 {
   Gdk::Cairo::set_source_pixbuf(cr, m_refPixbuf);
   cr->paint();
-
-  return true;
 }
 
 #define CYCLE_LEN 60


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]