diff options
author | louis <louis.braun@gmx.de> | 2016-07-30 15:05:47 +0200 |
---|---|---|
committer | louis <louis.braun@gmx.de> | 2016-07-30 15:05:47 +0200 |
commit | 6acc22e5c2c1e28022286064f9bb9216e9942768 (patch) | |
tree | a33393fa80a822682d93067201a0825be8d34dc1 | |
parent | dddb273526be87c8a2e235410ce0738db161d6f6 (diff) | |
download | vdr-plugin-skindesigner-6acc22e5c2c1e28022286064f9bb9216e9942768.tar.gz vdr-plugin-skindesigner-6acc22e5c2c1e28022286064f9bb9216e9942768.tar.bz2 |
fixed bug that listelements were not drawn after scrolling
-rw-r--r-- | coreengine/animation.c | 5 | ||||
-rw-r--r-- | coreengine/animation.h | 1 | ||||
-rw-r--r-- | coreengine/area.c | 5 | ||||
-rw-r--r-- | coreengine/area.h | 4 | ||||
-rw-r--r-- | coreengine/listelements.c | 13 | ||||
-rw-r--r-- | skins/metrixhd/xmlfiles/displaychannel.xml | 1 |
6 files changed, 18 insertions, 11 deletions
diff --git a/coreengine/animation.c b/coreengine/animation.c index fc4393f..cab87a3 100644 --- a/coreengine/animation.c +++ b/coreengine/animation.c @@ -120,7 +120,10 @@ void cScroller::Init(void) { } void cScroller::Reactivate(void) {} -void cScroller::SetInitial(void) {} + +void cScroller::SetInitial(void) { + scrollable->SetScrollingStarted(); +} bool cScroller::Pause(void) { if (!paused) diff --git a/coreengine/animation.h b/coreengine/animation.h index 078b81e..f30281e 100644 --- a/coreengine/animation.h +++ b/coreengine/animation.h @@ -74,6 +74,7 @@ public: virtual eScrollMode ScrollMode(void) = 0; virtual eScrollSpeed ScrollSpeed(void) = 0; virtual eOrientation ScrollOrientation(void) = 0; + virtual void SetScrollingStarted(void) = 0; virtual void StartScrolling(void) = 0; virtual void StopScrolling(void) = 0; virtual void SetDrawPort(cPoint &point) = 0; diff --git a/coreengine/area.c b/coreengine/area.c index d90fadb..5692014 100644 --- a/coreengine/area.c +++ b/coreengine/area.c @@ -30,6 +30,7 @@ cArea::cArea(void) { attribs = new cAreaAttribs((int)eAreaAttribs::count); scrolling = false; isScrolling = false; + scrollingStarted = false; scrollFunc = NULL; blinking = false; areaContainer = NULL; @@ -45,6 +46,7 @@ cArea::cArea(const cArea &other) { attribs = new cAreaAttribs(*other.attribs); //area container is set from outside during cloning of areacontainer areaContainer = NULL; + scrollingStarted = false; //scrolling is set from outside by ScrollFunc(), see below scrolling = other.scrolling; isScrolling = false; @@ -244,6 +246,7 @@ void cArea::Close(void) { pix = NULL; } init = true; + scrollingStarted = false; } void cArea::Clear(bool forceClearBackground) { @@ -255,6 +258,7 @@ void cArea::Clear(bool forceClearBackground) { pix->SetDrawPortPoint(cPoint(0,0)); pix->Fill(clrTransparent); } + scrollingStarted = false; } void cArea::ClearWithoutIndicators(void) { @@ -265,6 +269,7 @@ void cArea::ClearWithoutIndicators(void) { if (pix) { pix->Fill(clrTransparent); } + scrollingStarted = false; } void cArea::Hide(void) { diff --git a/coreengine/area.h b/coreengine/area.h index a99666c..478f229 100644 --- a/coreengine/area.h +++ b/coreengine/area.h @@ -58,6 +58,7 @@ public: virtual void SetIndicatorPosition(cPoint &pos) {}; virtual cRect CoveringArea(void) { return cRect::Null; }; virtual bool Scrolling(void) { return false; }; + virtual bool ScrollingStarted(void) { return false; }; virtual cArea *ScrollingArea(void) { return NULL; }; virtual cFunction *GetFunction(const char *name) { return NULL; }; virtual const char *Name(void) { return NULL; }; @@ -80,6 +81,7 @@ private: cList<cFunction> functions; bool scrolling; bool isScrolling; + bool scrollingStarted; cFunction *scrollFunc; list<cBlinker*> blinkers; bool blinking; @@ -121,6 +123,8 @@ public: cRect CoveringArea(void); //Scrollable bool Scrolling(void); + void SetScrollingStarted(void) { scrollingStarted = true; }; + bool ScrollingStarted(void) { return scrollingStarted; }; int ScrollWidth(void); int ScrollHeight(void); int ScrollDelay(void); diff --git a/coreengine/listelements.c b/coreengine/listelements.c index ec8cf3a..3b2037f 100644 --- a/coreengine/listelements.c +++ b/coreengine/listelements.c @@ -60,7 +60,7 @@ void cListElement::Clear(bool forceClearBackground) { void cListElement::WakeCurrent(void) { if (currentElement) { currentElement->WakeUp(); - } + } } void cListElement::Render(void) { @@ -70,16 +70,12 @@ void cListElement::Render(void) { if (attribs->DoDebug()) Debug(); bool animated = Fading() || Shifting(); - for (cAreaNode *node = areaNodes.First(); node; node = areaNodes.Next(node)) { //Check redraw of already scrolling list element - if (drawn && scrollingStarted && node->Scrolling()) { + if (drawn && node->Scrolling() && node->ScrollingStarted()) { if (DoScroll()) { //current list element continue; - } else { - //not current list element anymore - scrollingStarted = false; } } //don't clear animated list element if it was current @@ -97,15 +93,14 @@ void cListElement::Render(void) { node->Render(); sdOsd->Unlock(); - if (DoScroll() && node->Scrolling()) { + if (DoScroll() && node->Scrolling() && !node->ScrollingStarted()) { cArea *scrollArea = node->ScrollingArea(); if (scrollArea) { - scrollingStarted = true; cScroller *scroller = new cScroller(scrollArea); scrollers.push_back(scroller); cView::AddAnimation(scroller); } - } + } } dirty = false; drawn = true; diff --git a/skins/metrixhd/xmlfiles/displaychannel.xml b/skins/metrixhd/xmlfiles/displaychannel.xml index 24825cd..a057b88 100644 --- a/skins/metrixhd/xmlfiles/displaychannel.xml +++ b/skins/metrixhd/xmlfiles/displaychannel.xml @@ -176,7 +176,6 @@ </area> </scrapercontent> - <channelhints> <area background="true" x="0" y="{areaheight}*0.75 - {numhints}*{areaheight}*{zapchannelhintsheight}/1000 + 1" width="{zapchannelhintswidth}*{areawidth}/100" height="{numhints}*{areaheight}*{zapchannelhintsheight}/1000" layer="1"> <fill color="{menuback}" /> |