diff options
Diffstat (limited to 'render.h')
-rw-r--r-- | render.h | 185 |
1 files changed, 73 insertions, 112 deletions
@@ -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 |