Merged pull request #1768

pull/541/head
Marc Zinnschlag 6 years ago
commit 06b2a23e74

@ -20,6 +20,7 @@
Bug #3059: Unable to hit with marksman weapons when too close to an enemy
Bug #3072: Fatal error on AddItem <item> that has a script containing Equip <item>
Bug #3249: Fixed revert function not updating views properly
Bug #3288: TrueType fonts are handled incorrectly
Bug #3374: Touch spells not hitting kwama foragers
Bug #3486: [Mod] NPC Commands does not work
Bug #3533: GetSpellEffects should detect effects with zero duration

@ -516,7 +516,7 @@ void OMW::Engine::prepareEngine (Settings::Manager & settings)
MWGui::WindowManager* window = new MWGui::WindowManager(mViewer, guiRoot, mResourceSystem.get(), mWorkQueue.get(),
mCfgMgr.getLogPath().string() + std::string("/"), myguiResources,
mScriptConsoleMode, mTranslationDataStorage, mEncoding, mExportFonts, mFallbackMap,
Version::getOpenmwVersionDescription(mResDir.string()));
Version::getOpenmwVersionDescription(mResDir.string()), mCfgMgr.getUserConfigPath().string());
mEnvironment.setWindowManager (window);
// Create sound system

@ -219,6 +219,7 @@ namespace MWBase
virtual const MWWorld::Ptr& getSelectedEnchantItem() const = 0;
virtual void setSelectedWeapon(const MWWorld::Ptr& item) = 0;
virtual const MWWorld::Ptr& getSelectedWeapon() const = 0;
virtual int getFontHeight() const = 0;
virtual void unsetSelectedSpell() = 0;
virtual void unsetSelectedWeapon() = 0;
@ -289,6 +290,8 @@ namespace MWBase
/// Warning: do not use MyGUI::InputManager::setKeyFocusWidget directly. Instead use this.
virtual void setKeyFocusWidget (MyGUI::Widget* widget) = 0;
virtual void loadUserFonts() = 0;
virtual Loading::Listener* getLoadingScreen() = 0;
/// Should the cursor be visible?

@ -1,6 +1,5 @@
#include "bookpage.hpp"
#include "MyGUI_FontManager.h"
#include "MyGUI_RenderItem.h"
#include "MyGUI_RenderManager.h"
#include "MyGUI_TextureUtility.h"
@ -8,6 +7,9 @@
#include <components/misc/utf8stream.hpp>
#include "../mwbase/environment.hpp"
#include "../mwbase/windowmanager.hpp"
namespace MWGui
{
struct TypesetBookImpl;
@ -262,18 +264,29 @@ struct TypesetBookImpl::Typesetter : BookTypesetter
{
}
Style * createStyle (char const * fontName, const Colour& fontColour)
Style * createStyle (const std::string& fontName, const Colour& fontColour)
{
if (strcmp(fontName, "") == 0)
return createStyle(MyGUI::FontManager::getInstance().getDefaultFont().c_str(), fontColour);
const std::string templateName = "Journalbook ";
std::string bookFont;
if (fontName.empty())
{
bookFont = MyGUI::FontManager::getInstance().getDefaultFont();
bookFont = templateName + bookFont;
return createStyle(bookFont, fontColour);
}
if (fontName.compare(0, templateName.size(), templateName) == 0)
bookFont = fontName;
else
bookFont = templateName + bookFont;
for (Styles::iterator i = mBook->mStyles.begin (); i != mBook->mStyles.end (); ++i)
if (i->match (fontName, fontColour, fontColour, fontColour, 0))
if (i->match (bookFont.c_str(), fontColour, fontColour, fontColour, 0))
return &*i;
MyGUI::IFont* font = MyGUI::FontManager::getInstance().getByName(fontName);
MyGUI::IFont* font = MyGUI::FontManager::getInstance().getByName(bookFont);
if (!font)
throw std::runtime_error(std::string("can't find font ") + fontName);
throw std::runtime_error(std::string("can't find font ") + bookFont);
StyleImpl & style = *mBook->mStyles.insert (mBook->mStyles.end (), StyleImpl ());
style.mFont = font;
@ -497,9 +510,9 @@ struct TypesetBookImpl::Typesetter : BookTypesetter
while (!stream.eof () && !ucsLineBreak (stream.peek ()) && ucsBreakingSpace (stream.peek ()))
{
MyGUI::GlyphInfo* gi = style->mFont->getGlyphInfo (stream.peek ());
if (gi)
space_width += static_cast<int>(gi->advance + gi->bearingX);
MWGui::GlyphInfo info = GlyphInfo(style->mFont, stream.peek());
if (info.codePoint >= 0)
space_width += static_cast<int>(info.advance + info.bearingX);
stream.consume ();
}
@ -507,9 +520,9 @@ struct TypesetBookImpl::Typesetter : BookTypesetter
while (!stream.eof () && !ucsLineBreak (stream.peek ()) && !ucsBreakingSpace (stream.peek ()))
{
MyGUI::GlyphInfo* gi = style->mFont->getGlyphInfo (stream.peek ());
if (gi)
word_width += static_cast<int>(gi->advance + gi->bearingX);
MWGui::GlyphInfo info = GlyphInfo(style->mFont, stream.peek());
if (info.codePoint >= 0)
word_width += static_cast<int>(info.advance + info.bearingX);
stream.consume ();
}
@ -530,6 +543,7 @@ struct TypesetBookImpl::Typesetter : BookTypesetter
if (mPartialWhitespace.empty() && mPartialWord.empty())
return;
int fontHeight = MWBase::Environment::get().getWindowManager()->getFontHeight();
int space_width = 0;
int word_width = 0;
@ -549,9 +563,8 @@ struct TypesetBookImpl::Typesetter : BookTypesetter
for (PartialTextConstIterator i = mPartialWhitespace.begin (); i != mPartialWhitespace.end (); ++i)
{
int top = mLine ? mLine->mRect.top : mBook->mRect.bottom;
int line_height = i->mStyle->mFont->getDefaultHeight ();
append_run ( i->mStyle, i->mBegin, i->mEnd, 0, left + i->mWidth, top + line_height);
append_run ( i->mStyle, i->mBegin, i->mEnd, 0, left + i->mWidth, top + fontHeight);
left = mLine->mRect.right;
}
@ -560,9 +573,8 @@ struct TypesetBookImpl::Typesetter : BookTypesetter
for (PartialTextConstIterator i = mPartialWord.begin (); i != mPartialWord.end (); ++i)
{
int top = mLine ? mLine->mRect.top : mBook->mRect.bottom;
int line_height = i->mStyle->mFont->getDefaultHeight ();
append_run (i->mStyle, i->mBegin, i->mEnd, i->mEnd - i->mBegin, left + i->mWidth, top + line_height);
append_run (i->mStyle, i->mBegin, i->mEnd, i->mEnd - i->mBegin, left + i->mWidth, top + fontHeight);
left = mLine->mRect.right;
}
@ -756,32 +768,32 @@ namespace
void emitGlyph (wchar_t ch)
{
MyGUI::GlyphInfo* gi = mFont->getGlyphInfo (ch);
MWGui::GlyphInfo info = GlyphInfo(mFont, ch);
if (!gi)
if (info.codePoint < 0)
return;
MyGUI::FloatRect vr;
vr.left = mCursor.left + gi->bearingX;
vr.top = mCursor.top + gi->bearingY;
vr.right = vr.left + gi->width;
vr.bottom = vr.top + gi->height;
vr.left = mCursor.left + info.bearingX;
vr.top = mCursor.top + info.bearingY;
vr.right = vr.left + info.width;
vr.bottom = vr.top + info.height;
MyGUI::FloatRect tr = gi->uvRect;
MyGUI::FloatRect tr = info.uvRect;
if (mRenderXform.clip (vr, tr))
quad (vr, tr);
mCursor.left += gi->bearingX + gi->advance;
mCursor.left += static_cast<int>(info.bearingX + info.advance);
}
void emitSpace (wchar_t ch)
{
MyGUI::GlyphInfo* gi = mFont->getGlyphInfo (ch);
MWGui::GlyphInfo info = GlyphInfo(mFont, ch);
if (gi)
mCursor.left += gi->bearingX + gi->advance;
if (info.codePoint >= 0)
mCursor.left += static_cast<int>(info.bearingX + info.advance);
}
private:

@ -3,10 +3,17 @@
#include "MyGUI_Colour.h"
#include "MyGUI_Widget.h"
#include "MyGUI_FontManager.h"
#include <functional>
#include <stdint.h>
#include <components/settings/settings.hpp>
#include <components/widgets/widgets.hpp>
#include "../mwbase/environment.hpp"
#include "../mwbase/windowmanager.hpp"
namespace MWGui
{
/// A formatted and paginated document to be used with
@ -28,6 +35,45 @@ namespace MWGui
virtual std::pair <unsigned int, unsigned int> getSize () const = 0;
};
struct GlyphInfo
{
char codePoint;
float width;
float height;
float advance;
float bearingX;
float bearingY;
MyGUI::FloatRect uvRect;
GlyphInfo(MyGUI::IFont* font, MyGUI::Char ch)
{
static const int fontHeight = MWBase::Environment::get().getWindowManager()->getFontHeight();
MyGUI::GlyphInfo* gi = font->getGlyphInfo(ch);
if (gi)
{
const float scale = font->getDefaultHeight() / (float) fontHeight;
codePoint = gi->codePoint;
bearingX = (int) gi->bearingX / scale;
bearingY = (int) gi->bearingY / scale;
width = (int) gi->width / scale;
height = (int) gi->height / scale;
advance = (int) gi->advance / scale;
uvRect = gi->uvRect;
}
else
{
codePoint = -1;
bearingX = 0;
bearingY = 0;
width = 0;
height = 0;
advance = 0;
}
}
};
/// A factory class for creating a typeset book instance.
struct BookTypesetter
{
@ -56,7 +102,7 @@ namespace MWGui
static Ptr create (int pageWidth, int pageHeight);
/// Create a simple text style consisting of a font and a text color.
virtual Style* createStyle (char const * Font, const Colour& Colour) = 0;
virtual Style* createStyle (const std::string& fontName, const Colour& colour) = 0;
/// Create a hyper-link style with a user-defined identifier based on an
/// existing style. The unique flag forces a new instance of this style

@ -152,12 +152,6 @@ namespace MWGui
MWBase::Environment::get().getWindowManager()->setKeyFocusWidget(mCommandLine);
}
void Console::setFont(const std::string &fntName)
{
mHistory->setFontName(fntName);
mCommandLine->setFontName(fntName);
}
void Console::print(const std::string &msg, const std::string& color)
{
mHistory->addText(color + MyGUI::TextIterator::toTagsString(msg));

@ -41,8 +41,6 @@ namespace MWGui
virtual void onOpen();
void setFont(const std::string &fntName);
void onResChange(int width, int height);
// Print a message to the console, in specified color.

@ -377,7 +377,7 @@ namespace MWGui
if (attr.find("face") != attr.end())
{
std::string face = attr.at("face");
mTextStyle.mFont = face;
mTextStyle.mFont = "Journalbook "+face;
}
if (attr.find("size") != attr.end())
{
@ -415,7 +415,7 @@ namespace MWGui
: GraphicElement(parent, pag, blockStyle),
mTextStyle(textStyle)
{
MyGUI::EditBox* box = parent->createWidget<MyGUI::EditBox>("NormalText",
Gui::EditBox* box = parent->createWidget<Gui::EditBox>("NormalText",
MyGUI::IntCoord(0, pag.getCurrentTop(), pag.getPageWidth(), 0), MyGUI::Align::Left | MyGUI::Align::Top,
parent->getName() + MyGUI::utility::toString(parent->getChildCount()));
box->setEditStatic(true);
@ -432,15 +432,6 @@ namespace MWGui
mEditBox = box;
}
int TextElement::currentFontHeight() const
{
std::string fontName(mTextStyle.mFont == "Default" ? MyGUI::FontManager::getInstance().getDefaultFont() : mTextStyle.mFont);
MyGUI::IFont* font = MyGUI::FontManager::getInstance().getByName(fontName);
if (!font)
return 0;
return font->getDefaultHeight();
}
int TextElement::getHeight()
{
return mEditBox->getTextSize().height;
@ -449,7 +440,7 @@ namespace MWGui
int TextElement::pageSplit()
{
// split lines
const int lineHeight = currentFontHeight();
const int lineHeight = MWBase::Environment::get().getWindowManager()->getFontHeight();
unsigned int lastLine = (mPaginator.getStartTop() + mPaginator.getPageHeight() - mPaginator.getCurrentTop());
if (lineHeight > 0)
lastLine /= lineHeight;

@ -4,6 +4,8 @@
#include <MyGUI_Colour.h>
#include <map>
#include <components/widgets/box.hpp>
namespace MWGui
{
namespace Formatting
@ -12,7 +14,7 @@ namespace MWGui
{
TextStyle() :
mColour(0,0,0)
, mFont("Default")
, mFont("")
, mTextSize(16)
{
}
@ -152,7 +154,7 @@ namespace MWGui
private:
int currentFontHeight() const;
TextStyle mTextStyle;
MyGUI::EditBox * mEditBox;
Gui::EditBox * mEditBox;
};
class ImageElement : public GraphicElement

@ -157,7 +157,7 @@ MWGui::BookTypesetter::Utf8Span to_utf8_span (char const * text)
typedef TypesetBook::Ptr book;
JournalBooks::JournalBooks (JournalViewModel::Ptr model, ToUTF8::FromType encoding) :
mModel (model), mEncoding(encoding)
mModel (model), mEncoding(encoding), mIndexPagesCount(0)
{
}
@ -229,10 +229,13 @@ book JournalBooks::createTopicIndexBook ()
BookTypesetter::Ptr JournalBooks::createLatinJournalIndex ()
{
BookTypesetter::Ptr typesetter = BookTypesetter::create (92, 250);
BookTypesetter::Ptr typesetter = BookTypesetter::create (92, 260);
typesetter->setSectionAlignment (BookTypesetter::AlignCenter);
// Latin journal index always has two columns for now.
mIndexPagesCount = 2;
char ch = 'A';
BookTypesetter::Style* body = typesetter->createStyle ("", MyGUI::Colour::Black);
@ -260,12 +263,23 @@ BookTypesetter::Ptr JournalBooks::createLatinJournalIndex ()
BookTypesetter::Ptr JournalBooks::createCyrillicJournalIndex ()
{
BookTypesetter::Ptr typesetter = BookTypesetter::create (92, 250);
BookTypesetter::Ptr typesetter = BookTypesetter::create (92, 260);
typesetter->setSectionAlignment (BookTypesetter::AlignCenter);
BookTypesetter::Style* body = typesetter->createStyle ("", MyGUI::Colour::Black);
int fontHeight = MWBase::Environment::get().getWindowManager()->getFontHeight();
// for small font size split alphabet to two columns (2x15 characers), for big font size split it to three colums (3x10 characters).
int sectionBreak = 10;
mIndexPagesCount = 3;
if (fontHeight < 18)
{
sectionBreak = 15;
mIndexPagesCount = 2;
}
unsigned char ch[2] = {0xd0, 0x90}; // CYRILLIC CAPITAL A is a 0xd090 in UTF-8
for (int i = 0; i < 32; ++i)
@ -287,7 +301,7 @@ BookTypesetter::Ptr JournalBooks::createCyrillicJournalIndex ()
if (i == 26 || i == 28)
continue;
if (i == 15)
if (i % sectionBreak == 0)
typesetter->sectionBreak ();
typesetter->write (style, to_utf8_span (buffer));

@ -25,6 +25,7 @@ namespace MWGui
Book createTopicIndexBook ();
ToUTF8::FromType mEncoding;
int mIndexPagesCount;
private:
BookTypesetter::Ptr createTypesetter ();

@ -43,6 +43,7 @@ namespace
static char const LeftBookPage [] = "LeftBookPage";
static char const RightBookPage [] = "RightBookPage";
static char const LeftTopicIndex [] = "LeftTopicIndex";
static char const CenterTopicIndex [] = "CenterTopicIndex";
static char const RightTopicIndex [] = "RightTopicIndex";
struct JournalWindowImpl : MWGui::JournalBooks, MWGui::JournalWindow
@ -148,6 +149,7 @@ namespace
callback = std::bind(&JournalWindowImpl::notifyIndexLinkClicked, this, std::placeholders::_1);
getPage (LeftTopicIndex)->adviseLinkClicked (callback);
getPage (CenterTopicIndex)->adviseLinkClicked (callback);
getPage (RightTopicIndex)->adviseLinkClicked (callback);
}
@ -312,6 +314,7 @@ namespace
setVisible (TopicsList, false);
setVisible (QuestsList, mQuestMode);
setVisible (LeftTopicIndex, !mQuestMode);
setVisible (CenterTopicIndex, !mQuestMode);
setVisible (RightTopicIndex, !mQuestMode);
setVisible (ShowAllBTN, mQuestMode && !mAllQuests);
setVisible (ShowActiveBTN, mQuestMode && mAllQuests);
@ -465,8 +468,17 @@ namespace
if (!mTopicIndexBook)
mTopicIndexBook = createTopicIndexBook ();
getPage (LeftTopicIndex)->showPage (mTopicIndexBook, 0);
getPage (RightTopicIndex)->showPage (mTopicIndexBook, 1);
if (mIndexPagesCount == 3)
{
getPage (LeftTopicIndex)->showPage (mTopicIndexBook, 0);
getPage (CenterTopicIndex)->showPage (mTopicIndexBook, 1);
getPage (RightTopicIndex)->showPage (mTopicIndexBook, 2);
}
else
{
getPage (LeftTopicIndex)->showPage (mTopicIndexBook, 0);
getPage (RightTopicIndex)->showPage (mTopicIndexBook, 1);
}
}
void notifyJournal(MyGUI::Widget* _sender)
@ -480,6 +492,7 @@ namespace
void notifyIndexLinkClicked (MWGui::TypesetBook::InteractiveId index)
{
setVisible (LeftTopicIndex, false);
setVisible (CenterTopicIndex, false);
setVisible (RightTopicIndex, false);
setVisible (TopicsList, true);
@ -502,6 +515,7 @@ namespace
mQuestMode = false;
mTopicsMode = false;
setVisible (LeftTopicIndex, true);
setVisible (CenterTopicIndex, true);
setVisible (RightTopicIndex, true);
setVisible (TopicsList, false);
setVisible (QuestsList, false);
@ -540,6 +554,7 @@ namespace
mQuestMode = true;
setVisible (LeftTopicIndex, false);
setVisible (CenterTopicIndex, true);
setVisible (RightTopicIndex, false);
setVisible (TopicsList, false);
setVisible (QuestsList, true);

@ -20,8 +20,6 @@
namespace MWGui
{
const int MerchantRepair::sLineHeight = 18;
MerchantRepair::MerchantRepair()
: WindowBase("openmw_merchantrepair.layout")
{
@ -39,6 +37,7 @@ void MerchantRepair::setPtr(const MWWorld::Ptr &actor)
while (mList->getChildCount())
MyGUI::Gui::getInstance().destroyWidget(mList->getChildAt(0));
int lineHeight = MWBase::Environment::get().getWindowManager()->getFontHeight() + 2;
int currentY = 0;
MWWorld::Ptr player = MWMechanics::getPlayer();
@ -67,28 +66,26 @@ void MerchantRepair::setPtr(const MWWorld::Ptr &actor)
int price = MWBase::Environment::get().getMechanicsManager()->getBarterOffer(mActor, x, true);
std::string name = iter->getClass().getName(*iter)
+ " - " + MyGUI::utility::toString(price)
+ MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>()
.find("sgp")->mValue.getString();
MyGUI::Button* button =
mList->createWidget<MyGUI::Button>(price <= playerGold ? "SandTextButton" : "SandTextButtonDisabled", // can't use setEnabled since that removes tooltip
0,
currentY,
0,
sLineHeight,
lineHeight,
MyGUI::Align::Default
);
currentY += sLineHeight;
currentY += lineHeight;
button->setUserString("Price", MyGUI::utility::toString(price));
button->setUserData(MWWorld::Ptr(*iter));
button->setCaptionWithReplacing(name);
button->setSize(mList->getWidth(),sLineHeight);
button->setSize(mList->getWidth(), lineHeight);
button->eventMouseWheel += MyGUI::newDelegate(this, &MerchantRepair::onMouseWheel);
button->setUserString("ToolTipType", "ItemPtr");
button->eventMouseButtonClick += MyGUI::newDelegate(this, &MerchantRepair::onRepairButtonClick);

@ -27,8 +27,6 @@ protected:
void onMouseWheel(MyGUI::Widget* _sender, int _rel);
void onRepairButtonClick(MyGUI::Widget* sender);
void onOkButtonClick(MyGUI::Widget* sender);
static const int sLineHeight;
};
}

@ -26,9 +26,6 @@ namespace
namespace MWGui
{
const int ReviewDialog::sLineHeight = 18;
ReviewDialog::ReviewDialog()
: WindowModal("openmw_chargen_review.layout"),
mUpdateSkillArea(false)
@ -261,8 +258,9 @@ namespace MWGui
groupWidget->setCaption(label);
mSkillWidgets.push_back(groupWidget);
coord1.top += sLineHeight;
coord2.top += sLineHeight;
int lineHeight = MWBase::Environment::get().getWindowManager()->getFontHeight() + 2;
coord1.top += lineHeight;
coord2.top += lineHeight;
}
MyGUI::TextBox* ReviewDialog::addValueItem(const std::string& text, const std::string &value, const std::string& state, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
@ -282,8 +280,9 @@ namespace MWGui
mSkillWidgets.push_back(skillNameWidget);
mSkillWidgets.push_back(skillValueWidget);
coord1.top += sLineHeight;
coord2.top += sLineHeight;
int lineHeight = MWBase::Environment::get().getWindowManager()->getFontHeight() + 2;
coord1.top += lineHeight;
coord2.top += lineHeight;
return skillValueWidget;
}
@ -298,8 +297,9 @@ namespace MWGui
mSkillWidgets.push_back(skillNameWidget);
coord1.top += sLineHeight;
coord2.top += sLineHeight;
int lineHeight = MWBase::Environment::get().getWindowManager()->getFontHeight() + 2;
coord1.top += lineHeight;
coord2.top += lineHeight;
}
void ReviewDialog::addItem(const ESM::Spell* spell, MyGUI::IntCoord& coord1, MyGUI::IntCoord& coord2)
@ -312,8 +312,9 @@ namespace MWGui
mSkillWidgets.push_back(widget);
coord1.top += sLineHeight;
coord2.top += sLineHeight;
int lineHeight = MWBase::Environment::get().getWindowManager()->getFontHeight() + 2;
coord1.top += lineHeight;
coord2.top += lineHeight;
}
void ReviewDialog::addSkills(const SkillList &skills, const std::string &titleId, const std::string &titleDefault, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)

@ -87,8 +87,6 @@ namespace MWGui
void addItem(const ESM::Spell* spell, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2);
void updateSkillArea();
static const int sLineHeight;
MyGUI::TextBox *mNameWidget, *mRaceWidget, *mClassWidget, *mBirthSignWidget;
MyGUI::ScrollView* mSkillView;

@ -18,8 +18,6 @@
namespace MWGui
{
const int SpellBuyingWindow::sLineHeight = 18;
SpellBuyingWindow::SpellBuyingWindow() :
WindowBase("openmw_spell_buying_window.layout")
, mCurrentY(0)
@ -52,21 +50,23 @@ namespace MWGui
// TODO: refactor to use MyGUI::ListBox
int lineHeight = MWBase::Environment::get().getWindowManager()->getFontHeight() + 2;
MyGUI::Button* toAdd =
mSpellsView->createWidget<MyGUI::Button>(
price <= playerGold ? "SandTextButton" : "SandTextButtonDisabled", // can't use setEnabled since that removes tooltip
0,
mCurrentY,
200,
sLineHeight,
lineHeight,
MyGUI::Align::Default
);
mCurrentY += sLineHeight;
mCurrentY += lineHeight;
toAdd->setUserData(price);
toAdd->setCaptionWithReplacing(spell.mName+" - "+MyGUI::utility::toString(price)+"#{sgp}");
toAdd->setSize(mSpellsView->getWidth(),sLineHeight);
toAdd->setSize(mSpellsView->getWidth(), lineHeight);
toAdd->eventMouseWheel += MyGUI::newDelegate(this, &SpellBuyingWindow::onMouseWheel);
toAdd->setUserString("ToolTipType", "Spell");
toAdd->setUserString("Spell", spell.mId);

@ -48,8 +48,6 @@ namespace MWGui
void clearSpells();
int mCurrentY;
static const int sLineHeight;
void updateLabels();
virtual void onReferenceUnavailable();

@ -6,6 +6,7 @@
#include <MyGUI_Gui.h>
#include <components/widgets/sharedstatebutton.hpp>
#include <components/widgets/box.hpp>
#include "tooltips.hpp"
@ -240,7 +241,7 @@ namespace MWGui
mLines.push_back(LineInfo(separator, (MyGUI::Widget*)NULL, NoSpellIndex));
}
MyGUI::TextBox* groupWidget = mScrollView->createWidget<MyGUI::TextBox>("SandBrightText",
MyGUI::TextBox* groupWidget = mScrollView->createWidget<Gui::TextBox>("SandBrightText",
MyGUI::IntCoord(0, 0, mScrollView->getWidth(), 24),
MyGUI::Align::Left | MyGUI::Align::Top);
groupWidget->setCaptionWithReplacing(label);
@ -249,7 +250,7 @@ namespace MWGui
if (label2 != "")
{
MyGUI::TextBox* groupWidget2 = mScrollView->createWidget<MyGUI::TextBox>("SandBrightText",
MyGUI::TextBox* groupWidget2 = mScrollView->createWidget<Gui::TextBox>("SandBrightText",
MyGUI::IntCoord(0, 0, mScrollView->getWidth(), 24),
MyGUI::Align::Left | MyGUI::Align::Top);
groupWidget2->setCaptionWithReplacing(label2);

@ -23,9 +23,6 @@
namespace MWGui
{
const int StatsWindow::sLineHeight = 18;
StatsWindow::StatsWindow (DragAndDrop* drag)
: WindowPinnableBase("openmw_stats_window.layout")
, NoDrop(drag, mMainWidget)
@ -376,8 +373,9 @@ namespace MWGui
groupWidget->eventMouseWheel += MyGUI::newDelegate(this, &StatsWindow::onMouseWheel);
mSkillWidgets.push_back(groupWidget);
coord1.top += sLineHeight;
coord2.top += sLineHeight;
int lineHeight = MWBase::Environment::get().getWindowManager()->getFontHeight() + 2;
coord1.top += lineHeight;
coord2.top += lineHeight;
}
std::pair<MyGUI::TextBox*, MyGUI::TextBox*> StatsWindow::addValueItem(const std::string& text, const std::string &value, const std::string& state, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
@ -401,8 +399,9 @@ namespace MWGui
mSkillWidgets.push_back(skillNameWidget);
mSkillWidgets.push_back(skillValueWidget);
coord1.top += sLineHeight;
coord2.top += sLineHeight;
int lineHeight = MWBase::Environment::get().getWindowManager()->getFontHeight() + 2;
coord1.top += lineHeight;
coord2.top += lineHeight;
return std::make_pair(skillNameWidget, skillValueWidget);
}
@ -421,8 +420,9 @@ namespace MWGui
mSkillWidgets.push_back(skillNameWidget);
coord1.top += sLineHeight;
coord2.top += sLineHeight;
int lineHeight = MWBase::Environment::get().getWindowManager()->getFontHeight() + 2;
coord1.top += lineHeight;
coord2.top += lineHeight;
return skillNameWidget;
}

@ -53,8 +53,6 @@ namespace MWGui
void onWindowResize(MyGUI::Window* window);
void onMouseWheel(MyGUI::Widget* _sender, int _rel);
static const int sLineHeight;
MyGUI::Widget* mLeftPane;
MyGUI::Widget* mRightPane;

@ -8,6 +8,7 @@
#include <MyGUI_ImageBox.h>
#include <components/settings/settings.hpp>
#include <components/widgets/box.hpp>
#include "../mwbase/world.hpp"
#include "../mwbase/environment.hpp"
@ -421,7 +422,7 @@ namespace MWGui
std::string realImage = MWBase::Environment::get().getWindowManager()->correctIconPath(image);
MyGUI::EditBox* captionWidget = mDynamicToolTipBox->createWidget<MyGUI::EditBox>("NormalText", MyGUI::IntCoord(0, 0, 300, 300), MyGUI::Align::Left | MyGUI::Align::Top, "ToolTipCaption");
Gui::EditBox* captionWidget = mDynamicToolTipBox->createWidget<Gui::EditBox>("NormalText", MyGUI::IntCoord(0, 0, 300, 300), MyGUI::Align::Left | MyGUI::Align::Top, "ToolTipCaption");
captionWidget->setEditStatic(true);
captionWidget->setNeedKeyFocus(false);
captionWidget->setCaptionWithReplacing(caption);
@ -429,7 +430,7 @@ namespace MWGui
int captionHeight = std::max(caption != "" ? captionSize.height : 0, imageSize);
MyGUI::EditBox* textWidget = mDynamicToolTipBox->createWidget<MyGUI::EditBox>("SandText", MyGUI::IntCoord(0, captionHeight+imageCaptionVPadding, 300, 300-captionHeight-imageCaptionVPadding), MyGUI::Align::Stretch, "ToolTipText");
Gui::EditBox* textWidget = mDynamicToolTipBox->createWidget<Gui::EditBox>("SandText", MyGUI::IntCoord(0, captionHeight+imageCaptionVPadding, 300, 300-captionHeight-imageCaptionVPadding), MyGUI::Align::Stretch, "ToolTipText");
textWidget->setEditStatic(true);
textWidget->setEditMultiLine(true);
textWidget->setEditWordWrap(info.wordWrap);
@ -447,7 +448,7 @@ namespace MWGui
MyGUI::ImageBox* icon = mDynamicToolTipBox->createWidget<MyGUI::ImageBox>("MarkerButton",
MyGUI::IntCoord(padding.left, totalSize.height+padding.top, 8, 8), MyGUI::Align::Default);
icon->setColour(MyGUI::Colour(1.0f, 0.3f, 0.3f));
MyGUI::EditBox* edit = mDynamicToolTipBox->createWidget<MyGUI::EditBox>("SandText",
Gui::EditBox* edit = mDynamicToolTipBox->createWidget<Gui::EditBox>("SandText",
MyGUI::IntCoord(padding.left+8+4, totalSize.height+padding.top, 300-padding.left-8-4, 300-totalSize.height),
MyGUI::Align::Default);
edit->setEditMultiLine(true);

@ -22,8 +22,6 @@
namespace MWGui
{
const int TravelWindow::sLineHeight = 18;
TravelWindow::TravelWindow() :
WindowBase("openmw_travel_window.layout")
, mCurrentY(0)
@ -79,9 +77,11 @@ namespace MWGui
else
price *= std::max(1, static_cast<int>(followers.size()));
MyGUI::Button* toAdd = mDestinationsView->createWidget<MyGUI::Button>("SandTextButton", 0, mCurrentY, 200, sLineHeight, MyGUI::Align::Default);
int lineHeight = MWBase::Environment::get().getWindowManager()->getFontHeight() + 2;
MyGUI::Button* toAdd = mDestinationsView->createWidget<MyGUI::Button>("SandTextButton", 0, mCurrentY, 200, lineHeight, MyGUI::Align::Default);
toAdd->setEnabled(price <= playerGold);
mCurrentY += sLineHeight;
mCurrentY += lineHeight;
if(interior)
toAdd->setUserString("interior","y");
else
@ -92,7 +92,7 @@ namespace MWGui
toAdd->setUserString("price",oss.str());
toAdd->setCaptionWithReplacing("#{sCell=" + name + "} - " + MyGUI::utility::toString(price)+"#{sgp}");
toAdd->setSize(mDestinationsView->getWidth(),sLineHeight);
toAdd->setSize(mDestinationsView->getWidth(),lineHeight);
toAdd->eventMouseWheel += MyGUI::newDelegate(this, &TravelWindow::onMouseWheel);
toAdd->setUserString("Destination", name);
toAdd->setUserData(pos);

@ -41,8 +41,6 @@ namespace MWGui
void clearDestinations();
int mCurrentY;
static const int sLineHeight;
void updateLabels();
virtual void onReferenceUnavailable();

@ -38,13 +38,13 @@
#include <components/translation/translation.hpp>
#include <components/myguiplatform/myguiplatform.hpp>
#include <components/myguiplatform/myguidatamanager.hpp>
#include <components/myguiplatform/myguirendermanager.hpp>
#include <components/myguiplatform/additivelayer.hpp>
#include <components/myguiplatform/scalinglayer.hpp>
#include <components/vfs/manager.hpp>
#include <components/widgets/widgets.hpp>
#include <components/widgets/tags.hpp>
#include <components/sdlutil/sdlcursormanager.hpp>
@ -132,8 +132,8 @@ namespace MWGui
WindowManager::WindowManager(
osgViewer::Viewer* viewer, osg::Group* guiRoot, Resource::ResourceSystem* resourceSystem, SceneUtil::WorkQueue* workQueue,
const std::string& logpath, const std::string& resourcePath, bool consoleOnlyScripts,
Translation::Storage& translationDataStorage, ToUTF8::FromType encoding, bool exportFonts, const std::map<std::string, std::string>& fallbackMap, const std::string& versionDescription)
const std::string& logpath, const std::string& resourcePath, bool consoleOnlyScripts, Translation::Storage& translationDataStorage,
ToUTF8::FromType encoding, bool exportFonts, const std::map<std::string, std::string>& fallbackMap, const std::string& versionDescription, const std::string& userDataPath)
: mStore(NULL)
, mResourceSystem(resourceSystem)
, mWorkQueue(workQueue)
@ -196,6 +196,7 @@ namespace MWGui
, mFallbackMap(fallbackMap)
, mShowOwned(0)
, mEncoding(encoding)
, mFontHeight(16)
, mVersionDescription(versionDescription)
{
float uiScale = Settings::Manager::getFloat("scaling factor", "GUI");
@ -210,8 +211,8 @@ namespace MWGui
MyGUI::LanguageManager::getInstance().eventRequestTag = MyGUI::newDelegate(this, &WindowManager::onRetrieveTag);
// Load fonts
mFontLoader.reset(new Gui::FontLoader(encoding, resourceSystem->getVFS()));
mFontLoader->loadAllFonts(exportFonts);
mFontLoader.reset(new Gui::FontLoader(encoding, resourceSystem->getVFS(), userDataPath));
mFontLoader->loadBitmapFonts(exportFonts);
//Register own widgets with MyGUI
MyGUI::FactoryManager::getInstance().registerFactory<MWGui::Widgets::MWSkill>("Widget");
@ -233,11 +234,19 @@ namespace MWGui
SpellView::registerComponents();
Gui::registerAllWidgets();
int fontSize = Settings::Manager::getInt("font size", "GUI");
fontSize = std::min(std::max(12, fontSize), 20);
mFontHeight = fontSize;
MyGUI::ResourceManager::getInstance().unregisterLoadXmlDelegate("Resource");
MyGUI::ResourceManager::getInstance().registerLoadXmlDelegate("Resource") = newDelegate(this, &WindowManager::loadFontDelegate);
MyGUI::FactoryManager::getInstance().registerFactory<MWGui::Controllers::ControllerRepeatEvent>("Controller");
MyGUI::FactoryManager::getInstance().registerFactory<MWGui::Controllers::ControllerFollowMouse>("Controller");
MyGUI::FactoryManager::getInstance().registerFactory<ResourceImageSetPointerFix>("Resource", "ResourceImageSetPointer");
MyGUI::ResourceManager::getInstance().load("core.xml");
loadUserFonts();
bool keyboardNav = Settings::Manager::getBool("keyboard navigation", "GUI");
mKeyboardNavigation.reset(new KeyboardNavigation());
@ -284,6 +293,99 @@ namespace MWGui
mShowOwned = Settings::Manager::getInt("show owned", "Game");
}
void WindowManager::loadFontDelegate(MyGUI::xml::ElementPtr _node, const std::string& _file, MyGUI::Version _version)
{
const std::string templateName = "Journalbook ";
MyGUI::xml::ElementEnumerator font = _node->getElementEnumerator();
bool createCopy = false;
while (font.next("Resource"))
{
std::string type, name;
font->findAttribute("type", type);
font->findAttribute("name", name);
if (name.empty())
continue;
if (Misc::StringUtils::ciEqual(type, "ResourceTrueTypeFont"))
{
createCopy = true;
// For TrueType fonts we should override Size and Resolution properties
// to allow to configure font size via config file, without need to edit XML files.
// Also we should take UI scaling factor in account.
int resolution = Settings::Manager::getInt("ttf resolution", "GUI");
resolution = std::min(960, std::max(48, resolution));
float uiScale = Settings::Manager::getFloat("scaling factor", "GUI");
resolution *= uiScale;
MyGUI::xml::ElementPtr resolutionNode = font->createChild("Property");
resolutionNode->addAttribute("key", "Resolution");
resolutionNode->addAttribute("value", std::to_string(resolution));
MyGUI::xml::ElementPtr sizeNode = font->createChild("Property");
sizeNode->addAttribute("key", "Size");
sizeNode->addAttribute("value", std::to_string(mFontHeight));
}
else if (Misc::StringUtils::ciEqual(type, "ResourceSkin"))
{
// We should adjust line height for MyGUI widgets depending on font size
MyGUI::xml::ElementPtr heightNode = font->createChild("Property");
heightNode->addAttribute("key", "HeightLine");
heightNode->addAttribute("value", std::to_string(mFontHeight+2));
}
}
MyGUI::ResourceManager::getInstance().loadFromXmlNode(_node, _file, _version);
if (createCopy)
{
MyGUI::xml::ElementPtr copy = _node->createCopy();
MyGUI::xml::ElementEnumerator copyFont = copy->getElementEnumerator();
while (copyFont.next("Resource"))
{
std::string type, name;
copyFont->findAttribute("type", type);
copyFont->findAttribute("name", name);
if (name.empty())
continue;
if (Misc::StringUtils::ciEqual(type, "ResourceTrueTypeFont"))
{
// Since the journal and books use the custom scaling factor depending on resolution,
// setup separate fonts with different Resolution to fit these windows.
// These fonts have an internal prefix.
int resolution = Settings::Manager::getInt("ttf resolution", "GUI");
resolution = std::min(960, std::max(48, resolution));
float currentX = Settings::Manager::getInt("resolution x", "Video");
float currentY = Settings::Manager::getInt("resolution y", "Video");
// TODO: read size from openmw_layout.xml
float heightScale = (currentY / 520);
float widthScale = (currentX / 600);
float uiScale = std::min(widthScale, heightScale);
resolution *= uiScale;
MyGUI::xml::ElementPtr resolutionNode = copyFont->createChild("Property");
resolutionNode->addAttribute("key", "Resolution");
resolutionNode->addAttribute("value", std::to_string(resolution));
copyFont->setAttribute("name", "Journalbook " + name);
}
}
MyGUI::ResourceManager::getInstance().loadFromXmlNode(copy, _file, _version);
}
}
void WindowManager::loadUserFonts()
{
mFontLoader->loadTrueTypeFonts();
}
void WindowManager::initUI()
{
// Get size info from the Gui object
@ -504,6 +606,11 @@ namespace MWGui
updateVisible();
}
int WindowManager::getFontHeight() const
{
return mFontHeight;
}
void WindowManager::setNewGame(bool newgame)
{
if (newgame)
@ -522,6 +629,7 @@ namespace MWGui
{
mKeyboardNavigation.reset();
MyGUI::ResourceManager::getInstance().unregisterLoadXmlDelegate("Resource");
MyGUI::LanguageManager::getInstance().eventRequestTag.clear();
MyGUI::PointerManager::getInstance().eventChangeMousePointer.clear();
MyGUI::InputManager::getInstance().eventChangeKeyFocus.clear();

@ -131,14 +131,15 @@ namespace MWGui
typedef std::vector<Faction> FactionList;
WindowManager(osgViewer::Viewer* viewer, osg::Group* guiRoot, Resource::ResourceSystem* resourceSystem, SceneUtil::WorkQueue* workQueue,
const std::string& logpath, const std::string& cacheDir, bool consoleOnlyScripts,
Translation::Storage& translationDataStorage, ToUTF8::FromType encoding, bool exportFonts, const std::map<std::string,std::string>& fallbackMap, const std::string& versionDescription);
const std::string& logpath, const std::string& cacheDir, bool consoleOnlyScripts, Translation::Storage& translationDataStorage,
ToUTF8::FromType encoding, bool exportFonts, const std::map<std::string,std::string>& fallbackMap, const std::string& versionDescription, const std::string& localPath);
virtual ~WindowManager();
/// Set the ESMStore to use for retrieving of GUI-related strings.
void setStore (const MWWorld::ESMStore& store);
void initUI();
virtual void loadUserFonts();
virtual Loading::Listener* getLoadingScreen();
@ -246,6 +247,7 @@ namespace MWGui
virtual const MWWorld::Ptr& getSelectedEnchantItem() const;
virtual void setSelectedWeapon(const MWWorld::Ptr& item);
virtual const MWWorld::Ptr& getSelectedWeapon() const;
virtual int getFontHeight() const;
virtual void unsetSelectedSpell();
virtual void unsetSelectedWeapon();
@ -402,6 +404,8 @@ namespace MWGui
MWWorld::Ptr mSelectedEnchantItem;
MWWorld::Ptr mSelectedWeapon;
void loadFontDelegate(MyGUI::xml::ElementPtr _node, const std::string& _file, MyGUI::Version _version);
std::vector<WindowModal*> mCurrentModals;
// Markers placed manually by the player. Must be shared between both map views (the HUD map and the map window).
@ -514,6 +518,8 @@ namespace MWGui
ToUTF8::FromType mEncoding;
int mFontHeight;
std::string mVersionDescription;
MWGui::TextColours mTextColours;

@ -676,6 +676,9 @@ namespace MWInput
Settings::Manager::getInt("resolution y", "Video"),
Settings::Manager::getBool("fullscreen", "Video"),
Settings::Manager::getBool("window border", "Video"));
// We should reload TrueType fonts to fit new resolution
MWBase::Environment::get().getWindowManager()->loadUserFonts();
}
}

@ -76,6 +76,11 @@ LocalMap::LocalMap(osg::Group* root)
, mAngle(0.f)
, mInterior(false)
{
// Increase map resolution, if use UI scaling
float uiScale = Settings::Manager::getFloat("scaling factor", "GUI");
if (uiScale > 1.0)
mMapResolution *= uiScale;
SceneUtil::FindByNameVisitor find("Scene Root");
mRoot->accept(find);
mSceneRoot = find.mFoundNode;

@ -130,7 +130,7 @@ add_component_dir (myguiplatform
)
add_component_dir (widgets
box imagebutton tags list numericeditbox sharedstatebutton windowcaption widgets
box fontwrapper imagebutton tags list numericeditbox sharedstatebutton windowcaption widgets
)
add_component_dir (fontloader

@ -145,8 +145,9 @@ namespace
namespace Gui
{
FontLoader::FontLoader(ToUTF8::FromType encoding, const VFS::Manager* vfs)
FontLoader::FontLoader(ToUTF8::FromType encoding, const VFS::Manager* vfs, const std::string& userDataPath)
: mVFS(vfs)
, mUserDataPath(userDataPath)
{
if (encoding == ToUTF8::WINDOWS_1252)
mEncoding = ToUTF8::CP437;
@ -175,7 +176,7 @@ namespace Gui
mFonts.clear();
}
void FontLoader::loadAllFonts(bool exportToFile)
void FontLoader::loadBitmapFonts(bool exportToFile)
{
const std::map<std::string, VFS::File*>& index = mVFS->getIndex();
@ -198,6 +199,25 @@ namespace Gui
}
}
void FontLoader::loadTrueTypeFonts()
{
osgMyGUI::DataManager* dataManager = dynamic_cast<osgMyGUI::DataManager*>(&osgMyGUI::DataManager::getInstance());
if (!dataManager)
{
Log(Debug::Error) << "Can not load TrueType fonts: osgMyGUI::DataManager is not available.";
return;
}
const std::string cfg = dataManager->getDataPath("");
const std::string fontFile = mUserDataPath + "/" + "Fonts" + "/" + "openmw_font.xml";
if (!boost::filesystem::exists(fontFile))
return;
dataManager->setResourcePath(mUserDataPath + "/" + "Fonts");
MyGUI::ResourceManager::getInstance().load("openmw_font.xml");
dataManager->setResourcePath(cfg);
}
typedef struct
{
@ -480,6 +500,14 @@ namespace Gui
font->deserialization(root, MyGUI::Version(3,2,0));
// Setup "book" version of font as fallback if we will not use TrueType fonts
MyGUI::ResourceManualFont* bookFont = static_cast<MyGUI::ResourceManualFont*>(
MyGUI::FactoryManager::getInstance().createObject("Resource", "ResourceManualFont"));
mFonts.push_back(bookFont);
bookFont->deserialization(root, MyGUI::Version(3,2,0));
bookFont->setResourceName("Journalbook " + resourceName);
// Remove automatically registered fonts
for (std::vector<MyGUI::ResourceManualFont*>::iterator it = mFonts.begin(); it != mFonts.end();)
{
if ((*it)->getResourceName() == font->getResourceName())
@ -487,10 +515,17 @@ namespace Gui
MyGUI::ResourceManager::getInstance().removeByName(font->getResourceName());
it = mFonts.erase(it);
}
else if ((*it)->getResourceName() == bookFont->getResourceName())
{
MyGUI::ResourceManager::getInstance().removeByName(bookFont->getResourceName());
it = mFonts.erase(it);
}
else
++it;
}
MyGUI::ResourceManager::getInstance().addResource(font);
MyGUI::ResourceManager::getInstance().addResource(bookFont);
}
}

@ -1,6 +1,9 @@
#ifndef OPENMW_COMPONENTS_FONTLOADER_H
#define OPENMW_COMPONENTS_FONTLOADER_H
#include "boost/filesystem/operations.hpp"
#include <components/myguiplatform/myguidatamanager.hpp>
#include <components/to_utf8/to_utf8.hpp>
namespace VFS
@ -23,15 +26,17 @@ namespace Gui
class FontLoader
{
public:
FontLoader (ToUTF8::FromType encoding, const VFS::Manager* vfs);
FontLoader (ToUTF8::FromType encoding, const VFS::Manager* vfs, const std::string& userDataPath);
~FontLoader();
/// @param exportToFile export the converted fonts (Images and XML with glyph metrics) to files?
void loadAllFonts (bool exportToFile);
void loadBitmapFonts (bool exportToFile);
void loadTrueTypeFonts ();
private:
ToUTF8::FromType mEncoding;
const VFS::Manager* mVFS;
std::string mUserDataPath;
std::vector<MyGUI::ITexture*> mTextures;
std::vector<MyGUI::ResourceManualFont*> mFonts;

@ -48,7 +48,7 @@ namespace Gui
}
else
{
TextBox::setPropertyOverride (_key, _value);
Gui::TextBox::setPropertyOverride (_key, _value);
}
}
@ -81,11 +81,10 @@ namespace Gui
}
else
{
EditBox::setPropertyOverride (_key, _value);
Gui::EditBox::setPropertyOverride (_key, _value);
}
}
MyGUI::IntSize AutoSizedButton::getRequestedSize()
{
MyGUI::IntSize padding(24, 8);
@ -111,16 +110,14 @@ namespace Gui
}
else
{
Button::setPropertyOverride (_key, _value);
Gui::Button::setPropertyOverride (_key, _value);
}
}
Box::Box()
: mSpacing(4)
, mPadding(0)
, mAutoResize(false)
{
}
void Box::notifyChildrenSizeChanged ()

@ -4,10 +4,27 @@
#include <MyGUI_Widget.h>
#include <MyGUI_TextBox.h>
#include <MyGUI_EditBox.h>
#include <MyGUI_ListBox.h>
#include <MyGUI_Button.h>
#include "fontwrapper.hpp"
namespace Gui
{
class Button : public FontWrapper<MyGUI::Button>
{
MYGUI_RTTI_DERIVED( Button )
};
class TextBox : public FontWrapper<MyGUI::TextBox>
{
MYGUI_RTTI_DERIVED( TextBox )
};
class EditBox : public FontWrapper<MyGUI::EditBox>
{
MYGUI_RTTI_DERIVED( EditBox )
};
class AutoSizedWidget
{
@ -22,7 +39,7 @@ namespace Gui
MyGUI::Align mExpandDirection;
};
class AutoSizedTextBox : public AutoSizedWidget, public MyGUI::TextBox
class AutoSizedTextBox : public AutoSizedWidget, public TextBox
{
MYGUI_RTTI_DERIVED( AutoSizedTextBox )
@ -32,9 +49,10 @@ namespace Gui
protected:
virtual void setPropertyOverride(const std::string& _key, const std::string& _value);
std::string mFontSize;
};
class AutoSizedEditBox : public AutoSizedWidget, public MyGUI::EditBox
class AutoSizedEditBox : public AutoSizedWidget, public EditBox
{
MYGUI_RTTI_DERIVED( AutoSizedEditBox )
@ -47,9 +65,10 @@ namespace Gui
protected:
virtual void setPropertyOverride(const std::string& _key, const std::string& _value);
std::string mFontSize;
};
class AutoSizedButton : public AutoSizedWidget, public MyGUI::Button
class AutoSizedButton : public AutoSizedWidget, public Button
{
MYGUI_RTTI_DERIVED( AutoSizedButton )
@ -59,6 +78,7 @@ namespace Gui
protected:
virtual void setPropertyOverride(const std::string& _key, const std::string& _value);
std::string mFontSize;
};
/**

@ -0,0 +1,45 @@
#ifndef OPENMW_WIDGETS_WRAPPER_H
#define OPENMW_WIDGETS_WRAPPER_H
#include "widgets.hpp"
#include <components/settings/settings.hpp>
namespace Gui
{
template<class T>
class FontWrapper : public T
{
public:
virtual void setFontName(const std::string& name)
{
T::setFontName(name);
T::setPropertyOverride ("FontHeight", mFontSize);
}
protected:
FontWrapper()
{
// Note: we can not use the WindowManager here, so there is a code duplication a bit.
int fontSize = Settings::Manager::getInt("font size", "GUI");
fontSize = std::min(std::max(12, fontSize), 20);
mFontSize = std::to_string(fontSize);
}
virtual void setPropertyOverride(const std::string& _key, const std::string& _value)
{
T::setPropertyOverride (_key, _value);
// There is a bug in MyGUI: when it initializes the FontName property, it reset the font height.
// We should restore it.
if (_key == "FontName")
{
T::setPropertyOverride ("FontHeight", mFontSize);
}
}
std::string mFontSize;
};
}
#endif

@ -3,13 +3,15 @@
#include <MyGUI_EditBox.h>
#include "fontwrapper.hpp"
namespace Gui
{
/**
* @brief A variant of the EditBox that only allows integer inputs
*/
class NumericEditBox : public MyGUI::EditBox
class NumericEditBox : public FontWrapper<MyGUI::EditBox>
{
MYGUI_RTTI_DERIVED(NumericEditBox)
@ -17,7 +19,8 @@ namespace Gui
NumericEditBox()
: mValue(0), mMinValue(std::numeric_limits<int>::min()),
mMaxValue(std::numeric_limits<int>::max())
{}
{
}
void initialiseOverride();
void shutdownOverride();

@ -7,7 +7,6 @@ namespace Gui
: mIsMousePressed(false)
, mIsMouseFocus(false)
{
}
void SharedStateButton::shutdownOverride()

@ -3,6 +3,8 @@
#include <MyGUI_Button.h>
#include "fontwrapper.hpp"
namespace Gui
{
@ -11,7 +13,7 @@ namespace Gui
typedef std::vector<SharedStateButton*> ButtonGroup;
/// @brief A button that applies its own state changes to other widgets, to do this you define it as part of a ButtonGroup.
class SharedStateButton : public MyGUI::Button
class SharedStateButton : public FontWrapper<MyGUI::Button>
{
MYGUI_RTTI_DERIVED(SharedStateButton)

@ -18,9 +18,12 @@ namespace Gui
MyGUI::FactoryManager::getInstance().registerFactory<Gui::HBox>("Widget");
MyGUI::FactoryManager::getInstance().registerFactory<Gui::Spacer>("Widget");
MyGUI::FactoryManager::getInstance().registerFactory<Gui::VBox>("Widget");
MyGUI::FactoryManager::getInstance().registerFactory<Gui::EditBox>("Widget");
MyGUI::FactoryManager::getInstance().registerFactory<Gui::TextBox>("Widget");
MyGUI::FactoryManager::getInstance().registerFactory<Gui::AutoSizedTextBox>("Widget");
MyGUI::FactoryManager::getInstance().registerFactory<Gui::AutoSizedEditBox>("Widget");
MyGUI::FactoryManager::getInstance().registerFactory<Gui::AutoSizedButton>("Widget");
MyGUI::FactoryManager::getInstance().registerFactory<Gui::Button>("Widget");
MyGUI::FactoryManager::getInstance().registerFactory<Gui::ImageButton>("Widget");
MyGUI::FactoryManager::getInstance().registerFactory<Gui::NumericEditBox>("Widget");
MyGUI::FactoryManager::getInstance().registerFactory<Gui::SharedStateButton>("Widget");

@ -1,9 +1,10 @@
#ifndef OPENMW_COMPONENTS_WIDGETS_H
#define OPENMW_COMPONENTS_WIDGETS_H
extern int GuiFontHeight;
namespace Gui
{
/// Register all widgets from this component with MyGUI's factory manager.
void registerAllWidgets();

@ -12,6 +12,27 @@ This setting scales the GUI interface windows.
A value of 1.0 results in the normal scale. Larger values are useful to increase the scale of the GUI for high resolution displays.
This setting can only be configured by editing the settings configuration file.
font size
---------
:Type: integer
:Range: 12 to 20
:Default: 16
Allows to specify glyph size for in-game fonts.
Note: default bitmap fonts are supposed to work with 16px size, otherwise glyphs will be blurry.
TrueType fonts do not have this issue.
ttf resolution
--------------
:Type: integer
:Range: 48 to 960
:Default: 96
Allows to specify resolution for in-game TrueType fonts.
Note: actual resolution depends on "scaling factor" setting value, this value is for 1.0 scaling factor.
menu transparency
-----------------

@ -2,7 +2,6 @@
<MyGUI type="Resource" version="1.1">
<Resource type="ResourceSkin" name="TextBox" size="16 16">
<Property key="FontHeight" value = "16" />
<Property key="TextAlign" value = "ALIGN_DEFAULT" />
<Property key="TextColour" value = "0.7 0.7 0.7" />

@ -74,7 +74,7 @@
<!-- Buttons -->
<Widget type="HBox" skin="" position="110 374 452 24" align="Bottom Right">
<Widget type="HBox" skin="" position="110 374 452 28" align="Bottom Right">
<Widget type="Spacer"/>

@ -32,11 +32,13 @@
</Widget>
<Widget type="TextBox" skin="NormalText" position="30 358 250 16" name="LeftPageNumber">
<Property key="FontName" value="Journalbook Magic Cards"/>
<Property key="TextColour" value="0 0 0"/>
<Property key="TextAlign" value="Center"/>
<Property key="NeedMouse" value="false"/>
</Widget>
<Widget type="TextBox" skin="NormalText" position="310 358 250 16" name="RightPageNumber">
<Property key="FontName" value="Journalbook Magic Cards"/>
<Property key="TextColour" value="0 0 0"/>
<Property key="TextAlign" value="Center"/>
<Property key="NeedMouse" value="false"/>

@ -16,7 +16,7 @@
</Widget>>
<!-- Dialog buttons -->
<Widget type="HBox" position="0 338 511 24">
<Widget type="HBox" position="0 338 511 28">
<Widget type="Spacer"/>
<Widget type="AutoSizedButton" skin="MW_Button" name="BackButton">
<Property key="Caption" value="#{sBack}"/>

@ -27,11 +27,11 @@
</Widget>
<!-- Favorite Attributes -->
<Widget type="VBox" skin="" position="0 39 166 72" align="Stretch">
<Widget type="VBox" skin="" position="0 39 166 76" align="Stretch">
<Property key="Spacing" value="0"/>
<!-- Favorite Attributes -->
<Widget type="AutoSizedEditBox" skin="HeaderText" position="0 0 166 18" name="FavoriteAttributesT" align="Left Top">
<Widget type="AutoSizedEditBox" skin="HeaderText" position="0 0 166 22" name="FavoriteAttributesT" align="Left Top">
<Property key="Caption" value="#{sChooseClassMenu2}"/>
<Property key="TextAlign" value="Left Top"/>
<Property key="Static" value="true"/>
@ -73,7 +73,7 @@
</Widget>
<!-- Dialog buttons -->
<Widget type="HBox" position="0 276 475 24">
<Widget type="HBox" position="0 276 475 28">
<Widget type="Spacer"/>
<Widget type="AutoSizedButton" skin="MW_Button" name="BackButton">
<Property key="Caption" value="#{sBack}"/>

@ -11,7 +11,7 @@
<Property key="Caption" value="#{sCustomClassName}"/>
</Widget>
<Widget type="Widget" skin="" position="8 38 480 110" align="Stretch">
<Widget type="Widget" skin="" position="8 38 480 116" align="Stretch">
<!-- Specialization -->
<Widget type="TextBox" skin="HeaderText" position="0 0 156 18" name="SpecializationT" align="Left Top">
@ -26,7 +26,7 @@
<Property key="TextAlign" value="Left Top"/>
</Widget>
<Widget type="VBox" skin="" position="0 41 166 72" align="Stretch">
<Widget type="VBox" skin="" position="0 41 166 76" align="Stretch">
<Property key="Spacing" value="0"/>
<!-- Favorite Attributes -->
@ -74,7 +74,7 @@
</Widget>
<!-- Dialog buttons -->
<Widget type="HBox" position="0 158 482 24">
<Widget type="HBox" position="0 158 482 28">
<Widget type="Spacer"/>
<Widget type="AutoSizedButton" skin="MW_Button" name="DescriptionButton">
<Property key="Caption" value="#{sCreateClassMenu1}"/>

@ -24,7 +24,7 @@
</Widget>
<!-- Dialog buttons -->
<Widget type="HBox" position="0 216 273 24">
<Widget type="HBox" position="0 216 273 28">
<Widget type="AutoSizedButton" skin="MW_Button" name="BackButton">
<Property key="Caption" value="#{sBack}"/>
</Widget>

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Layout">
<Widget type="Window" skin="MW_Dialog" layer="Windows" position="0 0 588 433" align="Center" name="_Main">
<Widget type="Window" skin="MW_Dialog" layer="Windows" position="0 0 640 433" align="Center" name="_Main">
<!-- Appearance -->
<Widget type="TextBox" skin="HeaderText" position="8 16 241 18" name="AppearanceT" align="Left Top">
@ -54,28 +54,28 @@
<!-- Race -->
<Widget type="TextBox" skin="HeaderText" position="261 16 132 18" name="RaceT" align="Left Top">
<Widget type="TextBox" skin="HeaderText" position="261 16 160 18" name="RaceT" align="Left Top">
<Property key="TextAlign" value="Left Top"/>
</Widget>
<Widget type="ListBox" skin="MW_List" position="264 39 132 150" name="RaceList">
<Widget type="ListBox" skin="MW_List" position="264 39 160 150" name="RaceList">
</Widget>
<!-- Spell powers -->
<Widget type="TextBox" skin="HeaderText" position="261 210 132 18" name="SpellPowerT" align="Left Top">
<Widget type="TextBox" skin="HeaderText" position="261 210 160 18" name="SpellPowerT" align="Left Top">
<Property key="TextAlign" value="Left Top"/>
</Widget>
<!-- Spell power sub-widgets will be placed here, no skin to make it invisible -->
<Widget type="Widget" skin="" position="261 230 250 140" name="SpellPowerList"/>
<Widget type="Widget" skin="" position="261 230 350 140" name="SpellPowerList"/>
<!-- Skill bonus -->
<Widget type="TextBox" skin="HeaderText" position="403 39 159 18" name="SkillsT" align="Left Top">
<Widget type="TextBox" skin="HeaderText" position="432 39 190 18" name="SkillsT" align="Left Top">
<Property key="TextAlign" value="Left Top"/>
</Widget>
<!-- Skill bonus sub-widgets will be placed here, no skin to make it invisible -->
<Widget type="Widget" skin="" position="403 59 159 360" name="SkillList"/>
<Widget type="Widget" skin="" position="432 59 190 360" name="SkillList"/>
<!-- Dialog buttons -->
<Widget type="HBox" position="0 393 572 24">
<Widget type="HBox" position="0 393 626 28">
<Widget type="Spacer"/>
<Widget type="AutoSizedButton" skin="MW_Button" position="471 397 53 23" name="BackButton">

@ -1,28 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Layout">
<Widget type="Window" skin="MW_DialogNoTransp" layer="Windows" position="0 0 217 234" align="Center" name="_Main">
<Widget type="Widget" skin="" position="14 14 200 203" align="HCenter VStretch">
<Widget type="Window" skin="MW_DialogNoTransp" layer="Windows" position="0 0 247 231" align="Center" name="_Main">
<Widget type="Widget" skin="" position="14 14 216 204" align="HCenter VStretch">
<!-- Label -->
<Widget type="TextBox" skin="HeaderText" position="0 0 200 18" name="LabelT" align="HCenter Top">
<Widget type="TextBox" skin="HeaderText" position="0 0 216 18" name="LabelT" align="HCenter Top">
<Property key="Caption" value="#{sAttributesMenu1}"/>
<Property key="TextAlign" value="HCenter Top"/>
</Widget>
<!-- Attribute list -->
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 28 200 18" name="Attribute0" align="Left Top"/>
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 46 200 18" name="Attribute1" align="Left Top"/>
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 64 200 18" name="Attribute2" align="Left Top"/>
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 82 200 18" name="Attribute3" align="Left Top"/>
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 100 200 18" name="Attribute4" align="Left Top"/>
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 118 200 18" name="Attribute5" align="Left Top"/>
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 136 200 18" name="Attribute6" align="Left Top"/>
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 154 200 18" name="Attribute7" align="Left Top"/>
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 28 216 18" name="Attribute0" align="Left Top"/>
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 46 216 18" name="Attribute1" align="Left Top"/>
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 64 216 18" name="Attribute2" align="Left Top"/>
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 82 216 18" name="Attribute3" align="Left Top"/>
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 100 216 18" name="Attribute4" align="Left Top"/>
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 118 216 18" name="Attribute5" align="Left Top"/>
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 136 216 18" name="Attribute6" align="Left Top"/>
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 154 216 18" name="Attribute7" align="Left Top"/>
<!-- Dialog buttons -->
<Widget type="AutoSizedButton" skin="MW_Button" position="120 180 66 21" name="CancelButton">
<Property key="ExpandDirection" value="Left"/>
<Property key="Caption" value="#{sCancel}"/>
<Widget type="HBox" position="0 175 216 28">
<Widget type="Spacer" />
<Widget type="AutoSizedButton" skin="MW_Button" align="Right Bottom" name="CancelButton">
<Property key="ExpandDirection" value="Left Up"/>
<Property key="Caption" value="#{sCancel}"/>
</Widget>
</Widget>
</Widget>

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Layout">
<Widget type="Window" skin="MW_DialogNoTransp" layer="Windows" position="0 0 477 270" align="Center" name="_Main">
<Widget type="Widget" skin="" position="17 14 447 239" align="Stretch">
<Widget type="Window" skin="MW_DialogNoTransp" layer="Windows" position="0 0 487 275" align="Center" name="_Main">
<Widget type="Widget" skin="" position="17 14 457 246" align="Stretch">
<!-- Label -->
<Widget type="TextBox" skin="HeaderText" position="0 0 447 18" name="LabelT" align="HCenter Top">
<Widget type="TextBox" skin="HeaderText" position="0 0 457 18" name="LabelT" align="HCenter Top">
<Property key="Caption" value="#{sSkillsMenu1}"/>
<Property key="TextAlign" value="HCenter Top"/>
</Widget>
@ -44,20 +44,23 @@
<Property key="Caption" value="#{sSpecializationStealth}"/>
<Property key="TextAlign" value="Left Top"/>
</Widget>
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 50 131 18" name="StealthSkill0" align="Left Top"/>
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 68 131 18" name="StealthSkill1" align="Left Top"/>
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 86 131 18" name="StealthSkill2" align="Left Top"/>
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 104 131 18" name="StealthSkill3" align="Left Top"/>
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 122 131 18" name="StealthSkill4" align="Left Top"/>
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 140 131 18" name="StealthSkill5" align="Left Top"/>
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 158 131 18" name="StealthSkill6" align="Left Top"/>
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 176 131 18" name="StealthSkill7" align="Left Top"/>
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 194 131 18" name="StealthSkill8" align="Left Top"/>
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 50 154 18" name="StealthSkill0" align="Left Top"/>
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 68 154 18" name="StealthSkill1" align="Left Top"/>
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 86 154 18" name="StealthSkill2" align="Left Top"/>
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 104 154 18" name="StealthSkill3" align="Left Top"/>
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 122 154 18" name="StealthSkill4" align="Left Top"/>
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 140 154 18" name="StealthSkill5" align="Left Top"/>
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 158 154 18" name="StealthSkill6" align="Left Top"/>
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 176 154 18" name="StealthSkill7" align="Left Top"/>
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 194 154 18" name="StealthSkill8" align="Left Top"/>
<!-- Dialog buttons -->
<Widget type="AutoSizedButton" skin="MW_Button" position="381 218 66 21" name="CancelButton">
<Property key="ExpandDirection" value="Left"/>
<Property key="Caption" value="#{sCancel}"/>
<Widget type="HBox" position="0 218 457 28">
<Widget type="Spacer" />
<Widget type="AutoSizedButton" skin="MW_Button" align="Right Bottom" name="CancelButton">
<Property key="ExpandDirection" value="Left Up"/>
<Property key="Caption" value="#{sCancel}"/>
</Widget>
</Widget>
</Widget>

@ -2,7 +2,7 @@
<MyGUI type="Layout">
<!-- correct size is 247 144, adjust when skin is changed to a dialog -->
<Widget type="Window" skin="MW_DialogNoTransp" layer="Windows" position="0 0 247 144" align="Center" name="_Main">
<Widget type="Widget" skin="" position="14 14 216 113" align="Stretch">
<Widget type="Widget" skin="" position="14 14 216 116" align="Stretch">
<!-- Label -->
<Widget type="TextBox" skin="HeaderText" position="0 0 216 18" name="LabelT" align="Center Top">
@ -22,9 +22,12 @@
</Widget>
<!-- Dialog buttons -->
<Widget type="AutoSizedButton" skin="MW_Button" position="150 90 66 21" name="CancelButton">
<Property key="ExpandDirection" value="Left"/>
<Property key="Caption" value="#{sCancel}"/>
<Widget type="HBox" position="0 88 216 28">
<Widget type="Spacer" />
<Widget type="AutoSizedButton" skin="MW_Button" align="Right Bottom" name="CancelButton">
<Property key="ExpandDirection" value="Left Up"/>
<Property key="Caption" value="#{sCancel}"/>
</Widget>
</Widget>
</Widget>

@ -13,7 +13,7 @@
<Property key="NeedKey" value="false"/>
</Widget>
<Widget type="VBox" position="0 89 352 24" align="Center Bottom">
<Widget type="VBox" position="0 89 352 28" align="Center Bottom">
<Widget type="HBox">
<Property key="Spacing" value="8"/>

@ -9,7 +9,7 @@
<Widget type="ItemView" skin="MW_ItemView" position="5 5 575 225" name="ItemView" align="Left Top Stretch">
</Widget>
<Widget type="HBox" position="0 235 580 24" align="Right Bottom">
<Widget type="HBox" position="0 235 580 28" align="Right Bottom">
<Widget type="Spacer"/>
<Widget type="AutoSizedButton" skin="MW_Button" name="DisposeCorpseButton" align="Right Bottom">
<Property key="Caption" value="#{sDisposeofCorpse}"/>

@ -16,12 +16,12 @@
<Property key="Page" value="1"/>
<Property key="WheelPage" value="1"/>
</Widget>
<Widget type="HBox" skin="" position="0 91 592 24" align="Center Bottom HStretch">
<Widget type="HBox" skin="" position="0 91 592 28" align="Center Bottom HStretch">
<Widget type="Spacer" />
<Widget type="AutoSizedButton" skin="MW_Button" position="0 0 53 24" align="Left Top" name="OkButton">
<Widget type="AutoSizedButton" skin="MW_Button" position="0 0 53 28" align="Left Top" name="OkButton">
<Property key="Caption" value="#{sOk}"/>
</Widget>
<Widget type="AutoSizedButton" skin="MW_Button" position="0 0 86 24" align="Right Top" name="CancelButton">
<Widget type="AutoSizedButton" skin="MW_Button" position="0 0 86 28" align="Right Top" name="CancelButton">
<Property key="Caption" value="#{sCancel}"/>
</Widget>
<Widget type="Spacer" />

@ -50,7 +50,7 @@
</Widget>
<!-- Values -->
<Widget type="VBox" position="320 7 222 80">
<Widget type="VBox" position="320 7 222 96">
<Widget type="HBox">
<UserString key="HStretch" value="true"/>
<Widget type="AutoSizedTextBox" skin="NormalText">

@ -2,8 +2,6 @@
<MyGUI type="Resource" version="1.1">
<Resource type="ResourceTrueTypeFont" name="MonoFont">
<Property key="Source" value="DejaVuLGCSansMono.ttf"/>
<Property key="Size" value="17"/>
<Property key="Resolution" value="50"/>
<Property key="Antialias" value="false"/>
<Property key="TabWidth" value="8"/>
<Property key="OffsetHeight" value="0"/>

@ -29,7 +29,7 @@
</Widget>
<!-- Categories -->
<Widget type="HBox" position="0 8 350 24" align="Left Top HStretch" name="Categories">
<Widget type="HBox" position="0 6 350 28" align="Left Top HStretch" name="Categories">
<Widget type="AutoSizedButton" skin="MW_Button" position="0 0 60 24" name="AllButton">
<Property key="Caption" value="#{sAllTab}"/>
<Property key="NeedKey" value="false"/>

@ -25,10 +25,12 @@
</Widget>
<Widget type="TextBox" skin="NormalText" position="150 350 32 16" name="PageOneNum">
<Property key="FontName" value="Journalbook Magic Cards"/>
<Property key="TextColour" value="0 0 0"/>
</Widget>
<Widget type="TextBox" skin="NormalText" position="410 350 32 16" name="PageTwoNum">
<Property key="FontName" value="Journalbook Magic Cards"/>
<Property key="TextColour" value="0 0 0"/>
</Widget>
@ -59,8 +61,9 @@
<Property key="ImageTexture" value="textures\tx_menubook_bookmark.dds"/>
<Property key="ImageCoord" value="0 0 164 256"/>
<Widget type="BookPage" skin="MW_BookPage" position="20 15 92 250" name="LeftTopicIndex"/>
<Widget type="BookPage" skin="MW_BookPage" position="112 15 92 250" name="RightTopicIndex"/>
<Widget type="BookPage" skin="MW_BookPage" position="10 10 92 260" name="LeftTopicIndex"/>
<Widget type="BookPage" skin="MW_BookPage" position="66 10 92 260" name="CenterTopicIndex"/>
<Widget type="BookPage" skin="MW_BookPage" position="122 10 92 260" name="RightTopicIndex"/>
<Widget type="ImageButton" skin="ImageBox" position="71 15 100 20" Align="Top|Left" name="ShowActiveBTN">
<!-- Image set at runtime since it may not be available in all versions of the game -->

@ -2,7 +2,7 @@
<MyGUI type="Resource" version="1.1">
<Resource type="ResourceSkin" name="MW_BookClient" size="10 10">
<Property key="FontName" value="Default"/>
<Property key="FontName" value="Journalbook Magic Cards"/>
<Property key="TextAlign" value="Left Top"/>
<Property key="TextColour" value="0 0 0"/>
<BasisSkin type="EditText" offset="0 0 10 10" align="Stretch"/>
@ -13,15 +13,13 @@
</Resource>
<Resource type="ResourceSkin" name="MW_QuestList" size="516 516" align="Left Top">
<Property key="ListItemSkin" value="MW_QuestLink"/>
<Property key="ListItemSkin" value="MW_QuestLink"/>
<Child type="Widget" skin="" offset="3 3 510 510" align="Top Left Stretch" name="Client"/>
<Child type="Widget" skin="" offset="3 3 510 510" align="Top Left Stretch" name="Client"/>
</Resource>
<Resource type="ResourceSkin" name="MW_QuestLink" size="5 5">
<Property key="FontName" value="Default"/>
<Property key="FontName" value="Journalbook Magic Cards"/>
<Property key="TextAlign" value="Left VCenter"/>
<BasisSkin type="SimpleText" offset="2 0 1 5" align="Stretch">

@ -127,7 +127,6 @@
<Resource type="ResourceSkin" name="MW_List" size="516 516" align="Left Top">
<Property key="NeedKey" value="true"/>
<Property key="SkinLine" value="MW_ListLine"/>
<Property key="HeightLine" value="18"/>
<Child type="Widget" skin="MW_Box" offset="0 0 516 516" align="Stretch"/>
@ -140,8 +139,6 @@
<Resource type="ResourceSkin" name="MW_PopupList" size="516 516" align="Left Top">
<Property key="NeedKey" value="true"/>
<Property key="SkinLine" value="MW_ListLine"/>
<Property key="HeightLine" value="18"/>
<Child type="Widget" skin="BlackBG" offset="0 0 516 516" align="Stretch"/>
<Child type="Widget" skin="MW_Box" offset="0 0 516 516" align="Stretch"/>
@ -153,7 +150,6 @@
<Resource type="ResourceSkin" name="MW_PopupListNoTransp" size="516 516" align="Left Top">
<Property key="NeedKey" value="true"/>
<Property key="SkinLine" value="MW_ListLine"/>
<Property key="HeightLine" value="18"/>
<Child type="Widget" skin="FullBlackBG" offset="0 0 516 516" align="Stretch"/>
<Child type="Widget" skin="MW_Box" offset="0 0 516 516" align="Stretch"/>

@ -48,7 +48,7 @@
</Widget>
</Widget>
<Widget type="HBox" position="0 28 566 24" align="Left Top HStretch">
<Widget type="HBox" position="0 28 566 28" align="Left Top HStretch">
<Widget type="Button" skin="MW_Button" position="0 0 40 24" name="DecreaseButton" align="Left Top">
<Property key="Caption" value="-"/>
<Property key="NeedKey" value="false"/>
@ -62,7 +62,7 @@
</Widget>
</Widget>
<Widget type="HBox" position="0 60 566 24" align="Left Bottom HStretch">
<Widget type="HBox" position="0 60 566 28" align="Left Bottom HStretch">
<Widget type="AutoSizedButton" skin="MW_Button" name="MaxSaleButton">
<Property key="Caption" value="#{sMaxSale}"/>
</Widget>

@ -156,10 +156,10 @@
<State name="normal" offset="0 0 8 8"/>
</BasisSkin>
</Resource>
<!-- Defines a owned background -->
<Resource type="ResourceSkin" name="DialogBG_NoTransp_Owned" size="8 8" texture="white">
<Property key="Colour" value="#{setting=GUI,color background owned}"/>
<Property key="Colour" value="#{setting=GUI,color background owned}"/>
<BasisSkin type="MainSkin" offset="0 0 8 8">
<State name="normal" offset="0 0 8 8"/>
</BasisSkin>
@ -443,7 +443,6 @@
<!-- The actual caption. It contains the edges of the blocks on
its sides as well -->
<Resource type="ResourceSkin" name="MW_Caption" size="88 20">
<Property key="FontName" value="Default"/>
<Property key="TextAlign" value="Center"/>
<Child type="Widget" skin="HB_ALL" offset="0 0 30 20" align="Default" name="Left"/>
@ -458,7 +457,6 @@
------------------------------------------------------ -->
<Resource type="ResourceSkin" name="MW_Window" size="256 256">
<Property key="FontName" value="Default"/>
<Property key="TextAlign" value="Center"/>
<Property key="Snap" value="true"/>
<Property key="MinSize" value="64 64"/>
@ -593,7 +591,6 @@
</Resource>
<Resource type="ResourceSkin" name="MW_Window_NoCaption" size="256 256">
<Property key="FontName" value="Default"/>
<Property key="TextAlign" value="Center"/>
<Property key="Snap" value="true"/>
<Property key="MinSize" value="64 64"/>
@ -730,7 +727,6 @@
</Resource>
<Resource type="ResourceSkin" name="MW_Window_Pinnable" size="256 256">
<Property key="FontName" value="Default"/>
<Property key="TextAlign" value="Center"/>
<Property key="Snap" value="true"/>
<Property key="MinSize" value="64 64"/>

@ -142,6 +142,12 @@ global = false
# Scales GUI window and widget size. (<1.0 is smaller, >1.0 is larger).
scaling factor = 1.0
# Size of in-game fonts
font size = 16
# Resolution of TrueType fonts glyphs
ttf resolution = 96
# Transparency of GUI windows (0.0 to 1.0, transparent to opaque).
menu transparency = 0.84

Loading…
Cancel
Save