]> git.saurik.com Git - wxWidgets.git/blame - src/common/bmpbase.cpp
fix for handling from Francesco
[wxWidgets.git] / src / common / bmpbase.cpp
CommitLineData
a04eec87 1/////////////////////////////////////////////////////////////////////////////
f03e8f9b 2// Name: src/common/bmpbase.cpp
a04eec87
VS
3// Purpose: wxBitmapBase
4// Author: VaclavSlavik
5// Created: 2001/04/11
6// RCS-ID: $Id$
7// Copyright: (c) 2001, Vaclav Slavik
65571936 8// Licence: wxWindows licence
a04eec87
VS
9/////////////////////////////////////////////////////////////////////////////
10
9d4ca3aa
VS
11// For compilers that support precompilation, includes "wx.h".
12#include "wx/wxprec.h"
13
14#ifdef __BORLANDC__
15 #pragma hdrstop
16#endif
17
da8cebb2
WS
18#include "wx/bitmap.h"
19
20#ifndef WX_PRECOMP
21 #include "wx/colour.h"
d4f6dbf6 22 #include "wx/icon.h"
da8cebb2
WS
23#endif // WX_PRECOMP
24
bae328c1
WS
25// ----------------------------------------------------------------------------
26// wxVariant support
27// ----------------------------------------------------------------------------
28
29#if wxUSE_VARIANT
30IMPLEMENT_VARIANT_OBJECT_EXPORTED(wxBitmap,WXDLLEXPORT)
31IMPLEMENT_VARIANT_OBJECT_EXPORTED(wxIcon,WXDLLEXPORT)
32#endif
33
91885f46
VZ
34// ----------------------------------------------------------------------------
35// wxBitmapBase
36// ----------------------------------------------------------------------------
37
ab00f409
WS
38#if wxUSE_BITMAP_BASE
39
e4db172a
WS
40#ifndef WX_PRECOMP
41 #include "wx/log.h"
de6185e2 42 #include "wx/utils.h"
559a723c 43 #include "wx/palette.h"
155ecd4c 44 #include "wx/image.h"
02761f6c 45 #include "wx/module.h"
e4db172a
WS
46#endif // WX_PRECOMP
47
6f5d7825 48
a04eec87
VS
49IMPLEMENT_ABSTRACT_CLASS(wxBitmapBase, wxGDIObject)
50IMPLEMENT_ABSTRACT_CLASS(wxBitmapHandlerBase,wxObject)
51
52wxList wxBitmapBase::sm_handlers;
53
54void wxBitmapBase::AddHandler(wxBitmapHandlerBase *handler)
55{
56 sm_handlers.Append(handler);
57}
58
59void wxBitmapBase::InsertHandler(wxBitmapHandlerBase *handler)
60{
61 sm_handlers.Insert(handler);
62}
63
64bool wxBitmapBase::RemoveHandler(const wxString& name)
65{
66 wxBitmapHandler *handler = FindHandler(name);
67 if ( handler )
68 {
69 sm_handlers.DeleteObject(handler);
c9d59ee7 70 return true;
a04eec87
VS
71 }
72 else
c9d59ee7 73 return false;
a04eec87
VS
74}
75
76wxBitmapHandler *wxBitmapBase::FindHandler(const wxString& name)
77{
ac32ba44 78 wxList::compatibility_iterator node = sm_handlers.GetFirst();
a04eec87
VS
79 while ( node )
80 {
1bc822df 81 wxBitmapHandler *handler = (wxBitmapHandler *)node->GetData();
a04eec87
VS
82 if ( handler->GetName() == name )
83 return handler;
1bc822df 84 node = node->GetNext();
a04eec87
VS
85 }
86 return NULL;
87}
88
89wxBitmapHandler *wxBitmapBase::FindHandler(const wxString& extension, wxBitmapType bitmapType)
90{
ac32ba44 91 wxList::compatibility_iterator node = sm_handlers.GetFirst();
a04eec87
VS
92 while ( node )
93 {
1bc822df 94 wxBitmapHandler *handler = (wxBitmapHandler *)node->GetData();
a04eec87 95 if ( handler->GetExtension() == extension &&
4b232264 96 (bitmapType == wxBITMAP_TYPE_ANY || handler->GetType() == bitmapType) )
a04eec87 97 return handler;
1bc822df 98 node = node->GetNext();
a04eec87
VS
99 }
100 return NULL;
101}
102
103wxBitmapHandler *wxBitmapBase::FindHandler(wxBitmapType bitmapType)
104{
ac32ba44 105 wxList::compatibility_iterator node = sm_handlers.GetFirst();
a04eec87
VS
106 while ( node )
107 {
1bc822df 108 wxBitmapHandler *handler = (wxBitmapHandler *)node->GetData();
a04eec87
VS
109 if (handler->GetType() == bitmapType)
110 return handler;
1bc822df 111 node = node->GetNext();
a04eec87
VS
112 }
113 return NULL;
114}
115
116void wxBitmapBase::CleanUpHandlers()
117{
ac32ba44 118 wxList::compatibility_iterator node = sm_handlers.GetFirst();
a04eec87
VS
119 while ( node )
120 {
1bc822df 121 wxBitmapHandler *handler = (wxBitmapHandler *)node->GetData();
ac32ba44 122 wxList::compatibility_iterator next = node->GetNext();
a04eec87 123 delete handler;
ac32ba44 124 sm_handlers.Erase(node);
a04eec87
VS
125 node = next;
126 }
127}
128
a04eec87
VS
129class wxBitmapBaseModule: public wxModule
130{
131DECLARE_DYNAMIC_CLASS(wxBitmapBaseModule)
132public:
133 wxBitmapBaseModule() {}
c9d59ee7 134 bool OnInit() { wxBitmap::InitStandardHandlers(); return true; };
a04eec87
VS
135 void OnExit() { wxBitmap::CleanUpHandlers(); };
136};
137
138IMPLEMENT_DYNAMIC_CLASS(wxBitmapBaseModule, wxModule)
ee058011 139
91885f46
VZ
140#endif // wxUSE_BITMAP_BASE
141
87f83ac8
VZ
142// ----------------------------------------------------------------------------
143// wxMaskBase
144// ----------------------------------------------------------------------------
145
146bool wxMaskBase::Create(const wxBitmap& bitmap, const wxColour& colour)
147{
148 FreeData();
149
150 return InitFromColour(bitmap, colour);
151}
152
153#if wxUSE_PALETTE
154
155bool wxMaskBase::Create(const wxBitmap& bitmap, int paletteIndex)
156{
157 wxPalette *pal = bitmap.GetPalette();
158
159 wxCHECK_MSG( pal, false,
160 wxT("Cannot create mask from palette index of a bitmap without palette") );
161
162 unsigned char r,g,b;
163 pal->GetRGB(paletteIndex, &r, &g, &b);
164
165 return Create(bitmap, wxColour(r, g, b));
166}
167
168#endif // wxUSE_PALETTE
169
170bool wxMaskBase::Create(const wxBitmap& bitmap)
171{
172 FreeData();
173
174 return InitFromMonoBitmap(bitmap);
175}