diff options
author | louis <louis.braun@gmx.de> | 2015-05-03 11:22:01 +0200 |
---|---|---|
committer | louis <louis.braun@gmx.de> | 2015-05-03 11:22:01 +0200 |
commit | c5edc10fbd57d17e774a07b659996bdffe16242c (patch) | |
tree | cc9b5cfc4b38c7bb7f2743cba732d6e4200b5594 | |
parent | 918a331de3e0a6a31b2cd621ed628d53ac9fa2da (diff) | |
download | vdr-plugin-skindesigner-c5edc10fbd57d17e774a07b659996bdffe16242c.tar.gz vdr-plugin-skindesigner-c5edc10fbd57d17e774a07b659996bdffe16242c.tar.bz2 |
possibility to move viewelements when starting view
-rw-r--r-- | HISTORY | 2 | ||||
-rw-r--r-- | dtd/displaychannel.dtd | 18 | ||||
-rw-r--r-- | dtd/displaymenu.dtd | 30 | ||||
-rw-r--r-- | libcore/pixmapcontainer.c | 63 | ||||
-rw-r--r-- | libcore/pixmapcontainer.h | 7 | ||||
-rw-r--r-- | libtemplate/templatefunction.c | 20 | ||||
-rw-r--r-- | libtemplate/templatefunction.h | 3 | ||||
-rw-r--r-- | libtemplate/templateview.c | 3 | ||||
-rw-r--r-- | skins/metrixhd/xmlfiles/displaychannel.xml | 30 | ||||
-rw-r--r-- | skins/metrixhd/xmlfiles/displaymenumain.xml | 2 | ||||
-rw-r--r-- | views/view.c | 10 |
11 files changed, 168 insertions, 20 deletions
@@ -307,3 +307,5 @@ Version 0.4.3 - fixed bug that tokens in image pathes are not replaced correctly Version 0.4.4 + +- feature: possibility to move viewelements when starting view diff --git a/dtd/displaychannel.dtd b/dtd/displaychannel.dtd index 2038d12..94b736d 100644 --- a/dtd/displaychannel.dtd +++ b/dtd/displaychannel.dtd @@ -96,6 +96,9 @@ detached CDATA #IMPLIED
delay CDATA #IMPLIED
fadetime CDATA #IMPLIED
+ shifttime CDATA #IMPLIED
+ startx CDATA #IMPLIED
+ starty CDATA #IMPLIED
debug CDATA #IMPLIED
condition CDATA #IMPLIED
mode CDATA #IMPLIED
@@ -106,6 +109,9 @@ detached CDATA #IMPLIED
delay CDATA #IMPLIED
fadetime CDATA #IMPLIED
+ shifttime CDATA #IMPLIED
+ startx CDATA #IMPLIED
+ starty CDATA #IMPLIED
debug CDATA #IMPLIED
condition CDATA #IMPLIED
>
@@ -115,6 +121,9 @@ detached CDATA #IMPLIED
delay CDATA #IMPLIED
fadetime CDATA #IMPLIED
+ shifttime CDATA #IMPLIED
+ startx CDATA #IMPLIED
+ starty CDATA #IMPLIED
debug CDATA #IMPLIED
condition CDATA #IMPLIED
>
@@ -124,6 +133,9 @@ detached CDATA #IMPLIED
delay CDATA #IMPLIED
fadetime CDATA #IMPLIED
+ shifttime CDATA #IMPLIED
+ startx CDATA #IMPLIED
+ starty CDATA #IMPLIED
debug CDATA #IMPLIED
condition CDATA #IMPLIED
>
@@ -133,6 +145,9 @@ detached CDATA #IMPLIED
delay CDATA #IMPLIED
fadetime CDATA #IMPLIED
+ shifttime CDATA #IMPLIED
+ startx CDATA #IMPLIED
+ starty CDATA #IMPLIED
debug CDATA #IMPLIED
condition CDATA #IMPLIED
>
@@ -148,6 +163,9 @@ detached CDATA #IMPLIED
delay CDATA #IMPLIED
fadetime CDATA #IMPLIED
+ shifttime CDATA #IMPLIED
+ startx CDATA #IMPLIED
+ starty CDATA #IMPLIED
debug CDATA #IMPLIED
condition CDATA #IMPLIED
>
diff --git a/dtd/displaymenu.dtd b/dtd/displaymenu.dtd index de4a813..8626689 100644 --- a/dtd/displaymenu.dtd +++ b/dtd/displaymenu.dtd @@ -63,6 +63,9 @@ detached CDATA #IMPLIED
delay CDATA #IMPLIED
fadetime CDATA #IMPLIED
+ shifttime CDATA #IMPLIED
+ startx CDATA #IMPLIED
+ starty CDATA #IMPLIED
debug CDATA #IMPLIED
condition CDATA #IMPLIED
>
@@ -72,6 +75,9 @@ detached CDATA #IMPLIED
delay CDATA #IMPLIED
fadetime CDATA #IMPLIED
+ shifttime CDATA #IMPLIED
+ startx CDATA #IMPLIED
+ starty CDATA #IMPLIED
debug CDATA #IMPLIED
condition CDATA #IMPLIED
>
@@ -81,6 +87,9 @@ detached CDATA #IMPLIED
delay CDATA #IMPLIED
fadetime CDATA #IMPLIED
+ shifttime CDATA #IMPLIED
+ startx CDATA #IMPLIED
+ starty CDATA #IMPLIED
debug CDATA #IMPLIED
condition CDATA #IMPLIED
mode CDATA #IMPLIED
@@ -91,6 +100,9 @@ detached CDATA #IMPLIED
delay CDATA #IMPLIED
fadetime CDATA #IMPLIED
+ shifttime CDATA #IMPLIED
+ startx CDATA #IMPLIED
+ starty CDATA #IMPLIED
debug CDATA #IMPLIED
condition CDATA #IMPLIED
>
@@ -100,6 +112,9 @@ detached CDATA #IMPLIED
delay CDATA #IMPLIED
fadetime CDATA #IMPLIED
+ shifttime CDATA #IMPLIED
+ startx CDATA #IMPLIED
+ starty CDATA #IMPLIED
debug CDATA #IMPLIED
condition CDATA #IMPLIED
>
@@ -109,6 +124,9 @@ detached CDATA #IMPLIED
delay CDATA #IMPLIED
fadetime CDATA #IMPLIED
+ shifttime CDATA #IMPLIED
+ startx CDATA #IMPLIED
+ starty CDATA #IMPLIED
debug CDATA #IMPLIED
condition CDATA #IMPLIED
>
@@ -118,6 +136,9 @@ detached CDATA #IMPLIED
delay CDATA #IMPLIED
fadetime CDATA #IMPLIED
+ shifttime CDATA #IMPLIED
+ startx CDATA #IMPLIED
+ starty CDATA #IMPLIED
debug CDATA #IMPLIED
condition CDATA #IMPLIED
>
@@ -127,6 +148,9 @@ detached CDATA #IMPLIED
delay CDATA #IMPLIED
fadetime CDATA #IMPLIED
+ shifttime CDATA #IMPLIED
+ startx CDATA #IMPLIED
+ starty CDATA #IMPLIED
debug CDATA #IMPLIED
condition CDATA #IMPLIED
>
@@ -136,6 +160,9 @@ detached CDATA #IMPLIED
delay CDATA #IMPLIED
fadetime CDATA #IMPLIED
+ shifttime CDATA #IMPLIED
+ startx CDATA #IMPLIED
+ starty CDATA #IMPLIED
debug CDATA #IMPLIED
condition CDATA #IMPLIED
>
@@ -145,6 +172,9 @@ detached CDATA #IMPLIED
delay CDATA #IMPLIED
fadetime CDATA #IMPLIED
+ shifttime CDATA #IMPLIED
+ startx CDATA #IMPLIED
+ starty CDATA #IMPLIED
debug CDATA #IMPLIED
condition CDATA #IMPLIED
>
diff --git a/libcore/pixmapcontainer.c b/libcore/pixmapcontainer.c index 81cc8ff..2f498e0 100644 --- a/libcore/pixmapcontainer.c +++ b/libcore/pixmapcontainer.c @@ -20,6 +20,7 @@ cPixmapContainer::cPixmapContainer(int numPixmaps) { mutex.Unlock(); checkRunning = false; fadeTime = 0; + shiftTime = 0; deleteOsdOnExit = false; } @@ -122,7 +123,7 @@ void cPixmapContainer::CreatePixmap(int num, int Layer, const cRect &ViewPort, c if (!pixmaps[num]) return; pixmaps[num]->Fill(clrTransparent); - if (pixContainerInit && fadeTime) { + if (pixContainerInit && (fadeTime || shiftTime)) { pixmaps[num]->SetAlpha(0); } else if (pixmapsTransparency[num] > 0) { int alpha = (100 - pixmapsTransparency[num])*255/100; @@ -256,6 +257,16 @@ void cPixmapContainer::Pos(int num, cPoint &pos) { pos.SetY(pixmaps[num]->ViewPort().Y()); } +cRect cPixmapContainer::ViewPort(int num) { + cRect vp; + if (checkRunning && !Running()) + return vp; + cMutexLock MutexLock(&mutex); + if (!pixmaps[num]) + return vp; + return pixmaps[num]->ViewPort(); +} + int cPixmapContainer::Width(int num) { if (checkRunning && !Running()) return 0; @@ -331,8 +342,13 @@ void cPixmapContainer::SetDrawPortPoint(int num, const cPoint &Point) { ****************************************************************************/ void cPixmapContainer::FadeIn(void) { - if (!fadeTime) + if (!fadeTime) { + for (int i = 0; i < numPixmaps; i++) { + if (PixmapExists(i)) + SetAlpha(i, ALPHA_OPAQUE); + } return; + } uint64_t Start = cTimeMs::Now(); int FadeFrameTime = fadeTime / 10; while (Running()) { @@ -386,6 +402,49 @@ void cPixmapContainer::FadeOut(void) { } } +void cPixmapContainer::ShiftIn(void) { + if (shiftTime < 1) + return; + cPoint destPos[numPixmaps]; + for (int i = 0; i < numPixmaps; i++) { + if (!PixmapExists(i)) + continue; + cPoint pos; + Pos(i, pos); + destPos[i] = pos; + cRect r = ViewPort(i); + r.SetPoint(startPos); + SetViewPort(i, r); + SetAlpha(i, ALPHA_OPAQUE); + } + DoFlush(); + + int frames = shiftTime / 20; + if (frames <= 0) frames = 1; + uint64_t Start = cTimeMs::Now(); + int frameTime = shiftTime / frames; + while (true) { + uint64_t Now = cTimeMs::Now(); + double t = min(double(Now - Start) / shiftTime, 1.0); + for (int i = 0; i < numPixmaps; i++) { + if (!PixmapExists(i)) + continue; + int x = startPos.X() + t * (destPos[i].X() - startPos.X()); + int y = startPos.Y() + t * (destPos[i].Y() - startPos.Y()); + cRect r = ViewPort(i); + r.SetPoint(x, y); + SetViewPort(i, r); + } + DoFlush(); + int Delta = cTimeMs::Now() - Now; + if (Delta < frameTime) + cCondWait::SleepMs(frameTime - Delta); + if ((int)(Now - Start) > shiftTime) + break; + } + +} + /***************************************** * scrollSpeed: 1 slow * 2 medium diff --git a/libcore/pixmapcontainer.h b/libcore/pixmapcontainer.h index eeff8cb..d17753c 100644 --- a/libcore/pixmapcontainer.h +++ b/libcore/pixmapcontainer.h @@ -23,6 +23,8 @@ private: int *pixmapsLayer; bool checkRunning; int fadeTime; + int shiftTime; + cPoint startPos; bool deleteOsdOnExit; protected: void SetInitFinished(void) { pixContainerInit = false; }; @@ -46,6 +48,7 @@ protected: void SetViewPort(int num, const cRect &rect); int Layer(int num); void Pos(int num, cPoint &pos); + cRect ViewPort(int num); int Width(int num); int Height(int num); int DrawportWidth(int num); @@ -57,8 +60,12 @@ protected: void UnsetCheckRunning(void) { checkRunning = false; }; //HELPERS -- do not access the pixmaps array directly, use wrapper functions void SetFadeTime(int fade) { fadeTime = fade; }; + void SetShiftTime(int shift) { shiftTime = shift; }; + void SetStartPos(int posX, int posY) { startPos.SetX(posX); startPos.SetY(posY); }; + bool IsAnimated(void) { return (shiftTime > 0); }; void FadeIn(void); void FadeOut(void); + void ShiftIn(void); void ScrollVertical(int num, int scrollDelay, int scrollSpeed); void ScrollHorizontal(int num, int scrollDelay, int scrollSpeed, int scrollMode); void CancelSave(void); diff --git a/libtemplate/templatefunction.c b/libtemplate/templatefunction.c index e186621..9855066 100644 --- a/libtemplate/templatefunction.c +++ b/libtemplate/templatefunction.c @@ -73,6 +73,12 @@ void cTemplateFunction::SetParameters(vector<pair<string, string> > params) { p.first = ptDetached;
} else if (!name.compare("fadetime")) {
p.first = ptFadeTime;
+ } else if (!name.compare("shifttime")) {
+ p.first = ptShiftTime;
+ } else if (!name.compare("startx")) {
+ p.first = ptStartX;
+ } else if (!name.compare("starty")) {
+ p.first = ptStartY;
} else if (!name.compare("imagetype")) {
p.first = ptImageType;
} else if (!name.compare("path")) {
@@ -230,7 +236,10 @@ bool cTemplateFunction::CalculateParameters(void) { case ptHeight:
case ptMenuItemWidth:
case ptFadeTime:
+ case ptShiftTime:
case ptDelay:
+ case ptStartX:
+ case ptStartY:
case ptFontSize:
case ptLayer:
case ptTransparency:
@@ -780,6 +789,7 @@ bool cTemplateFunction::SetNumericParameter(eParamType type, string value) { param.SetGlobals(globals);
switch (type) {
case ptX:
+ case ptStartX:
case ptWidth:
case ptMenuItemWidth:
case ptScaleTvX:
@@ -787,6 +797,7 @@ bool cTemplateFunction::SetNumericParameter(eParamType type, string value) { param.SetHorizontal();
break;
case ptY:
+ case ptStartY:
case ptHeight:
case ptScaleTvY:
case ptScaleTvHeight:
@@ -1591,6 +1602,15 @@ string cTemplateFunction::GetParamName(eParamType pt) { case ptFadeTime:
name = "Fade Time";
break;
+ case ptShiftTime:
+ name = "Shift Time";
+ break;
+ case ptStartX:
+ name = "Startpos X";
+ break;
+ case ptStartY:
+ name = "Startpos Y";
+ break;
case ptDelay:
name = "Delay";
break;
diff --git a/libtemplate/templatefunction.h b/libtemplate/templatefunction.h index c781568..508615d 100644 --- a/libtemplate/templatefunction.h +++ b/libtemplate/templatefunction.h @@ -51,6 +51,9 @@ enum eParamType { ptMenuItemWidth, ptDetached, ptFadeTime, + ptShiftTime, + ptStartX, + ptStartY, ptDelay, ptImageType, ptPath, diff --git a/libtemplate/templateview.c b/libtemplate/templateview.c index ddd6094..2e7782b 100644 --- a/libtemplate/templateview.c +++ b/libtemplate/templateview.c @@ -667,6 +667,9 @@ void cTemplateView::SetFunctionDefinitions(void) { attributes.insert("detached"); attributes.insert("delay"); attributes.insert("fadetime"); + attributes.insert("shifttime"); + attributes.insert("startx"); + attributes.insert("starty"); attributes.insert("name"); attributes.insert("condition"); attributes.insert("mode"); diff --git a/skins/metrixhd/xmlfiles/displaychannel.xml b/skins/metrixhd/xmlfiles/displaychannel.xml index 6851c6c..14547f8 100644 --- a/skins/metrixhd/xmlfiles/displaychannel.xml +++ b/skins/metrixhd/xmlfiles/displaychannel.xml @@ -186,7 +186,7 @@ {devices[channelid]} ID of the currently tuned channel {devices[source]} source of the currently tuned channel --> - <devices condition="{showdevices}" detached="true" delay="100" fadetime="{fadetime}"> + <devices condition="{showdevices}" detached="true" delay="300" shifttime="500" startx="100%" starty="30%"> <area x="70%" y="30%" width="30%" height="{areaheight}/12 * {numdevices}" layer="1" background="true"> <fill color="{clrTransBlack}"/> </area> @@ -224,20 +224,20 @@ {pressure} pressure in HPo {ozone} ozone value in DU --> - <currentweather> + <currentweather detached="true" delay="100" shifttime="300" startx="100%" starty="15%" > <area background="true" x="70%" y="15%" width="30%" height="13%" layer="1"> <fill color="{clrTransBlack}" /> <drawrectangle x="0" y="0" width="45%" height="100%" color="{clrTransBlueLight}" /> </area> - <area x="70%" y="15%" width="13%" height="13%" layer="2"> - <drawimage imagetype="icon" path="{icon}" align="center" valign="center" width="{areaheight}*0.8" height="{areaheight}*0.8"/> + <area x="70%" y="15%" width="30%" height="13%" layer="2"> + <drawimage name="weathericon" imagetype="icon" path="{icon}" x="0.43*{areawidth}/2 - {width(weathericon)}/2" valign="center" width="{areaheight}*0.8" height="{areaheight}*0.8"/> </area> - <area x="85%" y="15%" width="13%" height="13%" layer="2"> - <drawtext x="0" y="0" font="{light}" fontsize="25%" color="{clrWhite}" text="{mintemperature}°C" /> - <drawtext x="0" y="75%" font="{light}" fontsize="25%" color="{clrWhite}" text="{maxtemperature}°C" /> + <area x="70%" y="15%" width="30%" height="13%" layer="2"> + <drawtext x="50%" y="0" font="{light}" fontsize="25%" color="{clrWhite}" text="{mintemperature}°C" /> + <drawtext x="50%" y="75%" font="{light}" fontsize="25%" color="{clrWhite}" text="{maxtemperature}°C" /> </area> - <area x="85%" y="15%" width="13%" height="13%" layer="3"> - <drawtext align="right" valign="center" font="{light}" fontsize="60%" color="{clrWhite}" text="{temperature}°C" /> + <area x="70%" y="15%" width="30%" height="13%" layer="3"> + <drawtext x="50%" valign="center" font="{light}" fontsize="60%" color="{clrWhite}" text="{temperature}°C" /> </area> </currentweather> @@ -277,17 +277,17 @@ {monthnameshort} 3 letter abbrivation of month name {year} year in yyyy --> - <datetime> + <datetime detached="true" delay="100" shifttime="300" startx="100%" starty="0"> <area background="true" x="70%" y="0" width="30%" height="13%" layer="1"> <fill color="{clrTransBlack}" /> <drawrectangle x="0" y="0" width="45%" height="100%" color="{clrTransBlueLight}" /> </area> - <area x="70%" y="0" width="13%" height="13%" layer="2"> - <drawtext align="right" y="0" font="{light}" fontsize="50%" color="{clrWhite}" text="{dayname}" /> - <drawtext align="right" y="48%" font="{light}" fontsize="50%" color="{clrWhite}" text="{day}. {monthnameshort}" /> + <area x="70%" y="0" width="30%" height="13%" layer="2"> + <drawtext align="right" y="0" font="{light}" fontsize="50%" color="{clrWhite}" text="{dayname} " /> + <drawtext align="right" y="48%" font="{light}" fontsize="50%" color="{clrWhite}" text="{day}. {monthnameshort} " /> </area> - <area x="85%" y="0" width="13%" height="13%" layer="2"> - <drawtext align="center" valign="center" font="{light}" fontsize="90%" color="{clrWhite}" text="{time}" /> + <area x="70%" y="0" width="30%" height="13%" layer="2"> + <drawtext x="1%" valign="center" font="{light}" fontsize="90%" color="{clrWhite}" text="{time}" /> </area> </datetime> <!-- Available Variables message: diff --git a/skins/metrixhd/xmlfiles/displaymenumain.xml b/skins/metrixhd/xmlfiles/displaymenumain.xml index 5818cef..77fd24b 100644 --- a/skins/metrixhd/xmlfiles/displaymenumain.xml +++ b/skins/metrixhd/xmlfiles/displaymenumain.xml @@ -121,7 +121,7 @@ {timers[channellogoexists]} true if channel logo exists {timers[isremotetimer]} true if timer is a remote timer from remotetimers plugin --> - <timers detached="true" delay="100" fadetime="0"> + <timers detached="true" delay="100" shifttime="500" startx="0" starty="100%"> <area x="0" y="75%" width="{areawidth}/8 - 5" height="25%" layer="1"> <fill color="{clrTransBlack}" /> </area> diff --git a/views/view.c b/views/view.c index 077931a..0bdf019 100644 --- a/views/view.c +++ b/views/view.c @@ -1048,6 +1048,8 @@ cViewElement::cViewElement(cTemplateViewElement *tmplViewElement) : cView(tmplVi tmplViewElement->SetPixOffset(0);
delay = tmplViewElement->GetNumericParameter(ptDelay);
SetFadeTime(tmplViewElement->GetNumericParameter(ptFadeTime));
+ SetShiftTime(tmplViewElement->GetNumericParameter(ptShiftTime));
+ SetStartPos(tmplViewElement->GetNumericParameter(ptStartX), tmplViewElement->GetNumericParameter(ptStartY));
}
cViewElement::~cViewElement() {
@@ -1055,10 +1057,14 @@ cViewElement::~cViewElement() { }
void cViewElement::Action(void) {
- SetInitFinished();
DoSleep(delay);
Render();
- FadeIn();
+ SetInitFinished();
+ if (IsAnimated()) {
+ ShiftIn();
+ } else {
+ FadeIn();
+ }
DoFlush();
if (scrolling) {
DoSleep(scrollDelay);
|