fix warnings about hiding virtual wxGraphicsContext::DrawText() overloads by using different names for the implementation functions

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56753 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2008-11-13 12:16:39 +00:00
parent caa42c43d0
commit 0b7dce5480
5 changed files with 226 additions and 172 deletions

View File

@@ -428,13 +428,20 @@ public:
// text // text
// //
virtual void DrawText( const wxString &str, wxDouble x, wxDouble y ) = 0; void DrawText( const wxString &str, wxDouble x, wxDouble y )
{ DoDrawText(str, x, y); }
virtual void DrawText( const wxString &str, wxDouble x, wxDouble y, wxDouble angle ); void DrawText( const wxString &str, wxDouble x, wxDouble y, wxDouble angle )
{ DoDrawRotatedText(str, x, y, angle); }
virtual void DrawText( const wxString &str, wxDouble x, wxDouble y, const wxGraphicsBrush& backgroundBrush ) ; void DrawText( const wxString &str, wxDouble x, wxDouble y,
const wxGraphicsBrush& backgroundBrush )
{ DoDrawFilledText(str, x, y, backgroundBrush); }
void DrawText( const wxString &str, wxDouble x, wxDouble y,
wxDouble angle, const wxGraphicsBrush& backgroundBrush )
{ DoDrawRotatedFilledText(str, x, y, angle, backgroundBrush); }
virtual void DrawText( const wxString &str, wxDouble x, wxDouble y, wxDouble angle, const wxGraphicsBrush& backgroundBrush );
virtual void GetTextExtent( const wxString &text, wxDouble *width, wxDouble *height, virtual void GetTextExtent( const wxString &text, wxDouble *width, wxDouble *height,
wxDouble *descent, wxDouble *externalLeading ) const = 0; wxDouble *descent, wxDouble *externalLeading ) const = 0;
@@ -491,6 +498,19 @@ protected :
int m_logicalFunction; int m_logicalFunction;
private: private:
// implementations of overloaded public functions: we use different names
// for them to avoid the virtual function hiding problems in the derived
// classes
virtual void DoDrawText(const wxString& str, wxDouble x, wxDouble y) = 0;
virtual void DoDrawRotatedText(const wxString& str, wxDouble x, wxDouble y,
wxDouble angle);
virtual void DoDrawFilledText(const wxString& str, wxDouble x, wxDouble y,
const wxGraphicsBrush& backgroundBrush);
virtual void DoDrawRotatedFilledText(const wxString& str,
wxDouble x, wxDouble y,
wxDouble angle,
const wxGraphicsBrush& backgroundBrush);
DECLARE_NO_COPY_CLASS(wxGraphicsContext) DECLARE_NO_COPY_CLASS(wxGraphicsContext)
DECLARE_ABSTRACT_CLASS(wxGraphicsContext) DECLARE_ABSTRACT_CLASS(wxGraphicsContext)
}; };

View File

@@ -613,7 +613,11 @@ void wxGraphicsContext::DrawPath( const wxGraphicsPath& path, int fillStyle )
StrokePath( path ); StrokePath( path );
} }
void wxGraphicsContext::DrawText( const wxString &str, wxDouble x, wxDouble y, wxDouble angle ) void
wxGraphicsContext::DoDrawRotatedText(const wxString &str,
wxDouble x,
wxDouble y,
wxDouble angle)
{ {
Translate(x,y); Translate(x,y);
Rotate( -angle ); Rotate( -angle );
@@ -622,7 +626,11 @@ void wxGraphicsContext::DrawText( const wxString &str, wxDouble x, wxDouble y, w
Translate(-x,-y); Translate(-x,-y);
} }
void wxGraphicsContext::DrawText( const wxString &str, wxDouble x, wxDouble y, const wxGraphicsBrush& backgroundBrush ) void
wxGraphicsContext::DoDrawFilledText(const wxString &str,
wxDouble x,
wxDouble y,
const wxGraphicsBrush& backgroundBrush)
{ {
wxGraphicsBrush formerBrush = m_brush; wxGraphicsBrush formerBrush = m_brush;
wxGraphicsPen formerPen = m_pen; wxGraphicsPen formerPen = m_pen;
@@ -644,7 +652,11 @@ void wxGraphicsContext::DrawText( const wxString &str, wxDouble x, wxDouble y, c
SetPen( formerPen ); SetPen( formerPen );
} }
void wxGraphicsContext::DrawText( const wxString &str, wxDouble x, wxDouble y, wxDouble angle, const wxGraphicsBrush& backgroundBrush ) void
wxGraphicsContext::DoDrawRotatedFilledText(const wxString &str,
wxDouble x, wxDouble y,
wxDouble angle,
const wxGraphicsBrush& backgroundBrush)
{ {
wxGraphicsBrush formerBrush = m_brush; wxGraphicsBrush formerBrush = m_brush;
wxGraphicsPen formerPen = m_pen; wxGraphicsPen formerPen = m_pen;

View File

@@ -311,8 +311,6 @@ private :
class WXDLLIMPEXP_CORE wxCairoContext : public wxGraphicsContext class WXDLLIMPEXP_CORE wxCairoContext : public wxGraphicsContext
{ {
DECLARE_NO_COPY_CLASS(wxCairoContext)
public: public:
wxCairoContext( wxGraphicsRenderer* renderer, const wxWindowDC& dc ); wxCairoContext( wxGraphicsRenderer* renderer, const wxWindowDC& dc );
wxCairoContext( wxGraphicsRenderer* renderer, const wxMemoryDC& dc ); wxCairoContext( wxGraphicsRenderer* renderer, const wxMemoryDC& dc );
@@ -370,7 +368,6 @@ public:
virtual void PushState(); virtual void PushState();
virtual void PopState(); virtual void PopState();
virtual void DrawText( const wxString &str, wxDouble x, wxDouble y);
virtual void GetTextExtent( const wxString &str, wxDouble *width, wxDouble *height, virtual void GetTextExtent( const wxString &str, wxDouble *width, wxDouble *height,
wxDouble *descent, wxDouble *externalLeading ) const; wxDouble *descent, wxDouble *externalLeading ) const;
virtual void GetPartialTextExtents(const wxString& text, wxArrayDouble& widths) const; virtual void GetPartialTextExtents(const wxString& text, wxArrayDouble& widths) const;
@@ -378,7 +375,11 @@ public:
private: private:
void Init(cairo_t *context); void Init(cairo_t *context);
virtual void DoDrawText( const wxString &str, wxDouble x, wxDouble y );
cairo_t* m_context; cairo_t* m_context;
DECLARE_NO_COPY_CLASS(wxCairoContext)
}; };
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@@ -1390,20 +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)
{ {
wxCHECK_RET( !m_font.IsNull(), wxT("wxCairoContext::DrawText - no valid font set") ); wxCHECK_RET( !m_font.IsNull(),
wxT("wxCairoContext::DrawText - no valid font set") );
if ( str.empty()) if ( str.empty())
return; return;
#ifdef __WXGTK__
const wxCharBuffer data = str.utf8_str(); const wxCharBuffer data = str.utf8_str();
if ( !data ) if ( !data )
return; return;
size_t datalen = strlen(data);
((wxCairoFontData*)m_font.GetRefData())->Apply(this); ((wxCairoFontData*)m_font.GetRefData())->Apply(this);
#ifdef __WXGTK__
size_t datalen = strlen(data);
PangoLayout *layout = pango_cairo_create_layout (m_context); PangoLayout *layout = pango_cairo_create_layout (m_context);
pango_layout_set_font_description( layout, ((wxCairoFontData*)m_font.GetRefData())->GetFont()); pango_layout_set_font_description( layout, ((wxCairoFontData*)m_font.GetRefData())->GetFont());
pango_layout_set_text(layout, data, datalen); pango_layout_set_text(layout, data, datalen);
@@ -1412,15 +1416,13 @@ void wxCairoContext::DrawText( const wxString &str, wxDouble x, wxDouble y )
g_object_unref (layout); g_object_unref (layout);
#else #else
((wxCairoFontData*)m_font.GetRefData())->Apply(this);
// Cairo's x,y for drawing text is at the baseline, so we need to adjust // Cairo's x,y for drawing text is at the baseline, so we need to adjust
// the position we move to by the ascent. // the position we move to by the ascent.
cairo_font_extents_t fe; cairo_font_extents_t fe;
cairo_font_extents(m_context, &fe); cairo_font_extents(m_context, &fe);
cairo_move_to(m_context, x, y+fe.ascent); cairo_move_to(m_context, x, y+fe.ascent);
const wxWX2MBbuf buf(str.mb_str(wxConvUTF8)); cairo_show_text(m_context, data);
cairo_show_text(m_context,buf);
#endif #endif
} }

View File

@@ -323,7 +323,6 @@ public:
virtual void PushState(); virtual void PushState();
virtual void PopState(); virtual void PopState();
virtual void DrawText( const wxString &str, wxDouble x, wxDouble y);
virtual void GetTextExtent( const wxString &str, wxDouble *width, wxDouble *height, virtual void GetTextExtent( const wxString &str, wxDouble *width, wxDouble *height,
wxDouble *descent, wxDouble *externalLeading ) const; wxDouble *descent, wxDouble *externalLeading ) const;
virtual void GetPartialTextExtents(const wxString& text, wxArrayDouble& widths) const; virtual void GetPartialTextExtents(const wxString& text, wxArrayDouble& widths) const;
@@ -334,6 +333,11 @@ private:
void Init(); void Init();
void SetDefaults(); void SetDefaults();
virtual void DoDrawText(const wxString& str, wxDouble x, wxDouble y)
{ DoDrawFilledText(str, x, y, wxNullGraphicsBrush); }
virtual void DoDrawFilledText(const wxString& str, wxDouble x, wxDouble y,
const wxGraphicsBrush& backgroundBrush);
Graphics* m_context; Graphics* m_context;
GraphicsStates m_stateStack; GraphicsStates m_stateStack;
GraphicsState m_state1; GraphicsState m_state1;
@@ -1270,16 +1274,31 @@ void wxGDIPlusContext::DrawIcon( const wxIcon &icon, wxDouble x, wxDouble y, wxD
DeleteObject(iconInfo.hbmMask); DeleteObject(iconInfo.hbmMask);
} }
void wxGDIPlusContext::DrawText( const wxString &str, wxDouble x, wxDouble y ) void wxGDIPlusContext::DoDrawFilledText(const wxString& str,
wxDouble x, wxDouble y,
const wxGraphicsBrush& brush)
{ {
wxCHECK_RET( !m_font.IsNull(), wxT("wxGDIPlusContext::DrawText - no valid font set") ); wxCHECK_RET( !m_font.IsNull(),
wxT("wxGDIPlusContext::DrawText - no valid font set") );
if ( str.IsEmpty()) if ( str.IsEmpty())
return ; return ;
wxWCharBuffer s = str.wc_str( *wxConvUI ); const wxGDIPlusFontData * const
m_context->DrawString( s , -1 , ((wxGDIPlusFontData*)m_font.GetRefData())->GetGDIPlusFont() , fontData = (wxGDIPlusFontData *)m_font.GetRefData();
PointF( x , y ) , StringFormat::GenericTypographic() , ((wxGDIPlusFontData*)m_font.GetRefData())->GetGDIPlusBrush() ); const wxGDIPlusBrushData * const
brushData = (wxGDIPlusBrushData *)m_brush.GetRefData();
m_context->DrawString
(
str.wc_str(*wxConvUI), // string to draw, always Unicode
-1, // length: string is NUL-terminated
fontData->GetGDIPlusFont(),
PointF(x, y),
StringFormat::GenericTypographic(),
brushData ? brushData->GetGDIPlusBrush()
: fontData->GetGDIPlusBrush()
);
} }
void wxGDIPlusContext::GetTextExtent( const wxString &str, wxDouble *width, wxDouble *height, void wxGDIPlusContext::GetTextExtent( const wxString &str, wxDouble *width, wxDouble *height,

View File

@@ -1364,10 +1364,6 @@ public:
// text // text
// //
virtual void DrawText( const wxString &str, wxDouble x, wxDouble y );
virtual void DrawText( const wxString &str, wxDouble x, wxDouble y, wxDouble angle );
virtual void GetTextExtent( const wxString &text, wxDouble *width, wxDouble *height, virtual void GetTextExtent( const wxString &text, wxDouble *width, wxDouble *height,
wxDouble *descent, wxDouble *externalLeading ) const; wxDouble *descent, wxDouble *externalLeading ) const;
@@ -1390,6 +1386,9 @@ public:
private: private:
void EnsureIsValid(); void EnsureIsValid();
virtual void DoDrawText( const wxString &str, wxDouble x, wxDouble y );
virtual void DoDrawRotatedText( const wxString &str, wxDouble x, wxDouble y, wxDouble angle );
CGContextRef m_cgContext; CGContextRef m_cgContext;
#if wxOSX_USE_CARBON #if wxOSX_USE_CARBON
WindowRef m_windowRef; WindowRef m_windowRef;
@@ -1944,7 +1943,7 @@ void wxMacCoreGraphicsContext::PopState()
CGContextRestoreGState( m_cgContext ); CGContextRestoreGState( m_cgContext );
} }
void wxMacCoreGraphicsContext::DrawText( const wxString &str, wxDouble x, wxDouble y ) void wxMacCoreGraphicsContext::DoDrawText( const wxString &str, wxDouble x, wxDouble y )
{ {
wxCHECK_RET( !m_font.IsNull(), wxT("wxMacCoreGraphicsContext::DrawText - no valid font set") ); wxCHECK_RET( !m_font.IsNull(), wxT("wxMacCoreGraphicsContext::DrawText - no valid font set") );
@@ -2000,7 +1999,9 @@ void wxMacCoreGraphicsContext::DrawText( const wxString &str, wxDouble x, wxDoub
#endif #endif
} }
void wxMacCoreGraphicsContext::DrawText( const wxString &str, wxDouble x, wxDouble y, wxDouble angle ) void wxMacCoreGraphicsContext::DoDrawRotatedText(const wxString &str,
wxDouble x, wxDouble y,
wxDouble angle)
{ {
wxCHECK_RET( !m_font.IsNull(), wxT("wxMacCoreGraphicsContext::DrawText - no valid font set") ); wxCHECK_RET( !m_font.IsNull(), wxT("wxMacCoreGraphicsContext::DrawText - no valid font set") );
@@ -2099,7 +2100,7 @@ void wxMacCoreGraphicsContext::DrawText( const wxString &str, wxDouble x, wxDoub
#endif #endif
#if wxOSX_USE_IPHONE #if wxOSX_USE_IPHONE
// default implementation takes care of rotation and calls non rotated DrawText afterwards // default implementation takes care of rotation and calls non rotated DrawText afterwards
wxGraphicsContext::DrawText( str, x, y, angle ); wxGraphicsContext::DoDrawRotatedText( str, x, y, angle );
#endif #endif
} }