From: David Webster Date: Tue, 7 May 2002 04:56:22 +0000 (+0000) Subject: Mono bitmap processing updates X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/29172908bf90ddd8b70c5195b870745b5af3b7a3?ds=sidebyside Mono bitmap processing updates git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15403 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/os2/dcmemory.h b/include/wx/os2/dcmemory.h index cc81974d4b..f0484a8dee 100644 --- a/include/wx/os2/dcmemory.h +++ b/include/wx/os2/dcmemory.h @@ -23,26 +23,6 @@ public: virtual void SelectObject(const wxBitmap& rBitmap); protected: // override some base class virtuals - 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 DoDrawText( const wxString& rsText - ,wxCoord vX - ,wxCoord vY - ); - virtual void DoDrawLine( wxCoord vX1 - ,wxCoord vY1 - ,wxCoord vX2 - ,wxCoord vY2 - ); virtual void DoGetSize( int* pWidth ,int* pHeight ) const; diff --git a/src/os2/bitmap.cpp b/src/os2/bitmap.cpp index ff5b76535a..944dc33188 100644 --- a/src/os2/bitmap.cpp +++ b/src/os2/bitmap.cpp @@ -939,14 +939,14 @@ wxImage wxBitmap::ConvertToImage() const ,&vSizlPage ,PU_PELS | GPIA_ASSOC ); - if ((hOldBitmap = ::GpiSetBitmap(hPSMem, hBitmap)) == HBM_ERROR) - { - ERRORID vError; - wxString sError; + } + if ((hOldBitmap = ::GpiSetBitmap(hPSMem, hBitmap)) == HBM_ERROR) + { + ERRORID vError; + wxString sError; - vError = ::WinGetLastError(vHabmain); - sError = wxPMErrorToStr(vError); - } + vError = ::WinGetLastError(vHabmain); + sError = wxPMErrorToStr(vError); } // diff --git a/src/os2/dc.cpp b/src/os2/dc.cpp index 133ebb03d6..16cffe65c0 100644 --- a/src/os2/dc.cpp +++ b/src/os2/dc.cpp @@ -1543,20 +1543,20 @@ void wxDC::DoDrawBitmap( (cBmpGreen == cOldGreenFore) && (cBmpBlue == cOldBlueFore)) { - *pucData = cRedFore; + *pucData = cBlueFore; pucData++; *pucData = cGreenFore; pucData++; - *pucData = cBlueFore; + *pucData = cRedFore; pucData++; } else { - *pucData = cRedBack; + *pucData = cBlueBack; pucData++; *pucData = cGreenBack; pucData++; - *pucData = cBlueBack; + *pucData = cRedBack; pucData++; } } @@ -1879,6 +1879,7 @@ void wxDC::SetPen( if (!m_hOldPen) m_hOldPen = m_pen.GetPS(); } + ::GpiSetColor(m_hPS, m_pen.GetColour().GetPixel()); } } diff --git a/src/os2/dcmemory.cpp b/src/os2/dcmemory.cpp index 6383d1a876..7977733bb7 100644 --- a/src/os2/dcmemory.cpp +++ b/src/os2/dcmemory.cpp @@ -24,12 +24,6 @@ IMPLEMENT_DYNAMIC_CLASS(wxMemoryDC, wxDC) -extern void wxLoadBitmapWithData( HPS hPS - ,HBITMAP hBitmap - ,int nWidth - ,int nHeight - ); - ///////////////////////////////////////////////////////////////////////////// // Memory DC ///////////////////////////////////////////////////////////////////////////// @@ -157,20 +151,18 @@ void wxMemoryDC::SelectObject( WXHBITMAP hBmp = rBitmap.GetHBITMAP(); if (!hBmp) + { + m_hOldBitmap = (WXHBITMAP)::GpiSetBitmap(m_hPS, NULLHANDLE); return; - + } m_vSelectedBitmap.SetSelectedInto(this); - hBmp = (WXHBITMAP)::GpiSetBitmap(m_hPS, (HBITMAP)hBmp); + m_hOldBitmap = (WXHBITMAP)::GpiSetBitmap(m_hPS, (HBITMAP)hBmp); - if (hBmp == HBM_ERROR) + if (m_hOldBitmap == HBM_ERROR) { wxLogLastError(wxT("SelectObject(memDC, bitmap)")); wxFAIL_MSG(wxT("Couldn't select a bitmap into wxMemoryDC")); } - else if (!m_hOldBitmap) - { - m_hOldBitmap = hBmp; - } } // end of wxMemoryDC::SelectObject void wxMemoryDC::DoGetSize( @@ -188,121 +180,3 @@ void wxMemoryDC::DoGetSize( *pHeight = m_vSelectedBitmap.GetHeight(); } // end of wxMemoryDC::DoGetSize -void wxMemoryDC::DoDrawRectangle( - wxCoord vX -, wxCoord vY -, wxCoord vWidth -, wxCoord vHeight -) -{ - wxDC::DoDrawRectangle(vX, vY, vWidth, vHeight); - - wxLoadBitmapWithData( m_hPS - ,(HBITMAP)m_vSelectedBitmap.GetHBITMAP() - ,m_vSelectedBitmap.GetWidth() - ,m_vSelectedBitmap.GetHeight() - ); -} // end of wxMemoryDC::DoDrawRectangle - -void wxMemoryDC::DoDrawRoundedRectangle( - wxCoord vX -, wxCoord vY -, wxCoord vWidth -, wxCoord vHeight -, double dRadius -) -{ - wxDC::DoDrawRoundedRectangle(vX, vY, vWidth, vHeight, dRadius); - - wxLoadBitmapWithData( m_hPS - ,(HBITMAP)m_vSelectedBitmap.GetHBITMAP() - ,m_vSelectedBitmap.GetWidth() - ,m_vSelectedBitmap.GetHeight() - ); -} // end of wxMemoryDC::DoDrawRoundedRectangle - -void wxMemoryDC::DoDrawText( - const wxString& rsText -, wxCoord vX -, wxCoord vY -) -{ - wxDC::DoDrawText(rsText, vX, vY); - - wxLoadBitmapWithData( m_hPS - ,(HBITMAP)m_vSelectedBitmap.GetHBITMAP() - ,m_vSelectedBitmap.GetWidth() - ,m_vSelectedBitmap.GetHeight() - ); -} // end of wxMemoryDC::DoDrawRectangle - -void wxMemoryDC::DoDrawLine( - wxCoord vX1 -, wxCoord vY1 -, wxCoord vX2 -, wxCoord vY2 -) -{ - wxDC::DoDrawLine(vX1, vY1, vX2, vY2); - - wxLoadBitmapWithData( m_hPS - ,(HBITMAP)m_vSelectedBitmap.GetHBITMAP() - ,m_vSelectedBitmap.GetWidth() - ,m_vSelectedBitmap.GetHeight() - ); -} // end of wxMemoryDC::DoDrawRoundedRectangle - -void wxLoadBitmapWithData( - HPS hPS -, HBITMAP hBitmap -, int nWidth -, int nHeight -) -{ - BITMAPINFOHEADER2 vHeader; - BITMAPINFO2 vInfo; - - vHeader.cbFix = 16L; - if (::GpiQueryBitmapInfoHeader(hBitmap, &vHeader)) - { - unsigned char* pucData = NULL; - unsigned char* pucBits; - int nBytesPerLine = nWidth * 3; - LONG lScans = 0L; - POINTL vPoint; - LONG lColor; - - vInfo.cbFix = 16; - vInfo.cx = vHeader.cx; - vInfo.cy = vHeader.cy; - vInfo.cPlanes = vHeader.cPlanes; - vInfo.cBitCount = 24; - pucData = (unsigned char*)malloc(nBytesPerLine * nHeight); - pucBits = pucData; - for (int i = 0; i < nHeight; i++) - { - for (int j = 0; j < nWidth; j++) - { - vPoint.x = j; vPoint.y = i; - lColor = ::GpiQueryPel(hPS, &vPoint); - *(pucBits++) = (unsigned char)lColor; - *(pucBits++) = (unsigned char)(lColor >> 8); - *(pucBits++) = (unsigned char)(lColor >> 16); - } - } - if ((lScans = ::GpiSetBitmapBits( hPS - ,0 - ,(LONG)nHeight - ,(PBYTE)pucData - ,&vInfo - )) == GPI_ALTERROR) - { - ERRORID vError; - wxString sError; - - vError = ::WinGetLastError(vHabmain); - sError = wxPMErrorToStr(vError); - } - free(pucData); - } -} diff --git a/src/os2/icon.cpp b/src/os2/icon.cpp index fe662a13f8..7995a85a23 100644 --- a/src/os2/icon.cpp +++ b/src/os2/icon.cpp @@ -50,6 +50,7 @@ void wxIconRefData::Free() // ---------------------------------------------------------------------------- wxIcon::wxIcon() +: m_bIsXpm(FALSE) { } @@ -58,6 +59,7 @@ wxIcon::wxIcon( , int WXUNUSED(nWidth) , int WXUNUSED(nHeight) ) +: m_bIsXpm(FALSE) { } @@ -67,6 +69,7 @@ wxIcon::wxIcon( , int nDesiredWidth , int nDesiredHeight ) +: m_bIsXpm(FALSE) { // // A very poor hack, but we have to have separate icon files from windows @@ -94,6 +97,11 @@ void wxIcon::CreateIconFromXpm( wxBitmap vBmp(ppData); CopyFromBitmap(vBmp); + if (GetHICON()) + { + m_bIsXpm = TRUE; + m_vXpmSrc = vBmp; + } } // end of wxIcon::CreateIconFromXpm void wxIcon::CopyFromBitmap( @@ -129,7 +137,7 @@ void wxIcon::CopyFromBitmap( POINTL vPoint[4] = { 0, 0, rBmp.GetWidth(), rBmp.GetHeight(), 0, 0, rBmp.GetWidth(), rBmp.GetHeight() }; - POINTL vPointMask[4] = { 0, 0, rBmp.GetWidth(), rBmp.GetHeight(), + POINTL vPointMask[4] = { 0, 0, rBmp.GetWidth(), rBmp.GetHeight() * 2, 0, 0, rBmp.GetWidth(), rBmp.GetHeight() }; @@ -185,7 +193,7 @@ void wxIcon::CopyFromBitmap( } vIconInfo.hbmColor = hBmp; - vHeader.cy = (ULONG)rBmp.GetHeight(); + vHeader.cy = (ULONG)rBmp.GetHeight() * 2; hBmpMask = ::GpiCreateBitmap( hPSDst ,&vHeader ,0L diff --git a/src/os2/wx23.def b/src/os2/wx23.def index c43974e692..8331fff75d 100644 --- a/src/os2/wx23.def +++ b/src/os2/wx23.def @@ -4,7 +4,7 @@ DATA MULTIPLE NONSHARED READWRITE LOADONCALL CODE LOADONCALL EXPORTS -;From library: H:\DEV\WX2\WXWINDOWS\LIB\wx.lib +;From library: F:\DEV\WX2\WXWINDOWS\LIB\wx.lib ;From object file: dummy.cpp ;PUBDEFs (Symbols available from object file): wxDummyChar @@ -1925,7 +1925,7 @@ EXPORTS wxEVT_NC_LEFT_DCLICK wxEVT_INIT_DIALOG wxEVT_COMMAND_SET_FOCUS - ;From object file: H:\DEV\WX2\WXWINDOWS\src\common\extended.c + ;From object file: F:\DEV\WX2\WXWINDOWS\src\common\extended.c ;PUBDEFs (Symbols available from object file): ConvertToIeeeExtended ConvertFromIeeeExtended @@ -6068,7 +6068,7 @@ EXPORTS Read32__17wxTextInputStreamFv ;wxTextInputStream::SkipIfEndOfLine(char) SkipIfEndOfLine__17wxTextInputStreamFc - ;From object file: H:\DEV\WX2\WXWINDOWS\src\common\unzip.c + ;From object file: F:\DEV\WX2\WXWINDOWS\src\common\unzip.c ;PUBDEFs (Symbols available from object file): unzReadCurrentFile unzGetCurrentFileInfo @@ -12348,25 +12348,15 @@ EXPORTS __ct__10wxWindowDCFP8wxWindow ;From object file: ..\os2\dcmemory.cpp ;PUBDEFs (Symbols available from object file): - ;wxMemoryDC::DoDrawRoundedRectangle(int,int,int,int,double) - DoDrawRoundedRectangle__10wxMemoryDCFiN31d - ;wxMemoryDC::DoDrawText(const wxString&,int,int) - DoDrawText__10wxMemoryDCFRC8wxStringiT2 ;wxMemoryDC::SelectObject(const wxBitmap&) SelectObject__10wxMemoryDCFRC8wxBitmap __vft10wxMemoryDC8wxObject - ;wxMemoryDC::DoDrawLine(int,int,int,int) - DoDrawLine__10wxMemoryDCFiN31 ;wxMemoryDC::Init() Init__10wxMemoryDCFv - ;wxLoadBitmapWithData(unsigned long,unsigned long,int,int) - wxLoadBitmapWithData__FUlT1iT3 ;wxMemoryDC::DoGetSize(int*,int*) const DoGetSize__10wxMemoryDCCFPiT1 ;wxMemoryDC::wxMemoryDC(wxDC*) __ct__10wxMemoryDCFP4wxDC - ;wxMemoryDC::DoDrawRectangle(int,int,int,int) - DoDrawRectangle__10wxMemoryDCFiN31 ;wxMemoryDC::wxMemoryDC() __ct__10wxMemoryDCFv ;wxMemoryDC::sm_classwxMemoryDC