[DEV] better dynamic position of widget::Label
This commit is contained in:
parent
9b9b2b9956
commit
160fd67d03
@ -190,18 +190,17 @@ void widget::Button::OnRegenerateDisplay(void)
|
||||
ivec2 localSize = m_minSize;
|
||||
|
||||
vec3 tmpOrigin((m_size.x - m_minSize.x) / 2.0,
|
||||
(m_size.y - m_minSize.y) / 2.0,
|
||||
0.0);
|
||||
|
||||
(m_size.y - m_minSize.y) / 2.0,
|
||||
0);
|
||||
// no change for the text orogin :
|
||||
vec3 tmpTextOrigin((m_size.x - m_minSize.x) / 2.0,
|
||||
(m_size.y - m_minSize.y) / 2.0,
|
||||
0.0);
|
||||
(m_size.y - m_minSize.y) / 2.0,
|
||||
0);
|
||||
|
||||
if (true==m_userFill.x) {
|
||||
localSize.x = m_size.x;
|
||||
tmpOrigin.x = 0.0;
|
||||
tmpTextOrigin.x = 0.0;
|
||||
tmpOrigin.x = 0;
|
||||
tmpTextOrigin.x = 0;
|
||||
}
|
||||
if (true==m_userFill.y) {
|
||||
localSize.y = m_size.y;
|
||||
@ -220,10 +219,10 @@ void widget::Button::OnRegenerateDisplay(void)
|
||||
if( true == m_displayImage.HasSources()
|
||||
|| true == m_displayImageToggle.HasSources()) {
|
||||
ivec3 imagePos(tmpOrigin.x-padding.x/4,
|
||||
tmpOrigin.y-padding.x/4+(m_minSize.y-m_imageDisplaySize-2*padding.y)/2.0,
|
||||
0);
|
||||
tmpOrigin.y-padding.x/4+(m_minSize.y-m_imageDisplaySize-2*padding.y)/2.0,
|
||||
0);
|
||||
ivec2 imageSize(m_imageDisplaySize,
|
||||
m_imageDisplaySize);
|
||||
m_imageDisplaySize);
|
||||
if( false==m_toggleMode
|
||||
|| false==m_value) {
|
||||
m_displayImage.SetPos(imagePos);
|
||||
@ -239,9 +238,9 @@ void widget::Button::OnRegenerateDisplay(void)
|
||||
}
|
||||
|
||||
vec3 drawClippingPos(padding.x, padding.y, -0.5);
|
||||
vec3 drawClippingSize((float)(m_size.x - padding.x),
|
||||
(float)(m_size.y - padding.y),
|
||||
(float)1.0);
|
||||
vec3 drawClippingSize((m_size.x - padding.x),
|
||||
(m_size.y - padding.y),
|
||||
1);
|
||||
|
||||
// clean the element
|
||||
m_displayText.Reset();
|
||||
|
@ -86,18 +86,17 @@ void widget::ButtonColor::OnRegenerateDisplay(void)
|
||||
ivec2 localSize = m_minSize;
|
||||
|
||||
vec3 tmpOrigin((m_size.x - m_minSize.x) / 2.0,
|
||||
(m_size.y - m_minSize.y) / 2.0,
|
||||
0.0);
|
||||
|
||||
(m_size.y - m_minSize.y) / 2.0,
|
||||
0);
|
||||
// no change for the text orogin :
|
||||
vec3 tmpTextOrigin((m_size.x - m_minSize.x) / 2.0,
|
||||
(m_size.y - m_minSize.y) / 2.0,
|
||||
0.0);
|
||||
(m_size.y - m_minSize.y) / 2.0,
|
||||
0);
|
||||
|
||||
if (true==m_userFill.x) {
|
||||
localSize.x = m_size.x;
|
||||
tmpOrigin.x = 0.0;
|
||||
tmpTextOrigin.x = 0.0;
|
||||
tmpOrigin.x = 0;
|
||||
tmpTextOrigin.x = 0;
|
||||
}
|
||||
if (true==m_userFill.y) {
|
||||
localSize.y = m_size.y;
|
||||
|
@ -23,15 +23,15 @@ namespace widget {
|
||||
class ButtonColor : public ewol::Widget
|
||||
{
|
||||
private:
|
||||
ewol::Shaper m_shaper; //!< Compositing theme.
|
||||
ewol::Text m_text; //!< Compositing Test display.
|
||||
draw::Color m_textColorFg; //!< Current color.
|
||||
widget::ContextMenu* m_widgetContextMenu; //!< Specific context menu.
|
||||
bool m_mouseHover; //!< Flag to know where the mouse is (inside the displayed widget (if not fill)).
|
||||
bool m_buttonPressed; //!< Flag to know if the button is curently pressed.
|
||||
ewol::Shaper m_shaper; //!< Compositing theme.
|
||||
ewol::Text m_text; //!< Compositing Test display.
|
||||
draw::Color m_textColorFg; //!< Current color.
|
||||
widget::ContextMenu* m_widgetContextMenu; //!< Specific context menu.
|
||||
bool m_mouseHover; //!< Flag to know where the mouse is (inside the displayed widget (if not fill)).
|
||||
bool m_buttonPressed; //!< Flag to know if the button is curently pressed.
|
||||
// hover area :
|
||||
vec2 m_selectableAreaPos; //!< Start position of the events
|
||||
vec2 m_selectableAreaSize; //!< Size of the event positions
|
||||
vec2 m_selectableAreaPos; //!< Start position of the events
|
||||
vec2 m_selectableAreaSize; //!< Size of the event positions
|
||||
public:
|
||||
/**
|
||||
* @brief Main constructor.
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
#include <ewol/compositing/Text.h>
|
||||
#include <ewol/widget/WidgetManager.h>
|
||||
#include <ewol/ewol.h>
|
||||
|
||||
|
||||
extern const char * const ewolEventLabelPressed = "ewol Label Pressed";
|
||||
@ -20,37 +21,34 @@ extern const char * const ewolEventLabelPressed = "ewol Label Pressed";
|
||||
#define __class__ "Label"
|
||||
|
||||
|
||||
void widget::Label::Init(void)
|
||||
{
|
||||
AddEventId(ewolEventLabelPressed);
|
||||
m_textColorFg = draw::color::black;
|
||||
SetCanHaveFocus(false);
|
||||
}
|
||||
|
||||
widget::Label::Label(void)
|
||||
{
|
||||
m_label = "---";
|
||||
Init();
|
||||
}
|
||||
|
||||
widget::Label::Label(etk::UString newLabel)
|
||||
{
|
||||
m_label = newLabel;
|
||||
Init();
|
||||
AddEventId(ewolEventLabelPressed);
|
||||
SetCanHaveFocus(false);
|
||||
}
|
||||
|
||||
|
||||
widget::Label::~Label(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
bool widget::Label::CalculateMinSize(void)
|
||||
{
|
||||
ivec3 minSize = m_oObjectText.CalculateSizeDecorated(m_label);
|
||||
m_minSize.x = 3 + minSize.x;
|
||||
m_minSize.y = 3 + minSize.y;
|
||||
if (m_userMaxSize.x != -1) {
|
||||
m_text.SetTextAlignement(0, m_userMaxSize.x-4, ewol::Text::alignLeft);
|
||||
}
|
||||
ivec3 minSize = m_text.CalculateSizeDecorated(m_label);
|
||||
if (m_userMaxSize.x!=-1) {
|
||||
m_minSize.x = etk_min(4 + minSize.x, m_userMaxSize.x);
|
||||
} else {
|
||||
m_minSize.x = 4 + minSize.x;
|
||||
}
|
||||
if (m_userMaxSize.y!=-1) {
|
||||
m_minSize.y = etk_min(4 + minSize.y, m_userMaxSize.y);
|
||||
} else {
|
||||
m_minSize.y = 4 + minSize.y;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -59,37 +57,71 @@ void widget::Label::SetLabel(etk::UString newLabel)
|
||||
{
|
||||
m_label = newLabel;
|
||||
MarkToRedraw();
|
||||
ewol::RequestUpdateSize();
|
||||
}
|
||||
|
||||
|
||||
etk::UString widget::Label::GetLabel(void)
|
||||
{
|
||||
return m_label;
|
||||
}
|
||||
|
||||
|
||||
void widget::Label::OnDraw(ewol::DrawProperty& displayProp)
|
||||
{
|
||||
m_oObjectText.Draw();
|
||||
m_text.Draw();
|
||||
}
|
||||
|
||||
|
||||
void widget::Label::OnRegenerateDisplay(void)
|
||||
{
|
||||
if (true == NeedRedraw()) {
|
||||
m_oObjectText.Clear();
|
||||
int32_t paddingSize = 3;
|
||||
m_text.Clear();
|
||||
int32_t paddingSize = 2;
|
||||
|
||||
int32_t tmpOriginX = 0;
|
||||
int32_t tmpOriginY = 0;
|
||||
|
||||
// to know the size of one Line :
|
||||
ivec3 minSize = m_text.CalculateSize('A');
|
||||
if (m_userMaxSize.x != -1) {
|
||||
m_text.SetTextAlignement(0, m_userMaxSize.x-2*paddingSize, ewol::Text::alignLeft);
|
||||
}
|
||||
ivec3 curentTextSize = m_text.CalculateSizeDecorated(m_label);
|
||||
|
||||
ivec2 localSize = m_minSize;
|
||||
|
||||
// no change for the text orogin :
|
||||
vec3 tmpTextOrigin((m_size.x - m_minSize.x) / 2.0,
|
||||
(m_size.y - m_minSize.y) / 2.0,
|
||||
0);
|
||||
|
||||
if (true==m_userFill.x) {
|
||||
tmpOriginX = (m_size.x - m_minSize.x) / 2;
|
||||
localSize.x = m_size.x;
|
||||
tmpTextOrigin.x = 0;
|
||||
}
|
||||
if (true==m_userFill.y) {
|
||||
tmpOriginY = (m_size.y - m_minSize.y) / 2;
|
||||
localSize.y = m_size.y;
|
||||
tmpTextOrigin.y = m_size.y - 2*paddingSize - curentTextSize.y;
|
||||
}
|
||||
tmpOriginX += paddingSize;
|
||||
tmpOriginY += paddingSize;
|
||||
tmpTextOrigin.x += paddingSize;
|
||||
tmpTextOrigin.y += paddingSize;
|
||||
localSize.x -= 2*paddingSize;
|
||||
localSize.y -= 2*paddingSize;
|
||||
|
||||
tmpTextOrigin.y += (m_minSize.y-2*paddingSize) - minSize.y;
|
||||
|
||||
vec3 textPos(tmpOriginX, tmpOriginY, 0);
|
||||
m_oObjectText.SetPos(textPos);
|
||||
m_oObjectText.PrintDecorated(m_label);
|
||||
vec2 textPos(tmpTextOrigin.x, tmpTextOrigin.y);
|
||||
|
||||
vec3 drawClippingPos(paddingSize, paddingSize, -0.5);
|
||||
vec3 drawClippingSize((m_size.x - paddingSize),
|
||||
(m_size.y - paddingSize),
|
||||
1);
|
||||
|
||||
// clean the element
|
||||
m_text.Reset();
|
||||
m_text.SetPos(tmpTextOrigin);
|
||||
m_text.SetTextAlignement(tmpTextOrigin.x, tmpTextOrigin.x+localSize.x, ewol::Text::alignLeft);
|
||||
m_text.SetClipping(drawClippingPos, drawClippingSize);
|
||||
m_text.PrintDecorated(m_label);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -19,21 +19,33 @@ extern const char * const ewolEventLabelPressed;
|
||||
namespace widget {
|
||||
class Label : public ewol::Widget
|
||||
{
|
||||
private:
|
||||
ewol::Text m_text; //!< Compositing text element.
|
||||
etk::UString m_label; //!< decorated text to display.
|
||||
public:
|
||||
Label(void);
|
||||
Label(etk::UString newLabel);
|
||||
/**
|
||||
* @brief Constructor
|
||||
* @param[in] newLabel The displayed decorated text.
|
||||
*/
|
||||
Label(etk::UString newLabel="---");
|
||||
/**
|
||||
* @brief destructor
|
||||
*/
|
||||
virtual ~Label(void);
|
||||
/**
|
||||
* @brief Change the label displayed
|
||||
* @param[in] newLabel The displayed decorated text.
|
||||
*/
|
||||
void SetLabel(etk::UString newLabel);
|
||||
/**
|
||||
* @brief Get the current displayed label
|
||||
* @return The displayed decorated text.
|
||||
*/
|
||||
etk::UString GetLabel(void);
|
||||
// Derived function
|
||||
virtual const char * const GetObjectType(void) { return "EwolLabel"; };
|
||||
void Init(void);
|
||||
virtual ~Label(void);
|
||||
// Derived function
|
||||
virtual bool CalculateMinSize(void);
|
||||
void SetLabel(etk::UString newLabel);
|
||||
private:
|
||||
ewol::Text m_oObjectText;
|
||||
etk::UString m_label;
|
||||
draw::Color m_textColorFg; //!< Text color
|
||||
public:
|
||||
// Derived function
|
||||
virtual void OnRegenerateDisplay(void);
|
||||
// Derived function
|
||||
|
@ -16,7 +16,8 @@
|
||||
#undef __class__
|
||||
#define __class__ "Widget"
|
||||
|
||||
ewol::Widget::Widget(void)
|
||||
ewol::Widget::Widget(void) :
|
||||
m_userMaxSize(-1,-1)
|
||||
{
|
||||
m_limitMouseEvent = 3;
|
||||
m_needRegenerateDisplay = true;
|
||||
@ -237,6 +238,17 @@ vec2 ewol::Widget::GetMinSize(void)
|
||||
return vec2(0,0);
|
||||
}
|
||||
|
||||
void ewol::Widget::SetMaxSize(vec2 size)
|
||||
{
|
||||
m_userMaxSize = size;
|
||||
ewol::RequestUpdateSize();
|
||||
}
|
||||
|
||||
vec2 ewol::Widget::GetMaxSize(void)
|
||||
{
|
||||
return m_userMaxSize;
|
||||
}
|
||||
|
||||
vec2 ewol::Widget::GetSize(void)
|
||||
{
|
||||
if (false==IsHide()) {
|
||||
|
@ -72,17 +72,18 @@ namespace ewol {
|
||||
// -- Widget Size:
|
||||
// ----------------------------------------------------------------------------------------------------------------
|
||||
private:
|
||||
bool m_hide; //!< hide a widget on the display
|
||||
bool m_hide; //!< hide a widget on the display
|
||||
protected:
|
||||
// internal element calculated by the system
|
||||
float m_zoom; //!< generic widget zoom
|
||||
vec2 m_origin; //!< internal ... I do not really known how i can use it ...
|
||||
vec2 m_size; //!< internal : current size of the widget
|
||||
vec2 m_minSize; //!< user define the minimum size of the widget
|
||||
float m_zoom; //!< generic widget zoom
|
||||
vec2 m_origin; //!< internal ... I do not really known how i can use it ...
|
||||
vec2 m_size; //!< internal : current size of the widget
|
||||
vec2 m_minSize; //!< user define the minimum size of the widget
|
||||
// user configuaration
|
||||
vec2 m_userMinSize; //!< user define the minimum size of the widget
|
||||
bvec2 m_userExpend;
|
||||
bvec2 m_userFill;
|
||||
vec2 m_userMinSize; //!< user define the minimum size of the widget
|
||||
vec2 m_userMaxSize; //!< user define the maximum size of the widget
|
||||
bvec2 m_userExpend;
|
||||
bvec2 m_userFill;
|
||||
public:
|
||||
/**
|
||||
* @brief Set the zoom property of the widget
|
||||
@ -144,9 +145,21 @@ namespace ewol {
|
||||
/**
|
||||
* @brief Get the current calculated min size
|
||||
* @param ---
|
||||
* @return re size requested
|
||||
* @return the size requested
|
||||
*/
|
||||
vec2 GetMinSize(void);
|
||||
/**
|
||||
* @brief User set the maximum size he want to set the display
|
||||
* @param[in] size The new maximum size requested (vec2(-1,-1) to unset)
|
||||
* @return ---
|
||||
*/
|
||||
virtual void SetMaxSize(vec2 size);
|
||||
/**
|
||||
* @brief Get the current maximum size
|
||||
* @param ---
|
||||
* @return the size requested
|
||||
*/
|
||||
vec2 GetMaxSize(void);
|
||||
/**
|
||||
* @brief Get the widget size
|
||||
* @param ---
|
||||
|
@ -30,6 +30,7 @@ static const char * l_eventChangeExpendX = "event-change-expend-X";
|
||||
static const char * l_eventChangeExpendY = "event-change-expend-Y";
|
||||
static const char * l_eventChangeFillX = "event-change-fill-X";
|
||||
static const char * l_eventChangeFillY = "event-change-fill-Y";
|
||||
static const char * l_eventChangeMaxSize = "event-change-maxSize";
|
||||
static const char * l_eventChangeLabel = "event-change-label";
|
||||
|
||||
#undef __class__
|
||||
@ -77,6 +78,13 @@ TestLabel::TestLabel(void) :
|
||||
myButton->RegisterOnEvent(this, ewolEventButtonValue, l_eventChangeFillY);
|
||||
mySizerHori->SubWidgetAdd(myButton);
|
||||
}
|
||||
myButton = new widget::Button("maxSize (-1,-1)");
|
||||
if (NULL != myButton) {
|
||||
myButton->SetToggleMode(true);
|
||||
myButton->SetLabelToggle("maxSize (400,-1)");
|
||||
myButton->RegisterOnEvent(this, ewolEventButtonValue, l_eventChangeMaxSize);
|
||||
mySizerHori->SubWidgetAdd(myButton);
|
||||
}
|
||||
myButton = new widget::Button("Next Label");
|
||||
if (NULL != myButton) {
|
||||
myButton->RegisterOnEvent(this, ewolEventButtonPressed, l_eventChangeLabel);
|
||||
@ -192,6 +200,14 @@ void TestLabel::OnReceiveMessage(ewol::EObject * CallerObject, const char * even
|
||||
m_testWidget->SetFillY(false);
|
||||
}
|
||||
}
|
||||
} else if (eventId == l_eventChangeMaxSize) {
|
||||
if (NULL!=m_testWidget) {
|
||||
if (data=="1") {
|
||||
m_testWidget->SetMaxSize(vec2(400,-1));
|
||||
} else {
|
||||
m_testWidget->SetMaxSize(vec2(-1,-1));
|
||||
}
|
||||
}
|
||||
} else if (eventId == l_eventChangeLabel) {
|
||||
if (NULL!=m_testWidget) {
|
||||
m_labelId++;
|
||||
@ -205,6 +221,26 @@ void TestLabel::OnReceiveMessage(ewol::EObject * CallerObject, const char * even
|
||||
case 1:
|
||||
m_testWidget->SetLabel("Basic <bold>label</bold>");
|
||||
break;
|
||||
case 2:
|
||||
m_testWidget->SetLabel("<center>\n"
|
||||
" Un jour Cosette se <b>regarda</b> par hasard dans son miroir et se dit: Tiens! <b>Il lui semblait presque <i>qu'elle était jolie.</i></b> Ceci la jeta dans un trouble singulier. <font color=\"#FF0000\">Jusqu'à ce moment elle <b>n'avait</b> point <i>songé</i> à sa figure.</font> Elle se voyait dans son miroir, mais elle ne s'y regardait pas. Et puis, on lui avait souvent dit qu'elle était laide;<br/> Jean Valjean seul disait doucement : <br/> Mais non!<br/> mais non!<br/> Quoi qu'il en fut, Cosette s'était toujours crue laide, et avait grandi dans cette idée avec la résignation facile de l'enfance. Voici que tout d'un coup son miroir lui disait comme Jean Valjean : Mais non! Elle ne dormit pas de la nuit. Si j'étais jolie ? pensait-elle, comme cela serait drole que je fusse jolie! Et elle se rappelait celles de ses compagnes dont la beauté faisait effet dans le couvent, et elle se disait : Comment! je serais comme mademoiselle une telle!\n"
|
||||
"</center>\n");
|
||||
break;
|
||||
case 3:
|
||||
m_testWidget->SetLabel("<left>\n"
|
||||
" Un jour Cosette se <b>regarda</b> par hasard dans son miroir et se dit: Tiens! <b>Il lui semblait presque <i>qu'elle était jolie.</i></b> Ceci la jeta dans un trouble singulier. <font color=\"#0F0\">Jusqu'à ce moment elle <b>n'avait</b> point <i>songé</i> à sa figure.</font> Elle se voyait dans son miroir, mais elle ne s'y regardait pas. Et puis, on lui avait souvent dit qu'elle était laide;<br/> Jean Valjean seul disait doucement :<br/> Mais non!<br/> mais non!<br/> Quoi qu'il en fut, Cosette s'était toujours crue laide, et avait grandi dans cette idée avec la résignation facile de l'enfance. Voici que tout d'un coup son miroir lui disait comme Jean Valjean : Mais non! Elle ne dormit pas de la nuit. Si j'étais jolie ? pensait-elle, comme cela serait drole que je fusse jolie! Et elle se rappelait celles de ses compagnes dont la beauté faisait effet dans le couvent, et elle se disait : Comment! je serais comme mademoiselle une telle!\n"
|
||||
"</left>\n");
|
||||
break;
|
||||
case 4:
|
||||
m_testWidget->SetLabel("<right>\n"
|
||||
" Un jour Cosette se <b>regarda</b> par hasard dans son miroir et se dit: Tiens! <b>Il lui semblait presque <i>qu'elle était jolie.</i></b> Ceci la jeta dans un trouble singulier. <font color=\"#00F\">Jusqu'à ce moment elle<b> n'avait</b> point <i>songé</i> à sa figure.</font> Elle se voyait dans son miroir, mais elle ne s'y regardait pas. Et puis, on lui avait souvent dit qu'elle était laide;<br/> Jean Valjean seul disait doucement :<br/> Mais non! <br/> mais non!<br/> Quoi qu'il en fut, Cosette s'était toujours crue laide, et avait grandi dans cette idée avec la résignation facile de l'enfance. Voici que tout d'un coup son miroir lui disait comme Jean Valjean : Mais non! Elle ne dormit pas de la nuit. Si j'étais jolie ? pensait-elle, comme cela serait drole que je fusse jolie! Et elle se rappelait celles de ses compagnes dont la beauté faisait effet dans le couvent, et elle se disait : Comment! je serais comme mademoiselle une telle!\n"
|
||||
"</right>\n");
|
||||
break;
|
||||
case 5:
|
||||
m_testWidget->SetLabel("<justify>\n"
|
||||
" Un jour Cosette se <b>regarda</b> par hasard dans son miroir et se dit: Tiens! <b>Il lui semblait presque <i>qu'elle était jolie.</i></b> Ceci la jeta dans un trouble singulier. <font color=\"#FF0\">Jusqu'à ce moment elle <b>n'avait</b> point <i>songé</i> à sa figure.</font> Elle se voyait dans son miroir, mais elle ne s'y regardait pas. Et puis, on lui avait souvent dit qu'elle était laide;<br/> Jean Valjean seul disait doucement :<br/> Mais non!<br/> mais non!<br/> Quoi qu'il en fut, Cosette s'était toujours crue laide, et avait grandi dans cette idée avec la résignation facile de l'enfance. Voici que tout d'un coup son miroir lui disait comme Jean Valjean : Mais non! Elle ne dormit pas de la nuit. Si j'étais jolie ? pensait-elle, comme cela serait drole que je fusse jolie! Et elle se rappelait celles de ses compagnes dont la beauté faisait effet dans le couvent, et elle se disait : Comment! je serais comme mademoiselle une telle!\n"
|
||||
"</justify>\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,8 +22,13 @@ class TestLabel : public widget::SizerVert
|
||||
widget::Label* m_testWidget;
|
||||
int32_t m_labelId;
|
||||
public:
|
||||
// Constructeur
|
||||
/**
|
||||
* @brief Constructeur
|
||||
*/
|
||||
TestLabel(void);
|
||||
/**
|
||||
* @brief Destructor
|
||||
*/
|
||||
virtual ~TestLabel(void);
|
||||
// Derived function
|
||||
virtual const char * const GetObjectType(void) { return "TestButton"; };
|
||||
|
Loading…
x
Reference in New Issue
Block a user