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:
@@ -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:
|
||||
|
||||
|
@@ -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)
|
||||
};
|
||||
|
||||
|
@@ -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)
|
||||
};
|
||||
|
||||
|
1346
src/gtk/bitmap.cpp
1346
src/gtk/bitmap.cpp
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
|
1346
src/gtk1/bitmap.cpp
1346
src/gtk1/bitmap.cpp
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
|
Reference in New Issue
Block a user