#include "wx/fontutil.h"
#include "wx/gtk/private.h"
+#include "wx/gtk/dc.h"
#ifndef __WXGTK3__
#include "wx/gtk/dcclient.h"
void wxTextMeasure::Init()
{
- wxASSERT_MSG( m_font, wxT("wxTextMeasure needs a valid wxFont") );
+ m_context = NULL;
+ m_layout = NULL;
#ifndef __WXGTK3__
m_wdc = NULL;
+
+ if ( m_dc )
+ {
+ wxClassInfo* const ci = m_dc->GetImpl()->GetClassInfo();
+
+ // Currently the code here only works with wxWindowDCImpl and only in
+ // wxGTK2 as wxGTK3 uses Cairo and not Pango for all its DCs.
+ if ( ci->IsKindOf(wxCLASSINFO(wxWindowDCImpl)))
+ {
+ m_useDCImpl = false;
+ }
+ }
#endif // GTK+ < 3
- m_context = NULL;
- m_layout = NULL;
}
// Get Gtk needed elements, if we have not them yet.
if ( m_layout )
{
pango_layout_set_font_description(m_layout,
- m_font->GetNativeFontInfo()->description);
+ GetFont().GetNativeFontInfo()->description);
}
}
{
if ( !m_context )
{
- *width =
- *height = 0;
+ if ( width )
+ *width = 0;
+
+ if ( height )
+ *height = 0;
return;
}
// Set layout's text
- const wxCharBuffer dataUTF8 = wxGTK_CONV_FONT(string, *m_font);
- if ( !dataUTF8 )
+ const wxCharBuffer dataUTF8 = wxGTK_CONV_FONT(string, GetFont());
+ if ( !dataUTF8 && !string.empty() )
{
// hardly ideal, but what else can we do if conversion failed?
wxLogLastError(wxT("GetTextExtent"));
bool wxTextMeasure::DoGetPartialTextExtents(const wxString& text,
wxArrayInt& widths,
- double WXUNUSED(scaleX))
+ double scaleX)
{
+ if ( !m_layout )
+ return wxTextMeasureBase::DoGetPartialTextExtents(text, widths, scaleX);
+
// Set layout's text
- const wxCharBuffer dataUTF8 = wxGTK_CONV_FONT(text, *m_font);
+ const wxCharBuffer dataUTF8 = wxGTK_CONV_FONT(text, GetFont());
if ( !dataUTF8 )
{
// hardly ideal, but what else can we do if conversion failed?