Skip to content

Commit a1e3e5b

Browse files
committed
Added RoundedBorderRadius property to TextArea renderer
1 parent 9d45d7e commit a1e3e5b

File tree

7 files changed

+46
-9
lines changed

7 files changed

+46
-9
lines changed

changelog.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
TGUI 1.11 (TBD)
22
----------------
33

4-
- Added RoundedBorderRadius property to EditBox, ComboBox and Tabs renderers
4+
- Added RoundedBorderRadius property to EditBox, TextArea, ComboBox and Tabs renderers
55
- Added getLeftPlusRight and getTopPlusBottom functions to Outline class
66
- Added `TGUI_BUILD_CXX20_MODULE` option to CMake to build TGUI as a c++20 module
77
- EditBox and TextArea now support Ctrl+Backspace and Ctrl+Delete to delete words

gui-builder/include/WidgetProperties/TextAreaProperties.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ struct TextAreaProperties : WidgetProperties
7777
pair.second["CaretWidth"] = {"Float", tgui::String::fromNumber(renderer->getCaretWidth())};
7878
pair.second["TextureBackground"] = {"Texture", tgui::Serializer::serialize(renderer->getTextureBackground())};
7979
pair.second["ScrollbarWidth"] = {"Float", tgui::String::fromNumber(renderer->getScrollbarWidth())};
80+
pair.second["RoundedBorderRadius"] = {"Float", tgui::String::fromNumber(renderer->getRoundedBorderRadius())};
8081
return pair;
8182
}
8283
};

include/TGUI/Renderers/TextAreaRenderer.hpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,23 @@ namespace tgui
193193
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
194194
TGUI_NODISCARD float getCaretWidth() const;
195195

196+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
197+
/// @brief Changes the radius for the rounded corners if you want to draw a rounded rectangle as background
198+
/// @param radius Radius of the corners
199+
///
200+
/// @warning This property is ignored when textures are used as background
201+
///
202+
/// @since TGUI 1.11
203+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
204+
void setRoundedBorderRadius(float radius);
205+
206+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
207+
/// @brief Returns the radius for the rounded corners if you want to draw a rounded rectangle as background
208+
/// @return Radius of the corners
209+
/// @since TGUI 1.11
210+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
211+
TGUI_NODISCARD float getRoundedBorderRadius() const;
212+
196213
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
197214
/// @brief Sets the renderer data of the scrollbar
198215
///

include/TGUI/Widgets/TextArea.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -710,6 +710,7 @@ namespace tgui
710710
Color m_caretColorCached;
711711
Color m_selectedTextBackgroundColorCached;
712712
float m_caretWidthCached = 1;
713+
float m_roundedBorderRadiusCached = 0;
713714

714715
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
715716
};

src/Renderers/TextAreaRenderer.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ namespace tgui
4343
TGUI_RENDERER_PROPERTY_TEXTURE(TextAreaRenderer, TextureBackground)
4444

4545
TGUI_RENDERER_PROPERTY_NUMBER(TextAreaRenderer, CaretWidth, 1)
46+
TGUI_RENDERER_PROPERTY_NUMBER(TextAreaRenderer, RoundedBorderRadius, 0)
4647

4748
TGUI_RENDERER_PROPERTY_RENDERER(TextAreaRenderer, Scrollbar, "Scrollbar")
4849
TGUI_RENDERER_PROPERTY_NUMBER(TextAreaRenderer, ScrollbarWidth, 0)

src/Widgets/TextArea.cpp

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1957,6 +1957,10 @@ namespace tgui
19571957
{
19581958
m_caretWidthCached = getSharedRenderer()->getCaretWidth();
19591959
}
1960+
else if (property == U"RoundedBorderRadius")
1961+
{
1962+
m_roundedBorderRadiusCached = getSharedRenderer()->getRoundedBorderRadius();
1963+
}
19601964
else if ((property == U"Opacity") || (property == U"OpacityDisabled"))
19611965
{
19621966
Widget::rendererChanged(property);
@@ -2029,18 +2033,27 @@ namespace tgui
20292033
{
20302034
const RenderStates statesForScrollbar = states;
20312035

2032-
// Draw the borders
2033-
if (m_bordersCached != Borders{0})
2036+
if ((m_roundedBorderRadiusCached > 0) && !m_spriteBackground.isSet())
20342037
{
2035-
target.drawBorders(states, m_bordersCached, getSize(), Color::applyOpacity(m_borderColorCached, m_opacityCached));
2038+
target.drawRoundedRectangle(states, getSize(), Color::applyOpacity(m_backgroundColorCached, m_opacityCached),
2039+
m_roundedBorderRadiusCached, m_bordersCached, Color::applyOpacity(m_borderColorCached, m_opacityCached));
20362040
states.transform.translate(m_bordersCached.getOffset());
20372041
}
2038-
2039-
// Draw the background
2040-
if (m_spriteBackground.isSet())
2041-
target.drawSprite(states, m_spriteBackground);
20422042
else
2043-
target.drawFilledRect(states, getInnerSize(), Color::applyOpacity(m_backgroundColorCached, m_opacityCached));
2043+
{
2044+
// Draw the borders
2045+
if (m_bordersCached != Borders{0})
2046+
{
2047+
target.drawBorders(states, m_bordersCached, getSize(), Color::applyOpacity(m_borderColorCached, m_opacityCached));
2048+
states.transform.translate(m_bordersCached.getOffset());
2049+
}
2050+
2051+
// Draw the background
2052+
if (m_spriteBackground.isSet())
2053+
target.drawSprite(states, m_spriteBackground);
2054+
else
2055+
target.drawFilledRect(states, getInnerSize(), Color::applyOpacity(m_backgroundColorCached, m_opacityCached));
2056+
}
20442057

20452058
// Draw the contents of the text area
20462059
{

tests/Widgets/TextArea.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,7 @@ TEST_CASE("[TextArea]")
607607
REQUIRE_NOTHROW(renderer->setProperty("Borders", "(1, 2, 3, 4)"));
608608
REQUIRE_NOTHROW(renderer->setProperty("Padding", "(5, 6, 7, 8)"));
609609
REQUIRE_NOTHROW(renderer->setProperty("CaretWidth", "2"));
610+
REQUIRE_NOTHROW(renderer->setProperty("RoundedBorderRadius", "5"));
610611
REQUIRE_NOTHROW(renderer->setProperty("Scrollbar", "{ TrackColor = Red; ThumbColor = Blue; }"));
611612
REQUIRE_NOTHROW(renderer->setProperty("ScrollbarWidth", "15"));
612613
}
@@ -622,6 +623,7 @@ TEST_CASE("[TextArea]")
622623
REQUIRE_NOTHROW(renderer->setProperty("Borders", tgui::Borders{1, 2, 3, 4}));
623624
REQUIRE_NOTHROW(renderer->setProperty("Padding", tgui::Borders{5, 6, 7, 8}));
624625
REQUIRE_NOTHROW(renderer->setProperty("CaretWidth", 2));
626+
REQUIRE_NOTHROW(renderer->setProperty("RoundedBorderRadius", 5));
625627
REQUIRE_NOTHROW(renderer->setProperty("Scrollbar", scrollbarRenderer.getData()));
626628
REQUIRE_NOTHROW(renderer->setProperty("ScrollbarWidth", 15));
627629
}
@@ -637,6 +639,7 @@ TEST_CASE("[TextArea]")
637639
renderer->setBorders({1, 2, 3, 4});
638640
renderer->setPadding({5, 6, 7, 8});
639641
renderer->setCaretWidth(2);
642+
renderer->setRoundedBorderRadius(5);
640643
renderer->setScrollbar(scrollbarRenderer.getData());
641644
renderer->setScrollbarWidth(15);
642645
}
@@ -650,6 +653,7 @@ TEST_CASE("[TextArea]")
650653
REQUIRE(renderer->getProperty("Borders").getOutline() == tgui::Borders(1, 2, 3, 4));
651654
REQUIRE(renderer->getProperty("Padding").getOutline() == tgui::Borders(5, 6, 7, 8));
652655
REQUIRE(renderer->getProperty("CaretWidth").getNumber() == 2);
656+
REQUIRE(renderer->getProperty("RoundedBorderRadius").getNumber() == 5);
653657
REQUIRE(renderer->getProperty("ScrollbarWidth").getNumber() == 15);
654658

655659
REQUIRE(renderer->getScrollbar()->propertyValuePairs.size() == 2);

0 commit comments

Comments
 (0)