diff options
author | louis <louis.braun@gmx.de> | 2014-10-15 18:04:12 +0200 |
---|---|---|
committer | louis <louis.braun@gmx.de> | 2014-10-15 18:04:12 +0200 |
commit | 8b8389d975f1867d5e6a8be678678fa3206f4fda (patch) | |
tree | 75c62b726167c2d8659bf67203f4099ca100c99d | |
parent | 2e4a9b86ed6491e85d7e032790172fe2433cc19c (diff) | |
download | vdr-plugin-skindesigner-8b8389d975f1867d5e6a8be678678fa3206f4fda.tar.gz vdr-plugin-skindesigner-8b8389d975f1867d5e6a8be678678fa3206f4fda.tar.bz2 |
implemented cSDDisplayMenu::GetTextAreaFont()
-rw-r--r-- | HISTORY | 2 | ||||
-rw-r--r-- | displaymenu.c | 8 | ||||
-rw-r--r-- | displaymenu.h | 1 | ||||
-rw-r--r-- | libcore/fontmanager.c | 6 | ||||
-rw-r--r-- | libcore/fontmanager.h | 1 | ||||
-rw-r--r-- | libtemplate/templateviewlist.c | 48 | ||||
-rw-r--r-- | libtemplate/templateviewlist.h | 1 | ||||
-rw-r--r-- | views/displaymenurootview.c | 20 | ||||
-rw-r--r-- | views/displaymenurootview.h | 1 |
9 files changed, 84 insertions, 4 deletions
@@ -21,3 +21,5 @@ Version 0.0.2 - changed display of menu lists, do flush first after complete rendering - added support for custom tokens in dislaychannel - added vps token in menudetailepg +- implemented cSDDisplayMenu::GetTextAreaFont() + diff --git a/displaymenu.c b/displaymenu.c index 6764699..d452dbf 100644 --- a/displaymenu.c +++ b/displaymenu.c @@ -2,6 +2,7 @@ #include "libcore/helpers.h" cSDDisplayMenu::cSDDisplayMenu(cTemplate *menuTemplate) { + textAreaFont = NULL; doOutput = true; state = vsInit; if (!menuTemplate) { @@ -20,6 +21,8 @@ cSDDisplayMenu::~cSDDisplayMenu() { if (!doOutput) return; delete rootView; + if (textAreaFont) + delete textAreaFont; } void cSDDisplayMenu::Scroll(bool Up, bool Page) { @@ -180,7 +183,10 @@ int cSDDisplayMenu::GetTextAreaWidth(void) const { } const cFont *cSDDisplayMenu::GetTextAreaFont(bool FixedFont) const { - return NULL; + if (textAreaFont) + return textAreaFont; + textAreaFont = rootView->GetTextAreaFont(); + return textAreaFont; } void cSDDisplayMenu::SetScrollbar(int Total, int Offset) { diff --git a/displaymenu.h b/displaymenu.h index 58bc9c9..c453f3d 100644 --- a/displaymenu.h +++ b/displaymenu.h @@ -18,6 +18,7 @@ private: cDisplayMenuRootView *rootView; eViewState state; bool doOutput; + mutable cFont *textAreaFont; protected: int Tab(int n); public: diff --git a/libcore/fontmanager.c b/libcore/fontmanager.c index 1dcba44..1f45af7 100644 --- a/libcore/fontmanager.c +++ b/libcore/fontmanager.c @@ -108,6 +108,12 @@ cFont *cFontManager::Font(string fontName, int fontSize) { return font; } +cFont *cFontManager::FontUncached(string fontName, int fontSize) { + cMutexLock MutexLock(&mutex); + cFont *font = CreateFont(fontName, fontSize); + return font; +} + /******************************************************************************** * Private Functions ********************************************************************************/ diff --git a/libcore/fontmanager.h b/libcore/fontmanager.h index 7067dfc..bfabb5c 100644 --- a/libcore/fontmanager.h +++ b/libcore/fontmanager.h @@ -28,6 +28,7 @@ class cFontManager { int Width(string fontName, int fontSize, const char *text); int Height(string fontName, int fontSize); cFont *Font(string fontName, int fontSize); + cFont *FontUncached(string fontName, int fontSize); void Debug(void); void ListAvailableFonts(void); }; diff --git a/libtemplate/templateviewlist.c b/libtemplate/templateviewlist.c index 808a89f..e75c528 100644 --- a/libtemplate/templateviewlist.c +++ b/libtemplate/templateviewlist.c @@ -115,6 +115,54 @@ int cTemplateViewList::GetAverageFontWidth(void) { return averageFontWidth;
}
+cFont *cTemplateViewList::GetTextAreaFont(void) {
+ if (!listElement)
+ return NULL;
+
+ int fontWidth = 0;
+ int numItems = GetNumericParameter(ptNumElements);
+ int listHeight = GetNumericParameter(ptHeight);
+ if (listHeight <= 0)
+ return NULL;
+ int itemHeight = (double)listHeight / (double)numItems;
+ string fontFuncName = parameters->GetParameter(ptDeterminateFont);
+
+ cTemplateFunction *fontFunc = listElement->GetFunction(fontFuncName);
+ if (!fontFunc)
+ return NULL;
+
+ string fontNameToken = fontFunc->GetParameter(ptFont);
+ string paramFontSize = fontFunc->GetParameter(ptFontSize);
+
+ string fontName = "";
+ if ((fontNameToken.find("{") == 0) && (fontNameToken.find("}") == (fontNameToken.size()-1))) {
+ fontNameToken = fontNameToken.substr(1, fontNameToken.size()-2);
+ map<string,string>::iterator hit = globals->fonts.find(fontNameToken);
+ if (hit != globals->fonts.end()) {
+ fontName = hit->second;
+ } else {
+ map<string,string>::iterator def = globals->fonts.find("vdrOsd");
+ if (def == globals->fonts.end())
+ return NULL;
+ fontName = def->second;
+ }
+ } else {
+ //if no token, directly use input
+ fontName = fontNameToken;
+ }
+
+ cNumericParameter pFontSize(paramFontSize);
+ pFontSize.SetGlobals(globals);
+ pFontSize.SetAreaSize(1000, itemHeight);
+ pFontSize.SetVertical();
+ int fontSize = pFontSize.Parse(paramFontSize);
+ if (!pFontSize.Valid())
+ return NULL;
+
+ return fontManager->FontUncached(fontName, fontSize);
+}
+
+
int cTemplateViewList::GetMenuItemWidth(void) {
return GetNumericParameter(ptMenuItemWidth);
}
diff --git a/libtemplate/templateviewlist.h b/libtemplate/templateviewlist.h index 8998384..b124a7c 100644 --- a/libtemplate/templateviewlist.h +++ b/libtemplate/templateviewlist.h @@ -41,6 +41,7 @@ public: cTemplateViewElement *GetListElement(void) { return listElement; }; cTemplateViewElement *GetListElementCurrent(void) { return currentElement; }; int GetAverageFontWidth(void); + cFont *GetTextAreaFont(void); int GetMenuItemWidth(void); int GetNumPixmaps(void); void Debug(void); diff --git a/views/displaymenurootview.c b/views/displaymenurootview.c index 2d878ee..93848c2 100644 --- a/views/displaymenurootview.c +++ b/views/displaymenurootview.c @@ -288,15 +288,29 @@ int cDisplayMenuRootView::GetListViewWidth(void) { int cDisplayMenuRootView::GetTextAreaWidth(void) { if (!tmplView) return 1900; - cTemplateView *tempSubView = tmplView->GetSubView(svMenuDefault); - if (!tempSubView) + cTemplateView *tmplSubView = tmplView->GetSubView(svMenuDefault); + if (!tmplSubView) return 1900; - int areaWidth = tempSubView->GetNumericParameter(ptWidth); + int areaWidth = tmplSubView->GetNumericParameter(ptWidth); if (areaWidth > 0) return areaWidth; return 1900; } +cFont *cDisplayMenuRootView::GetTextAreaFont(void) { + if (!tmplView) + return NULL; + cTemplateView *tmplSubViewDefault = tmplView->GetSubView(svMenuDefault); + if (!tmplSubViewDefault) + return NULL; + + cTemplateViewList *tmplViewList = tmplSubViewDefault->GetViewList(vlMenuItem); + if (!tmplViewList) + return NULL; + + return tmplViewList->GetTextAreaFont(); +} + void cDisplayMenuRootView::Render(void) { diff --git a/views/displaymenurootview.h b/views/displaymenurootview.h index b3f4c62..2979746 100644 --- a/views/displaymenurootview.h +++ b/views/displaymenurootview.h @@ -46,6 +46,7 @@ public: int GetMaxItems(void); int GetListViewWidth(void); int GetTextAreaWidth(void); + cFont *GetTextAreaFont(void); bool SubViewAvailable(void) { return subViewAvailable; }; cDisplayMenuListView *GetListView(void) { return listView; }; void Render(void); |