/** * gtk_source_gutter_renderer_text_measure_markup: * @renderer: a #GtkSourceGutterRendererText. * @markup: the pango markup to measure. * @width: (out) (optional): location to store the width of the text in pixels, * or %NULL. * @height: (out) (optional): location to store the height of the text in * pixels, or %NULL. * * Measures the pango markup provided using the pango layout used by the * #GtkSourceGutterRendererText. */ void gtk_source_gutter_renderer_text_measure_markup (GtkSourceGutterRendererText *renderer, const gchar *markup, gint *width, gint *height) { g_return_if_fail (GTK_SOURCE_IS_GUTTER_RENDERER_TEXT (renderer)); g_return_if_fail (markup != NULL); measure_text (renderer, markup, NULL, width, height); }
void group_t::measure(extents_t& result) { assert(control_m); if (name_m.empty()) { result.height() = 15; result.width() = 15; return; } // REVISIT (fbrereto) : A lot of static metrics values added here result = measure_text(name_m, theme_m, ::GetParent(control_m)); result.width() += 15; result.vertical().frame_m.first = result.height() + 7; result.height() = 5; }
void color_button_t::measure(extents_t& result) { assert(control_m); result.width() = Value(original_size_m.x); result.height() = Value(original_size_m.y); boost::shared_ptr<GG::Font> font = implementation::DefaultFont(); GG::Y baseline_offset = (control_m->Height() - font->Height()) / 2; result.vertical().guide_set_m.push_back(Value(baseline_offset)); if (!using_label_m) return; extents_t label_bounds(measure_text(name_m.name_m, font)); label_bounds.vertical().guide_set_m.push_back(0); align_slices(result.vertical(), label_bounds.vertical()); result.width() += gap + label_bounds.width(); result.horizontal().guide_set_m.push_back(label_bounds.width()); }
std::string Font::get_clipped_text(Canvas &canvas, const Sizef &box_size, const std::string &text, const std::string &ellipsis_text) { std::string out_string; out_string.reserve(text.length()); if (impl) { Pointf pos; FontMetrics fm = get_font_metrics(canvas); float descent = fm.get_descent(); float line_spacing = fm.get_line_height(); std::vector<std::string> lines = StringHelp::split_text(text, "\n", false); for (std::vector<std::string>::size_type i = 0; i < lines.size(); i++) { if (i == 0 || pos.y + descent < box_size.height) { Sizef size = measure_text(canvas, lines[i]).bbox_size; if (pos.x + size.width <= box_size.width) { if (!out_string.empty()) out_string += "\n"; out_string += lines[i]; } else { Sizef ellipsis = measure_text(canvas, ellipsis_text).bbox_size; int seek_start = 0; int seek_end = lines[i].size(); int seek_center = (seek_start + seek_end) / 2; UTF8_Reader utf8_reader(lines[i].data(), lines[i].length()); while (true) { utf8_reader.set_position(seek_center); utf8_reader.move_to_leadbyte(); if (seek_center != utf8_reader.get_position()) utf8_reader.next(); seek_center = utf8_reader.get_position(); if (seek_center == seek_end) break; utf8_reader.set_position(seek_start); utf8_reader.next(); if (utf8_reader.get_position() == seek_end) break; Sizef text_size = measure_text(canvas, lines[i].substr(0, seek_center)).bbox_size; if (pos.x + text_size.width + ellipsis.width >= box_size.width) seek_end = seek_center; else seek_start = seek_center; seek_center = (seek_start + seek_end) / 2; } if (!out_string.empty()) out_string += "\n"; out_string += lines[i].substr(0, seek_center) + ellipsis_text; } pos.y += line_spacing; } } } return out_string; }