commit x64 compilation from lulu cause the other branch dont seems to compile properly at home
This commit is contained in:
66
include/engine/ui/widget_drawable.cpp
Normal file
66
include/engine/ui/widget_drawable.cpp
Normal file
@ -0,0 +1,66 @@
|
||||
/* -----------------------------------------------------------------------------
|
||||
GSFramework
|
||||
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
||||
----------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
#include "widget_drawable.h"
|
||||
#include "picture/pict.h"
|
||||
|
||||
using namespace GS;
|
||||
using namespace GS::S2D;
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
void DrawableWidget::Compose(Picture &output, const iRect &clip_rect)
|
||||
{
|
||||
if (hidden || !dirty || !picture)
|
||||
return;
|
||||
|
||||
if (picture)
|
||||
rect.Set(0, 0, picture->GetWidth(), picture->GetHeight());
|
||||
else rect.Set(0, 0, 0, 0);
|
||||
|
||||
iRect out_rect = Widget::FormatOutputRect(rect, clip_rect),
|
||||
blit_rect = out_rect.Intersection(clip_rect);
|
||||
|
||||
if (blit_rect.GetWidth() > rect.GetWidth())
|
||||
blit_rect.ex = blit_rect.sx + rect.GetWidth();
|
||||
if (blit_rect.GetHeight() > rect.GetHeight())
|
||||
blit_rect.ey = blit_rect.sy + rect.GetHeight();
|
||||
|
||||
int src_offsetx = blit_rect.sx - out_rect.sx,
|
||||
src_offsety = blit_rect.sy - out_rect.sy;
|
||||
uchar *ptr = picture->GetData() + (src_offsety * picture->GetWidth() + src_offsetx) * 4,
|
||||
*pds = output.GetData() + (blit_rect.sy * output.GetWidth() + blit_rect.sx) * 4;
|
||||
|
||||
for (int y = 0; y < blit_rect.GetHeight(); ++y)
|
||||
{
|
||||
uchar *psc = ptr, *spt = pds;
|
||||
|
||||
for (int x = 0; x < blit_rect.GetWidth(); ++x)
|
||||
{
|
||||
uchar alpha = psc[3];
|
||||
|
||||
uchar a_blend = Picture::AlphaCompositeAlpha(spt[3], alpha);
|
||||
spt[0] = Picture::AlphaCompositeColor(spt[0], psc[0], spt[3], alpha, a_blend);
|
||||
spt[1] = Picture::AlphaCompositeColor(spt[1], psc[1], spt[3], alpha, a_blend);
|
||||
spt[2] = Picture::AlphaCompositeColor(spt[2], psc[2], spt[3], alpha, a_blend);
|
||||
spt[3] = a_blend;
|
||||
|
||||
spt += 4;
|
||||
psc += 4;
|
||||
}
|
||||
|
||||
ptr += picture->GetWidth() * 4;
|
||||
pds += output.GetWidth() * 4;
|
||||
}
|
||||
rect = out_rect;
|
||||
dirty = false;
|
||||
}
|
||||
DrawableWidget::DrawableWidget(int id) : Widget(id)
|
||||
{
|
||||
type = WidgetTypeDrawable;
|
||||
picture = NULL;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
Reference in New Issue
Block a user