added alpha channel support to wxGTK2's wxBitmap

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@28850 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2004-08-21 22:42:06 +00:00
parent 4fab71288e
commit feac79373c
7 changed files with 1641 additions and 1146 deletions

View File

@@ -249,6 +249,7 @@ wxGTK:
- implemented wxTopLevel::IsMaximized() for GTK+2 and WMs that implement
freedesktop.org's wm-spec (Mart Raudsepp)
- wxEVT_CONTEXT_MENU is now generated for right mouse press, not release
- implemented alpha channel support in wxBitmap
wxMotif:

View File

@@ -21,6 +21,10 @@
#include "wx/palette.h"
#include "wx/gdiobj.h"
#ifdef __WXGTK20__
typedef struct _GdkPixbuf GdkPixbuf;
#endif
//-----------------------------------------------------------------------------
// classes
//-----------------------------------------------------------------------------
@@ -109,9 +113,17 @@ public:
void SetDepth( int depth );
void SetPixmap( GdkPixmap *pixmap );
void SetBitmap( GdkBitmap *bitmap );
#ifdef __WXGTK20__
void SetPixbuf(GdkPixbuf *pixbuf);
#endif
GdkPixmap *GetPixmap() const;
GdkBitmap *GetBitmap() const;
bool HasPixmap() const;
#ifdef __WXGTK20__
bool HasPixbuf() const;
GdkPixbuf *GetPixbuf() const;
#endif
// Basically, this corresponds to Win32 StretchBlt()
wxBitmap Rescale( int clipx, int clipy, int clipwidth, int clipheight, int width, int height );
@@ -120,6 +132,25 @@ protected:
bool CreateFromImage(const wxImage& image, int depth);
private:
// to be called from CreateFromImage only!
bool CreateFromImageAsBitmap(const wxImage& image);
bool CreateFromImageAsPixmap(const wxImage& image);
#ifdef __WXGTK20__
bool CreateFromImageAsPixbuf(const wxImage& image);
enum Representation
{
Pixmap,
Pixbuf
};
// removes other representations from memory, keeping only 'keep'
// (wxBitmap may keep same bitmap e.g. as both pixmap and pixbuf):
void PurgeOtherRepresentations(Representation keep);
friend class wxMemoryDC;
#endif
DECLARE_DYNAMIC_CLASS(wxBitmap)
};

View File

@@ -21,6 +21,10 @@
#include "wx/palette.h"
#include "wx/gdiobj.h"
#ifdef __WXGTK20__
typedef struct _GdkPixbuf GdkPixbuf;
#endif
//-----------------------------------------------------------------------------
// classes
//-----------------------------------------------------------------------------
@@ -109,9 +113,17 @@ public:
void SetDepth( int depth );
void SetPixmap( GdkPixmap *pixmap );
void SetBitmap( GdkBitmap *bitmap );
#ifdef __WXGTK20__
void SetPixbuf(GdkPixbuf *pixbuf);
#endif
GdkPixmap *GetPixmap() const;
GdkBitmap *GetBitmap() const;
bool HasPixmap() const;
#ifdef __WXGTK20__
bool HasPixbuf() const;
GdkPixbuf *GetPixbuf() const;
#endif
// Basically, this corresponds to Win32 StretchBlt()
wxBitmap Rescale( int clipx, int clipy, int clipwidth, int clipheight, int width, int height );
@@ -120,6 +132,25 @@ protected:
bool CreateFromImage(const wxImage& image, int depth);
private:
// to be called from CreateFromImage only!
bool CreateFromImageAsBitmap(const wxImage& image);
bool CreateFromImageAsPixmap(const wxImage& image);
#ifdef __WXGTK20__
bool CreateFromImageAsPixbuf(const wxImage& image);
enum Representation
{
Pixmap,
Pixbuf
};
// removes other representations from memory, keeping only 'keep'
// (wxBitmap may keep same bitmap e.g. as both pixmap and pixbuf):
void PurgeOtherRepresentations(Representation keep);
friend class wxMemoryDC;
#endif
DECLARE_DYNAMIC_CLASS(wxBitmap)
};

File diff suppressed because it is too large Load Diff

View File

@@ -1147,7 +1147,21 @@ void wxWindowDC::DoDrawBitmap( const wxBitmap &bitmap,
}
else
{
gdk_draw_pixmap( m_window, m_penGC, use_bitmap.GetPixmap(), 0, 0, xx, yy, -1, -1 );
#if GTK_CHECK_VERSION(2,2,0)
if (use_bitmap.HasPixbuf())
{
gdk_draw_pixbuf(m_window, m_penGC,
use_bitmap.GetPixbuf(),
0, 0, xx, yy, -1, -1,
GDK_RGB_DITHER_NORMAL, xx, yy);
}
else
#endif
{
gdk_draw_pixmap(m_window, m_penGC,
use_bitmap.GetPixmap(),
0, 0, xx, yy, -1, -1);
}
}
// remove mask again if any

File diff suppressed because it is too large Load Diff

View File

@@ -1147,7 +1147,21 @@ void wxWindowDC::DoDrawBitmap( const wxBitmap &bitmap,
}
else
{
gdk_draw_pixmap( m_window, m_penGC, use_bitmap.GetPixmap(), 0, 0, xx, yy, -1, -1 );
#if GTK_CHECK_VERSION(2,2,0)
if (use_bitmap.HasPixbuf())
{
gdk_draw_pixbuf(m_window, m_penGC,
use_bitmap.GetPixbuf(),
0, 0, xx, yy, -1, -1,
GDK_RGB_DITHER_NORMAL, xx, yy);
}
else
#endif
{
gdk_draw_pixmap(m_window, m_penGC,
use_bitmap.GetPixmap(),
0, 0, xx, yy, -1, -1);
}
}
// remove mask again if any