Added <lineSpacing> tag to text elements.

Accessable with TextComponent::setLineSpacing(float spacing) in C++.
This commit is contained in:
Aloshi 2014-05-14 17:01:40 -05:00
parent 7e5f161271
commit fe7f7f983b
7 changed files with 28 additions and 8 deletions

View file

@ -421,6 +421,7 @@ Can be created as an extra.
* `alignment` - type: STRING.
- Valid values are "left", "center", or "right". Controls alignment on the X axis. "center" will also align vertically.
* `forceUppercase` - type: BOOLEAN. Draw text in uppercase.
* `lineSpacing` - type: FLOAT. Controls the space between lines. Default is 1.5.
#### textlist

View file

@ -40,7 +40,8 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign::
("fontPath", PATH)
("fontSize", FLOAT)
("alignment", STRING)
("forceUppercase", BOOLEAN)))
("forceUppercase", BOOLEAN)
("lineSpacing", FLOAT)))
("textlist", makeMap(boost::assign::map_list_of
("pos", NORMALIZED_PAIR)
("size", NORMALIZED_PAIR)

View file

@ -36,6 +36,7 @@ namespace ThemeFlags
ALIGNMENT = 256,
TEXT = 512,
FORCE_UPPERCASE = 1024,
LINE_SPACING = 2048,
ALL = 0xFFFFFFFF
};

View file

@ -7,13 +7,13 @@
#include "../Settings.h"
TextComponent::TextComponent(Window* window) : GuiComponent(window),
mFont(Font::get(FONT_SIZE_MEDIUM)), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(ALIGN_LEFT)
mFont(Font::get(FONT_SIZE_MEDIUM)), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(ALIGN_LEFT), mLineSpacing(1.5f)
{
}
TextComponent::TextComponent(Window* window, const std::string& text, const std::shared_ptr<Font>& font, unsigned int color, Alignment align,
Eigen::Vector3f pos, Eigen::Vector2f size) : GuiComponent(window),
mFont(NULL), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(align)
mFont(NULL), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(align), mLineSpacing(1.5f)
{
setFont(font);
setColor(color);
@ -154,9 +154,9 @@ void TextComponent::onTextChanged()
text.append(abbrev);
mTextCache = std::shared_ptr<TextCache>(f->buildTextCache(text, Eigen::Vector2f(0, 0), (mColor >> 8 << 8) | mOpacity, mSize.x(), mAlignment));
mTextCache = std::shared_ptr<TextCache>(f->buildTextCache(text, Eigen::Vector2f(0, 0), (mColor >> 8 << 8) | mOpacity, mSize.x(), mAlignment, mLineSpacing));
}else{
mTextCache = std::shared_ptr<TextCache>(f->buildTextCache(f->wrapText(text, mSize.x()), Eigen::Vector2f(0, 0), (mColor >> 8 << 8) | mOpacity, mSize.x(), mAlignment));
mTextCache = std::shared_ptr<TextCache>(f->buildTextCache(f->wrapText(text, mSize.x()), Eigen::Vector2f(0, 0), (mColor >> 8 << 8) | mOpacity, mSize.x(), mAlignment, mLineSpacing));
}
}
@ -168,6 +168,18 @@ void TextComponent::onColorChanged()
}
}
void TextComponent::setAlignment(Alignment align)
{
mAlignment = align;
onTextChanged();
}
void TextComponent::setLineSpacing(float spacing)
{
mLineSpacing = spacing;
onTextChanged();
}
void TextComponent::setValue(const std::string& value)
{
setText(value);
@ -210,5 +222,8 @@ void TextComponent::applyTheme(const std::shared_ptr<ThemeData>& theme, const st
if(properties & FORCE_UPPERCASE && elem->has("forceUppercase"))
setUppercase(elem->get<bool>("forceUppercase"));
if(properties & LINE_SPACING && elem->has("lineSpacing"))
setLineSpacing(elem->get<float>("lineSpacing"));
setFont(Font::getFromTheme(elem, properties, mFont));
}

View file

@ -23,7 +23,8 @@ public:
void onSizeChanged() override;
void setText(const std::string& text);
void setColor(unsigned int color);
inline void setAlignment(Alignment align) { mAlignment = align; }
void setAlignment(Alignment align);
void setLineSpacing(float spacing);
void render(const Eigen::Affine3f& parentTrans) override;
@ -50,6 +51,7 @@ private:
std::string mText;
std::shared_ptr<TextCache> mTextCache;
Alignment mAlignment;
float mLineSpacing;
};
#endif

View file

@ -44,7 +44,7 @@ void GuiScraperStart::pressedStart()
if((*it)->getPlatformId() == PlatformIds::PLATFORM_UNKNOWN)
{
mWindow->pushGui(new GuiMsgBox(mWindow,
"Warning: some of your selected systems do not have a platform ID set. Results may be even more inaccurate than usual!\nContinue anyway?",
strToUpper("Warning: some of your selected systems do not have a platform ID set. Results may be even more inaccurate than usual!\nContinue anyway?"),
"YES", std::bind(&GuiScraperStart::start, this),
"NO", nullptr));
return;

View file

@ -107,7 +107,7 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr<ThemeData>& them
mDescContainer.applyTheme(theme, getName(), "md_description", POSITION | ThemeFlags::SIZE);
mDescription.setSize(mDescContainer.getSize().x(), 0);
mDescription.applyTheme(theme, getName(), "md_description", FONT_PATH | FONT_SIZE | COLOR | FORCE_UPPERCASE | ALIGNMENT);
mDescription.applyTheme(theme, getName(), "md_description", ALL ^ (POSITION | ThemeFlags::SIZE | TEXT));
}
void DetailedGameListView::initMDLabels()