From 6de7047076f388adc95b2eb5c95d5860d65f2f7d Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 10 Jun 2009 16:41:41 +0000 Subject: [PATCH] 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 --- include/wx/cocoa/window.h | 2 +- include/wx/dfb/window.h | 11 +++++------ include/wx/gtk/window.h | 11 +++++------ include/wx/gtk1/window.h | 20 ++++++++++---------- include/wx/mgl/window.h | 11 +++++------ include/wx/motif/window.h | 11 +++++------ include/wx/msw/window.h | 11 +++++------ include/wx/os2/window.h | 26 +++++++++++++------------- include/wx/osx/window.h | 28 ++++++++++++++-------------- include/wx/palmos/window.h | 11 +++++------ include/wx/window.h | 21 +++++++++++++++------ include/wx/x11/window.h | 14 ++++++-------- src/cocoa/window.mm | 2 +- src/dfb/window.cpp | 9 +++++---- src/gtk/window.cpp | 12 ++++++------ src/gtk1/window.cpp | 12 ++++++------ src/mgl/window.cpp | 9 +++++---- src/motif/window.cpp | 9 +++++---- src/msw/window.cpp | 9 +++++---- src/os2/window.cpp | 14 +++++++------- src/osx/window_osx.cpp | 7 +++++-- src/palmos/window.cpp | 9 +++++---- src/x11/window.cpp | 9 +++++---- 23 files changed, 144 insertions(+), 134 deletions(-) diff --git a/include/wx/cocoa/window.h b/include/wx/cocoa/window.h index 309cb29e5f..a7ef55ac17 100644 --- a/include/wx/cocoa/window.h +++ b/include/wx/cocoa/window.h @@ -173,7 +173,7 @@ public: // Get character size virtual int GetCharHeight() 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 *externalLeading = NULL, const wxFont *theFont = NULL) const; diff --git a/include/wx/dfb/window.h b/include/wx/dfb/window.h index b6b4c59c34..b12d07ab87 100644 --- a/include/wx/dfb/window.h +++ b/include/wx/dfb/window.h @@ -81,12 +81,6 @@ public: virtual int GetCharHeight() 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 virtual void SetDropTarget(wxDropTarget *dropTarget); @@ -112,6 +106,11 @@ public: protected: // 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 DoScreenToClient(int *x, int *y) const; virtual void DoGetPosition(int *x, int *y) const; diff --git a/include/wx/gtk/window.h b/include/wx/gtk/window.h index 904c47fad8..bb5e714d19 100644 --- a/include/wx/gtk/window.h +++ b/include/wx/gtk/window.h @@ -82,12 +82,6 @@ public: virtual int GetCharHeight() 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, int range, bool refresh = true ); @@ -296,6 +290,11 @@ public: protected: // 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 DoScreenToClient( int *x, int *y ) const; virtual void DoGetPosition( int *x, int *y ) const; diff --git a/include/wx/gtk1/window.h b/include/wx/gtk1/window.h index 0f5f08f3cd..7bcd2f8350 100644 --- a/include/wx/gtk1/window.h +++ b/include/wx/gtk1/window.h @@ -84,16 +84,6 @@ public: virtual int GetCharHeight() 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, int range, bool refresh = true ); @@ -226,6 +216,16 @@ public: wxInsertChildFunction m_insertCallback; // 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 DoScreenToClient( int *x, int *y ) const; virtual void DoGetPosition( int *x, int *y ) const; diff --git a/include/wx/mgl/window.h b/include/wx/mgl/window.h index 409197a61e..92f50b208b 100644 --- a/include/wx/mgl/window.h +++ b/include/wx/mgl/window.h @@ -74,12 +74,6 @@ public: virtual int GetCharHeight() 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 virtual void SetDropTarget(wxDropTarget *dropTarget); @@ -110,6 +104,11 @@ protected: int m_eraseBackground; // 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 DoScreenToClient( int *x, int *y ) const; virtual void DoGetPosition( int *x, int *y ) const; diff --git a/include/wx/motif/window.h b/include/wx/motif/window.h index 5cdb389309..0069899bff 100644 --- a/include/wx/motif/window.h +++ b/include/wx/motif/window.h @@ -71,12 +71,6 @@ public: virtual int GetCharHeight() 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, int range, bool refresh = true ); @@ -280,6 +274,11 @@ protected: int m_scrollPosY; // 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 DoScreenToClient( int *x, int *y ) const; virtual void DoGetPosition( int *x, int *y ) const; diff --git a/include/wx/msw/window.h b/include/wx/msw/window.h index 24015154e9..799b1588a1 100644 --- a/include/wx/msw/window.h +++ b/include/wx/msw/window.h @@ -95,12 +95,6 @@ public: virtual int GetCharHeight() 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, int range, bool refresh = true ); @@ -493,6 +487,11 @@ protected: int m_yThumbSize; // 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 DoScreenToClient( int *x, int *y ) const; virtual void DoGetPosition( int *x, int *y ) const; diff --git a/include/wx/os2/window.h b/include/wx/os2/window.h index 14e664fa69..168405f82f 100644 --- a/include/wx/os2/window.h +++ b/include/wx/os2/window.h @@ -98,19 +98,6 @@ public: virtual bool SetFont(const wxFont& rFont); virtual int GetCharHeight(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 ,int nPos @@ -460,6 +447,19 @@ protected: long m_lDlgCode; // 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 ,int* pY ) const; diff --git a/include/wx/osx/window.h b/include/wx/osx/window.h index 4536108994..d81975dea5 100644 --- a/include/wx/osx/window.h +++ b/include/wx/osx/window.h @@ -82,20 +82,6 @@ public: virtual int GetCharHeight() 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: virtual void SetScrollbar( int orient, int pos, int thumbVisible, @@ -306,6 +292,20 @@ protected: void MacUpdateControlFont() ; // 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 DoGetSizeFromClientSize( const wxSize & size ) const; virtual void DoClientToScreen( int *x, int *y ) const; diff --git a/include/wx/palmos/window.h b/include/wx/palmos/window.h index f95bc1e347..4be644902d 100644 --- a/include/wx/palmos/window.h +++ b/include/wx/palmos/window.h @@ -79,12 +79,6 @@ public: virtual int GetCharHeight() 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 ); @@ -231,6 +225,11 @@ protected: WXHMENU m_hMenu; // Menu, if any // 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 DoScreenToClient( int *x, int *y ) const; virtual void DoGetPosition( int *x, int *y ) const; diff --git a/include/wx/window.h b/include/wx/window.h index 7e2470214a..31dbf9587c 100644 --- a/include/wx/window.h +++ b/include/wx/window.h @@ -1069,12 +1069,14 @@ public: // get the width/height/... of the text using current or specified // font - virtual void GetTextExtent(const wxString& string, - int *x, int *y, - int *descent = NULL, - int *externalLeading = NULL, - const wxFont *theFont = (const wxFont *) NULL) - const = 0; + void GetTextExtent(const wxString& string, + int *x, int *y, + int *descent = NULL, + int *externalLeading = NULL, + const wxFont *font = NULL) const + { + DoGetTextExtent(string, x, y, descent, externalLeading, font); + } wxSize GetTextExtent(const wxString& string) const { @@ -1602,6 +1604,13 @@ protected: // overloaded Something()s in terms of DoSomething() which will be the // 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 virtual void DoClientToScreen( int *x, int *y ) const = 0; virtual void DoScreenToClient( int *x, int *y ) const = 0; diff --git a/include/wx/x11/window.h b/include/wx/x11/window.h index a958feb093..999280c703 100644 --- a/include/wx/x11/window.h +++ b/include/wx/x11/window.h @@ -71,15 +71,8 @@ public: virtual int GetCharHeight() 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, - const wxRect* rect = NULL ); + virtual void ScrollWindow( int dx, int dy, const wxRect* rect = NULL ); #if wxUSE_DRAG_AND_DROP virtual void SetDropTarget( wxDropTarget *dropTarget ); @@ -165,6 +158,11 @@ protected: bool m_needsInputFocus; // Input focus set in OnIdle // 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 DoScreenToClient( int *x, int *y ) const; virtual void DoGetPosition( int *x, int *y ) const; diff --git a/src/cocoa/window.mm b/src/cocoa/window.mm index fe1ea122e1..33eb677dfb 100644 --- a/src/cocoa/window.mm +++ b/src/cocoa/window.mm @@ -1713,7 +1713,7 @@ int wxWindow::GetCharWidth() const 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 { // FIXME: This obviously ignores the window's font (if any) along with any size diff --git a/src/dfb/window.cpp b/src/dfb/window.cpp index 2456eac046..e97567ebe3 100644 --- a/src/dfb/window.cpp +++ b/src/dfb/window.cpp @@ -557,10 +557,11 @@ int wxWindowDFB::GetCharWidth() const return dc.GetCharWidth(); } -void wxWindowDFB::GetTextExtent(const wxString& string, - int *x, int *y, - int *descent, int *externalLeading, - const wxFont *theFont) const +void wxWindowDFB::DoGetTextExtent(const wxString& string, + int *x, int *y, + int *descent, + int *externalLeading, + const wxFont *theFont) const { wxWindowDC dc((wxWindow*)this); dc.GetTextExtent(string, x, y, descent, externalLeading, (wxFont*)theFont); diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index 12342872a7..db5446339c 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -2922,12 +2922,12 @@ int wxWindowGTK::GetCharWidth() const return (int) PANGO_PIXELS(rect.width); } -void wxWindowGTK::GetTextExtent( const wxString& string, - int *x, - int *y, - int *descent, - int *externalLeading, - const wxFont *theFont ) const +void wxWindowGTK::DoGetTextExtent( const wxString& string, + int *x, + int *y, + int *descent, + int *externalLeading, + const wxFont *theFont ) const { wxFont fontToUse = theFont ? *theFont : GetFont(); diff --git a/src/gtk1/window.cpp b/src/gtk1/window.cpp index a670cf9099..48d7db1927 100644 --- a/src/gtk1/window.cpp +++ b/src/gtk1/window.cpp @@ -3240,12 +3240,12 @@ int wxWindowGTK::GetCharWidth() const return gdk_string_width( gfont, "g" ); } -void wxWindowGTK::GetTextExtent( const wxString& string, - int *x, - int *y, - int *descent, - int *externalLeading, - const wxFont *theFont ) const +void wxWindowGTK::DoGetTextExtent(const wxString& string, + int *x, + int *y, + int *descent, + int *externalLeading, + const wxFont *theFont) const { wxFont fontToUse = theFont ? *theFont : GetFont(); diff --git a/src/mgl/window.cpp b/src/mgl/window.cpp index 6c2603cc69..f9a1505ff3 100644 --- a/src/mgl/window.cpp +++ b/src/mgl/window.cpp @@ -1079,10 +1079,11 @@ int wxWindowMGL::GetCharWidth() const return dc.GetCharWidth(); } -void wxWindowMGL::GetTextExtent(const wxString& string, - int *x, int *y, - int *descent, int *externalLeading, - const wxFont *theFont) const +void wxWindowMGL::DoGetTextExtent(const wxString& string, + int *x, int *y, + int *descent, + int *externalLeading, + const wxFont *theFont) const { wxScreenDC dc; if (!theFont) diff --git a/src/motif/window.cpp b/src/motif/window.cpp index 116998f5a8..2d8b65b31b 100644 --- a/src/motif/window.cpp +++ b/src/motif/window.cpp @@ -1478,10 +1478,11 @@ int wxWindow::GetCharWidth() const return width; } -void wxWindow::GetTextExtent(const wxString& string, - int *x, int *y, - int *descent, int *externalLeading, - const wxFont *theFont) const +void wxWindow::DoGetTextExtent(const wxString& string, + int *x, int *y, + int *descent, + int *externalLeading, + const wxFont *theFont) const { const wxFont *fontToUse = theFont ? theFont : &m_font; diff --git a/src/msw/window.cpp b/src/msw/window.cpp index 827c12ec16..fbf9c4ced0 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -2133,10 +2133,11 @@ int wxWindowMSW::GetCharWidth() const #endif } -void wxWindowMSW::GetTextExtent(const wxString& string, - int *x, int *y, - int *descent, int *externalLeading, - const wxFont *fontToUse) const +void wxWindowMSW::DoGetTextExtent(const wxString& string, + int *x, int *y, + int *descent, + int *externalLeading, + const wxFont *fontToUse) const { wxASSERT_MSG( !fontToUse || fontToUse->Ok(), _T("invalid font in GetTextExtent()") ); diff --git a/src/os2/window.cpp b/src/os2/window.cpp index 36548384d6..b0f1d70118 100644 --- a/src/os2/window.cpp +++ b/src/os2/window.cpp @@ -1661,12 +1661,12 @@ int wxWindowOS2::GetCharWidth() const return(vFontMetrics.lAveCharWidth); } // end of wxWindowOS2::GetCharWidth -void wxWindowOS2::GetTextExtent( const wxString& rString, - int* pX, - int* pY, - int* pDescent, - int* pExternalLeading, - const wxFont* WXUNUSED(pTheFont) ) const +void wxWindowOS2::DoGetTextExtent( const wxString& rString, + int* pX, + int* pY, + int* pDescent, + int* pExternalLeading, + const wxFont* WXUNUSED(pTheFont) ) const { POINTL avPoint[TXTBOX_COUNT]; POINTL vPtMin; @@ -1750,7 +1750,7 @@ void wxWindowOS2::GetTextExtent( const wxString& rString, *pExternalLeading = 0; } ::WinReleasePS(hPS); -} // end of wxWindow::GetTextExtent +} // end of wxWindow::DoGetTextExtent bool wxWindowOS2::IsMouseInWindow() const { diff --git a/src/osx/window_osx.cpp b/src/osx/window_osx.cpp index fb1040f88d..f86cdec15c 100644 --- a/src/osx/window_osx.cpp +++ b/src/osx/window_osx.cpp @@ -1089,8 +1089,11 @@ int wxWindowMac::GetCharWidth() const return width; } -void wxWindowMac::GetTextExtent(const wxString& str, int *x, int *y, - int *descent, int *externalLeading, const wxFont *theFont ) const +void wxWindowMac::DoGetTextExtent(const wxString& str, + int *x, int *y, + int *descent, + int *externalLeading, + const wxFont *theFont) const { const wxFont *fontToUse = theFont; wxFont tempFont; diff --git a/src/palmos/window.cpp b/src/palmos/window.cpp index 1298d9a5b1..144ad5b112 100644 --- a/src/palmos/window.cpp +++ b/src/palmos/window.cpp @@ -610,10 +610,11 @@ int wxWindowPalm::GetCharWidth() const return 0; } -void wxWindowPalm::GetTextExtent(const wxString& string, - int *x, int *y, - int *descent, int *externalLeading, - const wxFont *theFont) const +void wxWindowPalm::DoGetTextExtent(const wxString& string, + int *x, int *y, + int *descent, + int *externalLeading, + const wxFont *theFont) const { } diff --git a/src/x11/window.cpp b/src/x11/window.cpp index 521a80b64a..3b3c9727eb 100644 --- a/src/x11/window.cpp +++ b/src/x11/window.cpp @@ -1076,10 +1076,11 @@ int wxWindowX11::GetCharWidth() const #endif } -void wxWindowX11::GetTextExtent(const wxString& string, - int *x, int *y, - int *descent, int *externalLeading, - const wxFont *theFont) const +void wxWindowX11::DoGetTextExtent(const wxString& string, + int *x, int *y, + int *descent, + int *externalLeading, + const wxFont *theFont) const { wxFont fontToUse = GetFont(); if (theFont) fontToUse = *theFont; -- 2.47.2