From 3d3cbc05f62af4c13b1a1fb7ad59d2df884c6da9 Mon Sep 17 00:00:00 2001 From: David Webster Date: Mon, 1 May 2000 19:36:32 +0000 Subject: [PATCH] Changes to DC git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_2_BRANCH@7332 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/os2/dc.h | 304 +++++++++++++++++++++++++++++-------------- src/os2/dc.cpp | 5 + src/os2/dcclient.cpp | 32 ++--- src/os2/dcmemory.cpp | 6 +- src/os2/frame.cpp | 65 +++++++++ src/os2/metafile.cpp | 4 +- 6 files changed, 298 insertions(+), 118 deletions(-) diff --git a/include/wx/os2/dc.h b/include/wx/os2/dc.h index 2df64604bc..69ef67a1ae 100644 --- a/include/wx/os2/dc.h +++ b/include/wx/os2/dc.h @@ -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_ diff --git a/src/os2/dc.cpp b/src/os2/dc.cpp index e686cfbe1e..2d7584d14e 100644 --- a/src/os2/dc.cpp +++ b/src/os2/dc.cpp @@ -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 // --------------------------------------------------------------------------- diff --git a/src/os2/dcclient.cpp b/src/os2/dcclient.cpp index 9fa35aa9d7..cee1da7214 100644 --- a/src/os2/dcclient.cpp +++ b/src/os2/dcclient.cpp @@ -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; diff --git a/src/os2/dcmemory.cpp b/src/os2/dcmemory.cpp index 1ab4a99f27..9e6515d0bf 100644 --- a/src/os2/dcmemory.cpp +++ b/src/os2/dcmemory.cpp @@ -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(); }; diff --git a/src/os2/frame.cpp b/src/os2/frame.cpp index 8459cad963..420c18349b 100644 --- a/src/os2/frame.cpp +++ b/src/os2/frame.cpp @@ -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 diff --git a/src/os2/metafile.cpp b/src/os2/metafile.cpp index 4cd1db8306..bb9fa9719d 100644 --- a/src/os2/metafile.cpp +++ b/src/os2/metafile.cpp @@ -269,8 +269,8 @@ void wxMetafileDC::SetMapMode(int mode) break; } } - m_windowExtX = 100; - m_windowExtY = 100; + m_nWindowExtX = 100; + m_nWindowExtY = 100; } #ifdef __WIN32__