summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJon A. Cruz <jon@joncruz.org>2012-05-28 07:27:39 +0000
committerJon A. Cruz <jon@joncruz.org>2012-05-28 07:27:39 +0000
commite9cec1110c7abef2d7c89161ca07d2819a7bdff1 (patch)
tree35b594de2d302f580516a361ee026bc9c2ecb6d2 /src
parentStop using deprecated GdkBitmap in custom cursors (diff)
downloadinkscape-e9cec1110c7abef2d7c89161ca07d2819a7bdff1.tar.gz
inkscape-e9cec1110c7abef2d7c89161ca07d2819a7bdff1.zip
Cleanup of measure text for moving away from overlap.
(bzr r11430)
Diffstat (limited to 'src')
-rw-r--r--src/display/canvas-text.cpp5
-rw-r--r--src/display/canvas-text.h2
-rw-r--r--src/measure-context.cpp98
3 files changed, 56 insertions, 49 deletions
diff --git a/src/display/canvas-text.cpp b/src/display/canvas-text.cpp
index f7a8713b6..c7ca4ab16 100644
--- a/src/display/canvas-text.cpp
+++ b/src/display/canvas-text.cpp
@@ -255,8 +255,7 @@ sp_canvastext_update (SPCanvasItem *item, Geom::Affine const &affine, unsigned i
item->canvas->requestRedraw((int)item->x1, (int)item->y1, (int)item->x2, (int)item->y2);
}
-SPCanvasItem *
-sp_canvastext_new(SPCanvasGroup *parent, SPDesktop *desktop, Geom::Point pos, gchar const *new_text)
+SPCanvasText *sp_canvastext_new(SPCanvasGroup *parent, SPDesktop *desktop, Geom::Point pos, gchar const *new_text)
{
// Pos specifies the position of the anchor, which is at the bounding box of the text itself (i.e. not at the border of the filled background rectangle)
// The relative position of the anchor can be set using e.g. anchor_position = TEXT_ANCHOR_LEFT
@@ -270,7 +269,7 @@ sp_canvastext_new(SPCanvasGroup *parent, SPDesktop *desktop, Geom::Point pos, gc
g_free(ct->text);
ct->text = g_strdup(new_text);
- return item;
+ return ct;
}
diff --git a/src/display/canvas-text.h b/src/display/canvas-text.h
index ecdb77f1c..b779d7170 100644
--- a/src/display/canvas-text.h
+++ b/src/display/canvas-text.h
@@ -58,7 +58,7 @@ struct SPCanvasTextClass : public SPCanvasItemClass{};
GType sp_canvastext_get_type (void);
-SPCanvasItem *sp_canvastext_new(SPCanvasGroup *parent, SPDesktop *desktop, Geom::Point pos, gchar const *text);
+SPCanvasText *sp_canvastext_new(SPCanvasGroup *parent, SPDesktop *desktop, Geom::Point pos, gchar const *text);
void sp_canvastext_set_rgba32 (SPCanvasText *ct, guint32 rgba, guint32 rgba_stroke);
void sp_canvastext_set_coords (SPCanvasText *ct, gdouble x0, gdouble y0);
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