X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/70a2c6562fcc7088076ab421419069ef50e4a7d3..6493aacaeb7b22b9fa35c559f7753e9fec0da71f:/src/os2/statbmp.cpp?ds=sidebyside diff --git a/src/os2/statbmp.cpp b/src/os2/statbmp.cpp index 5d523be4ff..304f45835e 100644 --- a/src/os2/statbmp.cpp +++ b/src/os2/statbmp.cpp @@ -9,13 +9,10 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "statbmp.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" +#include "wx/dcclient.h" #include "wx/window.h" #include "wx/os2/private.h" @@ -27,11 +24,15 @@ #include // --------------------------------------------------------------------------- -// macors +// macros // --------------------------------------------------------------------------- IMPLEMENT_DYNAMIC_CLASS(wxStaticBitmap, wxControl) +BEGIN_EVENT_TABLE(wxStaticBitmap, wxWindow) + EVT_PAINT(wxStaticBitmap::OnPaint) +END_EVENT_TABLE() + static wxGDIImage* ConvertImage( const wxGDIImage& rBitmap ) @@ -64,15 +65,13 @@ static wxGDIImage* ConvertImage( // wxStaticBitmap // --------------------------------------------------------------------------- -bool wxStaticBitmap::Create( - wxWindow* pParent -, wxWindowID nId -, const wxGDIImage& rBitmap -, const wxPoint& rPos -, const wxSize& rSize -, long lStyle -, const wxString& rName -) +bool wxStaticBitmap::Create( wxWindow* pParent, + wxWindowID nId, + const wxGDIImage& rBitmap, + const wxPoint& rPos, + const wxSize& WXUNUSED(rSize), + long lStyle, + const wxString& rName ) { ERRORID vError; wxString sError; @@ -92,8 +91,6 @@ bool wxStaticBitmap::Create( int nX= rPos.x; int nY = rPos.y; - int nWidth = rSize.x; - int nHeight = rSize.y; char zId[16]; m_windowStyle = lStyle; @@ -105,9 +102,8 @@ bool wxStaticBitmap::Create( // int nWinstyle = SS_ICON; - sprintf(zId, "#%d", rBitmap.GetId()); m_hWnd = (WXHWND)::WinCreateWindow( pParent->GetHWND() - ,WC_STATIC + ,(PSZ)wxCanvasClassName ,zId ,nWinstyle | WS_VISIBLE ,0,0,0,0 @@ -121,15 +117,20 @@ bool wxStaticBitmap::Create( { vError = ::WinGetLastError(wxGetInstance()); sError = wxPMErrorToStr(vError); - return FALSE; + return false; } wxCHECK_MSG( m_hWnd, FALSE, wxT("Failed to create static bitmap") ); m_pImage = ConvertImage(rBitmap); - m_pImage->SetHandle((WXHWND)::WinSendMsg(m_hWnd, SM_QUERYHANDLE, (MPARAM)0, (MPARAM)0)); + ::WinSendMsg( m_hWnd, + SM_SETHANDLE, + MPFROMHWND(rBitmap.GetHandle()), + (MPARAM)0); // Subclass again for purposes of dialog editing mode SubclassWin(m_hWnd); - return(TRUE); + SetSize(nX, nY, m_pImage->GetWidth(), m_pImage->GetHeight()); + + return true; } // end of wxStaticBitmap::Create bool wxStaticBitmap::ImageIsOk() const @@ -153,6 +154,29 @@ wxSize wxStaticBitmap::DoGetBestSize() const return wxWindow::DoGetBestSize(); } +void wxStaticBitmap::OnPaint ( + wxPaintEvent& WXUNUSED(rEvent) +) +{ + wxPaintDC vDc(this); + wxBitmap* pBitmap; + + if (m_pImage->IsKindOf(CLASSINFO(wxIcon))) + { + wxIcon* pIcon; + + pIcon = wxDynamicCast(m_pImage, wxIcon); + pBitmap = new wxBitmap(*pIcon); + vDc.DrawBitmap(*pBitmap, 0, 0); + delete pBitmap; + } + else + { + pBitmap = wxDynamicCast(m_pImage, wxBitmap); + vDc.DrawBitmap(*pBitmap, 0, 0); + } +} // end of wxStaticBitmap::OnPaint + void wxStaticBitmap::SetImage( const wxGDIImage& rBitmap ) @@ -172,13 +196,15 @@ void wxStaticBitmap::SetImage( GetPosition(&nX, &nY); GetSize(&nWidth, &nHeight); + // Convert to OS/2 coordinate system + nY = wxWindow::GetOS2ParentHeight(GetParent()) - nY - nHeight; RECTL vRect; vRect.xLeft = nX; - vRect.yTop = nY; + vRect.yTop = nY + nHeight; vRect.xRight = nX + nWidth; - vRect.yBottom = nY + nHeight; + vRect.yBottom = nY; ::WinInvalidateRect(GetHwndOf(GetParent()), &vRect, TRUE); }