/////////////////////////////////////////////////////////////////////////////
-// Name: bitmap.cpp
+// Name: src/gtk/bitmap.cpp
// Purpose:
// Author: Robert Roebling
// RCS-ID: $Id$
#include "wx/dcmemory.h"
#include "wx/app.h"
-#ifdef __WXGTK20__
#include "wx/rawbmp.h"
// need this to get gdk_image_new_bitmap()
#define GDK_ENABLE_BROKEN
-#endif
#include <gdk/gdk.h>
#include <gtk/gtk.h>
#include <gdk/gdkx.h>
-#ifdef __WXGTK20__
- #include <gdk/gdkimage.h>
-#else // GTK+ 1.2
- #include <gdk/gdkrgb.h>
-#endif // GTK+ 2.0/1.2
+#include <gdk/gdkimage.h>
#include "wx/math.h"
Create( bitmap, colour );
}
+#if wxUSE_PALETTE
wxMask::wxMask( const wxBitmap& bitmap, int paletteIndex )
{
m_bitmap = (GdkBitmap *) NULL;
Create( bitmap, paletteIndex );
}
+#endif // wxUSE_PALETTE
wxMask::wxMask( const wxBitmap& bitmap )
{
return true;
}
+#if wxUSE_PALETTE
bool wxMask::Create( const wxBitmap& bitmap, int paletteIndex )
{
unsigned char r,g,b;
return Create(bitmap, wxColour(r, g, b));
}
+#endif // wxUSE_PALETTE
bool wxMask::Create( const wxBitmap& bitmap )
{
GdkPixmap *m_pixmap;
GdkBitmap *m_bitmap;
-#ifdef __WXGTK20__
GdkPixbuf *m_pixbuf;
-#endif
wxMask *m_mask;
int m_width;
int m_height;
{
m_pixmap = (GdkPixmap *) NULL;
m_bitmap = (GdkBitmap *) NULL;
-#ifdef __WXGTK20__
m_pixbuf = (GdkPixbuf *) NULL;
-#endif
m_mask = (wxMask *) NULL;
m_width = 0;
m_height = 0;
gdk_pixmap_unref( m_pixmap );
if (m_bitmap)
gdk_bitmap_unref( m_bitmap );
-#ifdef __WXGTK20__
if (m_pixbuf)
gdk_pixbuf_unref( m_pixbuf );
-#endif
delete m_mask;
+#if wxUSE_PALETTE
delete m_palette;
+#endif // wxUSE_PALETTE
}
//-----------------------------------------------------------------------------
M_BMPDATA->m_bitmap = gdk_pixmap_new( wxGetRootWindow()->window, width, height, 1 );
M_BMPDATA->m_bpp = 1;
}
-#ifdef __WXGTK20__
else if (depth == 32)
{
M_BMPDATA->m_pixbuf = gdk_pixbuf_new( GDK_COLORSPACE_RGB, true,
8, width, height);
M_BMPDATA->m_bpp = 32;
}
-#endif
else
{
M_BMPDATA->m_pixmap = gdk_pixmap_new( wxGetRootWindow()->window, width, height, depth );
wxBitmap bmp;
-#ifdef __WXGTK20__
if (HasPixbuf())
{
bmp.SetWidth(width);
GDK_INTERP_BILINEAR);
}
else
-#endif // __WXGTK20__
{
GdkImage *img = (GdkImage*) NULL;
if (GetPixmap())
}
else
{
-#ifdef __WXGTK20__
if (image.HasAlpha())
return CreateFromImageAsPixbuf(image);
-#endif
+
return CreateFromImageAsPixmap(image);
}
}
return true;
}
-#ifdef __WXGTK20__
bool wxBitmap::CreateFromImageAsPixbuf(const wxImage& image)
{
int width = image.GetWidth();
return true;
}
-#endif // __WXGTK20__
wxImage wxBitmap::ConvertToImage() const
{
return wxNullImage;
}
-#ifdef __WXGTK20__
if (HasPixbuf())
{
GdkPixbuf *pixbuf = GetPixbuf();
}
}
else
-#endif // __WXGTK20__
{
// the colour used as transparent one in wxImage and the one it is
// replaced with when it really occurs in the bitmap
{
return (m_refData != NULL) &&
(
-#ifdef __WXGTK20__
M_BMPDATA->m_pixbuf ||
-#endif
M_BMPDATA->m_bitmap || M_BMPDATA->m_pixmap
);
}
wxBitmap ret( rect.width, rect.height, M_BMPDATA->m_bpp );
wxASSERT_MSG( ret.Ok(), wxT("GetSubBitmap error") );
-#ifdef __WXGTK20__
if (HasPixbuf())
{
GdkPixbuf *pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB,
pixbuf, 0, 0);
}
else
-#endif // __WXGTK20__
{
if (ret.GetPixmap())
{
return true;
}
+#if wxUSE_PALETTE
wxPalette *wxBitmap::GetPalette() const
{
if (!Ok())
{
// TODO
}
+#endif // wxUSE_PALETTE
void wxBitmap::SetHeight( int height )
{
m_refData = new wxBitmapRefData();
M_BMPDATA->m_pixmap = pixmap;
-#ifdef __WXGTK20__
PurgeOtherRepresentations(Pixmap);
-#endif
}
void wxBitmap::SetBitmap( GdkPixmap *bitmap )
m_refData = new wxBitmapRefData();
M_BMPDATA->m_bitmap = bitmap;
-#ifdef __WXGTK20__
PurgeOtherRepresentations(Pixmap);
-#endif
}
GdkPixmap *wxBitmap::GetPixmap() const
{
wxCHECK_MSG( Ok(), (GdkPixmap *) NULL, wxT("invalid bitmap") );
-#ifdef __WXGTK20__
// create the pixmap on the fly if we use Pixbuf representation:
if (HasPixbuf() && !HasPixmap())
{
&M_BMPDATA->m_mask->m_bitmap,
128 /*threshold*/);
}
-#endif // __WXGTK20__
return M_BMPDATA->m_pixmap;
}
return M_BMPDATA->m_bitmap;
}
-#ifdef __WXGTK20__
GdkPixbuf *wxBitmap::GetPixbuf() const
{
wxCHECK_MSG( Ok(), NULL, wxT("invalid bitmap") );
}
}
-#endif // __WXGTK20__
-
void *wxBitmap::GetRawData(wxPixelDataBase& data, int bpp)
{
-#ifdef __WXGTK20__
if (bpp != 32)
return NULL;
data.m_stride = gdk_pixbuf_get_rowstride( pixbuf );
return gdk_pixbuf_get_pixels( pixbuf );
-#else
- return NULL;
-#endif
}
void wxBitmap::UngetRawData(wxPixelDataBase& WXUNUSED(data))
bool wxBitmap::HasAlpha() const
{
-#ifdef __WXGTK20__
return HasPixbuf();
-#else
- return false;
-#endif
}
void wxBitmap::UseAlpha()
{
-#ifdef __WXGTK20__
GetPixbuf();
-#endif
}
//-----------------------------------------------------------------------------
{
// TODO: Insert handler based on GdkPixbufs handler later
}
-
-