X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f5af73080abf2b01f4bbd7c0a27773b49f995932..1fe0a566bbf649efe7cadc21e8ded82458c8bdc6:/src/gtk/dcclient.cpp diff --git a/src/gtk/dcclient.cpp b/src/gtk/dcclient.cpp index 90d74d7bc7..e2593a9cb7 100644 --- a/src/gtk/dcclient.cpp +++ b/src/gtk/dcclient.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: gtk/dcclient.cpp +// Name: src/gtk/dcclient.cpp // Purpose: // Author: Robert Roebling // RCS-ID: $Id$ @@ -15,15 +15,19 @@ #endif #include "wx/dcclient.h" -#include "wx/dcmemory.h" + +#ifndef WX_PRECOMP + #include "wx/log.h" + #include "wx/dcmemory.h" + #include "wx/math.h" // for floating-point functions +#endif + #include "wx/image.h" #include "wx/module.h" -#include "wx/log.h" #include "wx/fontutil.h" #include "wx/gtk/win_gtk.h" - -#include "wx/math.h" // for floating-point functions +#include "wx/gtk/private.h" #include #include @@ -171,7 +175,7 @@ static void wxCleanUpGCPool() for (int i = 0; i < wxGCPoolSize; i++) { if (wxGCPool[i].m_gc) - gdk_gc_unref( wxGCPool[i].m_gc ); + g_object_unref (wxGCPool[i].m_gc); } free(wxGCPool); @@ -327,7 +331,7 @@ wxWindowDC::~wxWindowDC() Destroy(); if (m_layout) - g_object_unref( G_OBJECT( m_layout ) ); + g_object_unref (m_layout); if (m_fontdesc) pango_font_description_free( m_fontdesc ); } @@ -364,7 +368,7 @@ void wxWindowDC::SetUpDC() /* background colour */ m_backgroundBrush = *wxWHITE_BRUSH; m_backgroundBrush.GetColour().CalcPixel( m_cmap ); - GdkColor *bg_col = m_backgroundBrush.GetColour().GetColor(); + const GdkColor *bg_col = m_backgroundBrush.GetColour().GetColor(); /* m_textGC */ m_textForegroundColour.CalcPixel( m_cmap ); @@ -1125,7 +1129,7 @@ void wxWindowDC::DoDrawBitmap( const wxBitmap &bitmap, gdk_gc_set_fill( gc, GDK_OPAQUE_STIPPLED ); gdk_gc_set_stipple( gc, mask ); gdk_draw_rectangle( new_mask, gc, TRUE, 0, 0, ww, hh ); - gdk_gc_unref( gc ); + g_object_unref (gc); } if (is_mono) @@ -1158,8 +1162,8 @@ void wxWindowDC::DoDrawBitmap( const wxBitmap &bitmap, gdk_draw_drawable( m_window, m_textGC, bitmap2, 0, 0, xx, yy, -1, -1 ); - g_object_unref (G_OBJECT (bitmap2)); - gdk_gc_unref( gc ); + g_object_unref (bitmap2); + g_object_unref (gc); } else { @@ -1200,7 +1204,7 @@ void wxWindowDC::DoDrawBitmap( const wxBitmap &bitmap, } if (new_mask) - g_object_unref (G_OBJECT (new_mask)); + g_object_unref (new_mask); } bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, @@ -1368,7 +1372,7 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, gdk_gc_set_fill( gc, GDK_OPAQUE_STIPPLED ); gdk_gc_set_stipple( gc, mask ); gdk_draw_rectangle( new_mask, gc, TRUE, 0, 0, bm_ww, bm_hh ); - gdk_gc_unref( gc ); + g_object_unref (gc); } if (is_mono) @@ -1412,8 +1416,8 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, gdk_draw_drawable( m_window, m_textGC, bitmap, xsrc, ysrc, cx, cy, cw, ch ); - g_object_unref (G_OBJECT (bitmap)); - gdk_gc_unref( gc ); + g_object_unref (bitmap); + g_object_unref (gc); } else { @@ -1441,7 +1445,7 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, } if (new_mask) - g_object_unref (G_OBJECT (new_mask)); + g_object_unref (new_mask); } else // use_bitmap_method { @@ -1496,16 +1500,11 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y ) bool underlined = m_font.Ok() && m_font.GetUnderlined(); -#if wxUSE_UNICODE - const wxCharBuffer data = wxConvUTF8.cWC2MB( text ); -#else - const wxWCharBuffer wdata = wxConvLocal.cMB2WC( text ); - if ( !wdata ) + const wxCharBuffer data = wxGTK_CONV( text ); + if ( !data ) return; - const wxCharBuffer data = wxConvUTF8.cWC2MB( wdata ); -#endif - size_t datalen = strlen((const char*)data); - pango_layout_set_text( m_layout, (const char*) data, datalen); + const size_t datalen = strlen(data); + pango_layout_set_text( m_layout, data, datalen); if (underlined) { @@ -1586,16 +1585,17 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y ) void wxWindowDC::DoDrawRotatedText( const wxString &text, wxCoord x, wxCoord y, double angle ) { + if (!m_window || text.empty()) + return; + + wxCHECK_RET( Ok(), wxT("invalid window dc") ); + if ( wxIsNullDouble(angle) ) { DrawText(text, x, y); return; } - wxCHECK_RET( Ok(), wxT("invalid window dc") ); - - if (!m_window) return; - wxCoord w; wxCoord h; @@ -1700,27 +1700,24 @@ void wxWindowDC::DoGetTextExtent(const wxString &string, *externalLeading = 0; if (string.empty()) - { return; - } - // Set new font description - if (theFont) - pango_layout_set_font_description( m_layout, theFont->GetNativeFontInfo()->description ); + // ensure that theFont is always non-NULL + if ( !theFont || !theFont->Ok() ) + theFont = wx_const_cast(wxFont *, &m_font); - // Set layout's text -#if wxUSE_UNICODE - const wxCharBuffer data = wxConvUTF8.cWC2MB( string ); - const char *dataUTF8 = (const char *)data; -#else - const wxWCharBuffer wdata = wxConvLocal.cMB2WC( string ); - if ( !wdata ) - return; - - const wxCharBuffer data = wxConvUTF8.cWC2MB( wdata ); - const char *dataUTF8 = (const char *)data; -#endif + // and use it if it's valid + if ( theFont->Ok() ) + { + pango_layout_set_font_description + ( + m_layout, + theFont->GetNativeFontInfo()->description + ); + } + // Set layout's text + const wxCharBuffer dataUTF8 = wxGTK_CONV_FONT(string, *theFont); if ( !dataUTF8 ) { // hardly ideal, but what else can we do if conversion failed? @@ -1829,7 +1826,7 @@ void wxWindowDC::SetFont( const wxFont &font ) if (oldContext != m_context) { if (m_layout) - g_object_unref( G_OBJECT( m_layout ) ); + g_object_unref (m_layout); m_layout = pango_layout_new( m_context ); }