111 lines
2.9 KiB
C++
111 lines
2.9 KiB
C++
/**
|
|
* @author Edouard DUPIN
|
|
*
|
|
* @copyright 2011, Edouard DUPIN, all right reserved
|
|
*
|
|
* @license BSD v3 (see license file)
|
|
*/
|
|
|
|
#include <ewol/widget/PopUp.h>
|
|
#include <ewol/widget/WidgetManager.h>
|
|
#include <ewol/compositing/Drawing.h>
|
|
|
|
#undef __class__
|
|
#define __class__ "PopUp"
|
|
|
|
widget::PopUp::PopUp(void)
|
|
{
|
|
m_userExpand.setValue(false, false);
|
|
SetMinSize(ewol::Dimension(vec2(80,80),ewol::Dimension::Pourcent));
|
|
|
|
m_colorBackGroung = draw::color::white;
|
|
m_colorEmptyArea = draw::color::black;
|
|
m_colorEmptyArea.a = 0x7F;
|
|
m_colorBorder = draw::color::black;
|
|
m_colorBorder.a = 0x7F;
|
|
}
|
|
|
|
widget::PopUp::~PopUp(void)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
void widget::PopUp::CalculateSize(const vec2& _availlable)
|
|
{
|
|
ewol::Widget::CalculateSize(_availlable);
|
|
m_size = _availlable;
|
|
if (NULL != m_subWidget) {
|
|
vec2 subElementSize = m_minSize;
|
|
vec2 subElementOrigin = m_origin + (m_size-m_minSize)/2.0f;
|
|
|
|
vec2 subWidgetSize = m_subWidget->GetCalculateMinSize();
|
|
if (true == m_subWidget->CanExpand().x()) {
|
|
subWidgetSize.setX(m_minSize.x());
|
|
}
|
|
if (true == m_subWidget->CanExpand().y()) {
|
|
subWidgetSize.setY(m_minSize.y());
|
|
}
|
|
// limit the size of the element :
|
|
subWidgetSize.setMin(m_minSize);
|
|
// posiition at a int32_t pos :
|
|
subWidgetSize = vec2ClipInt32(subWidgetSize);
|
|
|
|
// set config to the Sub-widget
|
|
vec2 subWidgetOrigin = m_origin + (m_size-subWidgetSize)/2.0f;
|
|
subWidgetOrigin = vec2ClipInt32(subWidgetOrigin);
|
|
|
|
m_subWidget->SetOrigin(subWidgetOrigin);
|
|
m_subWidget->CalculateSize(subWidgetSize);
|
|
}
|
|
MarkToRedraw();
|
|
}
|
|
|
|
void widget::PopUp::SystemDraw(const ewol::DrawProperty& _displayProp)
|
|
{
|
|
ewol::Widget::SystemDraw(_displayProp);
|
|
if (NULL != m_subWidget) {
|
|
m_subWidget->SystemDraw(_displayProp);
|
|
}
|
|
}
|
|
|
|
void widget::PopUp::OnDraw(void)
|
|
{
|
|
m_compositing.Draw();
|
|
}
|
|
|
|
#define BORDER_SIZE_TMP (4)
|
|
void widget::PopUp::OnRegenerateDisplay(void)
|
|
{
|
|
if (true == NeedRedraw()) {
|
|
m_compositing.Clear();
|
|
m_compositing.SetColor(m_colorEmptyArea);
|
|
m_compositing.SetPos(vec3(0,0,0));
|
|
m_compositing.RectangleWidth(vec3(m_size.x(), m_size.y(), 0));
|
|
// set the area in white ...
|
|
if (NULL != m_subWidget) {
|
|
vec2 tmpSize = m_subWidget->GetSize();
|
|
vec2 tmpOrigin = m_subWidget->GetOrigin();
|
|
m_compositing.SetColor(m_colorBorder);
|
|
m_compositing.SetPos(vec3(tmpOrigin.x()-BORDER_SIZE_TMP, tmpOrigin.y()-BORDER_SIZE_TMP,0) );
|
|
m_compositing.RectangleWidth(vec3(tmpSize.x()+2*BORDER_SIZE_TMP, tmpSize.y()+2*BORDER_SIZE_TMP, 0) );
|
|
m_compositing.SetColor(m_colorBackGroung);
|
|
m_compositing.SetPos(vec3(tmpOrigin.x(), tmpOrigin.y(),0) );
|
|
m_compositing.RectangleWidth(vec3(tmpSize.x(), tmpSize.y(), 0) );
|
|
}
|
|
}
|
|
// SUBwIDGET GENERATION ...
|
|
if (NULL != m_subWidget) {
|
|
m_subWidget->OnRegenerateDisplay();
|
|
}
|
|
}
|
|
|
|
ewol::Widget* widget::PopUp::GetWidgetAtPos(const vec2& pos)
|
|
{
|
|
ewol::Widget* val = widget::Container::GetWidgetAtPos(pos);
|
|
if (NULL != val) {
|
|
return val;
|
|
}
|
|
return this;
|
|
}
|