summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/setup_theme.cpp39
-rw-r--r--src/gui/setup_theme.h1
-rw-r--r--src/gui/theme.cpp34
-rw-r--r--src/gui/theme.h18
4 files changed, 78 insertions, 14 deletions
diff --git a/src/gui/setup_theme.cpp b/src/gui/setup_theme.cpp
index db0b7b6f9..f0cacf8af 100644
--- a/src/gui/setup_theme.cpp
+++ b/src/gui/setup_theme.cpp
@@ -195,6 +195,7 @@ Setup_Theme::Setup_Theme(const Widget2 *const widget) :
mThemesModel(new ThemesModel),
mThemeDropDown(new DropDown(this, mThemesModel)),
mTheme(config.getStringValue("theme")),
+ mInfo(Theme::loadInfo(mTheme)),
mFontsModel(new FontsModel),
mFontLabel(new Label(this, _("Main Font"))),
mFontDropDown(new DropDown(this, mFontsModel)),
@@ -318,6 +319,9 @@ Setup_Theme::Setup_Theme(const Widget2 *const widget) :
Setup_Theme::~Setup_Theme()
{
+ delete mInfo;
+ mInfo = nullptr;
+
delete mThemesModel;
mThemesModel = nullptr;
@@ -336,11 +340,11 @@ Setup_Theme::~Setup_Theme()
void Setup_Theme::updateInfo()
{
- ThemeInfo *info = Theme::loadInfo(mTheme);
- if (info)
+ mInfo = Theme::loadInfo(mTheme);
+ if (mInfo)
{
- mThemeInfo = std::string("Name: ").append(info->name)
- .append("\nCopyright:\n").append(info->copyright);
+ mThemeInfo = std::string("Name: ").append(mInfo->name)
+ .append("\nCopyright:\n").append(mInfo->copyright);
}
else
{
@@ -348,7 +352,6 @@ void Setup_Theme::updateInfo()
}
replaceAll(mThemeInfo, "\\n", "\n");
mInfoButton->setEnabled(!mThemeInfo.empty());
- delete info;
}
void Setup_Theme::action(const gcn::ActionEvent &event)
@@ -413,6 +416,9 @@ void Setup_Theme::cancel()
mJapanFont = getFileName(config.getStringValue("japanFont"));
}
+#define updateField(name1, name2) if (!mInfo->name1.empty()) \
+ name2 = mInfo->name1;
+
void Setup_Theme::apply()
{
if (config.getStringValue("theme") != mTheme)
@@ -422,6 +428,27 @@ void Setup_Theme::apply()
}
config.setValue("selectedSkin", "");
+ if (config.getStringValue("theme") != mTheme)
+ {
+ updateField(font, mFont);
+ updateField(boldFont, mBoldFont);
+ updateField(particleFont, mParticleFont);
+ updateField(helpFont, mHelpFont);
+ updateField(secureFont, mSecureFont);
+ updateField(japanFont, mJapanFont);
+ if (mInfo->fontSize)
+ {
+ const int size = mInfo->fontSize - 9;
+ if (size >= 0)
+ mFontSizeDropDown->setSelected(size);
+ }
+ if (mInfo->npcfontSize)
+ {
+ const int size = mInfo->npcfontSize - 9;
+ if (size >= 0)
+ mNpcFontSizeDropDown->setSelected(size);
+ }
+ }
config.setValue("theme", mTheme);
config.setValue("lang", mLang);
if (config.getValue("font", "dejavusans.ttf") != mFont
@@ -447,3 +474,5 @@ void Setup_Theme::apply()
gui->updateFonts();
}
}
+
+#undef updateField
diff --git a/src/gui/setup_theme.h b/src/gui/setup_theme.h
index 030a87193..d5f50afbb 100644
--- a/src/gui/setup_theme.h
+++ b/src/gui/setup_theme.h
@@ -58,6 +58,7 @@ class Setup_Theme final : public SetupTab
ThemesModel *mThemesModel;
DropDown *mThemeDropDown;
std::string mTheme;
+ ThemeInfo *mInfo;
FontsModel *mFontsModel;
Label *mFontLabel;
diff --git a/src/gui/theme.cpp b/src/gui/theme.cpp
index 27945b808..db3b247cb 100644
--- a/src/gui/theme.cpp
+++ b/src/gui/theme.cpp
@@ -1147,6 +1147,14 @@ ImageSet *Theme::getImageSetFromThemeXml(const std::string &name,
return nullptr;
}
+#define readValue(name) \
+ info->name = reinterpret_cast<const char*>(\
+ xmlNodeGetContent(infoNode))
+
+#define readIntValue(name) \
+ info->name = atoi(reinterpret_cast<const char*>(\
+ xmlNodeGetContent(infoNode)))
+
ThemeInfo *Theme::loadInfo(const std::string &themeName)
{
std::string path;
@@ -1171,15 +1179,25 @@ ThemeInfo *Theme::loadInfo(const std::string &themeName)
for_each_xml_child_node(infoNode, rootNode)
{
if (xmlNameEqual(infoNode, "name"))
- {
- info->name = reinterpret_cast<const char*>(
- xmlNodeGetContent(infoNode));
- }
+ readValue(name);
else if (xmlNameEqual(infoNode, "copyright"))
- {
- info->copyright = reinterpret_cast<const char*>(
- xmlNodeGetContent(infoNode));
- }
+ readValue(copyright);
+ else if (xmlNameEqual(infoNode, "font"))
+ readValue(font);
+ else if (xmlNameEqual(infoNode, "boldFont"))
+ readValue(boldFont);
+ else if (xmlNameEqual(infoNode, "particleFont"))
+ readValue(particleFont);
+ else if (xmlNameEqual(infoNode, "helpFont"))
+ readValue(helpFont);
+ else if (xmlNameEqual(infoNode, "secureFont"))
+ readValue(secureFont);
+ else if (xmlNameEqual(infoNode, "japanFont"))
+ readValue(japanFont);
+ else if (xmlNameEqual(infoNode, "fontSize"))
+ readIntValue(fontSize);
+ else if (xmlNameEqual(infoNode, "npcfontSize"))
+ readIntValue(npcfontSize);
}
return info;
}
diff --git a/src/gui/theme.h b/src/gui/theme.h
index fcd0f5614..222d0d098 100644
--- a/src/gui/theme.h
+++ b/src/gui/theme.h
@@ -45,11 +45,27 @@ struct ThemeInfo final
{
ThemeInfo() :
name(),
- copyright()
+ copyright(),
+ font(),
+ boldFont(),
+ particleFont(),
+ helpFont(),
+ secureFont(),
+ japanFont(),
+ fontSize(0),
+ npcfontSize(0)
{
}
std::string name;
std::string copyright;
+ std::string font;
+ std::string boldFont;
+ std::string particleFont;
+ std::string helpFont;
+ std::string secureFont;
+ std::string japanFont;
+ int fontSize;
+ int npcfontSize;
};
class Skin final