X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ab9d0a8ca3d306898d92960ecfaefb8c1191b18a..222702b112dcc7bebe018d6f4d66fe469fefd02c:/src/gtk/dcclient.cpp diff --git a/src/gtk/dcclient.cpp b/src/gtk/dcclient.cpp index cfd61fc9ce..339aab1a31 100644 --- a/src/gtk/dcclient.cpp +++ b/src/gtk/dcclient.cpp @@ -27,7 +27,7 @@ #include "wx/gtk/win_gtk.h" -#include // for floating-point functions +#include "wx/math.h" // for floating-point functions #include #include @@ -143,8 +143,6 @@ void gdk_wx_draw_bitmap(GdkDrawable *drawable, // Implement Pool of Graphic contexts. Creating them takes too much time. //----------------------------------------------------------------------------- -#define GC_POOL_SIZE 200 - enum wxPoolGCType { wxGC_ERROR = 0, @@ -1672,6 +1670,8 @@ void wxWindowDC::DoDrawRotatedText( const wxString &text, wxCoord x, wxCoord y, int i_angle = (int) angle; i_angle = i_angle % 360; + if (i_angle < 0) + i_angle += 360; int xoffset = 0; if ((i_angle >= 90.0) && (i_angle < 270.0)) xoffset = image.GetWidth(); @@ -1742,11 +1742,8 @@ void wxWindowDC::DoGetTextExtent(const wxString &string, #else const wxWCharBuffer wdata = wxConvLocal.cMB2WC( string ); if ( !wdata ) - { - if (width) (*width) = 0; - if (height) (*height) = 0; return; - } + const wxCharBuffer data = wxConvUTF8.cWC2MB( wdata ); const char *dataUTF8 = (const char *)data; #endif @@ -1759,19 +1756,21 @@ void wxWindowDC::DoGetTextExtent(const wxString &string, pango_layout_set_text( m_layout, dataUTF8, strlen(dataUTF8) ); - int w,h; - pango_layout_get_pixel_size( m_layout, &w, &h ); - - if (width) - *width = (wxCoord) w; - if (height) - *height = (wxCoord) h; if (descent) { + int h; + pango_layout_get_pixel_size( m_layout, width, &h ); PangoLayoutIter *iter = pango_layout_get_iter(m_layout); int baseline = pango_layout_iter_get_baseline(iter); pango_layout_iter_free(iter); *descent = h - PANGO_PIXELS(baseline); + + if (height) + *height = (wxCoord) h; + } + else + { + pango_layout_get_pixel_size( m_layout, width, height ); } // Reset old font description @@ -1799,8 +1798,8 @@ wxCoord wxWindowDC::GetCharWidth() const { #ifdef __WXGTK20__ pango_layout_set_text( m_layout, "H", 1 ); - int w,h; - pango_layout_get_pixel_size( m_layout, &w, &h ); + int w; + pango_layout_get_pixel_size( m_layout, &w, NULL ); return w; #else GdkFont *font = m_font.GetInternalFont( m_scaleY ); @@ -1814,8 +1813,8 @@ wxCoord wxWindowDC::GetCharHeight() const { #ifdef __WXGTK20__ pango_layout_set_text( m_layout, "H", 1 ); - int w,h; - pango_layout_get_pixel_size( m_layout, &w, &h ); + int h; + pango_layout_get_pixel_size( m_layout, NULL, &h ); return h; #else GdkFont *font = m_font.GetInternalFont( m_scaleY ); @@ -2001,7 +2000,6 @@ void wxWindowDC::SetPen( const wxPen &pen ) } } -#if (GTK_MINOR_VERSION > 0) || (GTK_MAJOR_VERSION > 1) if (req_dash && req_nb_dash) { wxGTKDash *real_req_dash = new wxGTKDash[req_nb_dash]; @@ -2018,7 +2016,6 @@ void wxWindowDC::SetPen( const wxPen &pen ) gdk_gc_set_dashes( m_penGC, 0, (wxGTKDash*)req_dash, req_nb_dash ); } } -#endif // GTK+ > 1.0 GdkCapStyle capStyle = GDK_CAP_ROUND; switch (m_pen.GetCap()) @@ -2162,7 +2159,6 @@ void wxWindowDC::SetLogicalFunction( int function ) { case wxXOR: mode = GDK_XOR; break; case wxINVERT: mode = GDK_INVERT; break; -#if (GTK_MINOR_VERSION > 0) || (GTK_MAJOR_VERSION > 1) case wxOR_REVERSE: mode = GDK_OR_REVERSE; break; case wxAND_REVERSE: mode = GDK_AND_REVERSE; break; case wxCLEAR: mode = GDK_CLEAR; break; @@ -2179,7 +2175,6 @@ void wxWindowDC::SetLogicalFunction( int function ) // unsupported by GTK case wxNOR: mode = GDK_COPY; break; -#endif // GTK+ > 1.0 default: wxFAIL_MSG( wxT("unsupported logical function") ); mode = GDK_COPY; @@ -2390,9 +2385,13 @@ wxSize wxWindowDC::GetPPI() const int wxWindowDC::GetDepth() const { +#ifdef __WXGTK20__ + return gdk_drawable_get_depth(m_window); +#else wxFAIL_MSG(wxT("not implemented")); return -1; +#endif }