[gtkmm] demos: Update demos that use DrawingArea
- From: Kjell Ahlstedt <kjellahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtkmm] demos: Update demos that use DrawingArea
- Date: Thu, 24 Nov 2016 07:58:46 +0000 (UTC)
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]