summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlex Valavanis <valavanisalex@gmail.com>2012-12-28 01:51:10 +0000
committerAlex Valavanis <valavanisalex@gmail.com>2012-12-28 01:51:10 +0000
commita05a3d77490e30b4410045e0e685f8da8628a302 (patch)
treee2f30c25b9d1f4b835240999a859c35ca93741e8 /src
parentImplement GTK+ 3 drawing of color preview widget (diff)
downloadinkscape-a05a3d77490e30b4410045e0e685f8da8628a302.tar.gz
inkscape-a05a3d77490e30b4410045e0e685f8da8628a302.zip
Implement GTK+ 3 drawing for zoom correction ruler in preferences dialog
(bzr r11995)
Diffstat (limited to 'src')
-rw-r--r--src/display/sp-canvas.cpp18
-rw-r--r--src/ui/widget/preferences-widget.cpp34
-rw-r--r--src/ui/widget/preferences-widget.h7
3 files changed, 32 insertions, 27 deletions
diff --git a/src/display/sp-canvas.cpp b/src/display/sp-canvas.cpp
index 536c54609..af9647c9b 100644
--- a/src/display/sp-canvas.cpp
+++ b/src/display/sp-canvas.cpp
@@ -2203,16 +2203,12 @@ gint SPCanvasImpl::handleExpose(GtkWidget *widget, GdkEventExpose *event)
return FALSE;
}
-#if GTK_CHECK_VERSION(3,0,0)
- int n_rects = cairo_region_num_rectangles(event->region);
-#else
int n_rects = 0;
GdkRectangle *rects = NULL;
gdk_region_get_rectangles(event->region, &rects, &n_rects);
if(rects == NULL)
return FALSE;
-#endif
if (n_rects == 0)
{
@@ -2221,23 +2217,15 @@ gint SPCanvasImpl::handleExpose(GtkWidget *widget, GdkEventExpose *event)
else
{
for (int i = 0; i < n_rects; i++) {
-#if GTK_CHECK_VERSION(3,0,0)
- cairo_rectangle_int_t rectangle;
- cairo_region_get_rectangle(event->region, i, &rectangle);
-#else
- GdkRectangle rectangle = rects[i];
-#endif
+ GdkRectangle rectangle = rects[i];
Geom::IntRect r = Geom::IntRect::from_xywh(
- rectangle.x + canvas->x0, rectangle.y + canvas->y0,
- rectangle.width, rectangle.height);
+ rectangle.x + canvas->x0, rectangle.y + canvas->y0,
+ rectangle.width, rectangle.height);
canvas->requestRedraw(r.left(), r.top(), r.right(), r.bottom());
}
-#if !GTK_CHECK_VERSION(3,0,0)
- g_free (rects);
-#endif
return FALSE;
}
}
diff --git a/src/ui/widget/preferences-widget.cpp b/src/ui/widget/preferences-widget.cpp
index e7e317d11..e5b062ec9 100644
--- a/src/ui/widget/preferences-widget.cpp
+++ b/src/ui/widget/preferences-widget.cpp
@@ -373,10 +373,27 @@ ZoomCorrRuler::draw_marks(Cairo::RefPtr<Cairo::Context> cr, double dist, int maj
}
}
-void
-ZoomCorrRuler::redraw() {
+#if !WITH_GTKMM_3_0
+bool
+ZoomCorrRuler::on_expose_event(GdkEventExpose *event) {
+ bool result = false;
+
+ if(get_is_drawable())
+ {
+ Cairo::RefPtr<Cairo::Context> cr = get_window()->create_cairo_context();
+ cr->rectangle(event->area.x, event->area.y,
+ event->area.width, event->area.height);
+ cr->clip();
+ result = on_draw(cr);
+ }
+
+ return result;
+}
+#endif
+
+bool
+ZoomCorrRuler::on_draw(const Cairo::RefPtr<Cairo::Context>& cr) {
Glib::RefPtr<Gdk::Window> window = get_window();
- Cairo::RefPtr<Cairo::Context> cr = window->create_cairo_context();
int w = window->get_width();
_drawing_width = w - _border * 2;
@@ -415,14 +432,11 @@ ZoomCorrRuler::redraw() {
draw_marks(cr, 1, 1);
}
cr->stroke();
-}
-bool
-ZoomCorrRuler::on_expose_event(GdkEventExpose */*event*/) {
- this->redraw();
return true;
}
+
void
ZoomCorrRulerSlider::on_slider_value_changed()
{
@@ -432,7 +446,7 @@ ZoomCorrRulerSlider::on_slider_value_changed()
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
prefs->setDouble("/options/zoomcorrection/value", _slider.get_value() / 100.0);
_sb.set_value(_slider.get_value());
- _ruler.redraw();
+ _ruler.queue_draw();
freeze = false;
}
}
@@ -446,7 +460,7 @@ ZoomCorrRulerSlider::on_spinbutton_value_changed()
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
prefs->setDouble("/options/zoomcorrection/value", _sb.get_value() / 100.0);
_slider.set_value(_sb.get_value());
- _ruler.redraw();
+ _ruler.queue_draw();
freeze = false;
}
}
@@ -463,7 +477,7 @@ ZoomCorrRulerSlider::on_unit_changed() {
double conv = _unit.getConversion(_unit.getUnitAbbr(), "px");
_ruler.set_unit_conversion(conv);
if (_ruler.get_visible()) {
- _ruler.redraw();
+ _ruler.queue_draw();
}
}
diff --git a/src/ui/widget/preferences-widget.h b/src/ui/widget/preferences-widget.h
index bfe0deaba..646a8b2fa 100644
--- a/src/ui/widget/preferences-widget.h
+++ b/src/ui/widget/preferences-widget.h
@@ -101,8 +101,6 @@ public:
ZoomCorrRuler(int width = 100, int height = 20);
void set_size(int x, int y);
void set_unit_conversion(double conv) { _unitconv = conv; }
- void set_cairo_context(Cairo::RefPtr<Cairo::Context> cr);
- void redraw();
int width() { return _min_width + _border*2; }
@@ -110,7 +108,12 @@ public:
static const double textpadding;
private:
+#if !WITH_GTKMM_3_0
bool on_expose_event(GdkEventExpose *event);
+#endif
+
+ bool on_draw(const Cairo::RefPtr<Cairo::Context>& cr);
+
void draw_marks(Cairo::RefPtr<Cairo::Context> cr, double dist, int major_interval);
double _unitconv;