add virtual DoGetTextExtent() to allow calling the overloaded wxWindowBase::GetTextExtent() on wxWindow objects without any ugly casts/scope resolution operators

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@60984 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2009-06-10 16:41:41 +00:00
parent 68d801c8b0
commit 6de7047076
23 changed files with 144 additions and 134 deletions

View File

@@ -173,7 +173,7 @@ public:
// Get character size // Get character size
virtual int GetCharHeight() const; virtual int GetCharHeight() const;
virtual int GetCharWidth() const; virtual int GetCharWidth() const;
virtual void GetTextExtent(const wxString& string, int *x, int *y, virtual void DoGetTextExtent(const wxString& string, int *x, int *y,
int *descent = NULL, int *descent = NULL,
int *externalLeading = NULL, int *externalLeading = NULL,
const wxFont *theFont = NULL) const; const wxFont *theFont = NULL) const;

View File

@@ -81,12 +81,6 @@ public:
virtual int GetCharHeight() const; virtual int GetCharHeight() const;
virtual int GetCharWidth() const; virtual int GetCharWidth() const;
virtual void GetTextExtent(const wxString& string,
int *x, int *y,
int *descent = NULL,
int *externalLeading = NULL,
const wxFont *theFont = (const wxFont *) NULL)
const;
#if wxUSE_DRAG_AND_DROP #if wxUSE_DRAG_AND_DROP
virtual void SetDropTarget(wxDropTarget *dropTarget); virtual void SetDropTarget(wxDropTarget *dropTarget);
@@ -112,6 +106,11 @@ public:
protected: protected:
// implement the base class pure virtuals // implement the base class pure virtuals
virtual void DoGetTextExtent(const wxString& string,
int *x, int *y,
int *descent = NULL,
int *externalLeading = NULL,
const wxFont *theFont = NULL) const;
virtual void DoClientToScreen(int *x, int *y) const; virtual void DoClientToScreen(int *x, int *y) const;
virtual void DoScreenToClient(int *x, int *y) const; virtual void DoScreenToClient(int *x, int *y) const;
virtual void DoGetPosition(int *x, int *y) const; virtual void DoGetPosition(int *x, int *y) const;

View File

@@ -82,12 +82,6 @@ public:
virtual int GetCharHeight() const; virtual int GetCharHeight() const;
virtual int GetCharWidth() const; virtual int GetCharWidth() const;
virtual void GetTextExtent(const wxString& string,
int *x, int *y,
int *descent = NULL,
int *externalLeading = NULL,
const wxFont *theFont = (const wxFont *) NULL)
const;
virtual void SetScrollbar( int orient, int pos, int thumbVisible, virtual void SetScrollbar( int orient, int pos, int thumbVisible,
int range, bool refresh = true ); int range, bool refresh = true );
@@ -296,6 +290,11 @@ public:
protected: protected:
// implement the base class pure virtuals // implement the base class pure virtuals
virtual void DoGetTextExtent(const wxString& string,
int *x, int *y,
int *descent = NULL,
int *externalLeading = NULL,
const wxFont *font = NULL) const;
virtual void DoClientToScreen( int *x, int *y ) const; virtual void DoClientToScreen( int *x, int *y ) const;
virtual void DoScreenToClient( int *x, int *y ) const; virtual void DoScreenToClient( int *x, int *y ) const;
virtual void DoGetPosition( int *x, int *y ) const; virtual void DoGetPosition( int *x, int *y ) const;

View File

@@ -84,16 +84,6 @@ public:
virtual int GetCharHeight() const; virtual int GetCharHeight() const;
virtual int GetCharWidth() const; virtual int GetCharWidth() const;
virtual void GetTextExtent(const wxString& string,
int *x, int *y,
int *descent = NULL,
int *externalLeading = NULL,
const wxFont *theFont = (const wxFont *) NULL)
const;
#if wxUSE_MENUS_NATIVE
virtual bool DoPopupMenu( wxMenu *menu, int x, int y );
#endif // wxUSE_MENUS_NATIVE
virtual void SetScrollbar( int orient, int pos, int thumbVisible, virtual void SetScrollbar( int orient, int pos, int thumbVisible,
int range, bool refresh = true ); int range, bool refresh = true );
@@ -226,6 +216,16 @@ public:
wxInsertChildFunction m_insertCallback; wxInsertChildFunction m_insertCallback;
// implement the base class pure virtuals // implement the base class pure virtuals
virtual void DoGetTextExtent(const wxString& string,
int *x, int *y,
int *descent = NULL,
int *externalLeading = NULL,
const wxFont *theFont = NULL) const;
#if wxUSE_MENUS_NATIVE
virtual bool DoPopupMenu( wxMenu *menu, int x, int y );
#endif // wxUSE_MENUS_NATIVE
virtual void DoClientToScreen( int *x, int *y ) const; virtual void DoClientToScreen( int *x, int *y ) const;
virtual void DoScreenToClient( int *x, int *y ) const; virtual void DoScreenToClient( int *x, int *y ) const;
virtual void DoGetPosition( int *x, int *y ) const; virtual void DoGetPosition( int *x, int *y ) const;

View File

@@ -74,12 +74,6 @@ public:
virtual int GetCharHeight() const; virtual int GetCharHeight() const;
virtual int GetCharWidth() const; virtual int GetCharWidth() const;
virtual void GetTextExtent(const wxString& string,
int *x, int *y,
int *descent = NULL,
int *externalLeading = NULL,
const wxFont *theFont = (const wxFont *) NULL)
const;
#if wxUSE_DRAG_AND_DROP #if wxUSE_DRAG_AND_DROP
virtual void SetDropTarget(wxDropTarget *dropTarget); virtual void SetDropTarget(wxDropTarget *dropTarget);
@@ -110,6 +104,11 @@ protected:
int m_eraseBackground; int m_eraseBackground;
// implement the base class pure virtuals // implement the base class pure virtuals
virtual void DoGetTextExtent(const wxString& string,
int *x, int *y,
int *descent = NULL,
int *externalLeading = NULL,
const wxFont *font = NULL) const;
virtual void DoClientToScreen( int *x, int *y ) const; virtual void DoClientToScreen( int *x, int *y ) const;
virtual void DoScreenToClient( int *x, int *y ) const; virtual void DoScreenToClient( int *x, int *y ) const;
virtual void DoGetPosition( int *x, int *y ) const; virtual void DoGetPosition( int *x, int *y ) const;

View File

@@ -71,12 +71,6 @@ public:
virtual int GetCharHeight() const; virtual int GetCharHeight() const;
virtual int GetCharWidth() const; virtual int GetCharWidth() const;
virtual void GetTextExtent(const wxString& string,
int *x, int *y,
int *descent = NULL,
int *externalLeading = NULL,
const wxFont *theFont = (const wxFont *) NULL)
const;
virtual void SetScrollbar( int orient, int pos, int thumbVisible, virtual void SetScrollbar( int orient, int pos, int thumbVisible,
int range, bool refresh = true ); int range, bool refresh = true );
@@ -280,6 +274,11 @@ protected:
int m_scrollPosY; int m_scrollPosY;
// implement the base class pure virtuals // implement the base class pure virtuals
virtual void DoGetTextExtent(const wxString& string,
int *x, int *y,
int *descent = NULL,
int *externalLeading = NULL,
const wxFont *font = NULL) const;
virtual void DoClientToScreen( int *x, int *y ) const; virtual void DoClientToScreen( int *x, int *y ) const;
virtual void DoScreenToClient( int *x, int *y ) const; virtual void DoScreenToClient( int *x, int *y ) const;
virtual void DoGetPosition( int *x, int *y ) const; virtual void DoGetPosition( int *x, int *y ) const;

View File

@@ -95,12 +95,6 @@ public:
virtual int GetCharHeight() const; virtual int GetCharHeight() const;
virtual int GetCharWidth() const; virtual int GetCharWidth() const;
virtual void GetTextExtent(const wxString& string,
int *x, int *y,
int *descent = NULL,
int *externalLeading = NULL,
const wxFont *theFont = (const wxFont *) NULL)
const;
virtual void SetScrollbar( int orient, int pos, int thumbVisible, virtual void SetScrollbar( int orient, int pos, int thumbVisible,
int range, bool refresh = true ); int range, bool refresh = true );
@@ -493,6 +487,11 @@ protected:
int m_yThumbSize; int m_yThumbSize;
// implement the base class pure virtuals // implement the base class pure virtuals
virtual void DoGetTextExtent(const wxString& string,
int *x, int *y,
int *descent = NULL,
int *externalLeading = NULL,
const wxFont *font = NULL) const;
virtual void DoClientToScreen( int *x, int *y ) const; virtual void DoClientToScreen( int *x, int *y ) const;
virtual void DoScreenToClient( int *x, int *y ) const; virtual void DoScreenToClient( int *x, int *y ) const;
virtual void DoGetPosition( int *x, int *y ) const; virtual void DoGetPosition( int *x, int *y ) const;

View File

@@ -98,19 +98,6 @@ public:
virtual bool SetFont(const wxFont& rFont); virtual bool SetFont(const wxFont& rFont);
virtual int GetCharHeight(void) const; virtual int GetCharHeight(void) const;
virtual int GetCharWidth(void) const; virtual int GetCharWidth(void) const;
virtual void GetTextExtent( const wxString& rString
,int* pX
,int* pY
,int* pDescent = NULL
,int* pExternalLeading = NULL
,const wxFont* pTheFont = (const wxFont *)NULL
) const;
#if wxUSE_MENUS_NATIVE
virtual bool DoPopupMenu( wxMenu* pMenu
,int nX
,int nY
);
#endif // wxUSE_MENUS_NATIVE
virtual void SetScrollbar( int nOrient virtual void SetScrollbar( int nOrient
,int nPos ,int nPos
@@ -460,6 +447,19 @@ protected:
long m_lDlgCode; long m_lDlgCode;
// implement the base class pure virtuals // implement the base class pure virtuals
virtual void GetTextExtent( const wxString& rString
,int* pX
,int* pY
,int* pDescent = NULL
,int* pExternalLeading = NULL
,const wxFont* pTheFont = NULL
) const;
#if wxUSE_MENUS_NATIVE
virtual bool DoPopupMenu( wxMenu* pMenu
,int nX
,int nY
);
#endif // wxUSE_MENUS_NATIVE
virtual void DoClientToScreen( int* pX virtual void DoClientToScreen( int* pX
,int* pY ,int* pY
) const; ) const;

View File

@@ -82,20 +82,6 @@ public:
virtual int GetCharHeight() const; virtual int GetCharHeight() const;
virtual int GetCharWidth() const; virtual int GetCharWidth() const;
virtual void GetTextExtent( const wxString& string,
int *x, int *y,
int *descent = NULL,
int *externalLeading = NULL,
const wxFont *theFont = NULL )
const;
protected:
virtual void DoEnable( bool enable );
#if wxUSE_MENUS
virtual bool DoPopupMenu( wxMenu *menu, int x, int y );
#endif
virtual void DoFreeze();
virtual void DoThaw();
public: public:
virtual void SetScrollbar( int orient, int pos, int thumbVisible, virtual void SetScrollbar( int orient, int pos, int thumbVisible,
@@ -306,6 +292,20 @@ protected:
void MacUpdateControlFont() ; void MacUpdateControlFont() ;
// implement the base class pure virtuals // implement the base class pure virtuals
virtual void DoGetTextExtent(const wxString& string,
int *x, int *y,
int *descent = NULL,
int *externalLeading = NULL,
const wxFont *theFont = NULL ) const;
virtual void DoEnable( bool enable );
#if wxUSE_MENUS
virtual bool DoPopupMenu( wxMenu *menu, int x, int y );
#endif
virtual void DoFreeze();
virtual void DoThaw();
virtual wxSize DoGetBestSize() const; virtual wxSize DoGetBestSize() const;
virtual wxSize DoGetSizeFromClientSize( const wxSize & size ) const; virtual wxSize DoGetSizeFromClientSize( const wxSize & size ) const;
virtual void DoClientToScreen( int *x, int *y ) const; virtual void DoClientToScreen( int *x, int *y ) const;

View File

@@ -79,12 +79,6 @@ public:
virtual int GetCharHeight() const; virtual int GetCharHeight() const;
virtual int GetCharWidth() const; virtual int GetCharWidth() const;
virtual void GetTextExtent(const wxString& string,
int *x, int *y,
int *descent = NULL,
int *externalLeading = NULL,
const wxFont *theFont = (const wxFont *) NULL)
const;
#if wxUSE_MENUS_NATIVE #if wxUSE_MENUS_NATIVE
virtual bool DoPopupMenu( wxMenu *menu, int x, int y ); virtual bool DoPopupMenu( wxMenu *menu, int x, int y );
@@ -231,6 +225,11 @@ protected:
WXHMENU m_hMenu; // Menu, if any WXHMENU m_hMenu; // Menu, if any
// implement the base class pure virtuals // implement the base class pure virtuals
virtual void DoGetTextExtent(const wxString& string,
int *x, int *y,
int *descent = NULL,
int *externalLeading = NULL,
const wxFont *font = NULL) const;
virtual void DoClientToScreen( int *x, int *y ) const; virtual void DoClientToScreen( int *x, int *y ) const;
virtual void DoScreenToClient( int *x, int *y ) const; virtual void DoScreenToClient( int *x, int *y ) const;
virtual void DoGetPosition( int *x, int *y ) const; virtual void DoGetPosition( int *x, int *y ) const;

View File

@@ -1069,12 +1069,14 @@ public:
// get the width/height/... of the text using current or specified // get the width/height/... of the text using current or specified
// font // font
virtual void GetTextExtent(const wxString& string, void GetTextExtent(const wxString& string,
int *x, int *y, int *x, int *y,
int *descent = NULL, int *descent = NULL,
int *externalLeading = NULL, int *externalLeading = NULL,
const wxFont *theFont = (const wxFont *) NULL) const wxFont *font = NULL) const
const = 0; {
DoGetTextExtent(string, x, y, descent, externalLeading, font);
}
wxSize GetTextExtent(const wxString& string) const wxSize GetTextExtent(const wxString& string) const
{ {
@@ -1602,6 +1604,13 @@ protected:
// overloaded Something()s in terms of DoSomething() which will be the // overloaded Something()s in terms of DoSomething() which will be the
// only one to be virtual. // only one to be virtual.
// text extent
virtual void DoGetTextExtent(const wxString& string,
int *x, int *y,
int *descent = NULL,
int *externalLeading = NULL,
const wxFont *font = NULL) const = 0;
// coordinates translation // coordinates translation
virtual void DoClientToScreen( int *x, int *y ) const = 0; virtual void DoClientToScreen( int *x, int *y ) const = 0;
virtual void DoScreenToClient( int *x, int *y ) const = 0; virtual void DoScreenToClient( int *x, int *y ) const = 0;

View File

@@ -71,15 +71,8 @@ public:
virtual int GetCharHeight() const; virtual int GetCharHeight() const;
virtual int GetCharWidth() const; virtual int GetCharWidth() const;
virtual void GetTextExtent(const wxString& string,
int *x, int *y,
int *descent = NULL,
int *externalLeading = NULL,
const wxFont *theFont = (const wxFont *) NULL)
const;
virtual void ScrollWindow( int dx, int dy, virtual void ScrollWindow( int dx, int dy, const wxRect* rect = NULL );
const wxRect* rect = NULL );
#if wxUSE_DRAG_AND_DROP #if wxUSE_DRAG_AND_DROP
virtual void SetDropTarget( wxDropTarget *dropTarget ); virtual void SetDropTarget( wxDropTarget *dropTarget );
@@ -165,6 +158,11 @@ protected:
bool m_needsInputFocus; // Input focus set in OnIdle bool m_needsInputFocus; // Input focus set in OnIdle
// implement the base class pure virtuals // implement the base class pure virtuals
virtual void DoGetTextExtent(const wxString& string,
int *x, int *y,
int *descent = NULL,
int *externalLeading = NULL,
const wxFont *font = NULL) const;
virtual void DoClientToScreen( int *x, int *y ) const; virtual void DoClientToScreen( int *x, int *y ) const;
virtual void DoScreenToClient( int *x, int *y ) const; virtual void DoScreenToClient( int *x, int *y ) const;
virtual void DoGetPosition( int *x, int *y ) const; virtual void DoGetPosition( int *x, int *y ) const;

View File

@@ -1713,7 +1713,7 @@ int wxWindow::GetCharWidth() const
return 5; return 5;
} }
void wxWindow::GetTextExtent(const wxString& string, int *outX, int *outY, void wxWindow::DoGetTextExtent(const wxString& string, int *outX, int *outY,
int *outDescent, int *outExternalLeading, const wxFont *inFont) const int *outDescent, int *outExternalLeading, const wxFont *inFont) const
{ {
// FIXME: This obviously ignores the window's font (if any) along with any size // FIXME: This obviously ignores the window's font (if any) along with any size

View File

@@ -557,10 +557,11 @@ int wxWindowDFB::GetCharWidth() const
return dc.GetCharWidth(); return dc.GetCharWidth();
} }
void wxWindowDFB::GetTextExtent(const wxString& string, void wxWindowDFB::DoGetTextExtent(const wxString& string,
int *x, int *y, int *x, int *y,
int *descent, int *externalLeading, int *descent,
const wxFont *theFont) const int *externalLeading,
const wxFont *theFont) const
{ {
wxWindowDC dc((wxWindow*)this); wxWindowDC dc((wxWindow*)this);
dc.GetTextExtent(string, x, y, descent, externalLeading, (wxFont*)theFont); dc.GetTextExtent(string, x, y, descent, externalLeading, (wxFont*)theFont);

View File

@@ -2922,12 +2922,12 @@ int wxWindowGTK::GetCharWidth() const
return (int) PANGO_PIXELS(rect.width); return (int) PANGO_PIXELS(rect.width);
} }
void wxWindowGTK::GetTextExtent( const wxString& string, void wxWindowGTK::DoGetTextExtent( const wxString& string,
int *x, int *x,
int *y, int *y,
int *descent, int *descent,
int *externalLeading, int *externalLeading,
const wxFont *theFont ) const const wxFont *theFont ) const
{ {
wxFont fontToUse = theFont ? *theFont : GetFont(); wxFont fontToUse = theFont ? *theFont : GetFont();

View File

@@ -3240,12 +3240,12 @@ int wxWindowGTK::GetCharWidth() const
return gdk_string_width( gfont, "g" ); return gdk_string_width( gfont, "g" );
} }
void wxWindowGTK::GetTextExtent( const wxString& string, void wxWindowGTK::DoGetTextExtent(const wxString& string,
int *x, int *x,
int *y, int *y,
int *descent, int *descent,
int *externalLeading, int *externalLeading,
const wxFont *theFont ) const const wxFont *theFont) const
{ {
wxFont fontToUse = theFont ? *theFont : GetFont(); wxFont fontToUse = theFont ? *theFont : GetFont();

View File

@@ -1079,10 +1079,11 @@ int wxWindowMGL::GetCharWidth() const
return dc.GetCharWidth(); return dc.GetCharWidth();
} }
void wxWindowMGL::GetTextExtent(const wxString& string, void wxWindowMGL::DoGetTextExtent(const wxString& string,
int *x, int *y, int *x, int *y,
int *descent, int *externalLeading, int *descent,
const wxFont *theFont) const int *externalLeading,
const wxFont *theFont) const
{ {
wxScreenDC dc; wxScreenDC dc;
if (!theFont) if (!theFont)

View File

@@ -1478,10 +1478,11 @@ int wxWindow::GetCharWidth() const
return width; return width;
} }
void wxWindow::GetTextExtent(const wxString& string, void wxWindow::DoGetTextExtent(const wxString& string,
int *x, int *y, int *x, int *y,
int *descent, int *externalLeading, int *descent,
const wxFont *theFont) const int *externalLeading,
const wxFont *theFont) const
{ {
const wxFont *fontToUse = theFont ? theFont : &m_font; const wxFont *fontToUse = theFont ? theFont : &m_font;

View File

@@ -2133,10 +2133,11 @@ int wxWindowMSW::GetCharWidth() const
#endif #endif
} }
void wxWindowMSW::GetTextExtent(const wxString& string, void wxWindowMSW::DoGetTextExtent(const wxString& string,
int *x, int *y, int *x, int *y,
int *descent, int *externalLeading, int *descent,
const wxFont *fontToUse) const int *externalLeading,
const wxFont *fontToUse) const
{ {
wxASSERT_MSG( !fontToUse || fontToUse->Ok(), wxASSERT_MSG( !fontToUse || fontToUse->Ok(),
_T("invalid font in GetTextExtent()") ); _T("invalid font in GetTextExtent()") );

View File

@@ -1661,12 +1661,12 @@ int wxWindowOS2::GetCharWidth() const
return(vFontMetrics.lAveCharWidth); return(vFontMetrics.lAveCharWidth);
} // end of wxWindowOS2::GetCharWidth } // end of wxWindowOS2::GetCharWidth
void wxWindowOS2::GetTextExtent( const wxString& rString, void wxWindowOS2::DoGetTextExtent( const wxString& rString,
int* pX, int* pX,
int* pY, int* pY,
int* pDescent, int* pDescent,
int* pExternalLeading, int* pExternalLeading,
const wxFont* WXUNUSED(pTheFont) ) const const wxFont* WXUNUSED(pTheFont) ) const
{ {
POINTL avPoint[TXTBOX_COUNT]; POINTL avPoint[TXTBOX_COUNT];
POINTL vPtMin; POINTL vPtMin;
@@ -1750,7 +1750,7 @@ void wxWindowOS2::GetTextExtent( const wxString& rString,
*pExternalLeading = 0; *pExternalLeading = 0;
} }
::WinReleasePS(hPS); ::WinReleasePS(hPS);
} // end of wxWindow::GetTextExtent } // end of wxWindow::DoGetTextExtent
bool wxWindowOS2::IsMouseInWindow() const bool wxWindowOS2::IsMouseInWindow() const
{ {

View File

@@ -1089,8 +1089,11 @@ int wxWindowMac::GetCharWidth() const
return width; return width;
} }
void wxWindowMac::GetTextExtent(const wxString& str, int *x, int *y, void wxWindowMac::DoGetTextExtent(const wxString& str,
int *descent, int *externalLeading, const wxFont *theFont ) const int *x, int *y,
int *descent,
int *externalLeading,
const wxFont *theFont) const
{ {
const wxFont *fontToUse = theFont; const wxFont *fontToUse = theFont;
wxFont tempFont; wxFont tempFont;

View File

@@ -610,10 +610,11 @@ int wxWindowPalm::GetCharWidth() const
return 0; return 0;
} }
void wxWindowPalm::GetTextExtent(const wxString& string, void wxWindowPalm::DoGetTextExtent(const wxString& string,
int *x, int *y, int *x, int *y,
int *descent, int *externalLeading, int *descent,
const wxFont *theFont) const int *externalLeading,
const wxFont *theFont) const
{ {
} }

View File

@@ -1076,10 +1076,11 @@ int wxWindowX11::GetCharWidth() const
#endif #endif
} }
void wxWindowX11::GetTextExtent(const wxString& string, void wxWindowX11::DoGetTextExtent(const wxString& string,
int *x, int *y, int *x, int *y,
int *descent, int *externalLeading, int *descent,
const wxFont *theFont) const int *externalLeading,
const wxFont *theFont) const
{ {
wxFont fontToUse = GetFont(); wxFont fontToUse = GetFont();
if (theFont) fontToUse = *theFont; if (theFont) fontToUse = *theFont;