X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/26ac77dbe2e99a137619ce316dd5fbaa5bb81093..b075a3bbfd9ea0cd175456109981d1042730029c:/src/os2/dcclient.cpp diff --git a/src/os2/dcclient.cpp b/src/os2/dcclient.cpp index 7c4950211d..1875e60cfb 100644 --- a/src/os2/dcclient.cpp +++ b/src/os2/dcclient.cpp @@ -34,17 +34,19 @@ struct WXDLLEXPORT wxPaintDCInfo { - wxPaintDCInfo(wxWindow *win, wxDC *dc) + wxPaintDCInfo( wxWindow* pWin + ,wxDC* pDC + ) { - hwnd = win->GetHWND(); - hdc = dc->GetHDC(); - count = 1; + m_hWnd = pWin->GetHWND(); + m_hDC = pDC->GetHDC(); + m_nCount = 1; } - WXHWND hwnd; // window for this DC - WXHDC hdc; // the DC handle - size_t count; // usage count -}; + WXHWND m_hWnd; // window for this DC + WXHDC m_hDC; // the DC handle + size_t m_nCount; // usage count +}; // end of wxPaintDCInfot #include "wx/arrimpl.cpp" @@ -85,13 +87,15 @@ wxWindowDC::wxWindowDC() m_pCanvas = NULL; } -wxWindowDC::wxWindowDC(wxWindow *the_canvas) +wxWindowDC::wxWindowDC( + wxWindow* pTheCanvas +) { ERRORID vError; wxString sError; - m_pCanvas = the_canvas; - m_hDC = (WXHDC) ::WinOpenWindowDC(GetWinHwnd(the_canvas) ); + m_pCanvas = pTheCanvas; + m_hDC = (WXHDC) ::WinOpenWindowDC(GetWinHwnd(pTheCanvas) ); m_nDCCount++; // // default under PM is that Window and Client DC's are the same @@ -119,7 +123,17 @@ wxWindowDC::wxWindowDC(wxWindow *the_canvas) sError = wxPMErrorToStr(vError); wxLogError("Unable to set current color table. Error: %s\n", sError); } + ::GpiCreateLogColorTable( m_hPS + ,0L + ,LCOLF_RGB + ,0L + ,0L + ,NULL + ); SetBackground(wxBrush(m_pCanvas->GetBackgroundColour(), wxSOLID)); + ::WinQueryWindowRect( GetWinHwnd(m_pCanvas) + ,&m_vRclPaint + ); } wxWindowDC::~wxWindowDC() @@ -153,18 +167,20 @@ wxClientDC::wxClientDC() m_pCanvas = NULL; } -wxClientDC::wxClientDC(wxWindow *the_canvas) +wxClientDC::wxClientDC( + wxWindow* pTheCanvas +) { SIZEL vSizl = { 0,0}; ERRORID vError; wxString sError; - m_pCanvas = the_canvas; + m_pCanvas = pTheCanvas; // // default under PM is that Window and Client DC's are the same // - m_hDC = (WXHDC) ::WinOpenWindowDC(GetWinHwnd(the_canvas)); + m_hDC = (WXHDC) ::WinOpenWindowDC(GetWinHwnd(pTheCanvas)); m_hPS = ::GpiCreatePS( wxGetInstance() ,m_hDC ,&vSizl @@ -184,6 +200,13 @@ wxClientDC::wxClientDC(wxWindow *the_canvas) sError = wxPMErrorToStr(vError); wxLogError("Unable to set current color table. Error: %s\n", sError); } + ::GpiCreateLogColorTable( m_hPS + ,0L + ,LCOLF_RGB + ,0L + ,0L + ,NULL + ); // // Default mode is BM_LEAVEALONE so we make no call Set the mix // @@ -191,7 +214,13 @@ wxClientDC::wxClientDC(wxWindow *the_canvas) ,wxSOLID ) ); -} + // + // Set the DC/PS rectangle + // + ::WinQueryWindowRect( GetWinHwnd(m_pCanvas) + ,&m_vRclPaint + ); +} // end of wxClientDC::wxClientDC wxClientDC::~wxClientDC() { @@ -205,7 +234,7 @@ wxClientDC::~wxClientDC() // m_hDC = 0; } -} +} // end of wxClientDC::~wxClientDC // ---------------------------------------------------------------------------- // wxPaintDC @@ -259,8 +288,8 @@ wxPaintDC::wxPaintDC( if (pInfo) { - m_hDC = pInfo->hdc; - pInfo->count++; + m_hDC = pInfo->m_hDC; + pInfo->m_nCount++; } else // not in cache, create a new one { @@ -272,6 +301,10 @@ wxPaintDC::wxPaintDC( ); if(hPS) { + POINTL vPoint[2]; + LONG lControl; + LONG lColor; + m_hOldPS = m_hPS; m_hPS = hPS; ::GpiCreateLogColorTable( m_hPS @@ -288,10 +321,15 @@ wxPaintDC::wxPaintDC( ,0L ,NULL ); + + ::WinFillRect(hPS, &g_paintStruct, m_pCanvas->GetBackgroundColour().GetPixel()); + ::WinQueryWindowRect( GetWinHwnd(m_pCanvas) + ,&m_vRclPaint + ); } + m_bIsPaintTime = TRUE; m_hDC = (WXHDC) -1; // to satisfy those anonizmous efforts - m_vRclPaint = g_paintStruct; ms_cache.Add(new wxPaintDCInfo(m_pCanvas, this)); } SetBackground(wxBrush(m_pCanvas->GetBackgroundColour(), wxSOLID)); @@ -303,17 +341,17 @@ wxPaintDC::~wxPaintDC() { SelectOldObjects(m_hDC); - size_t index; - wxPaintDCInfo *info = FindInCache(&index); + size_t nIndex; + wxPaintDCInfo* pInfo = FindInCache(&nIndex); - wxCHECK_RET( info, wxT("existing DC should have a cache entry") ); + wxCHECK_RET( pInfo, wxT("existing DC should have a cache entry") ); - if ( !--info->count ) + if ( !--pInfo->m_nCount ) { ::WinEndPaint(m_hPS); m_hPS = m_hOldPS; m_bIsPaintTime = FALSE; - ms_cache.Remove(index); + ms_cache.Remove(nIndex); } //else: cached DC entry is still in use @@ -322,20 +360,23 @@ wxPaintDC::~wxPaintDC() } } -wxPaintDCInfo *wxPaintDC::FindInCache(size_t *index) const +wxPaintDCInfo* wxPaintDC::FindInCache( + size_t* pIndex +) const { - wxPaintDCInfo *info = NULL; - size_t nCache = ms_cache.GetCount(); - for ( size_t n = 0; n < nCache; n++ ) + wxPaintDCInfo* pInfo = NULL; + size_t nCache = ms_cache.GetCount(); + + for (size_t n = 0; n < nCache; n++) { - info = &ms_cache[n]; - if ( info->hwnd == m_pCanvas->GetHWND() ) + pInfo = &ms_cache[n]; + if (pInfo->m_hWnd == m_pCanvas->GetHWND()) { - if ( index ) - *index = n; + if (pIndex) + *pIndex = n; break; } } + return pInfo; +} // end of wxPaintDC::FindInCache - return info; -}