home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2240.zip / wxWindows-2.4.0 / src / generic / dcbuffer.cpp < prev    next >
C/C++ Source or Header  |  2002-03-17  |  3KB  |  110 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Name:        dcbuffer.cpp
  3. // Purpose:     wxBufferedDC class
  4. // Author:      Ron Lee <ron@debian.org>
  5. // Modified by:
  6. // Created:     16/03/02
  7. // RCS-ID:      $Id: dcbuffer.cpp,v 1.2 2002/03/17 07:38:01 RL Exp $
  8. // Copyright:   (c) Ron Lee
  9. // Licence:     wxWindows licence
  10. /////////////////////////////////////////////////////////////////////////////
  11.  
  12.  
  13. #ifdef __GNUG__
  14.     #pragma implementation "dcbuffer.h"
  15. #endif
  16.  
  17. #include "wx/wxprec.h"
  18.  
  19. #ifdef __BORLANDC__
  20.     #pragma hdrstop
  21. #endif
  22.  
  23. #ifndef WX_PRECOMP
  24. #include "wx/window.h"
  25. #endif
  26.  
  27. #include "wx/dcbuffer.h"
  28.  
  29.  
  30. // ==============================================================
  31. //   Double buffering helper.
  32. // --------------------------------------------------------------
  33.  
  34. wxBufferedDC::wxBufferedDC( wxDC *dc, const wxBitmap &buffer )
  35.     : m_dc( dc )
  36.     , m_buffer( buffer )
  37. {
  38.     SelectObject( m_buffer );
  39. }
  40.  
  41. wxBufferedDC::wxBufferedDC( wxDC *dc, const wxSize &area )
  42.     : m_dc( dc )
  43.     , m_buffer( area.GetWidth(), area.GetHeight() )
  44. {
  45.     SelectObject( m_buffer );
  46. }
  47.  
  48. wxBufferedDC::~wxBufferedDC()
  49. {
  50.     if( m_dc != 0 )
  51.     {
  52.         UnMask();
  53.     }
  54. }
  55.  
  56. void wxBufferedDC::Init( wxDC *dc, const wxBitmap &buffer )
  57. {
  58.     wxASSERT_MSG( m_dc == 0 && m_buffer == wxNullBitmap,
  59.                   _T("wxBufferedDC already initialised") );
  60.  
  61.     m_dc = dc;
  62.     m_buffer = buffer;
  63.     SelectObject( m_buffer );
  64. }
  65.  
  66. void wxBufferedDC::Init( wxDC *dc, const wxSize &area )
  67. {
  68.     wxASSERT_MSG( m_dc == 0 && m_buffer == wxNullBitmap,
  69.                   _T("wxBufferedDC already initialised") );
  70.  
  71.     m_dc = dc;
  72.     m_buffer = wxBitmap( area.GetWidth(), area.GetHeight() );
  73.     SelectObject( m_buffer );
  74. }
  75.  
  76. void wxBufferedDC::UnMask()
  77. {
  78.     wxASSERT_MSG( m_dc != 0, _T("No low level DC associated with buffer (anymore)") );
  79.  
  80.     m_dc->Blit( 0, 0, m_buffer.GetWidth(), m_buffer.GetHeight(), this, 0, 0 );
  81.     m_dc = 0;
  82. }
  83.  
  84.  
  85. // ==============================================================
  86. //   Double buffered PaintDC.
  87. // --------------------------------------------------------------
  88.  
  89. wxBufferedPaintDC::wxBufferedPaintDC( wxWindow *window, const wxBitmap &buffer )
  90.     : m_paintdc( window )
  91. {
  92.     window->PrepareDC( m_paintdc );
  93.  
  94.     if( buffer != wxNullBitmap )
  95.         Init( &m_paintdc, buffer );
  96.     else
  97.         Init( &m_paintdc, window->GetClientSize() );
  98. }
  99.  
  100. wxBufferedPaintDC::~wxBufferedPaintDC()
  101. {
  102.         // We must UnMask here, else by the time the base class
  103.         // does it, the PaintDC will have already been destroyed.
  104.  
  105.     UnMask();
  106. }
  107.  
  108.  
  109. // vi:sts=4:sw=4:et
  110.