Changes to DC

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_2_BRANCH@7332 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
David Webster
2000-05-01 19:36:32 +00:00
parent 076e41016d
commit 3d3cbc05f6
6 changed files with 298 additions and 118 deletions

View File

@@ -78,148 +78,258 @@ public:
// implement base class pure virtuals
// ----------------------------------
virtual void Clear();
virtual void Clear(void);
virtual bool StartDoc(const wxString& message);
virtual void EndDoc();
virtual bool StartDoc(const wxString& rsMessage);
virtual void EndDoc(void);
virtual void StartPage();
virtual void EndPage();
virtual void StartPage(void);
virtual void EndPage(void);
virtual void SetFont(const wxFont& font);
virtual void SetPen(const wxPen& pen);
virtual void SetBrush(const wxBrush& brush);
virtual void SetBackground(const wxBrush& brush);
virtual void SetBackgroundMode(int mode);
virtual void SetPalette(const wxPalette& palette);
virtual void SetFont(const wxFont& rFont);
virtual void SetPen(const wxPen& rPen);
virtual void SetBrush(const wxBrush& rBrush);
virtual void SetBackground(const wxBrush& rBrush);
virtual void SetBackgroundMode(int nMode);
virtual void SetPalette(const wxPalette& rPalette);
virtual void DestroyClippingRegion();
virtual void DestroyClippingRegion(void);
virtual wxCoord GetCharHeight() const;
virtual wxCoord GetCharWidth() const;
virtual void DoGetTextExtent(const wxString& string,
wxCoord *x, wxCoord *y,
wxCoord *descent = NULL,
wxCoord *externalLeading = NULL,
wxFont *theFont = NULL) const;
virtual wxCoord GetCharHeight(void) const;
virtual wxCoord GetCharWidth(void) const;
virtual void DoGetTextExtent( const wxString& rsString
,wxCoord* pX
,wxCoord* pY
,wxCoord* pDescent = NULL
,wxCoord* pExternalLeading = NULL
,wxFont* pTheFont = NULL
) const;
virtual bool CanDrawBitmap(void) const;
virtual bool CanGetTextExtent(void) const;
virtual int GetDepth(void) const;
virtual wxSize GetPPI(void) const;
virtual bool CanDrawBitmap() const;
virtual bool CanGetTextExtent() const;
virtual int GetDepth() const;
virtual wxSize GetPPI() const;
virtual void SetMapMode(int mode);
virtual void SetUserScale(double x, double y);
virtual void SetSystemScale(double x, double y);
virtual void SetLogicalScale(double x, double y);
virtual void SetLogicalOrigin(wxCoord x, wxCoord y);
virtual void SetDeviceOrigin(wxCoord x, wxCoord y);
virtual void SetAxisOrientation(bool xLeftRight, bool yBottomUp);
virtual void SetLogicalFunction(int function);
virtual void SetMapMode(int nMode);
virtual void SetUserScale( double dX
,double dY
);
virtual void SetSystemScale( double dX
,double dY
);
virtual void SetLogicalScale( double dX
,double dY
);
virtual void SetLogicalOrigin( wxCoord vX
,wxCoord vY
);
virtual void SetDeviceOrigin( wxCoord vX
,wxCoord vY
);
virtual void SetAxisOrientation( bool bXLeftRight
,bool bYBottomUp
);
virtual void SetLogicalFunction(int nFunction);
// implementation from now on
// --------------------------
virtual void SetRop(WXHDC cdc);
virtual void DoClipping(WXHDC cdc);
virtual void SelectOldObjects(WXHDC dc);
virtual void SetRop(WXHDC hCdc);
virtual void SelectOldObjects(WXHDC hDc);
wxWindow *GetWindow() const { return m_canvas; }
void SetWindow(wxWindow *win) { m_canvas = win; }
wxWindow* GetWindow(void) const { return m_pCanvas; }
void SetWindow(wxWindow* pWin) { m_pCanvas = pWin; }
WXHDC GetHDC() const { return m_hDC; }
void SetHDC(WXHDC dc, bool bOwnsDC = FALSE)
WXHDC GetHDC(void) const { return m_hDC; }
void SetHDC( WXHDC hDc
,bool bOwnsDC = FALSE
)
{
m_hDC = dc;
m_hDC = hDc;
m_bOwnsDC = bOwnsDC;
}
const wxBitmap& GetSelectedBitmap(void) const { return m_vSelectedBitmap; }
wxBitmap& GetSelectedBitmap(void) { return m_vSelectedBitmap; }
protected:
virtual void DoFloodFill(wxCoord x, wxCoord y, const wxColour& col,
int style = wxFLOOD_SURFACE);
virtual void DoFloodFill( wxCoord vX
,wxCoord vY
,const wxColour& rCol
,int nStyle = wxFLOOD_SURFACE
);
virtual bool DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const;
virtual bool DoGetPixel( wxCoord vX
,wxCoord vY
,wxColour* pCol
) const;
virtual void DoDrawPoint(wxCoord x, wxCoord y);
virtual void DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2);
virtual void DoDrawPoint( wxCoord vX
,wxCoord vY
);
virtual void DoDrawLine( wxCoord vX1
,wxCoord vY1
,wxCoord vX2
,wxCoord vY2
);
virtual void DoDrawArc(wxCoord x1, wxCoord y1,
wxCoord x2, wxCoord y2,
wxCoord xc, wxCoord yc);
virtual void DoDrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h,
double sa, double ea);
virtual void DoDrawArc( wxCoord vX1
,wxCoord vY1
,wxCoord vX2
,wxCoord vY2
,wxCoord vXc
,wxCoord vYc
);
virtual void DoDrawCheckMark( wxCoord vX
,wxCoord vY
,wxCoord vWidth
,wxCoord vHeight
);
virtual void DoDrawEllipticArc( wxCoord vX
,wxCoord vY
,wxCoord vW
,wxCoord vH
,double dSa
,double dEa
);
virtual void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
virtual void DoDrawRoundedRectangle(wxCoord x, wxCoord y,
wxCoord width, wxCoord height,
double radius);
virtual void DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
virtual void DoDrawRectangle( wxCoord vX
,wxCoord vY
,wxCoord vWidth
,wxCoord vHeight
);
virtual void DoDrawRoundedRectangle( wxCoord vX
,wxCoord vY
,wxCoord vWidth
,wxCoord vHeight
,double dRadius
);
virtual void DoDrawEllipse( wxCoord vX
,wxCoord vY
,wxCoord vWidth
,wxCoord vHeight
);
virtual void DoCrossHair(wxCoord x, wxCoord y);
virtual void DoCrossHair( wxCoord vX
,wxCoord vY
);
virtual void DoDrawIcon(const wxIcon& icon, wxCoord x, wxCoord y);
virtual void DoDrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y,
bool useMask = FALSE);
virtual void DoDrawIcon( const wxIcon& rIcon
,wxCoord vX
,wxCoord vY
);
virtual void DoDrawBitmap( const wxBitmap& rBmp
,wxCoord vX
,wxCoord vY
,bool bUseMask = FALSE
);
virtual void DoDrawText(const wxString& text, wxCoord x, wxCoord y);
virtual void DoDrawRotatedText(const wxString& text, wxCoord x, wxCoord y,
double angle);
virtual void DoDrawText( const wxString& rsText
,wxCoord vX
,wxCoord vY
);
virtual void DoDrawRotatedText( const wxString& rsText
,wxCoord vX
,wxCoord vY
,double dAngle
);
virtual bool DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
wxDC *source, wxCoord xsrc, wxCoord ysrc,
int rop = wxCOPY, bool useMask = FALSE);
virtual bool DoBlit( wxCoord vXdest
,wxCoord vYdest
,wxCoord vWidth
,wxCoord vHeight
,wxDC* pSource
,wxCoord vXsrc
,wxCoord vYsrc
,int nRop = wxCOPY
,bool bUseMask = FALSE
);
// this is gnarly - we can't even call this function DoSetClippingRegion()
// because of virtual function hiding
virtual void DoSetClippingRegionAsRegion(const wxRegion& region);
virtual void DoSetClippingRegion(wxCoord x, wxCoord y,
wxCoord width, wxCoord height);
virtual void DoGetClippingRegion(wxCoord *x, wxCoord *y,
wxCoord *width, wxCoord *height)
virtual void DoSetClippingRegionAsRegion(const wxRegion& rRegion);
virtual void DoSetClippingRegion( wxCoord vX
,wxCoord vY
,wxCoord vWidth
,wxCoord vHeight
);
virtual void DoGetClippingRegion( wxCoord* pX
,wxCoord* pY
,wxCoord* pWidth
,wxCoord* pHeight)
{
GetClippingBox(x, y, width, height);
GetClippingBox( pX
,pY
,pWidth
,pHeight
);
}
virtual void DoGetSize(int *width, int *height) const;
virtual void DoGetSizeMM(int* width, int* height) const;
virtual void DoGetSize( int* pWidth
,int* pHeight
) const;
virtual void DoGetSizeMM( int* pWidth
,int* pHeight
) const;
virtual void DoDrawLines(int n, wxPoint points[],
wxCoord xoffset, wxCoord yoffset);
virtual void DoDrawPolygon(int n, wxPoint points[],
wxCoord xoffset, wxCoord yoffset,
int fillStyle = wxODDEVEN_RULE);
virtual void DoDrawLines( int n
,wxPoint vaPoints[]
,wxCoord vXoffset
,wxCoord yYoffset
);
virtual void DoDrawPolygon( int n
,wxPoint vaPoints[]
,wxCoord vXoffset
,wxCoord vYoffset
,int nFillStyle = wxODDEVEN_RULE
);
#if wxUSE_SPLINES
virtual void DoDrawSpline(wxList *points);
virtual void DoDrawSpline(wxList* pPoints);
#endif // wxUSE_SPLINES
// OS2-specific member variables
int m_windowExtX;
int m_windowExtY;
//
// common part of DoDrawText() and DoDrawRotatedText()
//
void DrawAnyText( const wxString& rsText
,wxCoord vX
,wxCoord vY
);
// OS2-specific member variables ?? do we even need this under OS/2?
int m_nWindowExtX;
int m_nWindowExtY;
//
// for use in some generic code
//
float m_scaleFactor;
//
// the window associated with this DC (may be NULL)
wxWindow *m_canvas;
wxBitmap m_selectedBitmap;
//
wxWindow* m_pCanvas;
wxBitmap m_vSelectedBitmap;
//
// TRUE => DeleteDC() in dtor, FALSE => only ReleaseDC() it
bool m_bOwnsDC:1;
//
bool m_bOwnsDC:1;
//
// our HDC and its usage count: we only free it when the usage count drops
// to 0
WXHDC m_hDC;
int m_hDCCount;
//
WXHDC m_hDC;
int m_nDCCount;
//
// Store all old GDI objects when do a SelectObject, so we can select them
// back in (this unselecting user's objects) so we can safely delete the
// DC.
WXHBITMAP m_oldBitmap;
WXHPEN m_oldPen;
WXHBRUSH m_oldBrush;
WXHFONT m_oldFont;
WXHPALETTE m_oldPalette;
float m_scaleFactor; // wxPSDC wants to have this. Will disappear.
//
WXHBITMAP m_hOldBitmap;
WXHPEN m_hOldPen;
WXHBRUSH m_hOldBrush;
WXHFONT m_hOldFont;
WXHPALETTE m_hOldPalette;
};
#endif
// _WX_DC_H_

View File

@@ -42,6 +42,11 @@ static const int VIEWPORT_EXTENT = 1000;
static const int MM_POINTS = 9;
static const int MM_METRIC = 10;
// usually this is defined in math.h
#ifndef M_PI
static const double M_PI = 3.14159265358979323846;
#endif // M_PI
// ---------------------------------------------------------------------------
// private functions
// ---------------------------------------------------------------------------

View File

@@ -82,14 +82,14 @@ static RECT g_paintStruct;
wxWindowDC::wxWindowDC()
{
m_canvas = NULL;
m_pCanvas = NULL;
}
wxWindowDC::wxWindowDC(wxWindow *the_canvas)
{
m_canvas = the_canvas;
m_pCanvas = the_canvas;
m_hDC = (WXHDC) ::WinOpenWindowDC(GetWinHwnd(the_canvas) );
m_hDCCount++;
m_nDCCount++;
//
// default under PM is that Window and Client DC's are the same
// so we offer a separate Presentation Space to use for the
@@ -103,12 +103,12 @@ wxWindowDC::wxWindowDC(wxWindow *the_canvas)
);
::GpiAssociate(m_hPS, NULLHANDLE);
::GpiAssociate(m_hPS, m_hDC);
SetBackground(wxBrush(m_canvas->GetBackgroundColour(), wxSOLID));
SetBackground(wxBrush(m_pCanvas->GetBackgroundColour(), wxSOLID));
}
wxWindowDC::~wxWindowDC()
{
if (m_canvas && m_hDC)
if (m_pCanvas && m_hDC)
{
SelectOldObjects(m_hDC);
@@ -123,7 +123,7 @@ wxWindowDC::~wxWindowDC()
m_hDC = NULLHANDLE;
}
m_hDCCount--;
m_nDCCount--;
}
// ----------------------------------------------------------------------------
@@ -132,12 +132,12 @@ wxWindowDC::~wxWindowDC()
wxClientDC::wxClientDC()
{
m_canvas = NULL;
m_pCanvas = NULL;
}
wxClientDC::wxClientDC(wxWindow *the_canvas)
{
m_canvas = the_canvas;
m_pCanvas = the_canvas;
//
// default under PM is that Window and Client DC's are the same
@@ -147,12 +147,12 @@ wxClientDC::wxClientDC(wxWindow *the_canvas)
//
// Default mode is BM_LEAVEALONE so we make no call Set the mix
//
SetBackground(wxBrush(m_canvas->GetBackgroundColour(), wxSOLID));
SetBackground(wxBrush(m_pCanvas->GetBackgroundColour(), wxSOLID));
}
wxClientDC::~wxClientDC()
{
if ( m_canvas && GetHdc() )
if ( m_pCanvas && GetHdc() )
{
SelectOldObjects(m_hDC);
@@ -187,7 +187,7 @@ wxArrayDCInfo wxPaintDC::ms_cache;
wxPaintDC::wxPaintDC()
{
m_canvas = NULL;
m_pCanvas = NULL;
m_hDC = 0;
}
@@ -204,7 +204,7 @@ wxPaintDC::wxPaintDC(wxWindow *canvas)
}
#endif // __WXDEBUG__
m_canvas = canvas;
m_pCanvas = canvas;
// do we have a DC for this window in the cache?
wxPaintDCInfo *info = FindInCache();
@@ -215,10 +215,10 @@ wxPaintDC::wxPaintDC(wxWindow *canvas)
}
else // not in cache, create a new one
{
m_hDC = (WXHDC)::WinBeginPaint(GetWinHwnd(m_canvas), NULLHANDLE, &g_paintStruct);
ms_cache.Add(new wxPaintDCInfo(m_canvas, this));
m_hDC = (WXHDC)::WinBeginPaint(GetWinHwnd(m_pCanvas), NULLHANDLE, &g_paintStruct);
ms_cache.Add(new wxPaintDCInfo(m_pCanvas, this));
}
SetBackground(wxBrush(m_canvas->GetBackgroundColour(), wxSOLID));
SetBackground(wxBrush(m_pCanvas->GetBackgroundColour(), wxSOLID));
}
wxPaintDC::~wxPaintDC()
@@ -252,7 +252,7 @@ wxPaintDCInfo *wxPaintDC::FindInCache(size_t *index) const
for ( size_t n = 0; n < nCache; n++ )
{
info = &ms_cache[n];
if ( info->hwnd == m_canvas->GetHWND() )
if ( info->hwnd == m_pCanvas->GetHWND() )
{
if ( index )
*index = n;

View File

@@ -77,13 +77,13 @@ void wxMemoryDC::SelectObject( const wxBitmap& bitmap )
void wxMemoryDC::DoGetSize( int *width, int *height ) const
{
if (!m_selectedBitmap.Ok())
if (!m_vSelectedBitmap.Ok())
{
*width = 0; *height = 0;
return;
}
*width = m_selectedBitmap.GetWidth();
*height = m_selectedBitmap.GetHeight();
*width = m_vSelectedBitmap.GetWidth();
*height = m_vSelectedBitmap.GetHeight();
};

View File

@@ -469,17 +469,61 @@ wxStatusBar* wxFrame::OnCreateStatusBar(
)
{
wxStatusBar* pStatusBar = NULL;
SWP vSwp;
ERRORID vError;
wxString sError;
pStatusBar = wxFrameBase::OnCreateStatusBar( nNumber
,lulStyle
,vId
,rName
);
//
// The default parent set for the Statusbar is m_hWnd which, of course,
// is the handle to the client window of the frame. We don't want that,
// so we have to set the parent to actually be the Frame.
//
::WinSetParent(pStatusBar->GetHWND(), m_hFrame, FALSE);
{
vError = ::WinGetLastError(vHabmain);
sError = wxPMErrorToStr(vError);
wxLogError("Error setting parent for submenu. Error: %s\n", sError);
return NULL;
}
//
// Also we need to reset it positioning to enable the SHOW attribute
//
if (!::WinQueryWindowPos(pStatusBar->GetHWND(), &vSwp))
{
vError = ::WinGetLastError(vHabmain);
sError = wxPMErrorToStr(vError);
wxLogError("Error setting parent for submenu. Error: %s\n", sError);
return NULL;
}
if (!::WinSetWindowPos( pStatusBar->GetHWND()
,HWND_TOP
,vSwp.cx
,vSwp.cy
,vSwp.x
,vSwp.y
,SWP_SIZE | SWP_MOVE | SWP_SHOW | SWP_ZORDER
))
{
vError = ::WinGetLastError(vHabmain);
sError = wxPMErrorToStr(vError);
wxLogError("Error setting parent for submenu. Error: %s\n", sError);
return NULL;
}
return pStatusBar;
} // end of wxFrame::OnCreateStatusBar
void wxFrame::PositionStatusBar()
{
SWP vSwp;
ERRORID vError;
wxString sError;
//
// Native status bar positions itself
//
@@ -509,6 +553,27 @@ void wxFrame::PositionStatusBar()
,nWidth
,nStatbarHeight
);
if (!::WinQueryWindowPos(m_frameStatusBar->GetHWND(), &vSwp))
{
vError = ::WinGetLastError(vHabmain);
sError = wxPMErrorToStr(vError);
wxLogError("Error setting parent for submenu. Error: %s\n", sError);
return;
}
if (!::WinSetWindowPos( m_frameStatusBar->GetHWND()
,HWND_TOP
,nStatbarWidth
,nStatbarHeight
,vSwp.x
,vSwp.y
,SWP_SIZE | SWP_MOVE | SWP_SHOW | SWP_ZORDER
))
{
vError = ::WinGetLastError(vHabmain);
sError = wxPMErrorToStr(vError);
wxLogError("Error setting parent for submenu. Error: %s\n", sError);
return;
}
}
} // end of wxFrame::PositionStatusBar
#endif // wxUSE_STATUSBAR

View File

@@ -269,8 +269,8 @@ void wxMetafileDC::SetMapMode(int mode)
break;
}
}
m_windowExtX = 100;
m_windowExtY = 100;
m_nWindowExtX = 100;
m_nWindowExtY = 100;
}
#ifdef __WIN32__