From f33d44eda968392c5c7e3a83cfe5ba3490ab9d84 Mon Sep 17 00:00:00 2001 From: louis Date: Sun, 25 Jan 2015 11:48:30 +0100 Subject: [PATCH] check icons, menuicons and skinparts additionally directly in skin folder --- HISTORY | 4 +- libcore/imagecache.c | 62 ++++++++++++++----- libcore/imagecache.h | 6 +- skinskeleton/globals.xml | 37 +++++++++++ .../themes/default/{globals.xml => theme.xml} | 0 5 files changed, 90 insertions(+), 19 deletions(-) create mode 100644 skinskeleton/globals.xml rename skinskeleton/themes/default/{globals.xml => theme.xml} (100%) diff --git a/HISTORY b/HISTORY index adaa102..c0a2e81 100644 --- a/HISTORY +++ b/HISTORY @@ -177,4 +177,6 @@ Version 0.1.6 marks - made all globals variables private - introduced globals.xml in skinpath, theme.xml in theme path. theme.xml - adds its vakues and potentially overrides valués from globals.xml \ No newline at end of file + adds its vakues and potentially overrides valués from globals.xml +- check icons, menuicons and skinparts additionally directly in skin folder + to allow default images which can be used for all skins. \ No newline at end of file diff --git a/libcore/imagecache.c b/libcore/imagecache.c index cfaf255..57e0dd4 100644 --- a/libcore/imagecache.c +++ b/libcore/imagecache.c @@ -32,12 +32,16 @@ void cImageCache::SetPathes(void) { } else { logoPath = *config.logoPath; } - iconPath = *cString::sprintf("%s%s/themes/%s/", *config.skinPath, Setup.OSDSkin, Setup.OSDTheme); - skinPartsPath = *cString::sprintf("%s%s/themes/%s/skinparts/", *config.skinPath, Setup.OSDSkin, Setup.OSDTheme); + + iconPathSkin = *cString::sprintf("%s%s/", *config.skinPath, Setup.OSDSkin); + skinPartsPathSkin = *cString::sprintf("%s%s/skinparts/", *config.skinPath, Setup.OSDSkin); + + iconPathTheme = *cString::sprintf("%s%s/themes/%s/", *config.skinPath, Setup.OSDSkin, Setup.OSDTheme); + skinPartsPathTheme = *cString::sprintf("%s%s/themes/%s/skinparts/", *config.skinPath, Setup.OSDSkin, Setup.OSDTheme); dsyslog("skindesigner: using channel logo path %s", logoPath.c_str()); - dsyslog("skindesigner: using icon path %s", iconPath.c_str()); - dsyslog("skindesigner: using skinparts path %s", skinPartsPath.c_str()); + dsyslog("skindesigner: using icon path %s", iconPathTheme.c_str()); + dsyslog("skindesigner: using skinparts path %s", skinPartsPathTheme.c_str()); } void cImageCache::CacheLogo(int width, int height) { @@ -261,11 +265,20 @@ string cImageCache::GetIconName(string label, eMenuCategory cat) { } bool cImageCache::MenuIconExists(string name) { - cString iconFullPath = cString::sprintf("%smenuicons/", iconPath.c_str()); - if (FileExists(*iconFullPath, name, "svg")) { + //first check in theme specific icon folder + cString iconThemePath = cString::sprintf("%smenuicons/", iconPathTheme.c_str()); + if (FileExists(*iconThemePath, name, "svg")) { return true; } - if (FileExists(*iconFullPath, name, "png")) { + if (FileExists(*iconThemePath, name, "png")) { + return true; + } + //then check skin icon folder + cString iconSkinPath = cString::sprintf("%smenuicons/", iconPathSkin.c_str()); + if (FileExists(*iconSkinPath, name, "svg")) { + return true; + } + if (FileExists(*iconSkinPath, name, "png")) { return true; } return false; @@ -306,12 +319,22 @@ bool cImageCache::LoadIcon(eImageType type, string name) { subdir = "menuicons"; else if (type == itIcon) subdir = "icons"; - cString subIconPath = cString::sprintf("%s%s/", iconPath.c_str(), *subdir); - if (FileExists(*subIconPath, name, "svg")) - return LoadImage(*subIconPath, name, "svg"); - else - return LoadImage(*subIconPath, name, "png"); + //first check in theme specific icon path + cString subIconThemePath = cString::sprintf("%s%s/", iconPathTheme.c_str(), *subdir); + + if (FileExists(*subIconThemePath, name, "svg")) + return LoadImage(*subIconThemePath, name, "svg"); + else if (FileExists(*subIconThemePath, name, "png")) + return LoadImage(*subIconThemePath, name, "png"); + + //then check in skin icon path + cString subIconSkinPath = cString::sprintf("%s%s/", iconPathSkin.c_str(), *subdir); + + if (FileExists(*subIconSkinPath, name, "svg")) + return LoadImage(*subIconSkinPath, name, "svg"); + else + return LoadImage(*subIconSkinPath, name, "png"); } bool cImageCache::LoadLogo(const cChannel *channel) { @@ -342,10 +365,17 @@ bool cImageCache::LoadSeparatorLogo(string name) { } bool cImageCache::LoadSkinpart(string name) { - if (FileExists(skinPartsPath.c_str(), name, "svg")) - return LoadImage(skinPartsPath.c_str(), name, "svg"); - else - return LoadImage(skinPartsPath.c_str(), name, "png"); + if (FileExists(skinPartsPathTheme.c_str(), name, "svg")) + return LoadImage(skinPartsPathTheme.c_str(), name, "svg"); + + else if (FileExists(skinPartsPathTheme.c_str(), name, "png")) + return LoadImage(skinPartsPathTheme.c_str(), name, "png"); + + else if (FileExists(skinPartsPathSkin.c_str(), name, "svg")) + return LoadImage(skinPartsPathSkin.c_str(), name, "svg"); + + else + return LoadImage(skinPartsPathSkin.c_str(), name, "png"); } void cImageCache::Clear(void) { diff --git a/libcore/imagecache.h b/libcore/imagecache.h index 95148b2..086d8e4 100644 --- a/libcore/imagecache.h +++ b/libcore/imagecache.h @@ -41,8 +41,10 @@ private: static string items[16]; cImage *tempStaticLogo; string logoPath; - string iconPath; - string skinPartsPath; + string iconPathSkin; + string skinPartsPathSkin; + string iconPathTheme; + string skinPartsPathTheme; map iconCache; map channelLogoCache; map skinPartsCache; diff --git a/skinskeleton/globals.xml b/skinskeleton/globals.xml new file mode 100644 index 0000000..01f37fb --- /dev/null +++ b/skinskeleton/globals.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + diff --git a/skinskeleton/themes/default/globals.xml b/skinskeleton/themes/default/theme.xml similarity index 100% rename from skinskeleton/themes/default/globals.xml rename to skinskeleton/themes/default/theme.xml