[DEV] extract gravity from widget

This commit is contained in:
Edouard DUPIN 2016-02-04 23:12:36 +01:00
parent 2e1644be3e
commit 3c9851ecf5
9 changed files with 292 additions and 203 deletions

26
ewol/DrawProperty.cpp Normal file
View File

@ -0,0 +1,26 @@
/**
* @author Edouard DUPIN
*
* @copyright 2011, Edouard DUPIN, all right reserved
*
* @license APACHE v2.0 (see license file)
*/
#include <ewol/DrawProperty.h>
#include <ewol/debug.h>
#undef __class__
#define __class__ "DrawProperty"
std::ostream& ewol::operator <<(std::ostream& _os, const ewol::DrawProperty& _obj) {
_os << "{ windowsSize=" << _obj.m_windowsSize << " start=" << _obj.m_origin << " stop=" << (_obj.m_origin+_obj.m_size) << "}";
return _os;
}
void ewol::DrawProperty::limit(const vec2& _origin, const vec2& _size) {
m_size += m_origin;
m_origin.setMax(_origin);
m_size.setMin(_origin+_size);
m_size -= m_origin;
}

50
ewol/DrawProperty.h Normal file
View File

@ -0,0 +1,50 @@
/**
* @author Edouard DUPIN
*
* @copyright 2011, Edouard DUPIN, all right reserved
*
* @license APACHE v2.0 (see license file)
*/
#pragma once
#include <etk/types.h>
#include <etk/math/Vector2D.h>
namespace ewol {
/**
* @not-in-doc
*/
class DrawProperty{
/*
/--> m_windowsSize
*--------------------------------------------------*
| g |
| |
| m_size |
| / |
| o-------------------o |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| o-------------------o |
| / |
| m_origin |
| |
*--------------------------------------------------*
/
(0,0)
*/
public :
ivec2 m_windowsSize; //!< Windows compleate size
ivec2 m_origin; //!< Windows clipping upper widget (can not be <0)
ivec2 m_size; //!< Windows clipping upper widget (can not be <0 and >m_windowsSize)
void limit(const vec2& _origin, const vec2& _size);
};
std::ostream& operator <<(std::ostream& _os, const ewol::DrawProperty& _obj);
}

View File

@ -8,6 +8,76 @@
#include <ewol/Padding.h>
ewol::Padding::Padding() {
// nothing to do...
}
ewol::Padding::Padding(float _xl, float _yt, float _xr, float _yb) {
setValue(_xl, _yt, _xr, _yb);
}
void ewol::Padding::setValue(float _xl, float _yt, float _xr, float _yb) {
m_value[0] = _xl;
m_value[1] = _yt;
m_value[2] = _xr;
m_value[3] = _yb;
}
float ewol::Padding::x() const {
return m_value[0] + m_value[2];
}
float ewol::Padding::y() const {
return m_value[1] + m_value[3];
}
float ewol::Padding::xLeft() const {
return m_value[0];
}
void ewol::Padding::setXLeft(float _val) {
m_value[0] = _val;
}
float ewol::Padding::xRight() const {
return m_value[2];
}
void ewol::Padding::setXRight(float _val) {
m_value[2] = _val;
}
float ewol::Padding::yTop() const {
return m_value[1];
}
void ewol::Padding::setYTop(float _val) {
m_value[1] = _val;
}
float ewol::Padding::yButtom() const {
return m_value[3];
}
void ewol::Padding::setYButtom(float _val) {
m_value[3] = _val;
}
ewol::Padding& ewol::Padding::operator+=(const Padding& _v) {
m_value[0] += _v.m_value[0];
m_value[1] += _v.m_value[1];
m_value[2] += _v.m_value[2];
m_value[3] += _v.m_value[3];
return *this;
}
ewol::Padding ewol::Padding::operator+(const Padding& _v) {
return Padding(m_value[0] + _v.m_value[0],
m_value[1] + _v.m_value[1],
m_value[2] + _v.m_value[2],
m_value[3] + _v.m_value[3]);
}
std::ostream& ewol::operator <<(std::ostream& _os, const ewol::Padding& _obj) {
_os << "{";
_os << _obj.xLeft();

View File

@ -7,7 +7,7 @@
*/
#pragma once
#include <ewol/debug.h>
#include <etk/types.h>
namespace ewol {
/**
@ -17,65 +17,26 @@ namespace ewol {
private:
float m_value[4]; //!< this represent the 4 padding value Left top right buttom (like css)
public:
Padding() { }
Padding(float _xl, float _yt=0, float _xr=0, float _yb=0) {
setValue(_xl, _yt, _xr, _yb);
}
void setValue(float _xl, float _yt=0, float _xr=0, float _yb=0) {
m_value[0] = _xl;
m_value[1] = _yt;
m_value[2] = _xr;
m_value[3] = _yb;
}
float x() const {
return m_value[0] + m_value[2];
}
float y() const {
return m_value[1] + m_value[3];
}
float xLeft() const {
return m_value[0];
}
void setXLeft(float _val) {
m_value[0] = _val;
}
float xRight() const {
return m_value[2];
}
void setXRight(float _val) {
m_value[2] = _val;
}
float yTop() const {
return m_value[1];
}
void setYTop(float _val) {
m_value[1] = _val;
}
float yButtom() const {
return m_value[3];
}
void setYButtom(float _val) {
m_value[3] = _val;
}
Padding();
Padding(float _xl, float _yt=0.0f, float _xr=0.0f, float _yb=0.0f);
void setValue(float _xl, float _yt=0.0f, float _xr=0.0f, float _yb=0.0f);
float x() const;
float y() const;
float xLeft() const;
void setXLeft(float _val);
float xRight() const;
void setXRight(float _val);
float yTop() const;
void setYTop(float _val);
float yButtom() const;
void setYButtom(float _val);
/**
* @brief Add a vector to this one
* @param _v The vector to add to this one
*/
Padding& operator+=(const Padding& _v) {
m_value[0] += _v.m_value[0];
m_value[1] += _v.m_value[1];
m_value[2] += _v.m_value[2];
m_value[3] += _v.m_value[3];
return *this;
}
Padding& operator+=(const Padding& _v);
//! @previous
Padding operator+(const Padding& _v) {
return Padding(m_value[0] + _v.m_value[0],
m_value[1] + _v.m_value[1],
m_value[2] + _v.m_value[2],
m_value[3] + _v.m_value[3]);
}
Padding operator+(const Padding& _v);
};
std::ostream& operator <<(std::ostream& _os, const ewol::Padding& _obj);

88
ewol/gravity.cpp Normal file
View File

@ -0,0 +1,88 @@
/**
* @author Edouard DUPIN
*
* @copyright 2011, Edouard DUPIN, all right reserved
*
* @license APACHE v2.0 (see license file)
*/
#include <ewol/debug.h>
#include <ewol/gravity.h>
#undef __class__
#define __class__ "gravity"
std::string ewol::gravityToString(const enum ewol::gravity _obj) {
switch(_obj) {
case ewol::gravity_center:
return "center";
case ewol::gravity_topLeft:
return "top-left";
case ewol::gravity_top:
return "top";
case ewol::gravity_topRight:
return "top-right";
case ewol::gravity_right:
return "right";
case ewol::gravity_buttomRight:
return "buttom-right";
case ewol::gravity_buttom:
return "buttom";
case ewol::gravity_buttomLeft:
return "buttom-left";
case ewol::gravity_left:
return "left";
}
return "unknow";
}
enum ewol::gravity ewol::stringToGravity(const std::string& _obj) {
if (_obj == "center") {
return ewol::gravity_center;
} else if (_obj == "top-left") {
return ewol::gravity_topLeft;
} else if (_obj == "top") {
return ewol::gravity_top;
} else if (_obj == "top-right") {
return ewol::gravity_topRight;
} else if (_obj == "right") {
return ewol::gravity_right;
} else if (_obj == "buttom-right") {
return ewol::gravity_buttomRight;
} else if (_obj == "buttom") {
return ewol::gravity_buttom;
} else if (_obj == "buttom-left") {
return ewol::gravity_buttomLeft;
} else if (_obj == "left") {
return ewol::gravity_left;
}
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) {
_os << ewol::gravityToString(_obj);
return _os;
}

33
ewol/gravity.h Normal file
View File

@ -0,0 +1,33 @@
/**
* @author Edouard DUPIN
*
* @copyright 2011, Edouard DUPIN, all right reserved
*
* @license APACHE v2.0 (see license file)
*/
#pragma once
#include <etk/types.h>
#include <etk/math/Vector2D.h>
namespace ewol {
/**
* @brief Gravity of the widget property
* @not-in-doc
*/
enum gravity {
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);
}

View File

@ -14,98 +14,6 @@
#include <gale/renderer/openGL/openGL-include.h>
#include <ewol/context/Context.h>
#undef __class__
#define __class__ "DrawProperty"
std::ostream& ewol::operator <<(std::ostream& _os, const ewol::DrawProperty& _obj) {
_os << "{ windowsSize=" << _obj.m_windowsSize << " start=" << _obj.m_origin << " stop=" << (_obj.m_origin+_obj.m_size) << "}";
return _os;
}
void ewol::DrawProperty::limit(const vec2& _origin, const vec2& _size) {
m_size += m_origin;
m_origin.setMax(_origin);
m_size.setMin(_origin+_size);
m_size -= m_origin;
}
#undef __class__
#define __class__ "gravity"
std::string ewol::gravityToString(const enum ewol::gravity _obj) {
switch(_obj) {
case ewol::gravity_center:
return "center";
case ewol::gravity_topLeft:
return "top-left";
case ewol::gravity_top:
return "top";
case ewol::gravity_topRight:
return "top-right";
case ewol::gravity_right:
return "right";
case ewol::gravity_buttomRight:
return "buttom-right";
case ewol::gravity_buttom:
return "buttom";
case ewol::gravity_buttomLeft:
return "buttom-left";
case ewol::gravity_left:
return "left";
}
return "unknow";
}
enum ewol::gravity ewol::stringToGravity(const std::string& _obj) {
if (_obj == "center") {
return ewol::gravity_center;
} else if (_obj == "top-left") {
return ewol::gravity_topLeft;
} else if (_obj == "top") {
return ewol::gravity_top;
} else if (_obj == "top-right") {
return ewol::gravity_topRight;
} else if (_obj == "right") {
return ewol::gravity_right;
} else if (_obj == "buttom-right") {
return ewol::gravity_buttomRight;
} else if (_obj == "buttom") {
return ewol::gravity_buttom;
} else if (_obj == "buttom-left") {
return ewol::gravity_buttomLeft;
} else if (_obj == "left") {
return ewol::gravity_left;
}
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) {
_os << ewol::gravityToString(_obj);
return _os;
}
#undef __class__
#define __class__ "Widget"

View File

@ -31,6 +31,8 @@ namespace ewol {
#include <ewol/event/Time.h>
#include <ewol/translate.h>
#include <ewol/signal/Signal.h>
#include <ewol/DrawProperty.h>
#include <ewol/gravity.h>
#define ULTIMATE_MAX_SIZE (99999999)
@ -44,60 +46,7 @@ namespace ewol {
/**
* @not-in-doc
*/
class DrawProperty{
/*
/--> m_windowsSize
*--------------------------------------------------*
| g |
| |
| m_size |
| / |
| o-------------------o |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| o-------------------o |
| / |
| m_origin |
| |
*--------------------------------------------------*
/
(0,0)
*/
public :
ivec2 m_windowsSize; //!< Windows compleate size
ivec2 m_origin; //!< Windows clipping upper widget (can not be <0)
ivec2 m_size; //!< Windows clipping upper widget (can not be <0 and >m_windowsSize)
void limit(const vec2& _origin, const vec2& _size);
};
std::ostream& operator <<(std::ostream& _os, const ewol::DrawProperty& _obj);
/**
* @brief Gravity of the widget property
* @not-in-doc
*/
enum gravity {
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
*/
// TODO: change position of this ...
class EventShortCut {
public:
std::string message; //!< data link with the event

View File

@ -38,13 +38,17 @@ def create(target, module_name):
'ewol/ewol.cpp',
'ewol/debug.cpp',
'ewol/Padding.cpp',
'ewol/translate.cpp'
'ewol/translate.cpp',
'ewol/DrawProperty.cpp',
'ewol/gravity.cpp'
])
my_module.add_header_file([
'ewol/debug.h', # TODO : Remove this ...
'ewol/ewol.h',
'ewol/Padding.h',
'ewol/translate.h'
'ewol/translate.h',
'ewol/DrawProperty.h',
'ewol/gravity.h'
])
# compositing: