summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2013-04-30 14:08:37 +0300
committerAndrei Karas <akaras@inbox.ru>2013-04-30 14:08:37 +0300
commit1cffd95a2d98736c2d0dc2f382995889ceaef86a (patch)
tree9bb16984a2cc28daf7521beb2f9125f0b0ea77da
parent27a4c8b4acdf5f433f42b5dce97f95f391e36cbf (diff)
downloadmanaplus-1cffd95a2d98736c2d0dc2f382995889ceaef86a.tar.gz
manaplus-1cffd95a2d98736c2d0dc2f382995889ceaef86a.tar.bz2
manaplus-1cffd95a2d98736c2d0dc2f382995889ceaef86a.tar.xz
manaplus-1cffd95a2d98736c2d0dc2f382995889ceaef86a.zip
add support for set fonts and font sizes from themes.
Changed default font size from 11 to 12 px.
-rw-r--r--data/graphics/gui/info.xml9
-rw-r--r--src/defaults.cpp2
-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
6 files changed, 88 insertions, 15 deletions
diff --git a/data/graphics/gui/info.xml b/data/graphics/gui/info.xml
index 54f71b4df..195b1221f 100644
--- a/data/graphics/gui/info.xml
+++ b/data/graphics/gui/info.xml
@@ -2,4 +2,13 @@
<info>
<name>(default)</name>
<copyright>2004-2009 The Mana World Development Team\n2009-2010 The Mana Developers\n2011-2013 ManaPlus Developers</copyright>
+ <font>dejavusans.ttf</font>
+ <boldFont>dejavusans-bold.ttf</boldFont>
+ <particleFont>dejavusans.ttf</particleFont>
+ <helpFont>dejavusansmono.ttf</helpFont>
+ <secureFont>dejavusansmono.ttf</secureFont>
+ <npcFont>dejavusans.ttf</npcFont>
+ <japanFont>mplus-1p-regular.ttf</japanFont>
+ <fontSize>12</fontSize>
+ <npcfontSize>13</npcfontSize>
</info>
diff --git a/src/defaults.cpp b/src/defaults.cpp
index 3e367db8b..0d1fa91d9 100644
--- a/src/defaults.cpp
+++ b/src/defaults.cpp
@@ -157,7 +157,7 @@ DefaultsData* getConfigDefaults()
AddDEF("showownname", true);
AddDEF("showpickupparticle", true);
AddDEF("showpickupchat", true);
- AddDEF("fontSize", 11);
+ AddDEF("fontSize", 12);
AddDEF("ReturnToggles", false);
AddDEF("ScrollLaziness", 16);
AddDEF("ScrollRadius", 0);
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