X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0e320a79f187558effb04d92020b470372bbe456..a385b5dfa89e3ff69e4317531b06086c4e426e2b:/src/os2/statbmp.cpp?ds=sidebyside diff --git a/src/os2/statbmp.cpp b/src/os2/statbmp.cpp index a67c558465..2581c22854 100644 --- a/src/os2/statbmp.cpp +++ b/src/os2/statbmp.cpp @@ -1,59 +1,174 @@ ///////////////////////////////////////////////////////////////////////////// // Name: statbmp.cpp // Purpose: wxStaticBitmap -// Author: AUTHOR +// Author: David Webster // Modified by: -// Created: ??/??/98 +// Created: 11/27/99 // RCS-ID: $Id$ -// Copyright: (c) AUTHOR -// Licence: wxWindows licence +// Copyright: (c) David Webster +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ #pragma implementation "statbmp.h" #endif -#include "wx/statbmp.h" +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" -#if !USE_SHARED_LIBRARY -IMPLEMENT_DYNAMIC_CLASS(wxStaticBitmap, wxControl) +#include "wx/window.h" +#include "wx/os2/private.h" + +#ifndef WX_PRECOMP + #include "wx/icon.h" + #include "wx/statbmp.h" #endif -/* - * wxStaticBitmap - */ +#include + +// --------------------------------------------------------------------------- +// macors +// --------------------------------------------------------------------------- + +IMPLEMENT_DYNAMIC_CLASS(wxStaticBitmap, wxControl) + +// --------------------------------------------------------------------------- +// wxStaticBitmap +// --------------------------------------------------------------------------- -bool wxStaticBitmap::Create(wxWindow *parent, wxWindowID id, - const wxBitmap& bitmap, - const wxPoint& pos, - const wxSize& size, - long style, - const wxString& name) +bool wxStaticBitmap::Create( + wxWindow* pParent +, wxWindowID nId +, const wxGDIImage& rBitmap +, const wxPoint& rPos +, const wxSize& rSize +, long lStyle +, const wxString& rName +) { - m_messageBitmap = bitmap; - SetName(name); - if (parent) parent->AddChild(this); + Init(); + + SetName(rName); + if (pParent) + pParent->AddChild(this); + + m_backgroundColour = pParent->GetBackgroundColour() ; + m_foregroundColour = pParent->GetForegroundColour() ; - if ( id == -1 ) - m_windowId = (int)NewControlId(); + if (nId == -1) + m_windowId = (int)NewControlId(); else - m_windowId = id; + m_windowId = nId; - m_windowStyle = style; + m_windowStyle = lStyle; + + int nX= rPos.x; + int nY = rPos.y; + int nWidth = rSize.x; + int nHeight = rSize.y; + + m_windowStyle = lStyle; + + m_bIsIcon = rBitmap.IsKindOf(CLASSINFO(wxIcon)); // TODO: create static bitmap control - return FALSE; + const wxChar* zClassname = wxT("WX_STATIC"); + int nWinstyle = m_bIsIcon ? SS_ICON : SS_BITMAP; + + m_hWnd = (WXHWND)::WinCreateWindow( pParent->GetHWND() + ,zClassname + ,wxT("") + ,nWinstyle | WS_VISIBLE + ,0,0,0,0 + ,pParent->GetHWND() + ,HWND_TOP + ,m_windowId + ,NULL + ,NULL + ); + + wxCHECK_MSG( m_hWnd, FALSE, wxT("Failed to create static bitmap") ); + + SetImage(rBitmap); + + // Subclass again for purposes of dialog editing mode + SubclassWin(m_hWnd); + SetFont(GetParent()->GetFont()); + SetSize(nX, nY, nWidth, nHeight); + return(FALSE); } -void wxStaticBitmap::SetSize(int x, int y, int width, int height, int sizeFlags) +bool wxStaticBitmap::ImageIsOk() const { - // TODO + return(m_pImage && m_pImage->Ok()); } -void wxStaticBitmap::SetBitmap(const wxBitmap& bitmap) +void wxStaticBitmap::Free() { - m_messageBitmap = bitmap; + delete m_pImage; + m_pImage = NULL; +} + +wxSize wxStaticBitmap::DoGetBestSize() const +{ + // reuse the current size (as wxWindow does) instead of using some + // arbitrary default size (as wxControl, our immediate base class, does) + return wxWindow::DoGetBestSize(); +} + +void wxStaticBitmap::SetImage( + const wxGDIImage& rBitmap +) +{ + Free(); + + m_bIsIcon = rBitmap.IsKindOf(CLASSINFO(wxIcon)); + if (m_bIsIcon) + m_pImage = new wxIcon((const wxIcon&)rBitmap); + else + m_pImage = new wxBitmap((const wxBitmap &)rBitmap); + + int nX; + int nY; + int nW; + int nH; + + GetPosition(&nX, &nY); + GetSize(&nW, &nH); + + ::WinSendMsg( GetHwnd() + ,SM_SETHANDLE + ,MPFROMHWND(m_pImage->GetHandle()) + ,NULL + ); + if (ImageIsOk()) + { + int nWidth = rBitmap.GetWidth(); + int nHeight = rBitmap.GetHeight(); + + if (nWidth && nHeight) + { + nW = nWidth; + nW = nHeight; + + ::WinSetWindowPos( GetHwnd() + ,HWND_TOP + ,nX + ,nY + ,nWidth + ,nHeight + ,SWP_SIZE | SWP_MOVE | SWP_SHOW + ); + } + } + + RECTL vRect; + + vRect.xLeft = nW; + vRect.yTop = nY; + vRect.xRight = nX + nW; + vRect.yBottom = nY + nH; - // TODO: redraw bitmap + ::WinInvalidateRect(GetHwndOf(GetParent()), &vRect, TRUE); }