Merged sizer fix from stable branch
Added support for transparent wxImage::Paste() git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8206 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -409,9 +409,36 @@ void wxImage::Paste( const wxImage &image, int x, int y )
|
|||||||
source_data += source_step;
|
source_data += source_step;
|
||||||
target_data += target_step;
|
target_data += target_step;
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if (!HasMask() && image.HasMask())
|
||||||
{
|
{
|
||||||
|
unsigned char r = image.GetMaskRed();
|
||||||
|
unsigned char g = image.GetMaskGreen();
|
||||||
|
unsigned char b = image.GetMaskBlue();
|
||||||
|
|
||||||
|
width *= 3;
|
||||||
|
unsigned char* source_data = image.GetData() + xx*3 + yy*3*image.GetWidth();
|
||||||
|
int source_step = image.GetWidth()*3;
|
||||||
|
|
||||||
|
unsigned char* target_data = GetData() + (x+xx)*3 + (y+yy)*3*M_IMGDATA->m_width;
|
||||||
|
int target_step = M_IMGDATA->m_width*3;
|
||||||
|
|
||||||
|
for (int j = 0; j < height; j++)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < width; i+=3)
|
||||||
|
{
|
||||||
|
if ((source_data[i] != r) &&
|
||||||
|
(source_data[i+1] != g) &&
|
||||||
|
(source_data[i+2] != b))
|
||||||
|
{
|
||||||
|
memcpy( target_data+i, source_data+i, 3 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
source_data += source_step;
|
||||||
|
target_data += target_step;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -897,28 +897,22 @@ wxSize wxBoxSizer::CalcMin()
|
|||||||
{
|
{
|
||||||
wxSizerItem *item = (wxSizerItem*) node->Data();
|
wxSizerItem *item = (wxSizerItem*) node->Data();
|
||||||
|
|
||||||
int weight = 1;
|
m_stretchable += item->GetOption();
|
||||||
if (item->GetOption())
|
|
||||||
weight = item->GetOption();
|
|
||||||
|
|
||||||
wxSize size( item->CalcMin() );
|
wxSize size( item->CalcMin() );
|
||||||
|
|
||||||
if (m_orient == wxHORIZONTAL)
|
if (m_orient == wxHORIZONTAL)
|
||||||
{
|
{
|
||||||
m_minWidth += (size.x * weight);
|
m_minWidth += size.x;
|
||||||
m_minHeight = wxMax( m_minHeight, size.y );
|
m_minHeight = wxMax( m_minHeight, size.y );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_minHeight += (size.y * weight);
|
m_minHeight += size.y;
|
||||||
m_minWidth = wxMax( m_minWidth, size.x );
|
m_minWidth = wxMax( m_minWidth, size.x );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item->GetOption())
|
if (item->GetOption() == 0)
|
||||||
{
|
|
||||||
m_stretchable += weight;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
if (m_orient == wxVERTICAL)
|
if (m_orient == wxVERTICAL)
|
||||||
{
|
{
|
||||||
@@ -926,7 +920,7 @@ wxSize wxBoxSizer::CalcMin()
|
|||||||
m_fixedWidth = wxMax( m_fixedWidth, size.x );
|
m_fixedWidth = wxMax( m_fixedWidth, size.x );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_fixedWidth += size.x;
|
m_fixedWidth += size.x;
|
||||||
m_fixedHeight = wxMax( m_fixedHeight, size.y );
|
m_fixedHeight = wxMax( m_fixedHeight, size.y );
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user