Added wxBufferedDC class.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14651 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Ron Lee
2002-03-17 06:34:06 +00:00
parent 33f71b3cf4
commit 67e2efca87
22 changed files with 276 additions and 0 deletions

View File

@@ -73,6 +73,7 @@ calctrl.cpp Generic
caret.cpp Generic NotMSW,NotMicro
choicdgg.cpp Generic
colrdlgg.cpp Generic Generic
dcbuffer.cpp Generic
dcpsg.cpp Generic
dirctrlg.cpp Generic
dirdlgg.cpp Generic NotWin32,NotOS2
@@ -782,6 +783,7 @@ dbgrid.h WXH
dbtable.h WXH Base
dc.h WXH
dcclient.h WXH
dcbuffer.h WXH
dcmemory.h WXH
dcprint.h WXH
dcps.h WXH

103
include/wx/dcbuffer.h Normal file
View File

@@ -0,0 +1,103 @@
/////////////////////////////////////////////////////////////////////////////
// Name: wx/dcbuffer.h
// Purpose: wxBufferedDC class
// Author: Ron Lee <ron@debian.org>
// Modified by:
// Created: 16/03/02
// RCS-ID: $Id$
// Copyright: (c) Ron Lee
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_DCBUFFER_H_
#define _WX_DCBUFFER_H_
#ifdef __GNUG__
#pragma interface "dcbuffer.h"
#endif
#include "wx/dcmemory.h"
// ==============================================================
// Double buffering helper.
// --------------------------------------------------------------
class wxBufferedDC : public wxMemoryDC
{
private:
// Without the existence of a wxNullDC, this must be
// a pointer, else it could probably be a reference.
wxDC *m_dc;
wxBitmap m_buffer;
public:
// Default ctor, must subsequently call Init for
// two stage construction.
wxBufferedDC()
: m_dc( 0 )
{}
// Construct a wxBufferedDC using a user supplied buffer.
wxBufferedDC( wxDC *dc, const wxBitmap &buffer );
// Construct a wxBufferedDC with an internal buffer of 'area'
// (where area is usually something like the size of the window
// being buffered)
wxBufferedDC( wxDC *dc, const wxSize &area );
// default copy ctor ok.
// The usually desired action in the dtor is to blit the buffer.
~wxBufferedDC();
// These reimplement the actions of the ctors for
// two stage creation, but are not used by the ctors
// themselves to save a few cpu cycles.
void Init( wxDC *dc, const wxBitmap &bitmap );
void Init( wxDC *dc, const wxSize &area );
// Blits the buffer to the dc, and detaches the dc from
// the buffer. Usually called in the dtor or by the dtor
// of derived classes if the BufferedDC must blit before
// the derived class (which may own the dc it's blitting
// to) is destroyed.
void UnMask();
};
// ==============================================================
// Double buffered PaintDC.
// --------------------------------------------------------------
// Creates a double buffered wxPaintDC, optionally allowing the
// user to specify their own buffer to use.
class wxBufferedPaintDC : public wxBufferedDC
{
private:
wxPaintDC m_paintdc;
public:
wxBufferedPaintDC( wxWindow *window, const wxBitmap &buffer = wxNullBitmap );
// default copy ctor ok.
~wxBufferedPaintDC();
};
#endif // _WX_DCBUFFER_H_
// vi:sts=4:sw=4:et

103
src/generic/dcbuffer.cpp Normal file
View File

@@ -0,0 +1,103 @@
/////////////////////////////////////////////////////////////////////////////
// Name: dcbuffer.cpp
// Purpose: wxBufferedDC class
// Author: Ron Lee <ron@debian.org>
// Modified by:
// Created: 16/03/02
// RCS-ID: $Id$
// Copyright: (c) Ron Lee
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#pragma implementation "dcbuffer.h"
#endif
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#include "wx/dcbuffer.h"
// ==============================================================
// Double buffering helper.
// --------------------------------------------------------------
wxBufferedDC::wxBufferedDC( wxDC *dc, const wxBitmap &buffer )
: m_dc( dc )
, m_buffer( buffer )
{
SelectObject( m_buffer );
}
wxBufferedDC::wxBufferedDC( wxDC *dc, const wxSize &area )
: m_dc( dc )
, m_buffer( area.GetWidth(), area.GetHeight() )
{
SelectObject( m_buffer );
}
wxBufferedDC::~wxBufferedDC()
{
if( m_dc != 0 )
{
UnMask();
}
}
void wxBufferedDC::Init( wxDC *dc, const wxBitmap &buffer )
{
wxASSERT_MSG( m_dc == 0 && m_buffer == wxNullBitmap,
_T("wxBufferedDC already initialised") );
m_dc = dc;
m_buffer = buffer;
SelectObject( m_buffer );
}
void wxBufferedDC::Init( wxDC *dc, const wxSize &area )
{
wxASSERT_MSG( m_dc == 0 && m_buffer == wxNullBitmap,
_T("wxBufferedDC already initialised") );
m_dc = dc;
m_buffer = wxBitmap( area.GetWidth(), area.GetHeight() );
SelectObject( m_buffer );
}
void wxBufferedDC::UnMask()
{
wxASSERT_MSG( m_dc != 0, _T("No low level DC associated with buffer (anymore)") );
m_dc->Blit( 0, 0, m_buffer.GetWidth(), m_buffer.GetHeight(), this, 0, 0 );
m_dc = 0;
}
// ==============================================================
// Double buffered PaintDC.
// --------------------------------------------------------------
wxBufferedPaintDC::wxBufferedPaintDC( wxWindow *window, const wxBitmap &buffer )
: m_paintdc( window )
{
window->PrepareDC( m_paintdc );
if( buffer != wxNullBitmap )
Init( &m_paintdc, buffer );
else
Init( &m_paintdc, window->GetClientSize() );
}
wxBufferedPaintDC::~wxBufferedPaintDC()
{
// We must UnMask here, else by the time the base class
// does it, the PaintDC will have already been destroyed.
UnMask();
}
// vi:sts=4:sw=4:et

View File

@@ -7,6 +7,7 @@ ALL_SOURCES = \
generic/caret.cpp \
generic/choicdgg.cpp \
generic/colrdlgg.cpp \
generic/dcbuffer.cpp \
generic/dcpsg.cpp \
generic/dirctrlg.cpp \
generic/dirdlgg.cpp \
@@ -306,6 +307,7 @@ ALL_HEADERS = \
dbkeyg.h \
dbtable.h \
dc.h \
dcbuffer.h \
dcclient.h \
dcmemory.h \
dcprint.h \
@@ -751,6 +753,7 @@ GUIOBJS = \
caret.o \
choicdgg.o \
colrdlgg.o \
dcbuffer.o \
dcpsg.o \
dirctrlg.o \
dirdlgg.o \
@@ -862,6 +865,7 @@ GUI_LOWLEVEL_OBJS = \
caret.o \
choicdgg.o \
colrdlgg.o \
dcbuffer.o \
dcpsg.o \
dirctrlg.o \
dirdlgg.o \

View File

@@ -7,6 +7,7 @@ ALL_SOURCES = \
generic/caret.cpp \
generic/choicdgg.cpp \
generic/colrdlgg.cpp \
generic/dcbuffer.cpp \
generic/dcpsg.cpp \
generic/dirctrlg.cpp \
generic/dirdlgg.cpp \
@@ -306,6 +307,7 @@ ALL_HEADERS = \
dbkeyg.h \
dbtable.h \
dc.h \
dcbuffer.h \
dcclient.h \
dcmemory.h \
dcprint.h \
@@ -751,6 +753,7 @@ GUIOBJS = \
caret.o \
choicdgg.o \
colrdlgg.o \
dcbuffer.o \
dcpsg.o \
dirctrlg.o \
dirdlgg.o \
@@ -862,6 +865,7 @@ GUI_LOWLEVEL_OBJS = \
caret.o \
choicdgg.o \
colrdlgg.o \
dcbuffer.o \
dcpsg.o \
dirctrlg.o \
dirdlgg.o \

View File

@@ -6,6 +6,7 @@ ALL_SOURCES = \
generic/caret.cpp \
generic/choicdgg.cpp \
generic/colrdlgg.cpp \
generic/dcbuffer.cpp \
generic/dcpsg.cpp \
generic/dirctrlg.cpp \
generic/dirdlgg.cpp \
@@ -313,6 +314,7 @@ ALL_HEADERS = \
dbkeyg.h \
dbtable.h \
dc.h \
dcbuffer.h \
dcclient.h \
dcmemory.h \
dcprint.h \
@@ -777,6 +779,7 @@ GENERICOBJS = \
caret.o \
choicdgg.o \
colrdlgg.o \
dcbuffer.o \
dcpsg.o \
dirctrlg.o \
dirdlgg.o \

View File

@@ -6,6 +6,7 @@ ALL_SOURCES = \
generic/caret.cpp \
generic/choicdgg.cpp \
generic/colrdlgg.cpp \
generic/dcbuffer.cpp \
generic/dcpsg.cpp \
generic/dirctrlg.cpp \
generic/dirdlgg.cpp \
@@ -313,6 +314,7 @@ ALL_HEADERS = \
dbkeyg.h \
dbtable.h \
dc.h \
dcbuffer.h \
dcclient.h \
dcmemory.h \
dcprint.h \
@@ -777,6 +779,7 @@ GENERICOBJS = \
caret.o \
choicdgg.o \
colrdlgg.o \
dcbuffer.o \
dcpsg.o \
dirctrlg.o \
dirdlgg.o \

View File

@@ -7,6 +7,7 @@ ALL_SOURCES = \
generic/caret.cpp \
generic/choicdgg.cpp \
generic/colrdlgg.cpp \
generic/dcbuffer.cpp \
generic/dcpsg.cpp \
generic/dirctrlg.cpp \
generic/dirdlgg.cpp \
@@ -268,6 +269,7 @@ ALL_HEADERS = \
dbkeyg.h \
dbtable.h \
dc.h \
dcbuffer.h \
dcclient.h \
dcmemory.h \
dcprint.h \
@@ -653,6 +655,7 @@ GENERICOBJS = \
caret.o \
choicdgg.o \
colrdlgg.o \
dcbuffer.o \
dcpsg.o \
dirctrlg.o \
dirdlgg.o \

View File

@@ -46,6 +46,7 @@ GENERICOBJS= accel.obj &
caret.obj &
choicdgg.obj &
colrdlgg.obj &
dcbuffer.obj &
dcpsg.obj &
dirctrlg.obj &
dirdlgg.obj &
@@ -934,6 +935,9 @@ choicdgg.obj: $(GENDIR)\choicdgg.cpp
colrdlgg.obj: $(GENDIR)\colrdlgg.cpp
*$(CCC) $(CPPFLAGS) $(IFLAGS) $<
dcbuffer.obj: $(GENDIR)\dcbuffer.cpp
*$(CCC) $(CPPFLAGS) $(IFLAGS) $<
dcpsg.obj: $(GENDIR)\dcpsg.cpp
*$(CCC) $(CPPFLAGS) $(IFLAGS) $<

View File

@@ -6,6 +6,7 @@ ALL_SOURCES = \
generic/calctrl.cpp \
generic/choicdgg.cpp \
generic/colrdlgg.cpp \
generic/dcbuffer.cpp \
generic/dcpsg.cpp \
generic/dirctrlg.cpp \
generic/dirdlgg.cpp \
@@ -268,6 +269,7 @@ ALL_HEADERS = \
dbkeyg.h \
dbtable.h \
dc.h \
dcbuffer.h \
dcclient.h \
dcmemory.h \
dcprint.h \
@@ -745,6 +747,7 @@ GENERICOBJS = \
calctrl.o \
choicdgg.o \
colrdlgg.o \
dcbuffer.o \
dcpsg.o \
dirctrlg.o \
dirdlgg.o \

View File

@@ -6,6 +6,7 @@ ALL_SOURCES = \
generic/caret.cpp \
generic/choicdgg.cpp \
generic/colrdlgg.cpp \
generic/dcbuffer.cpp \
generic/dcpsg.cpp \
generic/dirctrlg.cpp \
generic/dirdlgg.cpp \
@@ -297,6 +298,7 @@ ALL_HEADERS = \
dbkeyg.h \
dbtable.h \
dc.h \
dcbuffer.h \
dcclient.h \
dcmemory.h \
dcprint.h \
@@ -738,6 +740,7 @@ GENERICOBJS = \
caret.o \
choicdgg.o \
colrdlgg.o \
dcbuffer.o \
dcpsg.o \
dirctrlg.o \
dirdlgg.o \

View File

@@ -4,6 +4,7 @@ ALL_SOURCES = \
generic/busyinfo.cpp \
generic/calctrl.cpp \
generic/choicdgg.cpp \
generic/dcbuffer.cpp \
generic/dcpsg.cpp \
generic/dirctrlg.cpp \
generic/dragimgg.cpp \
@@ -327,6 +328,7 @@ ALL_HEADERS = \
dbkeyg.h \
dbtable.h \
dc.h \
dcbuffer.h \
dcclient.h \
dcmemory.h \
dcprint.h \
@@ -810,6 +812,7 @@ GENERICOBJS = \
busyinfo.o \
calctrl.o \
choicdgg.o \
dcbuffer.o \
dcpsg.o \
dirctrlg.o \
dragimgg.o \

View File

@@ -74,6 +74,7 @@ DOCDIR = $(WXDIR)\docs
GENERICOBJS= $(MSWDIR)\busyinfo.obj \
$(MSWDIR)\calctrl.obj \
$(MSWDIR)\choicdgg.obj \
$(MSWDIR)\dcbuffer.obj \
$(MSWDIR)\dcpsg.obj \
$(MSWDIR)\dirctrlg.obj \
$(MSWDIR)\dragimgg.obj \
@@ -908,6 +909,8 @@ $(MSWDIR)\calctrl.obj: $(GENDIR)\calctrl.$(SRCSUFF)
$(MSWDIR)\choicdgg.obj: $(GENDIR)\choicdgg.$(SRCSUFF)
$(MSWDIR)\dcbuffer.obj: $(GENDIR)\dcbuffer.$(SRCSUFF)
$(MSWDIR)\dcpsg.obj: $(GENDIR)\dcpsg.$(SRCSUFF)
$(MSWDIR)\dirctrlg.obj: $(GENDIR)\dirctrlg.$(SRCSUFF)

View File

@@ -69,6 +69,7 @@ DOCDIR = $(WXDIR)\docs
GENERICOBJS= $(MSWDIR)\busyinfo.obj \
$(MSWDIR)\calctrl.obj \
$(MSWDIR)\choicdgg.obj \
$(MSWDIR)\dcbuffer.obj \
$(MSWDIR)\dcpsg.obj \
$(MSWDIR)\dirctrlg.obj \
$(MSWDIR)\dirdlgg.obj \
@@ -732,6 +733,8 @@ $(MSWDIR)\calctrl.obj: $(GENDIR)\calctrl.$(SRCSUFF)
$(MSWDIR)\choicdgg.obj: $(GENDIR)\choicdgg.$(SRCSUFF)
$(MSWDIR)\dcbuffer.obj: $(GENDIR)\dcbuffer.$(SRCSUFF)
$(MSWDIR)\dcpsg.obj: $(GENDIR)\dcpsg.$(SRCSUFF)
$(MSWDIR)\dirctrlg.obj: $(GENDIR)\dirctrlg.$(SRCSUFF)

View File

@@ -52,6 +52,7 @@ MSWDIR=.
GENERICOBJS= $(GENDIR)\busyinfo.obj \
$(GENDIR)\calctrl.obj \
$(GENDIR)\choicdgg.obj \
$(GENDIR)\dcbuffer.obj \
$(GENDIR)\dcpsg.obj \
$(GENDIR)\dirctrlg.obj \
$(GENDIR)\dirdlgg.obj \
@@ -1339,6 +1340,11 @@ $(GENDIR)/choicdgg.obj: $*.$(SRCSUFF)
$(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
<<
$(GENDIR)/dcbuffer.obj: $*.$(SRCSUFF)
cl @<<
$(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
<<
$(GENDIR)/dcpsg.obj: $*.$(SRCSUFF)
cl @<<
$(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)

View File

@@ -82,6 +82,7 @@ GENERICOBJS = \
$(GENDIR)/busyinfo.$(OBJSUFF) \
$(GENDIR)/calctrl.$(OBJSUFF) \
$(GENDIR)/choicdgg.$(OBJSUFF) \
$(GENDIR)/dcbuffer.$(OBJSUFF) \
$(GENDIR)/dcpsg.$(OBJSUFF) \
$(GENDIR)/dirctrlg.$(OBJSUFF) \
$(GENDIR)/dragimgg.$(OBJSUFF) \

View File

@@ -28,6 +28,7 @@ MSWDIR=$(WXDIR)\src\msw
GENERICOBJS= $(GENDIR)\busyinfo.obj \
$(GENDIR)\calctrl.obj \
$(GENDIR)\choicdgg.obj \
$(GENDIR)\dcbuffer.obj \
$(GENDIR)\dcpsg.obj \
$(GENDIR)\dirctrlg.obj \
$(GENDIR)\dragimgg.obj \

View File

@@ -91,6 +91,7 @@ $(CPPFLAGS) /Fo$@ /c /Tp $<
GENERICOBJS= $(GENDIR)\$D\busyinfo.obj \
$(GENDIR)\$D\calctrl.obj \
$(GENDIR)\$D\choicdgg.obj \
$(GENDIR)\$D\dcbuffer.obj \
$(GENDIR)\$D\dcpsg.obj \
$(GENDIR)\$D\dirctrlg.obj \
$(GENDIR)\$D\dragimgg.obj \

View File

@@ -44,6 +44,7 @@ DOCDIR = $(WXDIR)\docs
GENERICOBJS= busyinfo.obj &
calctrl.obj &
choicdgg.obj &
dcbuffer.obj &
dcpsg.obj &
dirctrlg.obj &
dragimgg.obj &
@@ -1131,6 +1132,9 @@ calctrl.obj: $(GENDIR)\calctrl.cpp
choicdgg.obj: $(GENDIR)\choicdgg.cpp
*$(CCC) $(CPPFLAGS) $(IFLAGS) $<
dcbuffer.obj: $(GENDIR)\dcbuffer.cpp
*$(CCC) $(CPPFLAGS) $(IFLAGS) $<
dcpsg.obj: $(GENDIR)\dcpsg.cpp
*$(CCC) $(CPPFLAGS) $(IFLAGS) $<

View File

@@ -613,6 +613,10 @@ SOURCE=.\generic\colrdlgg.cpp
# End Source File
# Begin Source File
SOURCE=.\generic\dcbuffer.cpp
# End Source File
# Begin Source File
SOURCE=.\generic\dcpsg.cpp
# End Source File
# Begin Source File
@@ -1382,6 +1386,10 @@ SOURCE=..\include\wx\dc.h
# End Source File
# Begin Source File
SOURCE=..\include\wx\dcbuffer.h
# End Source File
# Begin Source File
SOURCE=..\include\wx\dcclient.h
# End Source File
# Begin Source File

View File

@@ -770,6 +770,10 @@ SOURCE=.\generic\choicdgg.cpp
# End Source File
# Begin Source File
SOURCE=.\generic\dcbuffer.cpp
# End Source File
# Begin Source File
SOURCE=.\generic\dcpsg.cpp
# End Source File
# Begin Source File
@@ -1658,6 +1662,10 @@ SOURCE=..\include\wx\dc.h
# End Source File
# Begin Source File
SOURCE=..\include\wx\dcbuffer.h
# End Source File
# Begin Source File
SOURCE=..\include\wx\dcclient.h
# End Source File
# Begin Source File

View File

@@ -38,6 +38,7 @@ ALL_SOURCES = \
generic/caret.cpp \
generic/choicdgg.cpp \
generic/colrdlgg.cpp \
generic/dcbuffer.cpp \
generic/dcpsg.cpp \
generic/dirctrlg.cpp \
generic/dirdlgg.cpp \
@@ -276,6 +277,7 @@ ALL_HEADERS = \
dbkeyg.h \
dbtable.h \
dc.h \
dcbuffer.h \
dcclient.h \
dcmemory.h \
dcprint.h \
@@ -765,6 +767,7 @@ GENERICOBJS = \
caret.o \
choicdgg.o \
colrdlgg.o \
dcbuffer.o \
dcpsg.o \
dirctrlg.o \
dirdlgg.o \