X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/49ad157e30870decc06586a3c8f5ec31e2bda1f0..d169fa6aef264c5dfc300dd6666236d59f4e169a:/src/generic/graphicc.cpp diff --git a/src/generic/graphicc.cpp b/src/generic/graphicc.cpp index a783be44a8..6780545914 100644 --- a/src/generic/graphicc.cpp +++ b/src/generic/graphicc.cpp @@ -12,33 +12,24 @@ #include "wx/wxprec.h" #ifdef __BORLANDC__ -#pragma hdrstop + #pragma hdrstop #endif #if wxUSE_GRAPHICS_CONTEXT -#include "wx/dc.h" - #ifndef WX_PRECOMP -#include "wx/image.h" -#include "wx/window.h" -#include "wx/dc.h" -#include "wx/utils.h" -#include "wx/dialog.h" -#include "wx/app.h" -#include "wx/bitmap.h" -#include "wx/dcmemory.h" -#include "wx/log.h" -#include "wx/icon.h" -#include "wx/dcprint.h" -#include "wx/module.h" + #include "wx/bitmap.h" + #include "wx/icon.h" + + #include "wx/dc.h" + #include "wx/dcclient.h" + #include "wx/dcmemory.h" + #include "wx/dcprint.h" #endif #include "wx/private/graphics.h" #include "wx/rawbmp.h" -#include - using namespace std; //----------------------------------------------------------------------------- @@ -320,8 +311,6 @@ private : class WXDLLIMPEXP_CORE wxCairoContext : public wxGraphicsContext { - DECLARE_NO_COPY_CLASS(wxCairoContext) - public: wxCairoContext( wxGraphicsRenderer* renderer, const wxWindowDC& dc ); wxCairoContext( wxGraphicsRenderer* renderer, const wxMemoryDC& dc ); @@ -379,7 +368,6 @@ public: virtual void PushState(); virtual void PopState(); - virtual void DrawText( const wxString &str, wxDouble x, wxDouble y); virtual void GetTextExtent( const wxString &str, wxDouble *width, wxDouble *height, wxDouble *descent, wxDouble *externalLeading ) const; virtual void GetPartialTextExtents(const wxString& text, wxArrayDouble& widths) const; @@ -387,7 +375,11 @@ public: private: void Init(cairo_t *context); + virtual void DoDrawText( const wxString &str, wxDouble x, wxDouble y ); + cairo_t* m_context; + + DECLARE_NO_COPY_CLASS(wxCairoContext) }; //----------------------------------------------------------------------------- @@ -479,32 +471,32 @@ wxCairoPenData::wxCairoPenData( wxGraphicsRenderer* renderer, const wxPen &pen ) switch ( m_pen.GetStyle() ) { - case wxSOLID : + case wxPENSTYLE_SOLID : break; - case wxDOT : + case wxPENSTYLE_DOT : m_count = WXSIZEOF(dotted); m_userLengths = new double[ m_count ] ; memcpy( m_userLengths, dotted, sizeof(dotted) ); m_lengths = m_userLengths; break; - case wxLONG_DASH : + case wxPENSTYLE_LONG_DASH : m_lengths = dashed ; m_count = WXSIZEOF(dashed); break; - case wxSHORT_DASH : + case wxPENSTYLE_SHORT_DASH : m_lengths = short_dashed ; m_count = WXSIZEOF(short_dashed); break; - case wxDOT_DASH : + case wxPENSTYLE_DOT_DASH : m_lengths = dotted_dashed ; m_count = WXSIZEOF(dotted_dashed); break; - case wxUSER_DASH : + case wxPENSTYLE_USER_DASH : { wxDash *wxdashes ; m_count = m_pen.GetDashes( &wxdashes ) ; @@ -524,7 +516,7 @@ wxCairoPenData::wxCairoPenData( wxGraphicsRenderer* renderer, const wxPen &pen ) m_lengths = m_userLengths ; } break; - case wxSTIPPLE : + case wxPENSTYLE_STIPPLE : { /* wxBitmap* bmp = pen.GetStipple(); @@ -540,29 +532,30 @@ wxCairoPenData::wxCairoPenData( wxGraphicsRenderer* renderer, const wxPen &pen ) } break; default : - if ( m_pen.GetStyle() >= wxFIRST_HATCH && m_pen.GetStyle() <= wxLAST_HATCH ) + if ( m_pen.GetStyle() >= wxPENSTYLE_FIRST_HATCH + && m_pen.GetStyle() <= wxPENSTYLE_LAST_HATCH ) { /* wxDELETE( m_penBrush ); HatchStyle style = HatchStyleHorizontal; switch( pen.GetStyle() ) { - case wxBDIAGONAL_HATCH : + case wxPENSTYLE_BDIAGONAL_HATCH : style = HatchStyleBackwardDiagonal; break ; - case wxCROSSDIAG_HATCH : + case wxPENSTYLE_CROSSDIAG_HATCH : style = HatchStyleDiagonalCross; break ; - case wxFDIAGONAL_HATCH : + case wxPENSTYLE_FDIAGONAL_HATCH : style = HatchStyleForwardDiagonal; break ; - case wxCROSS_HATCH : + case wxPENSTYLE_CROSS_HATCH : style = HatchStyleCross; break ; - case wxHORIZONTAL_HATCH : + case wxPENSTYLE_HORIZONTAL_HATCH : style = HatchStyleHorizontal; break ; - case wxVERTICAL_HATCH : + case wxPENSTYLE_VERTICAL_HATCH : style = HatchStyleVertical; break ; @@ -606,7 +599,7 @@ wxCairoBrushData::wxCairoBrushData( wxGraphicsRenderer* renderer, const wxBrush m_blue = brush.GetColour().Blue()/255.0; m_alpha = brush.GetColour().Alpha()/255.0; /* - if ( brush.GetStyle() == wxSOLID) + if ( brush.GetStyle() == wxBRUSHSTYLE_SOLID) { m_brush = new SolidBrush( Color( brush.GetColour().Alpha() , brush.GetColour().Red() , brush.GetColour().Green() , brush.GetColour().Blue() ) ); @@ -616,22 +609,22 @@ wxCairoBrushData::wxCairoBrushData( wxGraphicsRenderer* renderer, const wxBrush HatchStyle style = HatchStyleHorizontal; switch( brush.GetStyle() ) { - case wxBDIAGONAL_HATCH : + case wxBRUSHSTYLE_BDIAGONAL_HATCH : style = HatchStyleBackwardDiagonal; break ; - case wxCROSSDIAG_HATCH : + case wxBRUSHSTYLE_CROSSDIAG_HATCH : style = HatchStyleDiagonalCross; break ; - case wxFDIAGONAL_HATCH : + case wxBRUSHSTYLE_FDIAGONAL_HATCH : style = HatchStyleForwardDiagonal; break ; - case wxCROSS_HATCH : + case wxBRUSHSTYLE_CROSS_HATCH : style = HatchStyleCross; break ; - case wxHORIZONTAL_HATCH : + case wxBRUSHSTYLE_HORIZONTAL_HATCH : style = HatchStyleHorizontal; break ; - case wxVERTICAL_HATCH : + case wxBRUSHSTYLE_VERTICAL_HATCH : style = HatchStyleVertical; break ; @@ -1398,18 +1391,23 @@ void wxCairoContext::DrawIcon( const wxIcon &icon, wxDouble x, wxDouble y, wxDou } -void wxCairoContext::DrawText( const wxString &str, wxDouble x, wxDouble y ) +void wxCairoContext::DoDrawText(const wxString& str, wxDouble x, wxDouble y) { - if ( m_font.IsNull() || str.empty()) + wxCHECK_RET( !m_font.IsNull(), + wxT("wxCairoContext::DrawText - no valid font set") ); + + if ( str.empty()) return; -#ifdef __WXGTK__ const wxCharBuffer data = str.utf8_str(); if ( !data ) return; - size_t datalen = strlen(data); + ((wxCairoFontData*)m_font.GetRefData())->Apply(this); +#ifdef __WXGTK__ + size_t datalen = strlen(data); + PangoLayout *layout = pango_cairo_create_layout (m_context); pango_layout_set_font_description( layout, ((wxCairoFontData*)m_font.GetRefData())->GetFont()); pango_layout_set_text(layout, data, datalen); @@ -1418,21 +1416,21 @@ void wxCairoContext::DrawText( const wxString &str, wxDouble x, wxDouble y ) g_object_unref (layout); #else - ((wxCairoFontData*)m_font.GetRefData())->Apply(this); // Cairo's x,y for drawing text is at the baseline, so we need to adjust // the position we move to by the ascent. cairo_font_extents_t fe; cairo_font_extents(m_context, &fe); cairo_move_to(m_context, x, y+fe.ascent); - const wxWX2MBbuf buf(str.mb_str(wxConvUTF8)); - cairo_show_text(m_context,buf); + cairo_show_text(m_context, data); #endif } void wxCairoContext::GetTextExtent( const wxString &str, wxDouble *width, wxDouble *height, wxDouble *descent, wxDouble *externalLeading ) const { + wxCHECK_RET( !m_font.IsNull(), wxT("wxCairoContext::GetTextExtent - no valid font set") ); + if ( width ) *width = 0; if ( height ) @@ -1442,7 +1440,7 @@ void wxCairoContext::GetTextExtent( const wxString &str, wxDouble *width, wxDoub if ( externalLeading ) *externalLeading = 0; - if ( m_font.IsNull() || str.empty()) + if ( str.empty()) return; #ifdef __WXGTK__ @@ -1511,6 +1509,8 @@ void wxCairoContext::GetPartialTextExtents(const wxString& text, wxArrayDouble& widths.Empty(); widths.Add(0, text.length()); + wxCHECK_RET( !m_font.IsNull(), wxT("wxCairoContext::GetPartialTextExtents - no valid font set") ); + if (text.empty()) return;