summaryrefslogtreecommitdiff
path: root/render.h
diff options
context:
space:
mode:
Diffstat (limited to 'render.h')
-rw-r--r--render.h185
1 files changed, 73 insertions, 112 deletions
diff --git a/render.h b/render.h
index 7057315..2cb7562 100644
--- a/render.h
+++ b/render.h
@@ -1,12 +1,14 @@
/*
- * $Id: render.h,v 1.26 2004/07/13 13:52:51 lordjaxom Exp $
+ * $Id: render.h,v 1.5 2004/12/08 18:47:37 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_RENDER_H
#define VDR_TEXT2SKIN_RENDER_H
#include "common.h"
-#include "data.h"
+#include "scroller.h"
+#include "xml/skin.h"
+#include "xml/type.h"
#include <vdr/osd.h>
#include <vdr/skins.h>
#include <vdr/thread.h>
@@ -14,10 +16,8 @@
class cChannel;
class cEvent;
class cText2SkinLoader;
-class cText2SkinData;
class cText2SkinI18n;
class cText2SkinTheme;
-class cText2SkinScroller;
class cText2SkinScreen;
class cText2SkinRender: public cThread {
@@ -27,77 +27,31 @@ class cText2SkinRender: public cThread {
friend class cText2SkinDisplayMessage;
friend class cText2SkinDisplayMenu;
+ /* Skin Editor */
+ friend class VSkinnerScreen;
+
private:
static cText2SkinRender *mRender;
- cText2SkinData *mData;
+ cxSkin *mSkin;
+ cxDisplay *mDisplay;
cText2SkinI18n *mI18n;
cText2SkinTheme *mTheme;
- eSkinSection mSection;
cText2SkinScreen *mScreen;
cText2SkinScroller *mScroller;
- // channel display
- const cChannel *mChannel;
- int mChannelNumber;
- const cEvent *mChannelPresent;
- const cEvent *mChannelFollowing;
-
- // volume display
- int mVolumeCurrent;
- int mVolumeTotal;
- bool mVolumeMute;
-
- // replay display
- string mReplayTitle;
- bool mReplayInfo;
- bool mReplayPlay;
- bool mReplayForward;
- int mReplaySpeed;
- int mReplayCurrent;
- int mReplayTotal;
- const cMarks *mReplayMarks;
- string mReplayCurrentText;
- string mReplayTotalText;
- string mReplayJump;
-
- // message display
- eMessageType mMessageType;
- string mMessageText;
-
- // menu
- struct MenuItem {
- string text;
- string tabs[cSkinDisplayMenu::MaxTabs];
- bool sel;
- bool operator!=(const MenuItem &b) { return b.text != text || b.sel != sel; }
- };
- string mMenuTitle;
- vector<MenuItem> mMenuItems;
- int mMenuCurrent;
- string mMenuRed;
- string mMenuGreen;
- string mMenuYellow;
- string mMenuBlue;
- const cEvent *mMenuEvent;
- const cRecording *mMenuRecording;
- string mMenuText;
- bool mMenuTextFixedFont;
- bool mMenuScroll;
- bool mMenuScrollUp;
- bool mMenuScrollPage;
- int mMenuTabs[cSkinDisplayMenu::MaxTabs];
+ std::string mBasePath;
+ bool mDirty;
// update thread
- bool mActive;
- cCondVar mDoUpdate;
- cCondVar mStarted;
- cMutex mMutex;
- int mUpdateIn;
+ bool mActive;
+ cCondVar mDoUpdate;
+ cMutex mMutex;
+ cCondVar mStarted;
+ int mUpdateIn;
// coordinate transformation
- eBaseCoordinate mBase;
- SIZE mBaseSize;
+ txSize mBaseSize;
protected:
// Update thread
@@ -105,60 +59,67 @@ protected:
void Unlock(void) { mMutex.Unlock(); }
virtual void Action(void);
- // Basic operations
- void DrawBackground(const POINT &Pos, const SIZE &Size, const tColor *Bg, const tColor *Fg, int Alpha, const string &Path);
- void DrawImage(const POINT &Pos, const SIZE &Size, const tColor *Bg, const tColor *Fg, int Alpha, const string &Path);
- void DrawText(const POINT &Pos, const SIZE &Size, const tColor *Fg, const string &Text, const cFont *Font, int Align);
- void DrawRectangle(const POINT &Pos, const SIZE &Size, const tColor *Fg);
- void DrawEllipse(const POINT &Pos, const SIZE &Size, const tColor *Fg, int Arc);
- void DrawSlope(const POINT &Pos, const SIZE &Size, const tColor *Fg, int Arc);
- void DrawProgressbar(const POINT &Pos, const SIZE &Size, int Current, int Total, const tColor *Fg, const tColor *Bg, const tColor *Selected, const tColor *Mark, const tColor *Cur, const cMarks *Marks = NULL);
- void DrawMark(const POINT &Pos, const SIZE &Size, bool Start, bool Current, bool Horizontal, const tColor *Mark, const tColor *Cur);
- void DrawScrolltext(const POINT &Pos, const SIZE &Size, const tColor *Fg, const string &Text, const cFont *Font, int Align);
- void DrawScrollbar(const POINT &Pos, const SIZE &Size, int Offset, int Shown, int Total, const tColor *Bg, const tColor *Fg);
-
- // displays a full item
- void DisplayItem(cText2SkinItem *Item, const tItemData *Data = NULL);
-
- // High-level operations
- void DisplayDateTime(cText2SkinItem *Item);
- void DisplayChannelNumberName(cText2SkinItem *Item);
- void DisplayPresentTime(cText2SkinItem *Item);
- void DisplayPresentIcon(cText2SkinItem *Item);
- void DisplayPresentText(cText2SkinItem *Item);
- void DisplayFollowingTime(cText2SkinItem *Item);
- void DisplayFollowingTitle(cText2SkinItem *Item);
- void DisplayFollowingShortText(cText2SkinItem *Item);
- void DisplayLanguage(cText2SkinItem *Item);
- void DisplayChannelIcon(cText2SkinItem *Item);
- void DisplayVolume(cText2SkinItem *Item);
- void DisplayMuteIcon(cText2SkinItem *Item);
- void DisplayReplayTime(cText2SkinItem *Item);
- void DisplayReplayTitle(cText2SkinItem *Item);
- void DisplayReplayPrompt(cText2SkinItem *Item);
- void DisplayReplaySymbol(cText2SkinItem *Item);
- void DisplayReplayMode(cText2SkinItem *Item);
- void DisplayMessage(cText2SkinItem *Item);
- void DisplayMenuTitle(cText2SkinItem *Item);
- void DisplayMenuButton(cText2SkinItem *Item);
- void DisplayMenuText(cText2SkinItem *Item);
- void DisplayMenuScrollIcon(cText2SkinItem *Item);
- void DisplayMenuItems(cText2SkinItem *Item);
-
- // Helpers
- string ItemText(cText2SkinItem *Item);
- string ItemText(cText2SkinItem *Item, const string &Content);
- int GetEditableWidth(MenuItem Item, bool Current);
+ // Drawing operations
+ void DrawObject(const cxObject *Object);
+ void DrawBackground(const txPoint &Pos, const txSize &Size, const tColor *Bg, const tColor *Fg,
+ int Alpha, const std::string &Path);
+ void DrawImage(const txPoint &Pos, const tColor *Bg, const tColor *Fg, int Alpha,
+ const std::string &Path);
+ void DrawText(const txPoint &Pos, const txSize &Size, const tColor *Fg,
+ const std::string &Text, const cFont *Font, int Align);
+ void DrawRectangle(const txPoint &Pos, const txSize &Size,
+ const tColor *Fg);
+ void DrawEllipse(const txPoint &Pos, const txSize &Size, const tColor *Fg,
+ int Arc);
+ void DrawSlope(const txPoint &Pos, const txSize &Size, const tColor *Fg,
+ int Arc);
+ void DrawProgressbar(const txPoint &Pos, const txSize &Size, int Current,
+ int Total, const tColor *Fg, const tColor *Bg,
+ const tColor *Selected, const tColor *Mark, const tColor *Cur,
+ const cMarks *Marks = NULL);
+ void DrawMark(const txPoint &Pos, const txSize &Size, bool Start,
+ bool Current, bool Horizontal, const tColor *Mark,
+ const tColor *Cur);
+ void DrawScrolltext(const txPoint &Pos, const txSize &Size,
+ const tColor *Fg, const std::string &Text, const cFont *Font, int Align);
+ void DrawScrollbar(const txPoint &Pos, const txSize &Size, const tColor *Bg, const tColor *Fg);
+
+ //int GetEditableWidth(MenuItem Item, bool Current);
void Update(void);
+ // all renderers shall return appropriate data for the tokens
+ virtual cxType GetTokenData(const txToken &Token);
+ // the replay renderer shall return its marks here
+ virtual const cMarks *GetMarks(void) const { return NULL; }
+ // the menu renderer shall return its tab information here
+ virtual int GetTab(int n) { return 0; }
+ virtual bool HasTabText(int Index, int n) { return false; }
+ virtual void SetEditableWidth(int Width) {}
+
+ // functions for display renderer to control behaviour
+ void Flush(bool Force = false);
+ void SetDirty(void) { mDirty = true; }
+ void Scroll(bool Up, bool Page) { if (mScroller) mScroller->Scroll(Up, Page); }
+
public:
- cText2SkinRender(cText2SkinLoader *Loader, eSkinSection Section);
+ cText2SkinRender(cText2SkinLoader *Loader, cxDisplay::eType Section, const std::string &BasePath = "",
+ bool OffScreen = false);
virtual ~cText2SkinRender();
- static POINT Transform(const POINT &Pos);
- static bool ItemColor(const string &Color, tColor &Result);
-
- void Flush(void) { Lock(); mDoUpdate.Broadcast(); Unlock(); }
+ // functions for object classes to obtain dynamic item information
+ static txPoint Transform(const txPoint &Pos);
+ static bool ItemColor(const std::string &Color, tColor &Result);
+ static std::string ImagePath(const std::string &Filename);
+ static cxType GetToken(const txToken &Token);
};
+inline void cText2SkinRender::Flush(bool Force) {
+ if (mDirty || Force) {
+ Lock();
+ mDoUpdate.Broadcast();
+ Unlock();
+ mDirty = false;
+ }
+}
+
#endif // VDR_TEXT2SKIN_RENDER_H