commit x64 compilation from lulu cause the other branch dont seems to compile properly at home
This commit is contained in:
102
include/engine/ui/widget_staticcontainer.cpp
Normal file
102
include/engine/ui/widget_staticcontainer.cpp
Normal file
@ -0,0 +1,102 @@
|
||||
/* -----------------------------------------------------------------------------
|
||||
GSFramework
|
||||
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
||||
----------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
#include "ui/widget_staticcontainer.h"
|
||||
#include "log/log.h"
|
||||
|
||||
using namespace GS;
|
||||
using namespace GS::S2D;
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
ContainerCell *ContainerWidget::GetCell(const Widget *widget) const
|
||||
//-------------------------------------------------------------------------
|
||||
{
|
||||
ListForeachPtr(ContainerCell *, cell, cell_list)
|
||||
if (cell->widget == widget)
|
||||
return cell;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
Widget *ContainerWidget::Add(Widget *widget, const iRect &cell_rect)
|
||||
{
|
||||
if (!widget)
|
||||
__ERR__(__LOG_E__ << "Cannot create a cell for a NULL widget.\n", NULL)
|
||||
|
||||
ContainerCell *cell = new ContainerCell;
|
||||
if (!cell)
|
||||
__ERR__(__LOG_E__ << "Failed to allocate new container cell.\n", NULL)
|
||||
|
||||
widget->SetParent(this);
|
||||
|
||||
cell->cell_rect = cell_rect;
|
||||
cell->widget = widget;
|
||||
cell_list.Add(cell, true, false);
|
||||
|
||||
children.Add(widget);
|
||||
|
||||
return widget;
|
||||
}
|
||||
bool ContainerWidget::Remove(Widget *widget)
|
||||
{
|
||||
ContainerCell *e = GetCell(widget);
|
||||
if (!e)
|
||||
return false;
|
||||
|
||||
cell_list.Remove(e);
|
||||
_safe_delete(e);
|
||||
|
||||
children.Remove(widget);
|
||||
return true;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------
|
||||
void ContainerWidget::Invalidate()
|
||||
//------------------------------------------------
|
||||
{
|
||||
ListForeachPtr(ContainerCell *, cell, cell_list)
|
||||
cell->widget->Invalidate();
|
||||
Widget::Invalidate();
|
||||
}
|
||||
|
||||
//---------------------------------------------
|
||||
void ContainerWidget::Refresh()
|
||||
//---------------------------------------------
|
||||
{
|
||||
ListForeachPtr(ContainerCell *, cell, cell_list)
|
||||
{
|
||||
cell->widget->Refresh();
|
||||
if (cell->widget->IsDirty())
|
||||
dirty = true;
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
void ContainerWidget::Compose(Picture &output, const iRect &out_rect)
|
||||
{
|
||||
if (hidden || !dirty || !cell_list.GetCount())
|
||||
return;
|
||||
|
||||
rect = out_rect;
|
||||
ListForeachPtr(ContainerCell *, cell, cell_list)
|
||||
if (!cell->widget->IsHidden())
|
||||
cell->widget->Compose(output, cell->cell_rect.Offset(rect.sx, rect.sy));
|
||||
else
|
||||
cell->widget->Validate();
|
||||
|
||||
dirty = false;
|
||||
}
|
||||
ContainerWidget::~ContainerWidget()
|
||||
{
|
||||
/*
|
||||
Only cells are deleted here since children are handled by the base
|
||||
Widget class destructor.
|
||||
*/
|
||||
ListDeleteAllPtr(ContainerCell *, cell_list)
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
Reference in New Issue
Block a user