diff options
| author | Alex Valavanis <valavanisalex@gmail.com> | 2012-12-28 01:51:10 +0000 |
|---|---|---|
| committer | Alex Valavanis <valavanisalex@gmail.com> | 2012-12-28 01:51:10 +0000 |
| commit | a05a3d77490e30b4410045e0e685f8da8628a302 (patch) | |
| tree | e2f30c25b9d1f4b835240999a859c35ca93741e8 /src | |
| parent | Implement GTK+ 3 drawing of color preview widget (diff) | |
| download | inkscape-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.cpp | 18 | ||||
| -rw-r--r-- | src/ui/widget/preferences-widget.cpp | 34 | ||||
| -rw-r--r-- | src/ui/widget/preferences-widget.h | 7 |
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; |
