summaryrefslogtreecommitdiffstats
path: root/src/measure-context.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/measure-context.cpp')
-rw-r--r--src/measure-context.cpp98
1 files changed, 53 insertions, 45 deletions
diff --git a/src/measure-context.cpp b/src/measure-context.cpp
index 4aa007464..db6183d71 100644
--- a/src/measure-context.cpp
+++ b/src/measure-context.cpp
@@ -353,6 +353,10 @@ static gint sp_measure_context_root_handler(SPEventContext *event_context, GdkEv
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
@@ -361,77 +365,81 @@ static gint sp_measure_context_root_handler(SPEventContext *event_context, GdkEv
sp_convert_distance(&lengthval, &sp_unit_get_by_id(SP_UNIT_PX), &unit);
// TODO cleanup memory, Glib::ustring, etc.:
- char* measure_str = static_cast<char*>(malloc(20));
- sprintf(measure_str, "%.2f %s", lengthval, unit.abbr);
- SPCanvasItem *canvas_tooltip = sp_canvastext_new(sp_desktop_tempgroup(desktop), desktop, desktop->doc2dt(measure_text_pos), measure_str);
-
- sp_canvastext_set_fontsize(SP_CANVASTEXT(canvas_tooltip), fontsize);
- SP_CANVASTEXT(canvas_tooltip)->rgba = 0xffffffff;
- SP_CANVASTEXT(canvas_tooltip)->rgba_background = 0x0000007f;
- SP_CANVASTEXT(canvas_tooltip)->outline = false;
- SP_CANVASTEXT(canvas_tooltip)->background = true;
- SP_CANVASTEXT(canvas_tooltip)->anchor_position = TEXT_ANCHOR_CENTER;
+ 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),
+ measure_str);
+ sp_canvastext_set_fontsize(canvas_tooltip, fontsize);
+ canvas_tooltip->rgba = 0xffffffff;
+ canvas_tooltip->rgba_background = 0x0000007f;
+ canvas_tooltip->outline = false;
+ canvas_tooltip->background = true;
+ canvas_tooltip->anchor_position = TEXT_ANCHOR_CENTER;
measure_tmp_items.push_back(desktop->add_temporary_canvasitem(canvas_tooltip, 0));
- free(measure_str);
+ g_free(measure_str);
previous_point = intersections[idx];
}
{
// TODO cleanup memory, Glib::ustring, etc.:
- char* angle_str = static_cast<char*>(malloc(20));
- sprintf(angle_str, "%.2f °", angle * 180/M_PI);
- SPCanvasItem *canvas_tooltip = sp_canvastext_new(sp_desktop_tempgroup(desktop), desktop, end_point + desktop->w2d(Geom::Point(3*fontsize, fontsize)), angle_str);
- sp_canvastext_set_fontsize(SP_CANVASTEXT(canvas_tooltip), fontsize);
- SP_CANVASTEXT(canvas_tooltip)->rgba = 0xffffffff;
- SP_CANVASTEXT(canvas_tooltip)->rgba_background = 0x337f337f;
- SP_CANVASTEXT(canvas_tooltip)->outline = false;
- SP_CANVASTEXT(canvas_tooltip)->background = true;
- SP_CANVASTEXT(canvas_tooltip)->anchor_position = TEXT_ANCHOR_LEFT;
+ gchar *angle_str = g_strdup_printf("%.2f °", angle * 180/M_PI);
+ SPCanvasText *canvas_tooltip = sp_canvastext_new(sp_desktop_tempgroup(desktop),
+ desktop,
+ end_point + desktop->w2d(Geom::Point(3*fontsize, fontsize)),
+ angle_str);
+ sp_canvastext_set_fontsize(canvas_tooltip, fontsize);
+ canvas_tooltip->rgba = 0xffffffff;
+ canvas_tooltip->rgba_background = 0x337f337f;
+ canvas_tooltip->outline = false;
+ canvas_tooltip->background = true;
+ canvas_tooltip->anchor_position = TEXT_ANCHOR_LEFT;
measure_tmp_items.push_back(desktop->add_temporary_canvasitem(canvas_tooltip, 0));
- free(angle_str);
+ g_free(angle_str);
}
{
double totallengthval = (end_point - start_point).length();
sp_convert_distance(&totallengthval, &sp_unit_get_by_id(SP_UNIT_PX), &unit);
- char* totallength_str = static_cast<char*>(malloc(20));
- sprintf(totallength_str, "%.2f %s", totallengthval, unit.abbr);
- SPCanvasItem *canvas_tooltip = sp_canvastext_new(sp_desktop_tempgroup(desktop), desktop, end_point + desktop->w2d(Geom::Point(3*fontsize, -fontsize)), totallength_str);
- sp_canvastext_set_fontsize(SP_CANVASTEXT(canvas_tooltip), fontsize);
- SP_CANVASTEXT(canvas_tooltip)->rgba = 0xffffffff;
- SP_CANVASTEXT(canvas_tooltip)->rgba_background = 0x3333337f;
- SP_CANVASTEXT(canvas_tooltip)->outline = false;
- SP_CANVASTEXT(canvas_tooltip)->background = true;
- SP_CANVASTEXT(canvas_tooltip)->anchor_position = TEXT_ANCHOR_LEFT;
+ // TODO cleanup memory, Glib::ustring, etc.:
+ gchar *totallength_str = g_strdup_printf("%.2f %s", totallengthval, unit.abbr);
+ SPCanvasText *canvas_tooltip = sp_canvastext_new(sp_desktop_tempgroup(desktop),
+ desktop,
+ end_point + desktop->w2d(Geom::Point(3*fontsize, -fontsize)),
+ totallength_str);
+ sp_canvastext_set_fontsize(canvas_tooltip, fontsize);
+ canvas_tooltip->rgba = 0xffffffff;
+ canvas_tooltip->rgba_background = 0x3333337f;
+ canvas_tooltip->outline = false;
+ canvas_tooltip->background = true;
+ canvas_tooltip->anchor_position = TEXT_ANCHOR_LEFT;
measure_tmp_items.push_back(desktop->add_temporary_canvasitem(canvas_tooltip, 0));
- free(totallength_str);
+ g_free(totallength_str);
}
- // Normal will be used for lines and text
- Geom::Point normal = desktop->w2d(Geom::unit_vector(Geom::rot90(desktop->d2w(end_point - start_point))));
-
if (intersections.size() > 2) {
double totallengthval = (intersections[intersections.size()-1] - intersections[0]).length();
sp_convert_distance(&totallengthval, &sp_unit_get_by_id(SP_UNIT_PX), &unit);
// TODO cleanup memory, Glib::ustring, etc.:
- char* total_str = static_cast<char*>(malloc(20));
- sprintf(total_str, "%.2f %s", totallengthval, unit.abbr);
-
- SPCanvasItem *canvas_tooltip = sp_canvastext_new(sp_desktop_tempgroup(desktop), desktop, desktop->doc2dt((intersections[0] + intersections[intersections.size()-1])/2) + normal*60, total_str);
- sp_canvastext_set_fontsize(SP_CANVASTEXT(canvas_tooltip), fontsize);
- SP_CANVASTEXT(canvas_tooltip)->rgba = 0xffffffff;
- SP_CANVASTEXT(canvas_tooltip)->rgba_background = 0x33337f7f;
- SP_CANVASTEXT(canvas_tooltip)->outline = false;
- SP_CANVASTEXT(canvas_tooltip)->background = true;
- SP_CANVASTEXT(canvas_tooltip)->anchor_position = TEXT_ANCHOR_CENTER;
+ gchar *total_str = g_strdup_printf("%.2f %s", totallengthval, unit.abbr);
+ SPCanvasText *canvas_tooltip = sp_canvastext_new(sp_desktop_tempgroup(desktop),
+ desktop,
+ desktop->doc2dt((intersections[0] + intersections[intersections.size()-1])/2) + normal * 60,
+ total_str);
+ sp_canvastext_set_fontsize(canvas_tooltip, fontsize);
+ canvas_tooltip->rgba = 0xffffffff;
+ canvas_tooltip->rgba_background = 0x33337f7f;
+ canvas_tooltip->outline = false;
+ canvas_tooltip->background = true;
+ canvas_tooltip->anchor_position = TEXT_ANCHOR_CENTER;
measure_tmp_items.push_back(desktop->add_temporary_canvasitem(canvas_tooltip, 0));
- free(total_str);
+ g_free(total_str);
}
// Now that text has been added, we can add lines and controls so that they go underneath