]> git.saurik.com Git - wxWidgets.git/blame - src/mac/carbon/imaglist.cpp
Build fix after wxColourBase introduction.
[wxWidgets.git] / src / mac / carbon / imaglist.cpp
CommitLineData
6ce43ac9 1/////////////////////////////////////////////////////////////////////////////
18f3decb 2// Name: src/mac/carbon/imaglist.cpp
6ce43ac9
SC
3// Purpose:
4// Author: Robert Roebling
18f3decb 5// RCS_ID: $Id$
6ce43ac9
SC
6// Copyright: (c) 1998 Robert Roebling
7// Licence: wxWindows licence
8/////////////////////////////////////////////////////////////////////////////
9
6ce43ac9
SC
10#include "wx/wxprec.h"
11
6ce43ac9 12#ifdef __BORLANDC__
274b7a40 13 #pragma hdrstop
6ce43ac9
SC
14#endif
15
18f3decb
WS
16#if wxUSE_IMAGLIST
17
6ce43ac9 18#include "wx/imaglist.h"
6ce43ac9
SC
19#include "wx/icon.h"
20#include "wx/image.h"
21#include "wx/dc.h"
22
6ce43ac9
SC
23IMPLEMENT_DYNAMIC_CLASS(wxImageList, wxObject)
24
274b7a40 25
6ce43ac9
SC
26wxImageList::wxImageList( int width, int height, bool mask, int initialCount )
27{
28 (void)Create(width, height, mask, initialCount);
29}
30
31wxImageList::~wxImageList()
32{
33 (void)RemoveAll();
34}
35
36int wxImageList::GetImageCount() const
37{
38 return m_images.GetCount();
39}
40
41bool wxImageList::Create( int width, int height, bool WXUNUSED(mask), int WXUNUSED(initialCount) )
42{
43 m_width = width;
44 m_height = height;
45
46 return Create();
47}
48
49bool wxImageList::Create()
50{
51 return true;
52}
53
54int wxImageList::Add( const wxIcon &bitmap )
55{
56 wxASSERT_MSG( (bitmap.GetWidth() == m_width && bitmap.GetHeight() == m_height)
57 || (m_width == 0 && m_height == 0),
58 _T("invalid bitmap size in wxImageList: this might work ")
59 _T("on this platform but definitely won't under Windows.") );
60
61 m_images.Append( new wxIcon( bitmap ) );
62
63 if (m_width == 0 && m_height == 0)
64 {
65 m_width = bitmap.GetWidth();
66 m_height = bitmap.GetHeight();
67 }
274b7a40
DS
68
69 return m_images.GetCount() - 1;
6ce43ac9
SC
70}
71
72int wxImageList::Add( const wxBitmap &bitmap )
73{
74 wxASSERT_MSG( (bitmap.GetWidth() == m_width && bitmap.GetHeight() == m_height)
75 || (m_width == 0 && m_height == 0),
76 _T("invalid bitmap size in wxImageList: this might work ")
77 _T("on this platform but definitely won't under Windows.") );
78
274b7a40 79 m_images.Append( new wxBitmap( bitmap ) );
6ce43ac9
SC
80
81 if (m_width == 0 && m_height == 0)
82 {
83 m_width = bitmap.GetWidth();
84 m_height = bitmap.GetHeight();
85 }
274b7a40
DS
86
87 return m_images.GetCount() - 1;
6ce43ac9
SC
88}
89
90int wxImageList::Add( const wxBitmap& bitmap, const wxBitmap& mask )
91{
274b7a40 92 wxBitmap bmp( bitmap );
6ce43ac9 93 if (mask.Ok())
274b7a40
DS
94 bmp.SetMask( new wxMask( mask ) );
95
96 return Add( bmp );
6ce43ac9
SC
97}
98
99int wxImageList::Add( const wxBitmap& bitmap, const wxColour& maskColour )
100{
101 wxImage img = bitmap.ConvertToImage();
274b7a40
DS
102 img.SetMaskColour( maskColour.Red(), maskColour.Green(), maskColour.Blue() );
103
104 return Add( wxBitmap( img ) );
6ce43ac9
SC
105}
106
107// Get the bitmap
108wxBitmap wxImageList::GetBitmap(int index) const
109{
110 wxList::compatibility_iterator node = m_images.Item( index );
111
112 wxCHECK_MSG( node, wxNullBitmap , wxT("wrong index in image list") );
113
114 wxObject* obj = (wxObject*) node->GetData();
115 if ( obj == NULL )
116 return wxNullBitmap ;
117 else if ( obj->IsKindOf(CLASSINFO(wxIcon)) )
274b7a40
DS
118 return wxBitmap( *(wx_static_cast(wxIcon*, obj)) ) ;
119 else
120 return *(wx_static_cast(wxBitmap*, obj)) ;
6ce43ac9
SC
121}
122
123// Get the icon
124wxIcon wxImageList::GetIcon(int index) const
125{
126 wxList::compatibility_iterator node = m_images.Item( index );
127
128 wxCHECK_MSG( node, wxNullIcon , wxT("wrong index in image list") );
129
130 wxObject* obj = (wxObject*) node->GetData();
131 if ( obj == NULL )
132 return wxNullIcon ;
274b7a40 133 else if ( obj->IsKindOf(CLASSINFO(wxBitmap)) )
6ce43ac9
SC
134 {
135 wxFAIL_MSG( wxT("cannot convert from bitmap to icon") ) ;
136 return wxNullIcon ;
137 }
274b7a40
DS
138 else
139 return *(wx_static_cast(wxIcon*, obj)) ;
6ce43ac9
SC
140}
141
142bool wxImageList::Replace( int index, const wxBitmap &bitmap )
143{
144 wxList::compatibility_iterator node = m_images.Item( index );
145
146 wxCHECK_MSG( node, false, wxT("wrong index in image list") );
147
274b7a40 148 wxBitmap* newBitmap = new wxBitmap( bitmap );
6ce43ac9
SC
149
150 if (index == (int) m_images.GetCount() - 1)
151 {
152 delete node->GetData();
274b7a40 153
6ce43ac9
SC
154 m_images.Erase( node );
155 m_images.Append( newBitmap );
156 }
157 else
158 {
159 wxList::compatibility_iterator next = node->GetNext();
160 delete node->GetData();
274b7a40 161
6ce43ac9
SC
162 m_images.Erase( node );
163 m_images.Insert( next, newBitmap );
164 }
165
166 return true;
167}
168
169bool wxImageList::Replace( int index, const wxIcon &bitmap )
170{
171 wxList::compatibility_iterator node = m_images.Item( index );
172
173 wxCHECK_MSG( node, false, wxT("wrong index in image list") );
174
274b7a40 175 wxIcon* newBitmap = new wxIcon( bitmap );
6ce43ac9
SC
176
177 if (index == (int) m_images.GetCount() - 1)
178 {
179 delete node->GetData();
180 m_images.Erase( node );
181 m_images.Append( newBitmap );
182 }
183 else
184 {
185 wxList::compatibility_iterator next = node->GetNext();
186 delete node->GetData();
187 m_images.Erase( node );
188 m_images.Insert( next, newBitmap );
189 }
190
191 return true;
192}
193
194bool wxImageList::Remove( int index )
195{
196 wxList::compatibility_iterator node = m_images.Item( index );
197
198 wxCHECK_MSG( node, false, wxT("wrong index in image list") );
199
200 delete node->GetData();
201 m_images.Erase( node );
202
203 return true;
204}
205
206bool wxImageList::RemoveAll()
207{
208 WX_CLEAR_LIST(wxList, m_images);
209 m_images.Clear();
210
211 return true;
212}
213
214bool wxImageList::GetSize( int index, int &width, int &height ) const
215{
216 width = 0;
217 height = 0;
218
219 wxList::compatibility_iterator node = m_images.Item( index );
220
221 wxCHECK_MSG( node, false, wxT("wrong index in image list") );
222
223 wxObject *obj = (wxObject*)node->GetData();
274b7a40 224 if (obj->IsKindOf(CLASSINFO(wxIcon)))
6ce43ac9
SC
225 {
226 wxIcon *bm = wx_static_cast( wxIcon* , obj ) ;
227 width = bm->GetWidth();
228 height = bm->GetHeight();
229 }
230 else
231 {
232 wxBitmap *bm = wx_static_cast( wxBitmap* , obj ) ;
233 width = bm->GetWidth();
234 height = bm->GetHeight();
235 }
274b7a40 236
6ce43ac9
SC
237 return true;
238}
239
274b7a40
DS
240bool wxImageList::Draw(
241 int index, wxDC &dc, int x, int y,
242 int flags, bool WXUNUSED(solidBackground) )
6ce43ac9
SC
243{
244 wxList::compatibility_iterator node = m_images.Item( index );
245
246 wxCHECK_MSG( node, false, wxT("wrong index in image list") );
247
248 wxObject *obj = (wxObject*)node->GetData();
274b7a40 249 if (obj->IsKindOf(CLASSINFO(wxIcon)))
6ce43ac9
SC
250 {
251 wxIcon *bm = wx_static_cast( wxIcon* , obj ) ;
274b7a40 252 dc.DrawIcon( *bm , x, y );
6ce43ac9
SC
253 }
254 else
255 {
256 wxBitmap *bm = wx_static_cast( wxBitmap* , obj ) ;
257 dc.DrawBitmap( *bm, x, y, (flags & wxIMAGELIST_DRAW_TRANSPARENT) > 0 );
258 }
259
260 return true;
261}
262
263#endif // wxUSE_IMAGLIST