From bfc1c04d83a8ab4ea07d13934b2b7df9d6c3ec7c Mon Sep 17 00:00:00 2001 From: "M. Liebmann" Date: Sat, 20 Sep 2014 21:34:12 +0200 Subject: [PATCH] CComponentsHeader: Use color gradient for paint header Conflicts: src/gui/widget/menue.cpp --- src/gui/components/cc_frm_header.cpp | 22 +++++++++++++++++++++- src/gui/components/cc_frm_header.h | 9 +++++++++ src/gui/widget/menue.cpp | 1 + 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/gui/components/cc_frm_header.cpp b/src/gui/components/cc_frm_header.cpp index 48ed77bb8..dffe45273 100644 --- a/src/gui/components/cc_frm_header.cpp +++ b/src/gui/components/cc_frm_header.cpp @@ -116,6 +116,9 @@ void CComponentsHeader::initVarHeader( const int& x_pos, const int& y_pos, const cch_text_x = cch_offset; cch_buttons_space = cch_offset; + gradientBuf = NULL; + paintGradient = false; + addContextButton(buttons); initCCItems(); initParent(parent); @@ -125,6 +128,8 @@ CComponentsHeader::~CComponentsHeader() { dprintf(DEBUG_DEBUG, "[~CComponentsHeader] [%s - %d] delete...\n", __func__, __LINE__); v_cch_btn.clear(); + if (gradientBuf) + free(gradientBuf); } void CComponentsHeader::setCaption(const std::string& caption, const int& align_mode) @@ -369,7 +374,7 @@ void CComponentsHeader::initCaption() if (cch_caption_align == CTextBox::CENTER) cch_text_x = CC_CENTERED; cch_text_obj->setDimensionsAll(cch_text_x, cch_items_y, cc_text_w, height); - cch_text_obj->doPaintBg(true); + cch_text_obj->doPaintBg(false); cch_text_obj->setText(cch_text, cch_caption_align, cch_font); cch_text_obj->forceTextPaint(); //here required cch_text_obj->setTextColor(cch_col_text); @@ -386,6 +391,17 @@ void CComponentsHeader::initCaption() } } +void CComponentsHeader::initGradient() +{ + if (gradientBuf == NULL) { + CColorGradient ccGradient; + gradientBuf = ccGradient.gradientOneColor(col_body, NULL, height, CColorGradient::gradientLight2Dark, CColorGradient::light); + } + cc_gradientData.gradientBuf = gradientBuf; + cc_gradientData.direction = CFrameBuffer::gradientVertical; + cc_gradientData.mode = CFrameBuffer::pbrg_noOption; +} + void CComponentsHeader::initCCItems() { //set size @@ -399,6 +415,10 @@ void CComponentsHeader::initCCItems() //init text initCaption(); + + //init color gradient + if (paintGradient) + initGradient(); } void CComponentsHeader::paint(bool do_save_bg) diff --git a/src/gui/components/cc_frm_header.h b/src/gui/components/cc_frm_header.h index d518c2782..ad080081c 100644 --- a/src/gui/components/cc_frm_header.h +++ b/src/gui/components/cc_frm_header.h @@ -29,6 +29,7 @@ #include "cc_item_picture.h" #include "cc_item_text.h" #include "cc_frm_icons.h" +#include //! Sub class of CComponentsForm. Shows a header with prepared items. /*! @@ -48,6 +49,9 @@ class CComponentsHeader : public CComponentsForm fb_pixel_t color_body = COL_MENUHEAD_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); + fb_pixel_t *gradientBuf; + bool paintGradient; + protected: ///object: icon object, see also setIcon() CComponentsPicture * cch_icon_obj; @@ -92,6 +96,8 @@ class CComponentsHeader : public CComponentsForm void initCaption(); ///sub: init context button object void initButtons(); + ///sub: init color gradient + void initGradient(); public: enum @@ -197,6 +203,9 @@ class CComponentsHeader : public CComponentsForm ///paint header virtual void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); + + //set color gradient an/off + virtual void setPaintGradient(bool g) { paintGradient = g; }; }; //! Sub class of CComponentsHeader. diff --git a/src/gui/widget/menue.cpp b/src/gui/widget/menue.cpp index 48b9db0f0..87e32d62f 100644 --- a/src/gui/widget/menue.cpp +++ b/src/gui/widget/menue.cpp @@ -1099,6 +1099,7 @@ void CMenuWidget::paint() // paint head CComponentsHeader header(x, y, width + sb_width, hheight, getName(), iconfile); + header.setPaintGradient(true); header.setShadowOnOff(CC_SHADOW_ON); header.setOffset(10); header.paint(CC_SAVE_SCREEN_NO);