#!/bin/sh /usr/share/dpatch/dpatch-run ## newsticker-0.0.3-1.3.17 patch by Thomas Günther ## ## downloaded from http://toms-cafe.de/vdr/download/ ## original file: newsticker-0.0.3-1.3.17.diff ## ## All lines beginning with `## DP:' are a description of the patch. ## DP: Change interface of newsticker plugin for vdr >= 1.3.7. @DPATCH@ --- vdrdevel-plugin-newsticker-0.0.3/newsticker.c +++ vdrdevel-plugin-newsticker-0.0.3/newsticker.c @@ -11,7 +11,6 @@ #include -#include "defines.h" #include "news.h" @@ -41,12 +40,13 @@ class cOSDNewsticker : public cThread, public cOsdObject { private: - cOsdBase *osd; + cOsd *osd; eKeys LastKey; bool running, shutdown, downloading; int x; int y; - eDvbColor color; + tColor colorFg; + tColor colorBg; char* theMessage; cNews* news; @@ -77,8 +77,8 @@ ~cOSDNewsticker(); void Show(void) {Start(); } eOSState ProcessKey(eKeys Key); - int scrollMessage(char* message, int speed, int position, cOsdBase *osd, eDvbColor ColorFg, eDvbColor ColorBg, eDvbFont font); - cOsdBase* cOSDNewsticker::createOSDLine(int row); + int scrollMessage(char* message, int speed, int position, cOsd *osd, tColor ColorFg, tColor ColorBg, eDvbFont font); + cOsd* cOSDNewsticker::createOSDLine(int row, eDvbFont font); }; cOSDNewsticker::cOSDNewsticker(void) @@ -89,7 +89,9 @@ theMessage = NULL; x = y = 50; - color = clrRed; + colorFg = clrWhite; + colorBg = clrGray50; + //setRow(520); lineHeight = 300; lineWidth = 700; @@ -97,7 +99,7 @@ running = true; shutdown = false; downloading = false; - setRestart(true); + setRestart(false); setURL(url_1); } @@ -211,14 +213,14 @@ pos = 0;//lineWidth / 2; setMessagePosition(pos); - osd = createOSDLine(getRow()); + osd = createOSDLine(getRow(), fontOsd); downloading = false; } while (running) { - pos = scrollMessage(theMessage, getSpeed(), getMessagePosition(), osd, (eDvbColor)bgbackground, (eDvbColor)bgbackground, fontOsd); + pos = scrollMessage(theMessage, getSpeed(), getMessagePosition(), osd, colorFg, colorBg, fontOsd); if (pos == 999 || getRestart() == true) running = false; } @@ -226,7 +228,7 @@ if(getRestart()) { //show Please wait - scrollMessage("Please wait ...", 0, 0, osd, (eDvbColor)bgbackground, (eDvbColor)bgbackground, fontOsd); + scrollMessage("Please wait ...", 0, 0, osd, colorFg, colorBg, fontOsd); setRestart(false); running = true; @@ -236,34 +238,40 @@ shutdown = true; } -cOsdBase* cOSDNewsticker::createOSDLine(int row) +cOsd* cOSDNewsticker::createOSDLine(int row, eDvbFont font) { - int theHeigth = ((cOsd*)osd)->LineHeight(); - osd = cOsd::OpenRaw(theHeigth, row); - osd->Create(0, 0, lineWidth, theHeigth, 4); + if (osd) { + delete (osd); + osd = NULL; + } + const cFont *theFont = cFont::GetFont(font); + int theHeight = theFont->Height(); + osd = cOsdProvider::NewOsd(theHeight, row); + tArea win = { 0, 0, lineWidth-1, theHeight-1, 4 }; + osd->SetAreas(&win, 1); return osd; } -int cOSDNewsticker::scrollMessage(char* message, int speedvalue, int position, cOsdBase *osd, eDvbColor ColorFg, eDvbColor ColorBg, eDvbFont font) +int cOSDNewsticker::scrollMessage(char* message, int speedvalue, int position, cOsd *osd, tColor ColorFg, tColor ColorBg, eDvbFont font) { if(!osd) return 999; - int theHeigth = ((cOsd*)osd)->LineHeight(); + const cFont *theFont = cFont::GetFont(font); + int theHeight = theFont->Height(); - cBitmap *bitmap = new cBitmap(lineWidth, theHeigth, 4); - bitmap->SetFont(font); + cBitmap *bitmap = new cBitmap(lineWidth, theHeight, 4); - int theWidth = bitmap->Width(message); + int theWidth = theFont->Width(message); position -= scrollsteps; setMessagePosition(position); if (position < (-theWidth+lineWidth)) return 999; - - bitmap->Text(position,0,message); - osd->SetBitmap(0, 0, *bitmap); + + bitmap->DrawText(position, 0, message, ColorFg, ColorBg, theFont); + osd->DrawBitmap(0, 0, *bitmap); osd->Flush(); delete bitmap; @@ -277,19 +285,19 @@ eOSState state = cOsdObject::ProcessKey(Key); if (state == osUnknown) { switch (Key & ~k_Repeat) { - case kUp: if (getRow() > 0) setRow(getRow() - 10); createOSDLine(getRow()); break; - case kDown: if (getRow() < 520) setRow(getRow() + 10); createOSDLine(getRow()); break; + case kUp: if (getRow() > 0) setRow(getRow() - 10); createOSDLine(getRow(), fontOsd); break; + case kDown: if (getRow() < 520) setRow(getRow() + 10); createOSDLine(getRow(), fontOsd); break; case kLeft: if (getSpeed() > 1) setSpeed(getSpeed() - 1); break; case kRight: if (getSpeed() < 10) setSpeed(getSpeed() + 1); break; - case KEY_1: setURL(url_1); setRestart(true); break; - case KEY_2: setURL(url_2); setRestart(true); break; - case KEY_3: setURL(url_3); setRestart(true); break; - case KEY_4: setURL(url_4); setRestart(true); break; - case KEY_5: setURL(url_5); setRestart(true); break; - case KEY_6: setURL(url_6); setRestart(true); break; - case KEY_7: setURL(url_7); setRestart(true); break; - case KEY_8: setURL(url_8); setRestart(true); break; - case KEY_9: setURL(url_9); setRestart(true); break; + case k1: setURL(url_1); setRestart(true); break; + case k2: setURL(url_2); setRestart(true); break; + case k3: setURL(url_3); setRestart(true); break; + case k4: setURL(url_4); setRestart(true); break; + case k5: setURL(url_5); setRestart(true); break; + case k6: setURL(url_6); setRestart(true); break; + case k7: setURL(url_7); setRestart(true); break; + case k8: setURL(url_8); setRestart(true); break; + case k9: setURL(url_9); setRestart(true); break; /*case kGreen: color = clrGreen; break; case kYellow: color = clrYellow; break; case kBlue: color = clrBlue; break;*/