implement wxCairoContext::GetPartialTextExtents for wxGTK
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71855 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -2112,14 +2112,33 @@ void wxCairoContext::GetTextExtent( const wxString &str, wxDouble *width, wxDoub
|
|||||||
void wxCairoContext::GetPartialTextExtents(const wxString& text, wxArrayDouble& widths) const
|
void wxCairoContext::GetPartialTextExtents(const wxString& text, wxArrayDouble& widths) const
|
||||||
{
|
{
|
||||||
widths.Empty();
|
widths.Empty();
|
||||||
widths.Add(0, text.length());
|
|
||||||
|
|
||||||
wxCHECK_RET( !m_font.IsNull(), wxT("wxCairoContext::GetPartialTextExtents - no valid font set") );
|
wxCHECK_RET( !m_font.IsNull(), wxT("wxCairoContext::GetPartialTextExtents - no valid font set") );
|
||||||
|
#if __WXGTK__
|
||||||
if (text.empty())
|
const wxCharBuffer data = text.utf8_str();
|
||||||
return;
|
int w = 0;
|
||||||
|
if (data.length())
|
||||||
|
{
|
||||||
|
PangoLayout* layout = pango_cairo_create_layout(m_context);
|
||||||
|
const wxFont& font = static_cast<wxCairoFontData*>(m_font.GetRefData())->GetFont();
|
||||||
|
pango_layout_set_font_description(layout, font.GetNativeFontInfo()->description);
|
||||||
|
pango_layout_set_text(layout, data, data.length());
|
||||||
|
PangoLayoutIter* iter = pango_layout_get_iter(layout);
|
||||||
|
PangoRectangle rect;
|
||||||
|
do {
|
||||||
|
pango_layout_iter_get_cluster_extents(iter, NULL, &rect);
|
||||||
|
w += rect.width;
|
||||||
|
widths.Add(PANGO_PIXELS(w));
|
||||||
|
} while (pango_layout_iter_next_cluster(iter));
|
||||||
|
pango_layout_iter_free(iter);
|
||||||
|
g_object_unref(layout);
|
||||||
|
}
|
||||||
|
size_t i = widths.GetCount();
|
||||||
|
const size_t len = text.length();
|
||||||
|
while (i++ < len)
|
||||||
|
widths.Add(PANGO_PIXELS(w));
|
||||||
|
#else
|
||||||
// TODO
|
// TODO
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void * wxCairoContext::GetNativeContext()
|
void * wxCairoContext::GetNativeContext()
|
||||||
|
Reference in New Issue
Block a user