[DEV] API change: change gravity methodologie
This commit is contained in:
parent
77bc863ab9
commit
2e1644be3e
@ -112,22 +112,7 @@ void ewol::widget::Container::onChangeSize() {
|
||||
vec2 origin = m_origin+m_offset;
|
||||
vec2 minSize = m_subWidget->getCalculateMinSize();
|
||||
bvec2 expand = m_subWidget->getExpand();
|
||||
if ( expand.x() == false
|
||||
|| minSize.x()>m_size.x()) {
|
||||
if (m_gravity == ewol::gravityCenter) {
|
||||
origin -= vec2((minSize.x() - m_size.x())*0.5f, 0.0f);
|
||||
} else if (((int32_t)m_gravity & (int32_t)ewol::gravityRight) != 0) {
|
||||
origin -= vec2((minSize.x() - m_size.x()), 0.0f);
|
||||
}
|
||||
}
|
||||
if( expand.y() == false
|
||||
|| minSize.y()>m_size.y()) {
|
||||
if (m_gravity == ewol::gravityCenter) {
|
||||
origin -= vec2(0.0f, (minSize.y() - m_size.y())*0.5f);
|
||||
} else if (((int32_t)m_gravity & (int32_t)ewol::gravityTop) != 0) {
|
||||
origin -= vec2(0.0f, (minSize.y() - m_size.y()));
|
||||
}
|
||||
}
|
||||
origin += ewol::gravityGenerateDelta(m_gravity, minSize - m_size);
|
||||
m_subWidget->setOrigin(origin);
|
||||
m_subWidget->setSize(m_size);
|
||||
m_subWidget->onChangeSize();
|
||||
|
@ -132,22 +132,7 @@ ewol::Padding ewol::widget::Container2::onChangeSizePadded(const ewol::Padding&
|
||||
vec2 origin2 = origin+m_offset;
|
||||
vec2 minSize = m_subWidget[iii]->getCalculateMinSize();
|
||||
bvec2 expand = m_subWidget[iii]->getExpand();
|
||||
if ( expand.x() == false
|
||||
|| minSize.x() > localAvaillable.x()) {
|
||||
if (m_gravity == ewol::gravityCenter) {
|
||||
origin2 -= vec2((minSize.x() - localAvaillable.x())/2.0f, 0);
|
||||
} else if (((int32_t)m_gravity & (int32_t)ewol::gravityRight) != 0) {
|
||||
origin2 -= vec2((minSize.x() - localAvaillable.x()), 0);
|
||||
}
|
||||
}
|
||||
if( expand.y() == false
|
||||
|| minSize.y() > localAvaillable.y()) {
|
||||
if (m_gravity == ewol::gravityCenter) {
|
||||
origin2 -= vec2(0, (minSize.y() - localAvaillable.y())/2.0f);
|
||||
} else if (((int32_t)m_gravity & (int32_t)ewol::gravityTop) != 0) {
|
||||
origin2 -= vec2(0, (minSize.y() - localAvaillable.y()));
|
||||
}
|
||||
}
|
||||
origin2 += ewol::gravityGenerateDelta(m_gravity, minSize - localAvaillable);
|
||||
m_subWidget[iii]->setOrigin(m_origin + origin);
|
||||
m_subWidget[iii]->setSize(subElementSize);
|
||||
m_subWidget[iii]->onChangeSize();
|
||||
|
@ -73,49 +73,16 @@ void ewol::widget::Image::onRegenerateDisplay() {
|
||||
vec2 ratioSizeDisplayRequested = m_posStop.get() - m_posStart.get();
|
||||
//imageRealSizeMax *= ratioSizeDisplayRequested;
|
||||
|
||||
vec2 delta = ewol::gravityGenerateDelta(m_gravity, m_size-m_imageRenderSize);
|
||||
if (m_userFill->x() == true) {
|
||||
imageRealSize.setX(imageRealSizeMax.x());
|
||||
} else {
|
||||
switch(m_gravity) {
|
||||
case gravityCenter:
|
||||
case gravityTop:
|
||||
case gravityButtom:
|
||||
origin.setX(origin.x() + (m_size.x()-m_imageRenderSize.x())*0.5f);
|
||||
break;
|
||||
case gravityTopLeft:
|
||||
case gravityButtomLeft:
|
||||
case gravityLeft:
|
||||
// nothing to do ...
|
||||
break;
|
||||
case gravityTopRight:
|
||||
case gravityRight:
|
||||
case gravityButtomRight:
|
||||
origin.setX(origin.x() + (m_size.x()-m_imageRenderSize.x())*0.5f);
|
||||
break;
|
||||
}
|
||||
delta.setX(0.0);
|
||||
}
|
||||
if (m_userFill->y() == true) {
|
||||
imageRealSize.setY(imageRealSizeMax.y());
|
||||
} else {
|
||||
//
|
||||
switch(m_gravity) {
|
||||
case gravityCenter:
|
||||
case gravityRight:
|
||||
case gravityLeft:
|
||||
origin.setY(origin.y() + (m_size.y()-m_imageRenderSize.y())*0.5f);
|
||||
break;
|
||||
case gravityTopLeft:
|
||||
case gravityTop:
|
||||
case gravityTopRight:
|
||||
origin.setY(origin.y() + (m_size.y()-m_imageRenderSize.y()));
|
||||
break;
|
||||
case gravityButtomRight:
|
||||
case gravityButtom:
|
||||
case gravityButtomLeft:
|
||||
// nothing to do ...
|
||||
break;
|
||||
}
|
||||
delta.setY(0.0);
|
||||
}
|
||||
origin += delta;
|
||||
|
||||
if (m_keepRatio == true) {
|
||||
vec2 tmpSize = m_compositing.getRealSize();
|
||||
|
@ -167,8 +167,26 @@ void ewol::widget::Sizer::onChangeSize() {
|
||||
}
|
||||
it->setSize(vec2ClipInt32(it->getSize()));
|
||||
}
|
||||
// -7- Set the origin for every element with the gravity update:
|
||||
vec2 tmpOrigin = m_origin + tmpBorderSize;
|
||||
// -7- get under Size
|
||||
vec2 underSize(0,0);
|
||||
for (auto &it : m_subWidget) {
|
||||
if (it == nullptr) {
|
||||
continue;
|
||||
}
|
||||
vec2 size = it->getSize();
|
||||
if (m_mode == ewol::widget::Sizer::modeVert) {
|
||||
underSize += vec2(0.0f, size.y());
|
||||
underSize.setX(std::max(underSize.x(), size.x()));
|
||||
} else {
|
||||
underSize += vec2(size.x(), 0.0f);
|
||||
underSize.setY(std::max(underSize.y(), size.y()));
|
||||
}
|
||||
}
|
||||
vec2 deltas = localWidgetSize - underSize;
|
||||
|
||||
// -8- Calculate the local origin, depending of the gravity:
|
||||
vec2 tmpOrigin = m_origin + tmpBorderSize + ewol::gravityGenerateDelta(m_gravity, deltas);
|
||||
// -9- Set sub widget origin:
|
||||
for (auto &it : m_subWidget) {
|
||||
if (it == nullptr) {
|
||||
continue;
|
||||
@ -182,7 +200,7 @@ void ewol::widget::Sizer::onChangeSize() {
|
||||
}
|
||||
// TODO : Set origin with the correct gravity
|
||||
}
|
||||
// -8- Update all subSize at every element:
|
||||
// -10- Update all subSize at every element:
|
||||
for (auto &it : m_subWidget) {
|
||||
if (it == nullptr) {
|
||||
continue;
|
||||
|
@ -34,23 +34,23 @@ void ewol::DrawProperty::limit(const vec2& _origin, const vec2& _size) {
|
||||
|
||||
std::string ewol::gravityToString(const enum ewol::gravity _obj) {
|
||||
switch(_obj) {
|
||||
case ewol::gravityCenter:
|
||||
case ewol::gravity_center:
|
||||
return "center";
|
||||
case ewol::gravityTopLeft:
|
||||
case ewol::gravity_topLeft:
|
||||
return "top-left";
|
||||
case ewol::gravityTop:
|
||||
case ewol::gravity_top:
|
||||
return "top";
|
||||
case ewol::gravityTopRight:
|
||||
case ewol::gravity_topRight:
|
||||
return "top-right";
|
||||
case ewol::gravityRight:
|
||||
case ewol::gravity_right:
|
||||
return "right";
|
||||
case ewol::gravityButtomRight:
|
||||
case ewol::gravity_buttomRight:
|
||||
return "buttom-right";
|
||||
case ewol::gravityButtom:
|
||||
case ewol::gravity_buttom:
|
||||
return "buttom";
|
||||
case ewol::gravityButtomLeft:
|
||||
case ewol::gravity_buttomLeft:
|
||||
return "buttom-left";
|
||||
case ewol::gravityLeft:
|
||||
case ewol::gravity_left:
|
||||
return "left";
|
||||
}
|
||||
return "unknow";
|
||||
@ -58,25 +58,47 @@ std::string ewol::gravityToString(const enum ewol::gravity _obj) {
|
||||
|
||||
enum ewol::gravity ewol::stringToGravity(const std::string& _obj) {
|
||||
if (_obj == "center") {
|
||||
return ewol::gravityCenter;
|
||||
return ewol::gravity_center;
|
||||
} else if (_obj == "top-left") {
|
||||
return ewol::gravityTopLeft;
|
||||
return ewol::gravity_topLeft;
|
||||
} else if (_obj == "top") {
|
||||
return ewol::gravityTop;
|
||||
return ewol::gravity_top;
|
||||
} else if (_obj == "top-right") {
|
||||
return ewol::gravityTopRight;
|
||||
return ewol::gravity_topRight;
|
||||
} else if (_obj == "right") {
|
||||
return ewol::gravityRight;
|
||||
return ewol::gravity_right;
|
||||
} else if (_obj == "buttom-right") {
|
||||
return ewol::gravityButtomRight;
|
||||
return ewol::gravity_buttomRight;
|
||||
} else if (_obj == "buttom") {
|
||||
return ewol::gravityButtom;
|
||||
return ewol::gravity_buttom;
|
||||
} else if (_obj == "buttom-left") {
|
||||
return ewol::gravityButtomLeft;
|
||||
return ewol::gravity_buttomLeft;
|
||||
} else if (_obj == "left") {
|
||||
return ewol::gravityLeft;
|
||||
return ewol::gravity_left;
|
||||
}
|
||||
return ewol::gravityCenter;
|
||||
return ewol::gravity_center;
|
||||
}
|
||||
vec2 ewol::gravityGenerateDelta(const enum ewol::gravity _gravity, const vec2& _deltas) {
|
||||
vec2 out(0.0f,0.0f);
|
||||
if (_deltas.x() > 0.0001f) {
|
||||
if ((uint32_t(_gravity) & uint32_t(ewol::gravity_left)) != 0) {
|
||||
// nothing to do
|
||||
} else if ((uint32_t(_gravity) & uint32_t(ewol::gravity_right)) != 0) {
|
||||
out = vec2(int32_t(_deltas.x()), 0.0f);
|
||||
} else {
|
||||
out = vec2(int32_t(_deltas.x()*0.5f), 0.0f);
|
||||
}
|
||||
}
|
||||
if (_deltas.y() > 0.0001f) {
|
||||
if ((uint32_t(_gravity) & uint32_t(ewol::gravity_buttom)) != 0) {
|
||||
// nothing to do
|
||||
} else if ((uint32_t(_gravity) & uint32_t(ewol::gravity_top)) != 0) {
|
||||
out += vec2(0.0f, int32_t(_deltas.y()));
|
||||
} else {
|
||||
out += vec2(0.0f, int32_t(_deltas.y()*0.5f));
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
std::ostream& ewol::operator <<(std::ostream& _os, const enum ewol::gravity _obj) {
|
||||
@ -99,7 +121,7 @@ ewol::Widget::Widget() :
|
||||
m_userExpand(*this, "expand", bvec2(false,false), "Request the widget Expand size wile space is available"),
|
||||
m_userFill(*this, "fill", bvec2(true,true), "Fill the widget available size"),
|
||||
m_hide(*this, "hide", false, "The widget start hided"),
|
||||
m_gravity(*this, "gravity", ewol::gravityButtomLeft, "Gravity orientation"),
|
||||
m_gravity(*this, "gravity", ewol::gravity_buttomLeft, "Gravity orientation"),
|
||||
m_hasFocus(false),
|
||||
m_canFocus(*this, "focus", false, "enable the widget to have the focus capacity"), // TODO : je pense que c'est une erreur, c'st surement un event to get the cocus ...
|
||||
m_limitMouseEvent(3),
|
||||
@ -120,15 +142,15 @@ ewol::Widget::Widget() :
|
||||
addObjectType("ewol::Widget");
|
||||
|
||||
// TODO : Set a static interface for list ==> this methode create a multiple allocation
|
||||
m_gravity.add(ewol::gravityCenter, "center");
|
||||
m_gravity.add(ewol::gravityTopLeft, "top-left");
|
||||
m_gravity.add(ewol::gravityTop, "top");
|
||||
m_gravity.add(ewol::gravityTopRight, "top-right");
|
||||
m_gravity.add(ewol::gravityRight, "right");
|
||||
m_gravity.add(ewol::gravityButtomRight, "buttom-right");
|
||||
m_gravity.add(ewol::gravityButtom, "buttom");
|
||||
m_gravity.add(ewol::gravityButtomLeft, "buttom-left");
|
||||
m_gravity.add(ewol::gravityLeft, "left");
|
||||
m_gravity.add(ewol::gravity_center, "center");
|
||||
m_gravity.add(ewol::gravity_topLeft, "top-left");
|
||||
m_gravity.add(ewol::gravity_top, "top");
|
||||
m_gravity.add(ewol::gravity_topRight, "top-right");
|
||||
m_gravity.add(ewol::gravity_right, "right");
|
||||
m_gravity.add(ewol::gravity_buttomRight, "buttom-right");
|
||||
m_gravity.add(ewol::gravity_buttom, "buttom");
|
||||
m_gravity.add(ewol::gravity_buttomLeft, "buttom-left");
|
||||
m_gravity.add(ewol::gravity_left, "left");
|
||||
m_annimationTypeStart.add(0, "none");
|
||||
m_annimationTypeStop.add(0, "none");
|
||||
}
|
||||
@ -630,6 +652,7 @@ void ewol::Widget::onParameterChangeValue(const ewol::parameter::Ref& _paramPoin
|
||||
}
|
||||
} else if (_paramPointer == m_gravity) {
|
||||
markToRedraw();
|
||||
requestUpdateSize();
|
||||
} else if (_paramPointer == m_hide) {
|
||||
markToRedraw();
|
||||
requestUpdateSize();
|
||||
|
@ -81,19 +81,20 @@ namespace ewol {
|
||||
* @not-in-doc
|
||||
*/
|
||||
enum gravity {
|
||||
gravityCenter=0x00, //!< gravity is in certer
|
||||
gravityTopLeft=0x05,
|
||||
gravityTop=0x01,
|
||||
gravityTopRight=0x03,
|
||||
gravityRight=0x02,
|
||||
gravityButtomRight=0x06,
|
||||
gravityButtom=0x04,
|
||||
gravityButtomLeft=0x0C,
|
||||
gravityLeft=0x08,
|
||||
gravity_center = 0x00, //!< gravity is in center
|
||||
gravity_top = 0x01, //!< gravity is in top
|
||||
gravity_buttom = 0x02, //!< gravity is in buttom
|
||||
gravity_right = 0x04, //!< gravity is in right
|
||||
gravity_left = 0x08, //!< gravity is in left
|
||||
gravity_topRight = gravity_top|gravity_right, //!< gravity is in top-right
|
||||
gravity_topLeft = gravity_top|gravity_left, //!< gravity is in top-left
|
||||
gravity_buttomRight = gravity_buttom|gravity_right, //!< gravity is in buttom-right
|
||||
gravity_buttomLeft = gravity_buttom|gravity_left, //!< gravity is in buttom-left
|
||||
};
|
||||
std::ostream& operator <<(std::ostream& _os, const enum ewol::gravity _obj);
|
||||
std::string gravityToString(const enum ewol::gravity _obj);
|
||||
enum ewol::gravity stringToGravity(const std::string& _obj);
|
||||
vec2 gravityGenerateDelta(const enum ewol::gravity _gravity, const vec2& _deltas);
|
||||
/**
|
||||
* @not-in-doc
|
||||
*/
|
||||
|
@ -43,6 +43,7 @@ static const char * l_eventChangeWidgetPrevious = "event-change-widget-test-pre
|
||||
#define __class__ "MainWindows"
|
||||
|
||||
appl::MainWindows::MainWindows() :
|
||||
m_gravity(ewol::gravity_buttomLeft),
|
||||
m_idWidget(0) {
|
||||
APPL_DEBUG("CREATE WINDOWS ... ");
|
||||
addObjectType("appl::MainWindows");
|
||||
@ -56,11 +57,11 @@ void appl::MainWindows::init() {
|
||||
externSubBind(m_composer, ewol::widget::Button, "appl-theme-toggle", signalValue, shared_from_this(), &appl::MainWindows::onCallbackThemeChange);
|
||||
externSubBind(m_composer, ewol::widget::Button, "appl-previous-widget", signalPressed, shared_from_this(), &appl::MainWindows::onCallbackWidgetChange, -1);
|
||||
externSubBind(m_composer, ewol::widget::Button, "appl-next-widget", signalPressed, shared_from_this(), &appl::MainWindows::onCallbackWidgetChange, 1);
|
||||
externSubBind(m_composer, ewol::widget::Button, "appl-next-gravity", signalPressed, shared_from_this(), &appl::MainWindows::onCallbackGravityChange);
|
||||
|
||||
m_sizerVert = std::dynamic_pointer_cast<ewol::widget::Sizer>(m_composer->getSubObjectNamed("appl-upper-test-widget"));
|
||||
m_sizerDynamic = std::dynamic_pointer_cast<ewol::widget::Sizer>(m_composer->getSubObjectNamed("appl-dynamic-config"));
|
||||
m_subWidget = std::dynamic_pointer_cast<ewol::Widget>(m_composer->getSubObjectNamed("[TEST]TO-TEST"));
|
||||
m_testName = std::dynamic_pointer_cast<ewol::widget::Label>(m_composer->getSubObjectNamed("appl-label-test"));
|
||||
}
|
||||
|
||||
void appl::MainWindows::onCallbackThemeChange(const bool& _value) {
|
||||
@ -74,6 +75,40 @@ void appl::MainWindows::onCallbackThemeChange(const bool& _value) {
|
||||
ewol::getContext().forceRedrawAll();
|
||||
}
|
||||
|
||||
void appl::MainWindows::onCallbackGravityChange() {
|
||||
switch(m_gravity) {
|
||||
case ewol::gravity_center:
|
||||
m_gravity = ewol::gravity_topLeft;
|
||||
break;
|
||||
case ewol::gravity_topLeft:
|
||||
m_gravity = ewol::gravity_top;
|
||||
break;
|
||||
case ewol::gravity_top:
|
||||
m_gravity = ewol::gravity_topRight;
|
||||
break;
|
||||
case ewol::gravity_topRight:
|
||||
m_gravity = ewol::gravity_right;
|
||||
break;
|
||||
case ewol::gravity_right:
|
||||
m_gravity = ewol::gravity_buttomRight;
|
||||
break;
|
||||
case ewol::gravity_buttomRight:
|
||||
m_gravity = ewol::gravity_buttom;
|
||||
break;
|
||||
case ewol::gravity_buttom:
|
||||
m_gravity = ewol::gravity_buttomLeft;
|
||||
break;
|
||||
case ewol::gravity_buttomLeft:
|
||||
m_gravity = ewol::gravity_left;
|
||||
break;
|
||||
case ewol::gravity_left:
|
||||
m_gravity = ewol::gravity_center;
|
||||
break;
|
||||
}
|
||||
parameterSetOnWidgetNamed("appl-upper-test-widget", "gravity", ewol::gravityToString(m_gravity));
|
||||
parameterSetOnWidgetNamed("appl-next-gravity-label", "value", "Next gravity<br/>(" + ewol::gravityToString(m_gravity) + ")");
|
||||
}
|
||||
|
||||
void appl::MainWindows::onCallbackWidgetChange(int32_t _increment) {
|
||||
m_idWidget += _increment;
|
||||
std::shared_ptr<ewol::Widget> oldWidget = m_subWidget;
|
||||
@ -124,9 +159,7 @@ void appl::MainWindows::onCallbackWidgetChange(int32_t _increment) {
|
||||
if (m_subWidget != nullptr) {
|
||||
m_sizerVert->subWidgetReplace(oldWidget, m_subWidget);
|
||||
}
|
||||
if (m_testName!=nullptr) {
|
||||
m_testName->setLabel("TestButton");
|
||||
};
|
||||
parameterSetOnWidgetNamed("appl-label-test", "value", tmpDescription);
|
||||
updateProperty();
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@ namespace appl {
|
||||
std::shared_ptr<ewol::widget::Sizer> m_sizerVert;
|
||||
std::shared_ptr<ewol::widget::Sizer> m_sizerDynamic;
|
||||
std::shared_ptr<ewol::Widget> m_subWidget;
|
||||
std::shared_ptr<ewol::widget::Label> m_testName;
|
||||
ewol::gravity m_gravity;
|
||||
int32_t m_idWidget;
|
||||
public:
|
||||
// Constructeur
|
||||
@ -32,6 +32,7 @@ namespace appl {
|
||||
DECLARE_FACTORY(MainWindows);
|
||||
~MainWindows() {};
|
||||
protected:
|
||||
void onCallbackGravityChange();
|
||||
void onCallbackThemeChange(const bool& _value);
|
||||
void onCallbackWidgetChange(int32_t _increment);
|
||||
void updateProperty();
|
||||
|
@ -25,6 +25,9 @@
|
||||
<button name="appl-next-widget">
|
||||
<label expand="false,false" fill="true,true">Next Widget</label>
|
||||
</button>
|
||||
<button name="appl-next-gravity">
|
||||
<label name="appl-next-gravity-label" expand="false,false" fill="true,true">Next gravity<br/>(Buttom-Left)</label>
|
||||
</button>
|
||||
<label name="appl-label-test" expand="true,false" fill="true,true">Test :</label>
|
||||
<spacer expand="true,true"/>
|
||||
</sizer>
|
||||
|
Loading…
x
Reference in New Issue
Block a user