]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/os2/statbmp.cpp
eliminate __WIN32__ only code
[wxWidgets.git] / src / os2 / statbmp.cpp
... / ...
CommitLineData
1/////////////////////////////////////////////////////////////////////////////
2// Name: statbmp.cpp
3// Purpose: wxStaticBitmap
4// Author: David Webster
5// Modified by:
6// Created: 11/27/99
7// RCS-ID: $Id$
8// Copyright: (c) David Webster
9// Licence: wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifdef __GNUG__
13#pragma implementation "statbmp.h"
14#endif
15
16// For compilers that support precompilation, includes "wx.h".
17#include "wx/wxprec.h"
18
19#include "wx/window.h"
20#include "wx/os2/private.h"
21
22#ifndef WX_PRECOMP
23 #include "wx/icon.h"
24 #include "wx/statbmp.h"
25#endif
26
27#include <stdio.h>
28
29// ---------------------------------------------------------------------------
30// macors
31// ---------------------------------------------------------------------------
32
33IMPLEMENT_DYNAMIC_CLASS(wxStaticBitmap, wxControl)
34
35BEGIN_EVENT_TABLE(wxStaticBitmap, wxWindow)
36 EVT_PAINT(wxStaticBitmap::OnPaint)
37END_EVENT_TABLE()
38
39static wxGDIImage* ConvertImage(
40 const wxGDIImage& rBitmap
41)
42{
43 bool bIsIcon = rBitmap.IsKindOf( CLASSINFO(wxIcon) );
44
45 if(!bIsIcon )
46 {
47 wxASSERT_MSG( wxDynamicCast(&rBitmap, wxBitmap),
48 _T("not an icon and not a bitmap?") );
49
50 const wxBitmap& rBmp = (const wxBitmap&)rBitmap;
51 wxMask* pMask = rBmp.GetMask();
52
53 if (pMask && pMask->GetMaskBitmap())
54 {
55 wxIcon* pIcon = new wxIcon;
56
57 pIcon->CopyFromBitmap(rBmp);
58 return pIcon;
59 }
60 return new wxBitmap(rBmp);
61 }
62
63 // copying a bitmap is a cheap operation
64 return new wxIcon( (const wxIcon&)rBitmap );
65} // end of ConvertImage
66
67// ---------------------------------------------------------------------------
68// wxStaticBitmap
69// ---------------------------------------------------------------------------
70
71bool wxStaticBitmap::Create(
72 wxWindow* pParent
73, wxWindowID nId
74, const wxGDIImage& rBitmap
75, const wxPoint& rPos
76, const wxSize& rSize
77, long lStyle
78, const wxString& rName
79)
80{
81 ERRORID vError;
82 wxString sError;
83
84 Init();
85
86 SetName(rName);
87 if (pParent)
88 pParent->AddChild(this);
89
90 if (nId == -1)
91 m_windowId = (int)NewControlId();
92 else
93 m_windowId = nId;
94
95 m_windowStyle = lStyle;
96
97 int nX= rPos.x;
98 int nY = rPos.y;
99 int nWidth = rSize.x;
100 int nHeight = rSize.y;
101 char zId[16];
102
103 m_windowStyle = lStyle;
104
105 m_bIsIcon = rBitmap.IsKindOf(CLASSINFO(wxIcon));
106
107 //
108 // For now we only support an ICON
109 //
110 int nWinstyle = SS_ICON;
111
112 m_hWnd = (WXHWND)::WinCreateWindow( pParent->GetHWND()
113 ,wxCanvasClassName
114 ,zId
115 ,nWinstyle | WS_VISIBLE
116 ,0,0,0,0
117 ,pParent->GetHWND()
118 ,HWND_TOP
119 ,m_windowId
120 ,NULL
121 ,NULL
122 );
123 if (!m_hWnd)
124 {
125 vError = ::WinGetLastError(wxGetInstance());
126 sError = wxPMErrorToStr(vError);
127 return FALSE;
128 }
129 wxCHECK_MSG( m_hWnd, FALSE, wxT("Failed to create static bitmap") );
130 m_pImage = ConvertImage(rBitmap);
131 m_pImage->SetHandle((WXHWND)::WinSendMsg(m_hWnd, SM_QUERYHANDLE, (MPARAM)0, (MPARAM)0));
132
133 // Subclass again for purposes of dialog editing mode
134 SubclassWin(m_hWnd);
135 SetSize(nX, nY, m_pImage->GetWidth(), m_pImage->GetHeight());
136
137 return(TRUE);
138} // end of wxStaticBitmap::Create
139
140bool wxStaticBitmap::ImageIsOk() const
141{
142 return(m_pImage && m_pImage->Ok());
143}
144
145void wxStaticBitmap::Free()
146{
147 if (m_pImage)
148 delete m_pImage;
149 m_pImage = NULL;
150} // end of wxStaticBitmap::Free
151
152wxSize wxStaticBitmap::DoGetBestSize() const
153{
154 //
155 // Reuse the current size (as wxWindow does) instead of using some
156 // arbitrary default size (as wxControl, our immediate base class, does)
157 //
158 return wxWindow::DoGetBestSize();
159}
160
161void wxStaticBitmap::OnPaint (
162 wxPaintEvent& WXUNUSED(rEvent)
163)
164{
165 wxPaintDC vDc(this);
166 int i;
167 wxBitmap* pBitmap;
168
169 if (m_pImage->IsKindOf(CLASSINFO(wxIcon)))
170 {
171 wxIcon* pIcon;
172
173 pIcon = wxDynamicCast(m_pImage, wxIcon);
174 pBitmap = new wxBitmap(*pIcon);
175 vDc.DrawBitmap(*pBitmap, 0, 0);
176 delete pBitmap;
177 }
178 else
179 {
180 pBitmap = wxDynamicCast(m_pImage, wxBitmap);
181 vDc.DrawBitmap(*pBitmap, 0, 0);
182 }
183} // end of wxStaticBitmap::OnPaint
184
185void wxStaticBitmap::SetImage(
186 const wxGDIImage& rBitmap
187)
188{
189 int nX = 0;
190 int nY = 0;
191 int nWidth = 0;
192 int nHeight = 0;
193
194 Free();
195 ::WinSendMsg( GetHwnd()
196 ,SM_SETHANDLE
197 ,MPFROMHWND(rBitmap.GetHandle())
198 ,NULL
199 );
200 m_pImage = ConvertImage(rBitmap);
201
202 GetPosition(&nX, &nY);
203 GetSize(&nWidth, &nHeight);
204
205 RECTL vRect;
206
207 vRect.xLeft = nX;
208 vRect.yTop = nY;
209 vRect.xRight = nX + nWidth;
210 vRect.yBottom = nY + nHeight;
211
212 ::WinInvalidateRect(GetHwndOf(GetParent()), &vRect, TRUE);
213}
214
215MRESULT wxStaticBitmap::OS2WindowProc(
216 WXUINT uMsg
217, WXWPARAM wParam
218, WXLPARAM lParam
219)
220{
221 return wxWindow::OS2WindowProc(uMsg, wParam, lParam);
222} // end of wxStaticBitmap::OS2WindowProc