From 52cf0905d93c33f7d6f768478572ea08df4c8af0 Mon Sep 17 00:00:00 2001 From: Tim Moore Date: Fri, 4 Dec 2009 14:11:25 +0100 Subject: tweak multiline hover text to have proper interline spacing * grapher/CairoWidget.cxx (CairoTextBox::draw): Use font information to caculate legible spacing. Also change the font to something more readable. * testsuite/systemtap.examples/general/grapher.stp: Put carriage returns in the right spots. --- grapher/CairoWidget.cxx | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'grapher/CairoWidget.cxx') diff --git a/grapher/CairoWidget.cxx b/grapher/CairoWidget.cxx index db0e464e..eefe3d28 100644 --- a/grapher/CairoWidget.cxx +++ b/grapher/CairoWidget.cxx @@ -50,6 +50,15 @@ namespace systemtap { if (!_visible) return; + cr->save(); + cr->select_font_face("Sans", Cairo::FONT_SLANT_NORMAL, + Cairo::FONT_WEIGHT_BOLD); + cr->set_font_size(10.0); + Cairo::FontExtents fontExtent; + cr->get_font_extents(fontExtent); + // Some naughty fonts have a height less than ascent + descent + double fontHeight = max(fontExtent.ascent + fontExtent.descent + 1.0, + fontExtent.height); vector lines; split(lines, contents, is_any_of("\n")); vector extents; @@ -62,10 +71,8 @@ namespace systemtap cr->get_text_extents(*itr, extent); extents.push_back(extent); width = max(width, extent.width); - height += extent.height; + height += fontHeight; } - - cr->save(); cr->move_to(_x0 - 2, _y0 - 2); cr->line_to(_x0 + width + 2, _y0 - 2); cr->line_to(_x0 + width + 2, _y0 + height + 2); @@ -74,15 +81,14 @@ namespace systemtap cr->set_source_rgba(1.0, 1.0, 1.0, .8); cr->fill(); cr->set_source_rgba(0.0, 0.0, 0.0, 1.0); - vector::iterator titr = extents.begin(); double texty = _y0; for (vector::iterator itr = lines.begin(), end = lines.end(); itr != end; - ++itr,++titr) + ++itr) { - cr->move_to(_x0, texty + titr->height); + cr->move_to(_x0, texty + fontExtent.ascent); cr->show_text(*itr); - texty += titr->height; + texty += fontHeight; } cr->restore(); } -- cgit