Improve GUI scaling (bug #3288)

pull/1768/head
Andrei Kortunov 6 years ago
parent 6100e34051
commit adbaeb7cca

@ -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

@ -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;

@ -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;
@ -497,9 +499,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 +509,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 +532,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 +552,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 +562,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 +757,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
{

@ -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.

@ -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
@ -152,7 +154,7 @@ namespace MWGui
private:
int currentFontHeight() const;
TextStyle mTextStyle;
MyGUI::EditBox * mEditBox;
Gui::EditBox * mEditBox;
};
class ImageElement : public GraphicElement

@ -218,21 +218,24 @@ book JournalBooks::createQuestBook (const std::string& questName)
return typesetter->complete ();
}
book JournalBooks::createTopicIndexBook ()
book JournalBooks::createTopicIndexBook (int& columnsCount)
{
bool isRussian = (mEncoding == ToUTF8::WINDOWS_1251);
BookTypesetter::Ptr typesetter = isRussian ? createCyrillicJournalIndex() : createLatinJournalIndex();
BookTypesetter::Ptr typesetter = isRussian ? createCyrillicJournalIndex(columnsCount) : createLatinJournalIndex(columnsCount);
return typesetter->complete ();
}
BookTypesetter::Ptr JournalBooks::createLatinJournalIndex ()
BookTypesetter::Ptr JournalBooks::createLatinJournalIndex (int& columnsCount)
{
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.
columnsCount = 2;
char ch = 'A';
BookTypesetter::Style* body = typesetter->createStyle ("", MyGUI::Colour::Black);
@ -258,14 +261,25 @@ BookTypesetter::Ptr JournalBooks::createLatinJournalIndex ()
return typesetter;
}
BookTypesetter::Ptr JournalBooks::createCyrillicJournalIndex ()
BookTypesetter::Ptr JournalBooks::createCyrillicJournalIndex (int& columnsCount)
{
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;
columnsCount = 3;
if (fontHeight < 18)
{
sectionBreak = 15;
columnsCount = 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));

@ -22,14 +22,14 @@ namespace MWGui
Book createTopicBook (uintptr_t topicId);
Book createTopicBook (const std::string& topicId);
Book createQuestBook (const std::string& questName);
Book createTopicIndexBook ();
Book createTopicIndexBook (int& columnsCount);
ToUTF8::FromType mEncoding;
private:
BookTypesetter::Ptr createTypesetter ();
BookTypesetter::Ptr createLatinJournalIndex ();
BookTypesetter::Ptr createCyrillicJournalIndex ();
BookTypesetter::Ptr createLatinJournalIndex (int& columnsCount);
BookTypesetter::Ptr createCyrillicJournalIndex (int& columnsCount);
};
}

@ -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);
@ -462,11 +465,21 @@ namespace
{
setOptionsMode ();
int pagesCount;
if (!mTopicIndexBook)
mTopicIndexBook = createTopicIndexBook ();
mTopicIndexBook = createTopicIndexBook (pagesCount);
getPage (LeftTopicIndex)->showPage (mTopicIndexBook, 0);
getPage (RightTopicIndex)->showPage (mTopicIndexBook, 1);
if (pagesCount == 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 +493,7 @@ namespace
void notifyIndexLinkClicked (MWGui::TypesetBook::InteractiveId index)
{
setVisible (LeftTopicIndex, false);
setVisible (CenterTopicIndex, false);
setVisible (RightTopicIndex, false);
setVisible (TopicsList, true);
@ -502,6 +516,7 @@ namespace
mQuestMode = false;
mTopicsMode = false;
setVisible (LeftTopicIndex, true);
setVisible (CenterTopicIndex, true);
setVisible (RightTopicIndex, true);
setVisible (TopicsList, false);
setVisible (QuestsList, false);
@ -540,6 +555,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();

@ -44,7 +44,6 @@
#include <components/vfs/manager.hpp>
#include <components/widgets/widgets.hpp>
#include <components/widgets/tags.hpp>
#include <components/sdlutil/sdlcursormanager.hpp>
@ -196,6 +195,7 @@ namespace MWGui
, mFallbackMap(fallbackMap)
, mShowOwned(0)
, mEncoding(encoding)
, mFontHeight(16)
, mVersionDescription(versionDescription)
{
float uiScale = Settings::Manager::getFloat("scaling factor", "GUI");
@ -233,6 +233,13 @@ 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");
@ -284,6 +291,51 @@ namespace MWGui
mShowOwned = Settings::Manager::getInt("show owned", "Game");
}
void WindowManager::loadFontDelegate(MyGUI::xml::ElementPtr _node, const std::string& _file, MyGUI::Version _version)
{
MyGUI::xml::ElementEnumerator root = _node->getElementEnumerator();
while (root.next("Resource"))
{
std::string type, name;
root->findAttribute("type", type);
root->findAttribute("name", name);
if (name.empty())
continue;
if (Misc::StringUtils::ciEqual(type, "ResourceTrueTypeFont"))
{
// For TrueType fonts we should override Size and Resolution properties
// to allow to configure font size via config file, without need to edit XML file.
// Also we should take UI scaling factor in account
int resolution = Settings::Manager::getInt("ttf resolution", "GUI");
resolution = std::max(0, resolution);
float uiScale = Settings::Manager::getFloat("scaling factor", "GUI");
if (uiScale > 1.0f)
resolution *= uiScale;
MyGUI::xml::ElementPtr resolutionNode = root->createChild("Property");
resolutionNode->addAttribute("key", "Resolution");
resolutionNode->addAttribute("value", std::to_string(resolution));
MyGUI::xml::ElementPtr sizeNode = root->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 = root->createChild("Property");
heightNode->addAttribute("key", "HeightLine");
heightNode->addAttribute("value", std::to_string(mFontHeight+2));
}
}
MyGUI::ResourceManager::getInstance().loadFromXmlNode(_node, _file, _version);
}
void WindowManager::initUI()
{
// Get size info from the Gui object
@ -504,6 +556,11 @@ namespace MWGui
updateVisible();
}
int WindowManager::getFontHeight() const
{
return mFontHeight;
}
void WindowManager::setNewGame(bool newgame)
{
if (newgame)
@ -522,6 +579,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();

@ -246,6 +246,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();
@ -401,6 +402,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).
@ -513,6 +516,8 @@ namespace MWGui
ToUTF8::FromType mEncoding;
int mFontHeight;
std::string mVersionDescription;
MWGui::TextColours mTextColours;

@ -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

@ -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: > 0
: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 or lower 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" />

@ -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"/>

@ -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"/>

@ -59,8 +59,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 -->

@ -13,11 +13,9 @@
</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">

@ -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"/>

@ -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