Use more modern function which allows to avoid wxXXXEventHandler() macros use. No real changes.
		
			
				
	
	
		
			99 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| ///////////////////////////////////////////////////////////////////////////////
 | |
| // Name:        wx/generic/custombgwin.h
 | |
| // Purpose:     Generic implementation of wxCustomBackgroundWindow.
 | |
| // Author:      Vadim Zeitlin
 | |
| // Created:     2011-10-10
 | |
| // Copyright:   (c) 2011 Vadim Zeitlin <vadim@wxwidgets.org>
 | |
| // Licence:     wxWindows licence
 | |
| ///////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| #ifndef _WX_GENERIC_CUSTOMBGWIN_H_
 | |
| #define _WX_GENERIC_CUSTOMBGWIN_H_
 | |
| 
 | |
| #include "wx/bitmap.h"
 | |
| #include "wx/dc.h"
 | |
| #include "wx/event.h"
 | |
| #include "wx/window.h"
 | |
| 
 | |
| // A helper to avoid template bloat: this class contains all type-independent
 | |
| // code of wxCustomBackgroundWindow<> below.
 | |
| class wxCustomBackgroundWindowGenericBase : public wxCustomBackgroundWindowBase
 | |
| {
 | |
| public:
 | |
|     wxCustomBackgroundWindowGenericBase() { }
 | |
| 
 | |
| protected:
 | |
|     void DoEraseBackground(wxEraseEvent& event, wxWindow* win)
 | |
|     {
 | |
|         wxDC& dc = *event.GetDC();
 | |
| 
 | |
|         const wxSize clientSize = win->GetClientSize();
 | |
|         const wxSize bitmapSize = m_bitmapBg.GetSize();
 | |
| 
 | |
|         for ( int x = 0; x < clientSize.x; x += bitmapSize.x )
 | |
|         {
 | |
|             for ( int y = 0; y < clientSize.y; y += bitmapSize.y )
 | |
|             {
 | |
|                 dc.DrawBitmap(m_bitmapBg, x, y);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
| 
 | |
|     // The bitmap used for painting the background if valid.
 | |
|     wxBitmap m_bitmapBg;
 | |
| 
 | |
| 
 | |
|     wxDECLARE_NO_COPY_CLASS(wxCustomBackgroundWindowGenericBase);
 | |
| };
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // wxCustomBackgroundWindow
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| template <class W>
 | |
| class wxCustomBackgroundWindow : public W,
 | |
|                                  public wxCustomBackgroundWindowGenericBase
 | |
| {
 | |
| public:
 | |
|     typedef W BaseWindowClass;
 | |
| 
 | |
|     wxCustomBackgroundWindow() { }
 | |
| 
 | |
| protected:
 | |
|     virtual void DoSetBackgroundBitmap(const wxBitmap& bmp) wxOVERRIDE
 | |
|     {
 | |
|         m_bitmapBg = bmp;
 | |
| 
 | |
|         if ( m_bitmapBg.IsOk() )
 | |
|         {
 | |
|             BaseWindowClass::Bind
 | |
|             (
 | |
|                 wxEVT_ERASE_BACKGROUND,
 | |
|                 &wxCustomBackgroundWindow::OnEraseBackground, this
 | |
|             );
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             BaseWindowClass::Unbind
 | |
|             (
 | |
|                 wxEVT_ERASE_BACKGROUND,
 | |
|                 &wxCustomBackgroundWindow::OnEraseBackground, this
 | |
|             );
 | |
|         }
 | |
|     }
 | |
| 
 | |
| private:
 | |
|     // Event handler for erasing the background which is only used when we have
 | |
|     // a valid background bitmap.
 | |
|     void OnEraseBackground(wxEraseEvent& event)
 | |
|     {
 | |
|         DoEraseBackground(event, this);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     wxDECLARE_NO_COPY_TEMPLATE_CLASS(wxCustomBackgroundWindow, W);
 | |
| };
 | |
| 
 | |
| #endif // _WX_GENERIC_CUSTOMBGWIN_H_
 |