mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-08-28 07:51:19 +02:00
- cc_frm_header: rework positions/dimensions calculations
This commit is contained in:
@@ -111,7 +111,7 @@ class CComponentsHeader : public CComponentsForm
|
|||||||
const char* cch_icon_name;
|
const char* cch_icon_name;
|
||||||
fb_pixel_t cch_col_text;
|
fb_pixel_t cch_col_text;
|
||||||
Font* cch_font;
|
Font* cch_font;
|
||||||
int cch_icon_x, cch_items_y, cch_text_x, ccif_width, cch_icon_w, cch_buttons, cch_btn_offset;
|
int cch_items_y, cch_icon_x, cch_icon_w, cch_text_x, cch_buttons, cch_buttons_w, cch_buttons_h, cch_buttons_space, cch_offset;
|
||||||
std::vector<std::string> v_cch_btn;
|
std::vector<std::string> v_cch_btn;
|
||||||
|
|
||||||
void initIcon();
|
void initIcon();
|
||||||
@@ -150,11 +150,12 @@ class CComponentsHeader : public CComponentsForm
|
|||||||
virtual void setCaption(neutrino_locale_t caption_locale);
|
virtual void setCaption(neutrino_locale_t caption_locale);
|
||||||
virtual void setCaptionFont(Font* font_name);
|
virtual void setCaptionFont(Font* font_name);
|
||||||
virtual void setCaptionColor(fb_pixel_t text_color){cch_col_text = text_color;};
|
virtual void setCaptionColor(fb_pixel_t text_color){cch_col_text = text_color;};
|
||||||
virtual void setButtonOffset(const int offset){cch_btn_offset = offset;};
|
virtual void setOffset(const int offset){cch_offset = offset;};
|
||||||
virtual void setIcon(const char* icon_name);
|
virtual void setIcon(const char* icon_name);
|
||||||
virtual void addButtonIcon(const std::string& button_name);
|
virtual void addButtonIcon(const std::string& button_name);
|
||||||
virtual void removeButtonIcons();
|
virtual void removeButtonIcons();
|
||||||
virtual void setDefaultButtons(const int buttons);
|
virtual void setDefaultButtons(const int buttons);
|
||||||
|
virtual void setButtonsSpace(const int buttons_space){cch_buttons_space = buttons_space;};
|
||||||
virtual void initCCItems();
|
virtual void initCCItems();
|
||||||
|
|
||||||
void paint(bool do_save_bg = CC_SAVE_SCREEN_YES);
|
void paint(bool do_save_bg = CC_SAVE_SCREEN_YES);
|
||||||
|
@@ -109,15 +109,15 @@ void CComponentsHeader::initVarHeader()
|
|||||||
cch_text = "";
|
cch_text = "";
|
||||||
cch_col_text = COL_MENUHEAD;
|
cch_col_text = COL_MENUHEAD;
|
||||||
cch_items_y = 0;
|
cch_items_y = 0;
|
||||||
cch_icon_x = 0;
|
cch_offset = 8;
|
||||||
cch_icon_w = 5;
|
cch_icon_x = cch_offset;
|
||||||
cch_text_x = 0;
|
cch_icon_w = 0;
|
||||||
ccif_width = 0;
|
cch_text_x = cch_offset;
|
||||||
cch_buttons = 0;
|
cch_buttons = 0;
|
||||||
cch_btn_offset = 8;
|
cch_buttons_w = 0;
|
||||||
|
cch_buttons_h = 0;
|
||||||
|
cch_buttons_space = cch_offset;
|
||||||
v_cch_btn.clear();
|
v_cch_btn.clear();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CComponentsHeader::~CComponentsHeader()
|
CComponentsHeader::~CComponentsHeader()
|
||||||
@@ -152,12 +152,9 @@ void CComponentsHeader::setIcon(const char* icon_name)
|
|||||||
|
|
||||||
void CComponentsHeader::initIcon()
|
void CComponentsHeader::initIcon()
|
||||||
{
|
{
|
||||||
//reset cch_icon_w
|
|
||||||
cch_icon_w = cch_btn_offset;
|
|
||||||
|
|
||||||
//init cch_icon_obj only if an icon available
|
//init cch_icon_obj only if an icon available
|
||||||
if (cch_icon_name == NULL) {
|
if (cch_icon_name == NULL) {
|
||||||
cch_icon_w = cch_btn_offset;
|
cch_icon_w = 0;
|
||||||
if (cch_icon_obj)
|
if (cch_icon_obj)
|
||||||
delete cch_icon_obj;
|
delete cch_icon_obj;
|
||||||
cch_icon_obj = NULL;
|
cch_icon_obj = NULL;
|
||||||
@@ -174,12 +171,16 @@ void CComponentsHeader::initIcon()
|
|||||||
addCCItem(cch_icon_obj); //icon
|
addCCItem(cch_icon_obj); //icon
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//get dimensions of header icon
|
||||||
|
int iw, ih;
|
||||||
|
frameBuffer->getIconSize(cch_icon_name, &iw, &ih);
|
||||||
|
|
||||||
//set properties for icon object
|
//set properties for icon object
|
||||||
if (cch_icon_obj){
|
if (cch_icon_obj){
|
||||||
cch_icon_obj->setWidth(height-2*fr_thickness);
|
cch_icon_obj->setWidth(iw);
|
||||||
cch_icon_obj->setHeight(height);
|
cch_icon_obj->setHeight(ih);
|
||||||
cch_icon_obj->setPictureAlign(CC_ALIGN_HOR_CENTER | CC_ALIGN_VER_CENTER);
|
|
||||||
cch_icon_obj->doPaintBg(false);
|
cch_icon_obj->doPaintBg(false);
|
||||||
|
cch_icon_obj->setPictureAlign(CC_ALIGN_HOR_CENTER | CC_ALIGN_VER_CENTER);
|
||||||
|
|
||||||
//set corner mode of icon item
|
//set corner mode of icon item
|
||||||
cch_icon_obj->setCornerRadius(corner_rad-fr_thickness);
|
cch_icon_obj->setCornerRadius(corner_rad-fr_thickness);
|
||||||
@@ -190,11 +191,14 @@ void CComponentsHeader::initIcon()
|
|||||||
cc_icon_corner_type = CORNER_LEFT;
|
cc_icon_corner_type = CORNER_LEFT;
|
||||||
cch_icon_obj->setCornerType(cc_icon_corner_type);
|
cch_icon_obj->setCornerType(cc_icon_corner_type);
|
||||||
|
|
||||||
//set width of icon object
|
//global set width of icon object
|
||||||
cch_icon_w = cch_icon_obj->getWidth();
|
cch_icon_w = cch_icon_obj->getWidth();
|
||||||
|
|
||||||
//adapt height
|
//global adapt height
|
||||||
height = max(height, cch_icon_obj->getHeight());
|
height = max(height, cch_icon_obj->getHeight());
|
||||||
|
|
||||||
|
//re-align height of icon object
|
||||||
|
cch_icon_obj->setHeight(height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -209,7 +213,6 @@ void CComponentsHeader::removeButtonIcons()
|
|||||||
v_cch_btn.clear();
|
v_cch_btn.clear();
|
||||||
cch_btn_obj->removeAllIcons();
|
cch_btn_obj->removeAllIcons();
|
||||||
initButtons();
|
initButtons();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CComponentsHeader::initDefaultButtons()
|
void CComponentsHeader::initDefaultButtons()
|
||||||
@@ -237,12 +240,15 @@ void CComponentsHeader::setDefaultButtons(const int buttons)
|
|||||||
// calculate minimal width of icon form
|
// calculate minimal width of icon form
|
||||||
void CComponentsHeader::initButtonFormSize()
|
void CComponentsHeader::initButtonFormSize()
|
||||||
{
|
{
|
||||||
ccif_width = 0;
|
cch_buttons_w = 0;
|
||||||
|
cch_buttons_h = 0;
|
||||||
for(size_t i=0; i<v_cch_btn.size(); i++){
|
for(size_t i=0; i<v_cch_btn.size(); i++){
|
||||||
int bw, bh;
|
int bw, bh;
|
||||||
frameBuffer->getIconSize(v_cch_btn[i].c_str(), &bw, &bh);
|
frameBuffer->getIconSize(v_cch_btn[i].c_str(), &bw, &bh);
|
||||||
ccif_width += (bw + cch_btn_offset);
|
cch_buttons_w += (bw + cch_buttons_space);
|
||||||
|
cch_buttons_h = std::max(cch_buttons_h, bh);
|
||||||
}
|
}
|
||||||
|
cch_buttons_w -= cch_buttons_space;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CComponentsHeader::initButtons()
|
void CComponentsHeader::initButtons()
|
||||||
@@ -264,25 +270,50 @@ void CComponentsHeader::initButtons()
|
|||||||
|
|
||||||
//set button form properties
|
//set button form properties
|
||||||
if (cch_btn_obj){
|
if (cch_btn_obj){
|
||||||
cch_btn_obj->setDimensionsAll(0+width-ccif_width, 0, ccif_width-cch_btn_offset, height);
|
cch_btn_obj->setDimensionsAll(width-cch_offset-cch_buttons_w, cch_items_y, cch_buttons_w, cch_buttons_h);
|
||||||
cch_btn_obj->doPaintBg(false);
|
cch_btn_obj->doPaintBg(false);
|
||||||
cch_btn_obj->setIconOffset(cch_btn_offset);
|
cch_btn_obj->setIconOffset(cch_buttons_space);
|
||||||
cch_btn_obj->setIconAlign(CComponentsIconForm::CC_ICONS_FRM_ALIGN_RIGHT);
|
cch_btn_obj->setIconAlign(CComponentsIconForm::CC_ICONS_FRM_ALIGN_RIGHT);
|
||||||
cch_btn_obj->removeAllIcons();
|
cch_btn_obj->removeAllIcons();
|
||||||
cch_btn_obj->addIcon(v_cch_btn);
|
cch_btn_obj->addIcon(v_cch_btn);
|
||||||
|
|
||||||
|
//set corner mode of button item
|
||||||
|
cch_btn_obj->setCornerRadius(corner_rad-fr_thickness);
|
||||||
|
int cc_btn_corner_type = corner_type;
|
||||||
|
if (corner_type == CORNER_TOP_RIGHT || corner_type == CORNER_TOP)
|
||||||
|
cc_btn_corner_type = CORNER_TOP_RIGHT;
|
||||||
|
else
|
||||||
|
cc_btn_corner_type = CORNER_RIGHT;
|
||||||
|
cch_btn_obj->setCornerType(cc_btn_corner_type);
|
||||||
|
|
||||||
|
//global adapt height
|
||||||
height = max(height, cch_btn_obj->getHeight());
|
height = max(height, cch_btn_obj->getHeight());
|
||||||
|
|
||||||
|
//re-align height of button object
|
||||||
|
cch_btn_obj->setHeight(height);
|
||||||
|
|
||||||
|
//re-align height of icon object
|
||||||
|
if (cch_icon_obj)
|
||||||
|
cch_icon_obj->setHeight(height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CComponentsHeader::initCaption()
|
void CComponentsHeader::initCaption()
|
||||||
{
|
{
|
||||||
//reset header text position first
|
//recalc header text position if header icon is defined
|
||||||
cch_text_x = cch_icon_x+cch_icon_w;
|
if (cch_icon_name != NULL){
|
||||||
|
cch_text_x = cch_icon_x+cch_icon_w+cch_offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
//calc width of text object in header
|
||||||
|
int cc_text_w = width-cch_text_x-cch_offset;
|
||||||
|
if (cch_buttons_w)
|
||||||
|
cc_text_w -= cch_buttons_w-cch_offset;
|
||||||
|
|
||||||
//create cch_text_obj and add to collection
|
//create cch_text_obj and add to collection
|
||||||
if (cch_text_obj == NULL){
|
if (cch_text_obj == NULL){
|
||||||
#ifdef DEBUG_CC
|
#ifdef DEBUG_CC
|
||||||
printf(" [CComponentsHeader]\n [%s - %d] init header text: %s\n", __FUNCTION__, __LINE__, cch_text.c_str());
|
printf(" [CComponentsHeader]\n [%s - %d] init header text: %s [ x %d w %d ]\n", __FUNCTION__, __LINE__, cch_text.c_str(), cch_text_x, cc_text_w);
|
||||||
#endif
|
#endif
|
||||||
cch_text_obj = new CComponentsText();
|
cch_text_obj = new CComponentsText();
|
||||||
//add text item
|
//add text item
|
||||||
@@ -291,19 +322,22 @@ void CComponentsHeader::initCaption()
|
|||||||
|
|
||||||
//set header text properties
|
//set header text properties
|
||||||
if (cch_text_obj){
|
if (cch_text_obj){
|
||||||
cch_text_obj->setText(cch_text, CTextBox::AUTO_WIDTH, cch_font);
|
cch_text_obj->setDimensionsAll(cch_text_x, cch_items_y, cc_text_w, height);
|
||||||
|
cch_text_obj->doPaintBg(false);
|
||||||
|
cch_text_obj->setText(cch_text, CTextBox::TOP | CTextBox::NO_AUTO_LINEBREAK, cch_font);
|
||||||
cch_text_obj->forceTextPaint(); //here required
|
cch_text_obj->forceTextPaint(); //here required
|
||||||
cch_text_obj->setDimensionsAll(cch_text_x, cch_items_y, width-cch_icon_w-fr_thickness, height-2*fr_thickness);
|
|
||||||
cch_text_obj->setTextColor(cch_col_text);
|
cch_text_obj->setTextColor(cch_col_text);
|
||||||
cch_text_obj->setColorBody(col_body);
|
cch_text_obj->setColorBody(col_body);
|
||||||
cch_text_obj->doPaintBg(false);
|
|
||||||
|
|
||||||
//corner of text item
|
//corner of text item
|
||||||
cch_text_obj->setCornerRadius(corner_rad-fr_thickness);
|
cch_text_obj->setCornerRadius(corner_rad-fr_thickness);
|
||||||
cch_text_obj->setCornerType(corner_type);
|
cch_text_obj->setCornerType(corner_type);
|
||||||
|
|
||||||
//get height
|
/*
|
||||||
height = max(height, cch_text_obj->getHeight());
|
global adapt height not needed here again
|
||||||
|
because this object is initialized at last
|
||||||
|
*/
|
||||||
|
//height = max(height, cch_text_obj->getHeight());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -312,11 +346,11 @@ void CComponentsHeader::initCCItems()
|
|||||||
//init icon
|
//init icon
|
||||||
initIcon();
|
initIcon();
|
||||||
|
|
||||||
//init text
|
|
||||||
initCaption();
|
|
||||||
|
|
||||||
//init buttons
|
//init buttons
|
||||||
initButtons();
|
initButtons();
|
||||||
|
|
||||||
|
//init text
|
||||||
|
initCaption();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CComponentsHeader::paint(bool do_save_bg)
|
void CComponentsHeader::paint(bool do_save_bg)
|
||||||
|
@@ -142,7 +142,7 @@ void CComponentsText::initCCText()
|
|||||||
ct_text_sent = ct_textbox->setText(&ct_text, ct_box->iWidth);
|
ct_text_sent = ct_textbox->setText(&ct_text, ct_box->iWidth);
|
||||||
ct_old_text = ct_text;
|
ct_old_text = ct_text;
|
||||||
#ifdef DEBUG_CC
|
#ifdef DEBUG_CC
|
||||||
printf(" [CComponentsText] [%s - %d] init text: %s [x %d, y %d, h %d, w %d]\n", __FUNCTION__, __LINE__, ct_text.c_str(), ct_box->iX, ct_box->iY, height, width);
|
printf(" [CComponentsText] [%s - %d] init text: %s [x %d, y %d, w %d, h %d]\n", __FUNCTION__, __LINE__, ct_text.c_str(), ct_box->iX, ct_box->iY, ct_box->iWidth, ct_box->iHeight);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user