mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-08-27 23:42:58 +02:00
gradient: try to fix delete gradient data only on color change
Signed-off-by: Thilo Graf <dbt@novatux.de>
This commit is contained in:
@@ -65,8 +65,9 @@ CComponents::CComponents() : COSDFader(g_settings.theme.menu_Content_alpha)
|
||||
frameBuffer = CFrameBuffer::getInstance();
|
||||
v_fbdata.clear();
|
||||
saved_screen.pixbuf = NULL;
|
||||
cc_body_gradientBuf = NULL;
|
||||
col_body_gradient = false;
|
||||
cc_gradientData.gradientBuf = NULL;
|
||||
cc_gradientData.boxBuf = NULL;
|
||||
}
|
||||
|
||||
CComponents::~CComponents()
|
||||
@@ -74,8 +75,10 @@ CComponents::~CComponents()
|
||||
hide();
|
||||
clearSavedScreen();
|
||||
clearFbData();
|
||||
if (cc_body_gradientBuf)
|
||||
free(cc_body_gradientBuf);
|
||||
if (cc_gradientData.gradientBuf)
|
||||
free(cc_gradientData.gradientBuf);
|
||||
if (cc_gradientData.boxBuf)
|
||||
cs_free_uncached(cc_gradientData.boxBuf);
|
||||
}
|
||||
|
||||
void CComponents::clearSavedScreen()
|
||||
@@ -293,11 +296,13 @@ void CComponents::clearFbData()
|
||||
if (v_fbdata[i].pixbuf)
|
||||
delete[] v_fbdata[i].pixbuf;
|
||||
|
||||
#if 0
|
||||
if (v_fbdata[i].data && (v_fbdata[i].fbdata_type == CC_FBDATA_TYPE_BOX)) {
|
||||
gradientData_t *gradientData = static_cast<gradientData_t*> (v_fbdata[i].data);
|
||||
if (gradientData->boxBuf)
|
||||
cs_free_uncached(gradientData->boxBuf);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
v_fbdata.clear();
|
||||
}
|
||||
|
@@ -72,6 +72,7 @@ class CComponents : public CComponentsSignals, public COSDFader
|
||||
void *cc_tag;
|
||||
///property: color of body
|
||||
fb_pixel_t col_body;
|
||||
fb_pixel_t old_gradient_color;
|
||||
///property: color of shadow
|
||||
fb_pixel_t col_shadow;
|
||||
///property: color of frame
|
||||
@@ -81,8 +82,6 @@ class CComponents : public CComponentsSignals, public COSDFader
|
||||
|
||||
///property: contains data for gradiant handling
|
||||
gradientData_t cc_gradientData;
|
||||
///gradiant pixel buffer
|
||||
fb_pixel_t *cc_body_gradientBuf;
|
||||
///property: true component can paint gradient, see also enableColBodyGradient()
|
||||
bool col_body_gradient;
|
||||
///property: background gradient mode
|
||||
|
@@ -33,6 +33,7 @@
|
||||
#include "cc_base.h"
|
||||
#include <driver/screen_max.h>
|
||||
#include <system/debug.h>
|
||||
#include <cs_api.h>
|
||||
using namespace std;
|
||||
|
||||
// y
|
||||
@@ -99,7 +100,6 @@ void CComponentsItem::paintInit(bool do_save_bg)
|
||||
iy = cc_yr;
|
||||
}
|
||||
|
||||
cc_gradientData.boxBuf = NULL;
|
||||
cc_gradientData.mode = CFrameBuffer::pbrg_noFree;
|
||||
void* gradientData = (cc_gradientData.gradientBuf == NULL) ? NULL : &cc_gradientData;
|
||||
comp_fbdata_t fbdata[] =
|
||||
@@ -257,12 +257,21 @@ void CComponentsItem::setFocus(bool focus)
|
||||
|
||||
void CComponentsItem::initBodyGradient()
|
||||
{
|
||||
if (cc_body_gradientBuf == NULL) {
|
||||
if (col_body_gradient && cc_gradientData.gradientBuf && old_gradient_color != col_body) {
|
||||
free(cc_gradientData.gradientBuf);
|
||||
cc_gradientData.gradientBuf = NULL;
|
||||
if (cc_gradientData.boxBuf) {
|
||||
cs_free_uncached(cc_gradientData.boxBuf);
|
||||
cc_gradientData.boxBuf = NULL;
|
||||
}
|
||||
}
|
||||
if (cc_gradientData.gradientBuf == NULL) {
|
||||
CColorGradient ccGradient;
|
||||
int gsize = cc_body_gradient_direction == CFrameBuffer::gradientVertical ? height : width;
|
||||
cc_body_gradientBuf = ccGradient.gradientOneColor(col_body, NULL, gsize, cc_body_gradient_mode, cc_body_gradient_intensity, cc_body_gradient_intensity_v_min, cc_body_gradient_intensity_v_max, cc_body_gradient_saturation);
|
||||
cc_gradientData.gradientBuf = ccGradient.gradientOneColor(col_body, NULL, gsize, cc_body_gradient_mode, cc_body_gradient_intensity, cc_body_gradient_intensity_v_min, cc_body_gradient_intensity_v_max, cc_body_gradient_saturation);
|
||||
old_gradient_color = col_body;
|
||||
}
|
||||
cc_gradientData.gradientBuf = cc_body_gradientBuf;
|
||||
|
||||
cc_gradientData.direction = cc_body_gradient_direction;
|
||||
cc_gradientData.mode = CFrameBuffer::pbrg_noOption;
|
||||
}
|
||||
|
Reference in New Issue
Block a user