1 ////////////////////////////////////////////////////////////////////////////
2 // Name: src/palmos/bitmap.cpp
4 // Author: William Osborne - minimal working wxPalmOS port
8 // Copyright: (c) William Osborne
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 // ============================================================================
14 // ============================================================================
16 // ----------------------------------------------------------------------------
18 // ----------------------------------------------------------------------------
20 // For compilers that support precompilation, includes "wx.h".
21 #include "wx/wxprec.h"
27 #include "wx/bitmap.h"
35 #include "wx/palette.h"
36 #include "wx/dcmemory.h"
43 #include "wx/palmos/dib.h"
46 #include "wx/xpmdecod.h"
48 // missing from mingw32 header
50 #define CLR_INVALID ((COLORREF)-1)
51 #endif // no CLR_INVALID
53 // ----------------------------------------------------------------------------
55 // ----------------------------------------------------------------------------
57 class WXDLLEXPORT wxBitmapRefData
: public wxGDIImageRefData
61 virtual ~wxBitmapRefData() { Free(); }
65 // set the mask object to use as the mask, we take ownership of it
66 void SetMask(wxMask
*mask
)
73 wxMask
*GetMask() const { return m_bitmapMask
; }
77 wxPalette m_bitmapPalette
;
78 #endif // wxUSE_PALETTE
95 wxDECLARE_NO_COPY_CLASS(wxBitmapRefData
);
98 // ----------------------------------------------------------------------------
100 // ----------------------------------------------------------------------------
102 IMPLEMENT_DYNAMIC_CLASS(wxBitmap
, wxGDIObject
)
103 IMPLEMENT_DYNAMIC_CLASS(wxMask
, wxObject
)
105 IMPLEMENT_DYNAMIC_CLASS(wxBitmapHandler
, wxObject
)
107 // ============================================================================
109 // ============================================================================
111 // ----------------------------------------------------------------------------
113 // ----------------------------------------------------------------------------
116 #define NEVER_USE_DIB
118 static inline bool wxShouldCreateDIB(int w
, int h
, int d
, WXHDC hdc
)
120 // here is the logic:
122 // (a) if hdc is specified, the caller explicitly wants DDB
123 // (b) otherwise, create a DIB if depth >= 24 (we don't support 16bpp
124 // or less DIBs anyhow)
125 // (c) finally, create DIBs under Win9x even if the depth hasn't been
126 // explicitly specified but the current display depth is 24 or
127 // more and the image is "big", i.e. > 16Mb which is the
128 // theoretical limit for DDBs under Win9x
130 // consequences (all of which seem to make sense):
132 // (i) by default, DDBs are created (depth == -1 usually)
133 // (ii) DIBs can be created by explicitly specifying the depth
134 // (iii) using a DC always forces creating a DDB
138 wxDIB::GetLineSize(w
, wxDisplayDepth())*h
> 16*1024*1024));
141 #define SOMETIMES_USE_DIB
142 #endif // different DIB usage scenarious
144 // ----------------------------------------------------------------------------
146 // ----------------------------------------------------------------------------
148 wxBitmapRefData::wxBitmapRefData()
151 m_selectedInto
= NULL
;
155 m_hBitmap
= (WXHBITMAP
) NULL
;
164 void wxBitmapRefData::Free()
168 // ----------------------------------------------------------------------------
170 // ----------------------------------------------------------------------------
172 // this function should be called from all wxBitmap ctors
173 void wxBitmap::Init()
177 wxGDIImageRefData
*wxBitmap::CreateData() const
182 bool wxBitmap::CopyFromCursor(const wxCursor
& cursor
)
187 bool wxBitmap::CopyFromIcon(const wxIcon
& icon
)
192 #ifndef NEVER_USE_DIB
194 bool wxBitmap::CopyFromDIB(const wxDIB
& dib
)
199 #endif // NEVER_USE_DIB
201 wxBitmap::wxBitmap(const char bits
[], int width
, int height
, int depth
)
206 wxBitmap::wxBitmap(int w
, int h
, const wxDC
& dc
)
210 wxBitmap::wxBitmap(const void* data
, long type
, int width
, int height
, int depth
)
214 wxBitmap::wxBitmap(const wxString
& filename
, wxBitmapType type
)
218 bool wxBitmap::Create(int width
, int height
, int depth
)
223 bool wxBitmap::Create(int width
, int height
, const wxDC
& dc
)
228 bool wxBitmap::DoCreate(int w
, int h
, int d
, WXHDC hdc
)
235 // ----------------------------------------------------------------------------
236 // wxImage to/from conversions
237 // ----------------------------------------------------------------------------
241 bool wxBitmap::CreateFromImage(const wxImage
& image
, int depth
)
246 bool wxBitmap::CreateFromImage(const wxImage
& image
, const wxDC
& dc
)
251 bool wxBitmap::CreateFromImage(const wxImage
& image
, int depth
, WXHDC hdc
)
256 wxImage
wxBitmap::ConvertToImage() const
262 #endif // wxUSE_WXDIB
264 #endif // wxUSE_IMAGE
266 // ----------------------------------------------------------------------------
267 // loading and saving bitmaps
268 // ----------------------------------------------------------------------------
270 bool wxBitmap::LoadFile(const wxString
& filename
, long type
)
275 bool wxBitmap::Create(const void* data
, long type
, int width
, int height
, int depth
)
280 bool wxBitmap::SaveFile(const wxString
& filename
,
282 const wxPalette
*palette
)
287 // ----------------------------------------------------------------------------
288 // sub bitmap extraction
289 // ----------------------------------------------------------------------------
291 wxBitmap
wxBitmap::GetSubBitmap( const wxRect
& rect
) const
293 wxBitmap
ret( 0, 0 );
297 // ----------------------------------------------------------------------------
298 // wxBitmap accessors
299 // ----------------------------------------------------------------------------
302 wxPalette
* wxBitmap::GetPalette() const
308 wxMask
*wxBitmap::GetMask() const
315 wxDC
*wxBitmap::GetSelectedInto() const
322 bool wxBitmap::HasAlpha() const
327 // ----------------------------------------------------------------------------
329 // ----------------------------------------------------------------------------
333 void wxBitmap::SetSelectedInto(wxDC
*dc
)
341 void wxBitmap::SetPalette(const wxPalette
& palette
)
345 #endif // wxUSE_PALETTE
347 void wxBitmap::SetMask(wxMask
*mask
)
351 // ----------------------------------------------------------------------------
352 // raw bitmap access support
353 // ----------------------------------------------------------------------------
355 // ----------------------------------------------------------------------------
357 // ----------------------------------------------------------------------------
364 // Construct a mask from a bitmap and a colour indicating
365 // the transparent area
366 wxMask::wxMask(const wxBitmap
& bitmap
, const wxColour
& colour
)
370 // Construct a mask from a bitmap and a palette index indicating
371 // the transparent area
372 wxMask::wxMask(const wxBitmap
& bitmap
, int paletteIndex
)
376 // Construct a mask from a mono bitmap (copies the bitmap).
377 wxMask::wxMask(const wxBitmap
& bitmap
)
385 // Create a mask from a mono bitmap (copies the bitmap).
386 bool wxMask::Create(const wxBitmap
& bitmap
)
391 // Create a mask from a bitmap and a palette index indicating
392 // the transparent area
393 bool wxMask::Create(const wxBitmap
& bitmap
, int paletteIndex
)
398 // Create a mask from a bitmap and a colour indicating
399 // the transparent area
400 bool wxMask::Create(const wxBitmap
& bitmap
, const wxColour
& colour
)
405 // ----------------------------------------------------------------------------
407 // ----------------------------------------------------------------------------
409 bool wxBitmapHandler::Create(wxGDIImage
*image
,
412 int width
, int height
, int depth
)
417 bool wxBitmapHandler::Load(wxGDIImage
*image
,
418 const wxString
& name
,
420 int width
, int height
)
425 bool wxBitmapHandler::Save(wxGDIImage
*image
,
426 const wxString
& name
,
432 bool wxBitmapHandler::Create(wxBitmap
*WXUNUSED(bitmap
),
433 const void* WXUNUSED(data
),
436 int WXUNUSED(height
),
442 bool wxBitmapHandler::LoadFile(wxBitmap
*WXUNUSED(bitmap
),
443 const wxString
& WXUNUSED(name
),
445 int WXUNUSED(desiredWidth
),
446 int WXUNUSED(desiredHeight
))
451 bool wxBitmapHandler::SaveFile(wxBitmap
*WXUNUSED(bitmap
),
452 const wxString
& WXUNUSED(name
),
454 const wxPalette
*WXUNUSED(palette
))