From ad6940fd8510c67c231bf6461e062f4512c1d815 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Tue, 29 Dec 2015 23:56:49 +0100 Subject: [PATCH] CCDraw: add parameter force_paint to member enableShadow() TODO executed Default behavior is not changed but parameter allows repaint shadow in some constellations if required. --- src/gui/components/cc_draw.cpp | 6 ++++-- src/gui/components/cc_draw.h | 9 +++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/gui/components/cc_draw.cpp b/src/gui/components/cc_draw.cpp index f5c283c72..8433253a7 100644 --- a/src/gui/components/cc_draw.cpp +++ b/src/gui/components/cc_draw.cpp @@ -50,6 +50,7 @@ CCDraw::CCDraw() : COSDFader(g_settings.theme.menu_Content_alpha) shadow = CC_SHADOW_OFF; shadow_w = shadow_w_old = SHADOW_OFFSET; + shadow_force = false; cc_paint_cache = false; cc_scrdata.pixbuf = NULL; @@ -543,7 +544,7 @@ void CCDraw::paintFbItems(bool do_save_bg) frameBuffer->paintBackgroundBoxRel(x, y, fbdata.dx, fbdata.dy); } } - if (fbtype == CC_FBDATA_TYPE_SHADOW_BOX && !is_painted) { //TODO: is_painted is too global here, shadow will not paint on current instance without called kill/hide + if (fbtype == CC_FBDATA_TYPE_SHADOW_BOX && (!is_painted || shadow_force)) { if (fbdata.enabled) { /* here we paint the shadow around the body * on 1st step we check for already cached screen buffer, if true @@ -688,12 +689,13 @@ bool CCDraw::doPaintBg(bool do_paint) return true; } -void CCDraw::enableShadow(int mode, const int& shadow_width) +void CCDraw::enableShadow(int mode, const int& shadow_width, bool force_paint) { if (shadow != mode) shadow = mode; if (shadow != CC_SHADOW_OFF) if (shadow_width != -1) setShadowWidth(shadow_width); + shadow_force = force_paint; } diff --git a/src/gui/components/cc_draw.h b/src/gui/components/cc_draw.h index 1381b0f31..152a6359b 100644 --- a/src/gui/components/cc_draw.h +++ b/src/gui/components/cc_draw.h @@ -84,6 +84,8 @@ class CCDraw : public COSDFader, public CComponentsSignals int shadow; ///property: width of shadow int shadow_w, shadow_w_old; + ///property: force shadow paint, see enableShadow() + bool shadow_force; ///returns true if internal property was changed virtual bool hasChanges(); @@ -245,8 +247,11 @@ class CCDraw : public COSDFader, public CComponentsSignals ///switch shadow on/off virtual void setShadowWidth(const int& shadow_width){if (shadow_w != shadow_width) shadow_w = shadow_width;} - ///Note: it's recommended to use #defines: CC_SHADOW_ON=true or CC_SHADOW_OFF=false as parameter, see also cc_types.h - virtual void enableShadow(int mode = CC_SHADOW_ON, const int& shadow_width = -1); + /**1st parameter requires defines CC_SHADOW_ON (default), CC_SHADOW_OFF, CC_SHADOW_BOTTOM or CC_SHADOW_RIGHT, see also cc_types.h + * 2nd parameter defines shadow width, default = defined by system + * 3rd parameter forces paint of shadow layer, default = false, Note: default shadow will paint only on first paint, use 3rd parameter=true ignores this + */ + virtual void enableShadow(int mode = CC_SHADOW_ON, const int& shadow_width = -1, bool force_paint = false); ///switch shadow off virtual void disableShadow(){enableShadow(CC_SHADOW_OFF);}