summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlouis <louis.braun@gmx.de>2014-10-15 18:04:12 +0200
committerlouis <louis.braun@gmx.de>2014-10-15 18:04:12 +0200
commit8b8389d975f1867d5e6a8be678678fa3206f4fda (patch)
tree75c62b726167c2d8659bf67203f4099ca100c99d
parent2e4a9b86ed6491e85d7e032790172fe2433cc19c (diff)
downloadvdr-plugin-skindesigner-8b8389d975f1867d5e6a8be678678fa3206f4fda.tar.gz
vdr-plugin-skindesigner-8b8389d975f1867d5e6a8be678678fa3206f4fda.tar.bz2
implemented cSDDisplayMenu::GetTextAreaFont()
-rw-r--r--HISTORY2
-rw-r--r--displaymenu.c8
-rw-r--r--displaymenu.h1
-rw-r--r--libcore/fontmanager.c6
-rw-r--r--libcore/fontmanager.h1
-rw-r--r--libtemplate/templateviewlist.c48
-rw-r--r--libtemplate/templateviewlist.h1
-rw-r--r--views/displaymenurootview.c20
-rw-r--r--views/displaymenurootview.h1
9 files changed, 84 insertions, 4 deletions
diff --git a/HISTORY b/HISTORY
index 6fc9968..a5d89e8 100644
--- a/HISTORY
+++ b/HISTORY
@@ -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);