mirror of
https://github.com/RetroDECK/ES-DE.git
synced 2024-12-01 10:35:38 +00:00
Added a 'backgroundCornerRadius' property to the text element
This commit is contained in:
parent
fd40eb7545
commit
c8c601bcc9
|
@ -440,6 +440,7 @@ std::map<std::string, std::map<std::string, ThemeData::ElementPropertyType>>
|
||||||
{"color", COLOR},
|
{"color", COLOR},
|
||||||
{"backgroundColor", COLOR},
|
{"backgroundColor", COLOR},
|
||||||
{"backgroundMargins", NORMALIZED_PAIR},
|
{"backgroundMargins", NORMALIZED_PAIR},
|
||||||
|
{"backgroundCornerRadius", FLOAT},
|
||||||
{"letterCase", STRING},
|
{"letterCase", STRING},
|
||||||
{"lineSpacing", FLOAT},
|
{"lineSpacing", FLOAT},
|
||||||
{"opacity", FLOAT},
|
{"opacity", FLOAT},
|
||||||
|
|
|
@ -19,6 +19,7 @@ TextComponent::TextComponent()
|
||||||
, mColor {0x000000FF}
|
, mColor {0x000000FF}
|
||||||
, mBgColor {0x00000000}
|
, mBgColor {0x00000000}
|
||||||
, mBackgroundMargins {0.0f, 0.0f}
|
, mBackgroundMargins {0.0f, 0.0f}
|
||||||
|
, mBackgroundCornerRadius {0.0f}
|
||||||
, mColorOpacity {1.0f}
|
, mColorOpacity {1.0f}
|
||||||
, mBgColorOpacity {0.0f}
|
, mBgColorOpacity {0.0f}
|
||||||
, mRenderBackground {false}
|
, mRenderBackground {false}
|
||||||
|
@ -65,6 +66,7 @@ TextComponent::TextComponent(const std::string& text,
|
||||||
, mColor {0x000000FF}
|
, mColor {0x000000FF}
|
||||||
, mBgColor {0x00000000}
|
, mBgColor {0x00000000}
|
||||||
, mBackgroundMargins {0.0f, 0.0f}
|
, mBackgroundMargins {0.0f, 0.0f}
|
||||||
|
, mBackgroundCornerRadius {0.0f}
|
||||||
, mColorOpacity {1.0f}
|
, mColorOpacity {1.0f}
|
||||||
, mBgColorOpacity {0.0f}
|
, mBgColorOpacity {0.0f}
|
||||||
, mRenderBackground {false}
|
, mRenderBackground {false}
|
||||||
|
@ -251,9 +253,21 @@ void TextComponent::render(const glm::mat4& parentTrans)
|
||||||
|
|
||||||
auto renderFunc = [this](glm::mat4 trans, bool secondPass) {
|
auto renderFunc = [this](glm::mat4 trans, bool secondPass) {
|
||||||
if (mRenderBackground && !secondPass)
|
if (mRenderBackground && !secondPass)
|
||||||
mRenderer->drawRect(-mBackgroundMargins.x, 0.0f,
|
if (mBackgroundMargins.x > 0.0f) {
|
||||||
mSize.x + mBackgroundMargins.x + mBackgroundMargins.y, mSize.y,
|
trans = glm::translate(trans, glm::vec3 {-mBackgroundMargins.x, 0.0f, 0.0f});
|
||||||
mBgColor, mBgColor, false, mOpacity * mThemeOpacity, mDimming);
|
mRenderer->setMatrix(trans);
|
||||||
|
}
|
||||||
|
|
||||||
|
mRenderer->drawRect(0.0f, 0.0f, mSize.x + mBackgroundMargins.x + mBackgroundMargins.y,
|
||||||
|
mSize.y, mBgColor, mBgColor, false, mOpacity * mThemeOpacity, mDimming,
|
||||||
|
Renderer::BlendFactor::SRC_ALPHA,
|
||||||
|
Renderer::BlendFactor::ONE_MINUS_SRC_ALPHA, mBackgroundCornerRadius);
|
||||||
|
|
||||||
|
if (mBackgroundMargins.x > 0.0f) {
|
||||||
|
trans = glm::translate(trans, glm::vec3 {mBackgroundMargins.x, 0.0f, 0.0f});
|
||||||
|
mRenderer->setMatrix(trans);
|
||||||
|
}
|
||||||
|
|
||||||
if (mTextCache) {
|
if (mTextCache) {
|
||||||
const float textHeight {mTextCache->metrics.size.y};
|
const float textHeight {mTextCache->metrics.size.y};
|
||||||
float yOff {0.0f};
|
float yOff {0.0f};
|
||||||
|
@ -721,6 +735,18 @@ void TextComponent::applyTheme(const std::shared_ptr<ThemeData>& theme,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (elem->has("backgroundMargins")) {
|
||||||
|
const glm::vec2 backgroundMargins {
|
||||||
|
glm::clamp(elem->get<glm::vec2>("backgroundMargins"), 0.0f, 0.5f)};
|
||||||
|
mBackgroundMargins = backgroundMargins * Renderer::getScreenWidth();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (elem->has("backgroundCornerRadius")) {
|
||||||
|
mBackgroundCornerRadius =
|
||||||
|
glm::clamp(elem->get<float>("backgroundCornerRadius"), 0.0f, 0.5f) *
|
||||||
|
mRenderer->getScreenWidth();
|
||||||
|
}
|
||||||
|
|
||||||
if (properties & LETTER_CASE && elem->has("letterCaseSystemNameSuffix")) {
|
if (properties & LETTER_CASE && elem->has("letterCaseSystemNameSuffix")) {
|
||||||
const std::string& letterCase {elem->get<std::string>("letterCaseSystemNameSuffix")};
|
const std::string& letterCase {elem->get<std::string>("letterCaseSystemNameSuffix")};
|
||||||
if (letterCase == "uppercase") {
|
if (letterCase == "uppercase") {
|
||||||
|
@ -768,12 +794,6 @@ void TextComponent::applyTheme(const std::shared_ptr<ThemeData>& theme,
|
||||||
if (properties & LINE_SPACING && elem->has("lineSpacing"))
|
if (properties & LINE_SPACING && elem->has("lineSpacing"))
|
||||||
setLineSpacing(glm::clamp(elem->get<float>("lineSpacing"), 0.5f, 3.0f));
|
setLineSpacing(glm::clamp(elem->get<float>("lineSpacing"), 0.5f, 3.0f));
|
||||||
|
|
||||||
if (elem->has("backgroundMargins")) {
|
|
||||||
const glm::vec2 backgroundMargins {
|
|
||||||
glm::clamp(elem->get<glm::vec2>("backgroundMargins"), 0.0f, 0.5f)};
|
|
||||||
mBackgroundMargins = backgroundMargins * Renderer::getScreenWidth();
|
|
||||||
}
|
|
||||||
|
|
||||||
setFont(Font::getFromTheme(elem, properties, mFont, maxHeight));
|
setFont(Font::getFromTheme(elem, properties, mFont, maxHeight));
|
||||||
|
|
||||||
// We need to do this after setting the font as the scroll speed is calculated from its size.
|
// We need to do this after setting the font as the scroll speed is calculated from its size.
|
||||||
|
|
|
@ -156,6 +156,7 @@ private:
|
||||||
unsigned int mColor;
|
unsigned int mColor;
|
||||||
unsigned int mBgColor;
|
unsigned int mBgColor;
|
||||||
glm::vec2 mBackgroundMargins;
|
glm::vec2 mBackgroundMargins;
|
||||||
|
float mBackgroundCornerRadius;
|
||||||
float mColorOpacity;
|
float mColorOpacity;
|
||||||
float mBgColorOpacity;
|
float mBgColorOpacity;
|
||||||
bool mRenderBackground;
|
bool mRenderBackground;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
//
|
//
|
||||||
// ES-DE
|
// ES-DE Frontend
|
||||||
// Renderer.cpp
|
// Renderer.cpp
|
||||||
//
|
//
|
||||||
// Generic rendering functions.
|
// Generic rendering functions.
|
||||||
|
@ -466,7 +466,8 @@ void Renderer::drawRect(const float x,
|
||||||
const float opacity,
|
const float opacity,
|
||||||
const float dimming,
|
const float dimming,
|
||||||
const BlendFactor srcBlendFactor,
|
const BlendFactor srcBlendFactor,
|
||||||
const BlendFactor dstBlendFactor)
|
const BlendFactor dstBlendFactor,
|
||||||
|
const float cornerRadius)
|
||||||
{
|
{
|
||||||
Vertex vertices[4];
|
Vertex vertices[4];
|
||||||
|
|
||||||
|
@ -494,6 +495,11 @@ void Renderer::drawRect(const float x,
|
||||||
vertices->opacity = opacity;
|
vertices->opacity = opacity;
|
||||||
vertices->dimming = dimming;
|
vertices->dimming = dimming;
|
||||||
|
|
||||||
|
if (cornerRadius > 0.0f) {
|
||||||
|
vertices->shaderFlags = vertices->shaderFlags | Renderer::ShaderFlags::ROUNDED_CORNERS;
|
||||||
|
vertices->cornerRadius = cornerRadius;
|
||||||
|
}
|
||||||
|
|
||||||
bindTexture(0, 0);
|
bindTexture(0, 0);
|
||||||
drawTriangleStrips(vertices, 4, srcBlendFactor, dstBlendFactor);
|
drawTriangleStrips(vertices, 4, srcBlendFactor, dstBlendFactor);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
//
|
//
|
||||||
// ES-DE
|
// ES-DE Frontend
|
||||||
// Renderer.h
|
// Renderer.h
|
||||||
//
|
//
|
||||||
// Generic rendering functions.
|
// Generic rendering functions.
|
||||||
|
@ -174,10 +174,11 @@ public:
|
||||||
const unsigned int color,
|
const unsigned int color,
|
||||||
const unsigned int colorEnd,
|
const unsigned int colorEnd,
|
||||||
const bool horizontalGradient = false,
|
const bool horizontalGradient = false,
|
||||||
const float opacity = 1.0,
|
const float opacity = 1.0f,
|
||||||
const float dimming = 1.0,
|
const float dimming = 1.0f,
|
||||||
const BlendFactor srcBlendFactor = BlendFactor::SRC_ALPHA,
|
const BlendFactor srcBlendFactor = BlendFactor::SRC_ALPHA,
|
||||||
const BlendFactor dstBlendFactor = BlendFactor::ONE_MINUS_SRC_ALPHA);
|
const BlendFactor dstBlendFactor = BlendFactor::ONE_MINUS_SRC_ALPHA,
|
||||||
|
const float cornerRadius = 0.0f);
|
||||||
|
|
||||||
const glm::mat4& getProjectionMatrix() { return mProjectionMatrix; }
|
const glm::mat4& getProjectionMatrix() { return mProjectionMatrix; }
|
||||||
const glm::mat4& getProjectionMatrixNormal() { return mProjectionMatrixNormal; }
|
const glm::mat4& getProjectionMatrixNormal() { return mProjectionMatrixNormal; }
|
||||||
|
|
Loading…
Reference in a new issue