diff options
| author | Jon A. Cruz <jon@joncruz.org> | 2012-05-28 22:21:20 +0000 |
|---|---|---|
| committer | Jon A. Cruz <jon@joncruz.org> | 2012-05-28 22:21:20 +0000 |
| commit | 0c69427acc95fa4756b43f6da1f7258125de7d04 (patch) | |
| tree | b6b4011adcbca72a1cf00b555e3a7b01dfb6c8ba /src/measure-context.cpp | |
| parent | undo changes (diff) | |
| download | inkscape-0c69427acc95fa4756b43f6da1f7258125de7d04.tar.gz inkscape-0c69427acc95fa4756b43f6da1f7258125de7d04.zip | |
Added basic offset and call-out lines for measurements.
(bzr r11434)
Diffstat (limited to 'src/measure-context.cpp')
| -rw-r--r-- | src/measure-context.cpp | 42 |
1 files changed, 28 insertions, 14 deletions
diff --git a/src/measure-context.cpp b/src/measure-context.cpp index db6183d71..4f94c2660 100644 --- a/src/measure-context.cpp +++ b/src/measure-context.cpp @@ -44,6 +44,7 @@ #include "ui/control-manager.h" using Inkscape::ControlManager; +using Inkscape::CTLINE_SECONDARY; static void sp_measure_context_class_init(SPMeasureContextClass *klass); static void sp_measure_context_init(SPMeasureContext *measure_context); @@ -64,6 +65,13 @@ Geom::Point start_point; std::vector<Inkscape::Display::TemporaryItem*> measure_tmp_items; +namespace +{ + +gint const DIMENSION_OFFSET = 45; + +} // namespace + GType sp_measure_context_get_type(void) { static GType type = 0; @@ -348,27 +356,20 @@ static gint sp_measure_context_root_handler(SPEventContext *event_context, GdkEv double fontsize = prefs->getInt("/tools/measure/fontsize"); - Geom::Point previous_point; - if (!intersections.empty()) { - previous_point = intersections[0]; - } - - // Normal will be used for lines and text Geom::Point normal = desktop->w2d(Geom::unit_vector(Geom::rot90(desktop->d2w(end_point - start_point)))); for (size_t idx = 1; idx < intersections.size(); ++idx) { - Geom::Point measure_text_pos = (previous_point + intersections[idx]) / 2; -//TODO: shift label a few pixels in the y coordinate + Geom::Point measure_text_pos = (intersections[idx - 1] + intersections[idx]) / 2; - double lengthval = (intersections[idx] - previous_point).length(); + double lengthval = (intersections[idx] - intersections[idx - 1]).length(); sp_convert_distance(&lengthval, &sp_unit_get_by_id(SP_UNIT_PX), &unit); // TODO cleanup memory, Glib::ustring, etc.: gchar *measure_str = g_strdup_printf("%.2f %s", lengthval, unit.abbr); SPCanvasText *canvas_tooltip = sp_canvastext_new(sp_desktop_tempgroup(desktop), desktop, - desktop->doc2dt(measure_text_pos), + desktop->doc2dt(measure_text_pos) - (normal * DIMENSION_OFFSET), measure_str); sp_canvastext_set_fontsize(canvas_tooltip, fontsize); canvas_tooltip->rgba = 0xffffffff; @@ -379,7 +380,6 @@ static gint sp_measure_context_root_handler(SPEventContext *event_context, GdkEv measure_tmp_items.push_back(desktop->add_temporary_canvasitem(canvas_tooltip, 0)); g_free(measure_str); - previous_point = intersections[idx]; } { @@ -463,6 +463,12 @@ static gint sp_measure_context_root_handler(SPEventContext *event_context, GdkEv // Since adding goes to the bottom, do all lines last. + // draw main control line + { + SPCtrlLine *control_line = ControlManager::getManager().createControlLine(sp_desktop_tempgroup(desktop), start_point, end_point); + measure_tmp_items.push_back(desktop->add_temporary_canvasitem(control_line, 0)); + } + if (intersections.size() > 2) { ControlManager &mgr = ControlManager::getManager(); SPCtrlLine *control_line = 0; @@ -482,10 +488,18 @@ static gint sp_measure_context_root_handler(SPEventContext *event_context, GdkEv measure_tmp_items.push_back(desktop->add_temporary_canvasitem(control_line, 0)); } - // draw main control line + // call-out lines { - SPCtrlLine *control_line = ControlManager::getManager().createControlLine(sp_desktop_tempgroup(desktop), start_point, end_point); - measure_tmp_items.push_back(desktop->add_temporary_canvasitem(control_line, 0)); + for (size_t idx = 1; idx < intersections.size(); ++idx) { + Geom::Point measure_text_pos = (intersections[idx - 1] + intersections[idx]) / 2; + + ControlManager &mgr = ControlManager::getManager(); + SPCtrlLine *control_line = mgr.createControlLine(sp_desktop_tempgroup(desktop), + desktop->doc2dt(measure_text_pos), + desktop->doc2dt(measure_text_pos) - (normal * DIMENSION_OFFSET), + CTLINE_SECONDARY); + measure_tmp_items.push_back(desktop->add_temporary_canvasitem(control_line, 0)); + } } gobble_motion_events(GDK_BUTTON1_MASK); |
