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
|
- implemented wxTopLevel::IsMaximized() for GTK+2 and WMs that implement
|
||||||
freedesktop.org's wm-spec (Mart Raudsepp)
|
freedesktop.org's wm-spec (Mart Raudsepp)
|
||||||
- wxEVT_CONTEXT_MENU is now generated for right mouse press, not release
|
- wxEVT_CONTEXT_MENU is now generated for right mouse press, not release
|
||||||
|
- implemented alpha channel support in wxBitmap
|
||||||
|
|
||||||
wxMotif:
|
wxMotif:
|
||||||
|
|
||||||
|
@@ -21,6 +21,10 @@
|
|||||||
#include "wx/palette.h"
|
#include "wx/palette.h"
|
||||||
#include "wx/gdiobj.h"
|
#include "wx/gdiobj.h"
|
||||||
|
|
||||||
|
#ifdef __WXGTK20__
|
||||||
|
typedef struct _GdkPixbuf GdkPixbuf;
|
||||||
|
#endif
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// classes
|
// classes
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -109,9 +113,17 @@ public:
|
|||||||
void SetDepth( int depth );
|
void SetDepth( int depth );
|
||||||
void SetPixmap( GdkPixmap *pixmap );
|
void SetPixmap( GdkPixmap *pixmap );
|
||||||
void SetBitmap( GdkBitmap *bitmap );
|
void SetBitmap( GdkBitmap *bitmap );
|
||||||
|
#ifdef __WXGTK20__
|
||||||
|
void SetPixbuf(GdkPixbuf *pixbuf);
|
||||||
|
#endif
|
||||||
|
|
||||||
GdkPixmap *GetPixmap() const;
|
GdkPixmap *GetPixmap() const;
|
||||||
GdkBitmap *GetBitmap() const;
|
GdkBitmap *GetBitmap() const;
|
||||||
|
bool HasPixmap() const;
|
||||||
|
#ifdef __WXGTK20__
|
||||||
|
bool HasPixbuf() const;
|
||||||
|
GdkPixbuf *GetPixbuf() const;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Basically, this corresponds to Win32 StretchBlt()
|
// Basically, this corresponds to Win32 StretchBlt()
|
||||||
wxBitmap Rescale( int clipx, int clipy, int clipwidth, int clipheight, int width, int height );
|
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);
|
bool CreateFromImage(const wxImage& image, int depth);
|
||||||
|
|
||||||
private:
|
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)
|
DECLARE_DYNAMIC_CLASS(wxBitmap)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -21,6 +21,10 @@
|
|||||||
#include "wx/palette.h"
|
#include "wx/palette.h"
|
||||||
#include "wx/gdiobj.h"
|
#include "wx/gdiobj.h"
|
||||||
|
|
||||||
|
#ifdef __WXGTK20__
|
||||||
|
typedef struct _GdkPixbuf GdkPixbuf;
|
||||||
|
#endif
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// classes
|
// classes
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -109,9 +113,17 @@ public:
|
|||||||
void SetDepth( int depth );
|
void SetDepth( int depth );
|
||||||
void SetPixmap( GdkPixmap *pixmap );
|
void SetPixmap( GdkPixmap *pixmap );
|
||||||
void SetBitmap( GdkBitmap *bitmap );
|
void SetBitmap( GdkBitmap *bitmap );
|
||||||
|
#ifdef __WXGTK20__
|
||||||
|
void SetPixbuf(GdkPixbuf *pixbuf);
|
||||||
|
#endif
|
||||||
|
|
||||||
GdkPixmap *GetPixmap() const;
|
GdkPixmap *GetPixmap() const;
|
||||||
GdkBitmap *GetBitmap() const;
|
GdkBitmap *GetBitmap() const;
|
||||||
|
bool HasPixmap() const;
|
||||||
|
#ifdef __WXGTK20__
|
||||||
|
bool HasPixbuf() const;
|
||||||
|
GdkPixbuf *GetPixbuf() const;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Basically, this corresponds to Win32 StretchBlt()
|
// Basically, this corresponds to Win32 StretchBlt()
|
||||||
wxBitmap Rescale( int clipx, int clipy, int clipwidth, int clipheight, int width, int height );
|
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);
|
bool CreateFromImage(const wxImage& image, int depth);
|
||||||
|
|
||||||
private:
|
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)
|
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
|
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
|
// 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
|
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
|
// remove mask again if any
|
||||||
|
Reference in New Issue
Block a user