summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlouis <louis.braun@gmx.de>2016-07-30 15:05:47 +0200
committerlouis <louis.braun@gmx.de>2016-07-30 15:05:47 +0200
commit6acc22e5c2c1e28022286064f9bb9216e9942768 (patch)
treea33393fa80a822682d93067201a0825be8d34dc1
parentdddb273526be87c8a2e235410ce0738db161d6f6 (diff)
downloadvdr-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.c5
-rw-r--r--coreengine/animation.h1
-rw-r--r--coreengine/area.c5
-rw-r--r--coreengine/area.h4
-rw-r--r--coreengine/listelements.c13
-rw-r--r--skins/metrixhd/xmlfiles/displaychannel.xml1
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}" />