From 1988baa62b8aa90e270bfb669849af7c3f03448d Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 9 Feb 2008 15:32:04 +0000 Subject: [PATCH] added alpha support to wxImage::Paste() (patch 1883497, bug 1831612) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@51617 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 1 + src/common/image.cpp | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/docs/changes.txt b/docs/changes.txt index 442fdde907..68c25e76dd 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -114,6 +114,7 @@ All (GUI): charset in ANSI build. - wxGrid now indicates focus by using different colour for selection and hiding cell cursor when it doesn't have focus. +- Added alpha support to wxImage::Paste() (Steven Van Ingelgem) All (Unix): diff --git a/src/common/image.cpp b/src/common/image.cpp index 239d754c5c..75b99ff2eb 100644 --- a/src/common/image.cpp +++ b/src/common/image.cpp @@ -1289,6 +1289,26 @@ void wxImage::Paste( const wxImage &image, int x, int y ) return; } + // Copy over the alpha channel from the original image + if ( image.HasAlpha() ) + { + if ( !HasAlpha() ) + InitAlpha(); + + unsigned char* source_data = image.GetAlpha() + xx + yy*image.GetWidth(); + int source_step = image.GetWidth(); + + unsigned char* target_data = GetAlpha() + (x+xx) + (y+yy)*M_IMGDATA->m_width; + int target_step = M_IMGDATA->m_width; + + for (int j = 0; j < height; j++, + source_data += source_step, + target_data += target_step) + { + memcpy( target_data, source_data, width ); + } + } + if (!HasMask() && image.HasMask()) { unsigned char r = image.GetMaskRed();