💥 Replaced ArrowUp and ArrowDown in ComboBox by a single Arrow property

0.8
Bruno Van de Velde 2017-09-23 14:40:58 +02:00
parent 3388c98a79
commit a223933ab7
9 changed files with 59 additions and 162 deletions

View File

@ -245,79 +245,40 @@ namespace tgui
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Changes the image of the up arrow
/// @brief Changes the image of the arrow
///
/// @param texture The new up arrow texture
///
/// When this image and the down image are set, the arrow color properties will be ignored.
/// @param texture The new arrow texture
///
/// When this image is set, the arrow color properties will be ignored.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void setTextureArrowUp(const Texture& texture);
void setTextureArrow(const Texture& texture);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Returns the image of the up arrow
/// @brief Returns the image of the arrow
///
/// @return Up arrow texture
/// @return Arrow texture
///
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Texture& getTextureArrowUp() const;
Texture& getTextureArrow() const;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Changes the image of the up arrow that is displayed when the mouse is on top of it
/// @brief Changes the image of the arrow that is displayed when the mouse is on top of it
///
/// @param texture The new hover up arrow texture
/// @param texture The new hover arrow texture
///
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void setTextureArrowUpHover(const Texture& texture);
void setTextureArrowHover(const Texture& texture);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Returns the image of the up arrow that is displayed when the mouse is on top of it
/// @brief Returns the image of the arrow that is displayed when the mouse is on top of it
///
/// @return Hover up arrow texture
/// @return Hover arrow texture
///
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Texture& getTextureArrowUpHover() const;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Changes the image of the down arrow
///
/// @param texture The new down arrow texture
///
/// When this image and the up image are set, the arrow color properties will be ignored.
///
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void setTextureArrowDown(const Texture& texture);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Returns the image of the down arrow
///
/// @return Down arrow texture
///
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Texture& getTextureArrowDown() const;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Changes the image of the down arrow that is displayed when the mouse is on top of it
///
/// @param texture The new hover down arrow texture
///
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void setTextureArrowDownHover(const Texture& texture);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Returns the image of the down arrow that is displayed when the mouse is on top of it
///
/// @return Hover down arrow texture
///
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Texture& getTextureArrowDownHover() const;
Texture& getTextureArrowHover() const;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -591,10 +591,8 @@ namespace tgui
ExpandDirection m_expandDirection = ExpandDirection::Down;
Sprite m_spriteBackground;
Sprite m_spriteArrowUp;
Sprite m_spriteArrowDown;
Sprite m_spriteArrowUpHover;
Sprite m_spriteArrowDownHover;
Sprite m_spriteArrow;
Sprite m_spriteArrowHover;
// Cached renderer properties
Borders m_bordersCached;

View File

@ -42,10 +42,8 @@ namespace tgui
TGUI_RENDERER_PROPERTY_COLOR(ComboBoxRenderer, BorderColor, sf::Color::Black)
TGUI_RENDERER_PROPERTY_TEXTURE(ComboBoxRenderer, TextureBackground)
TGUI_RENDERER_PROPERTY_TEXTURE(ComboBoxRenderer, TextureArrowUp)
TGUI_RENDERER_PROPERTY_TEXTURE(ComboBoxRenderer, TextureArrowUpHover)
TGUI_RENDERER_PROPERTY_TEXTURE(ComboBoxRenderer, TextureArrowDown)
TGUI_RENDERER_PROPERTY_TEXTURE(ComboBoxRenderer, TextureArrowDownHover)
TGUI_RENDERER_PROPERTY_TEXTURE(ComboBoxRenderer, TextureArrow)
TGUI_RENDERER_PROPERTY_TEXTURE(ComboBoxRenderer, TextureArrowHover)
TGUI_RENDERER_PROPERTY_TEXT_STYLE(ComboBoxRenderer, TextStyle, sf::Text::Regular)

View File

@ -58,10 +58,8 @@ namespace tgui
m_text {other.m_text},
m_expandDirection {other.m_expandDirection},
m_spriteBackground {other.m_spriteBackground},
m_spriteArrowUp {other.m_spriteArrowUp},
m_spriteArrowDown {other.m_spriteArrowDown},
m_spriteArrowUpHover {other.m_spriteArrowUpHover},
m_spriteArrowDownHover {other.m_spriteArrowDownHover},
m_spriteArrow {other.m_spriteArrow},
m_spriteArrowHover {other.m_spriteArrowHover},
m_bordersCached {other.m_bordersCached},
m_paddingCached {other.m_paddingCached},
m_borderColorCached {other.m_borderColorCached},
@ -84,10 +82,8 @@ namespace tgui
m_text {std::move(other.m_text)},
m_expandDirection {std::move(other.m_expandDirection)},
m_spriteBackground {std::move(other.m_spriteBackground)},
m_spriteArrowUp {std::move(other.m_spriteArrowUp)},
m_spriteArrowDown {std::move(other.m_spriteArrowDown)},
m_spriteArrowUpHover {std::move(other.m_spriteArrowUpHover)},
m_spriteArrowDownHover {std::move(other.m_spriteArrowDownHover)},
m_spriteArrow {std::move(other.m_spriteArrow)},
m_spriteArrowHover {std::move(other.m_spriteArrowHover)},
m_bordersCached {std::move(other.m_bordersCached)},
m_paddingCached {std::move(other.m_paddingCached)},
m_borderColorCached {std::move(other.m_borderColorCached)},
@ -115,10 +111,8 @@ namespace tgui
std::swap(m_text, temp.m_text);
std::swap(m_expandDirection, temp.m_expandDirection);
std::swap(m_spriteBackground, temp.m_spriteBackground);
std::swap(m_spriteArrowUp, temp.m_spriteArrowUp);
std::swap(m_spriteArrowDown, temp.m_spriteArrowDown);
std::swap(m_spriteArrowUpHover, temp.m_spriteArrowUpHover);
std::swap(m_spriteArrowDownHover, temp.m_spriteArrowDownHover);
std::swap(m_spriteArrow, temp.m_spriteArrow);
std::swap(m_spriteArrowHover, temp.m_spriteArrowHover);
std::swap(m_bordersCached, temp.m_bordersCached);
std::swap(m_paddingCached, temp.m_paddingCached);
std::swap(m_borderColorCached, temp.m_borderColorCached);
@ -145,10 +139,8 @@ namespace tgui
m_text = std::move(other.m_text);
m_expandDirection = std::move(other.m_expandDirection);
m_spriteBackground = std::move(other.m_spriteBackground);
m_spriteArrowUp = std::move(other.m_spriteArrowUp);
m_spriteArrowDown = std::move(other.m_spriteArrowDown);
m_spriteArrowUpHover = std::move(other.m_spriteArrowUpHover);
m_spriteArrowDownHover = std::move(other.m_spriteArrowDownHover);
m_spriteArrow = std::move(other.m_spriteArrow);
m_spriteArrowHover = std::move(other.m_spriteArrowHover);
m_bordersCached = std::move(other.m_bordersCached);
m_paddingCached = std::move(other.m_paddingCached);
m_borderColorCached = std::move(other.m_borderColorCached);
@ -226,13 +218,10 @@ namespace tgui
updateListBoxHeight();
}
if (m_spriteArrowUp.isSet() && m_spriteArrowDown.isSet())
if (m_spriteArrow.isSet())
{
m_spriteArrowUp.setSize({m_spriteArrowUp.getTexture().getImageSize().x * (height / m_spriteArrowUp.getTexture().getImageSize().y), height});
m_spriteArrowDown.setSize({m_spriteArrowDown.getTexture().getImageSize().x * (height / m_spriteArrowDown.getTexture().getImageSize().y), height});
m_spriteArrowUpHover.setSize(m_spriteArrowUp.getSize());
m_spriteArrowDownHover.setSize(m_spriteArrowDown.getSize());
m_spriteArrow.setSize({m_spriteArrow.getTexture().getImageSize().x * (height / m_spriteArrow.getTexture().getImageSize().y), height});
m_spriteArrowHover.setSize(m_spriteArrow.getSize());
}
m_text.setCharacterSize(m_listBox->getTextSize());
@ -574,23 +563,14 @@ namespace tgui
{
m_spriteBackground.setTexture(getSharedRenderer()->getTextureBackground());
}
else if (property == "texturearrowup")
else if (property == "texturearrow")
{
m_spriteArrowUp.setTexture(getSharedRenderer()->getTextureArrowUp());
m_spriteArrow.setTexture(getSharedRenderer()->getTextureArrow());
setSize(m_size);
}
else if (property == "texturearrowuphover")
else if (property == "texturearrowhover")
{
m_spriteArrowUpHover.setTexture(getSharedRenderer()->getTextureArrowUpHover());
}
else if (property == "texturearrowdown")
{
m_spriteArrowDown.setTexture(getSharedRenderer()->getTextureArrowDown());
setSize(m_size);
}
else if (property == "texturearrowdownhover")
{
m_spriteArrowDownHover.setTexture(getSharedRenderer()->getTextureArrowDownHover());
m_spriteArrowHover.setTexture(getSharedRenderer()->getTextureArrowHover());
}
else if (property == "listbox")
{
@ -625,10 +605,8 @@ namespace tgui
Widget::rendererChanged(property);
m_spriteBackground.setOpacity(m_opacityCached);
m_spriteArrowUp.setOpacity(m_opacityCached);
m_spriteArrowUpHover.setOpacity(m_opacityCached);
m_spriteArrowDown.setOpacity(m_opacityCached);
m_spriteArrowDownHover.setOpacity(m_opacityCached);
m_spriteArrow.setOpacity(m_opacityCached);
m_spriteArrowHover.setOpacity(m_opacityCached);
m_text.setOpacity(m_opacityCached);
}
@ -752,31 +730,17 @@ namespace tgui
else
drawRectangleShape(target, states, getInnerSize(), m_backgroundColorCached);
// Check if we have textures for the arrow
// Check if we have a texture for the arrow
float arrowSize;
if (m_spriteArrowUp.isSet() && m_spriteArrowDown.isSet())
if (m_spriteArrow.isSet())
{
// Set the arrow like it should (down when list box is invisible, up when it is visible)
if (m_listBox->isVisible())
{
arrowSize = m_spriteArrowUp.getSize().x;
states.transform.translate({getInnerSize().x - m_paddingCached.getRight() - arrowSize, m_paddingCached.getTop()});
arrowSize = m_spriteArrow.getSize().x;
states.transform.translate({getInnerSize().x - m_paddingCached.getRight() - arrowSize, m_paddingCached.getTop()});
if (m_mouseHover && m_spriteArrowUpHover.isSet())
m_spriteArrowUpHover.draw(target, states);
else
m_spriteArrowUp.draw(target, states);
}
if (m_mouseHover && m_spriteArrowHover.isSet())
m_spriteArrowHover.draw(target, states);
else
{
arrowSize = m_spriteArrowDown.getSize().x;
states.transform.translate({getInnerSize().x - m_paddingCached.getRight() - arrowSize, m_paddingCached.getTop()});
if (m_mouseHover && m_spriteArrowDownHover.isSet())
m_spriteArrowDownHover.draw(target, states);
else
m_spriteArrowDown.draw(target, states);
}
m_spriteArrow.draw(target, states);
}
else // There are no textures for the arrow
{
@ -789,18 +753,9 @@ namespace tgui
drawRectangleShape(target, states, {arrowSize, arrowSize}, m_arrowBackgroundColorCached);
sf::ConvexShape arrow{3};
if (m_listBox->isVisible())
{
arrow.setPoint(0, {arrowSize / 5, arrowSize * 4/5});
arrow.setPoint(1, {arrowSize / 2, arrowSize / 5});
arrow.setPoint(2, {arrowSize * 4/5, arrowSize * 4/5});
}
else // The listbox is not visible, the arrow points down
{
arrow.setPoint(0, {arrowSize / 5, arrowSize / 5});
arrow.setPoint(1, {arrowSize / 2, arrowSize * 4/5});
arrow.setPoint(2, {arrowSize * 4/5, arrowSize / 5});
}
arrow.setPoint(0, {arrowSize / 5, arrowSize / 5});
arrow.setPoint(1, {arrowSize / 2, arrowSize * 4/5});
arrow.setPoint(2, {arrowSize * 4/5, arrowSize / 5});
if (m_mouseHover && m_arrowColorHoverCached.isSet())
arrow.setFillColor(m_arrowColorHoverCached);

View File

@ -306,49 +306,37 @@ TEST_CASE("[ComboBox]")
SECTION("textured")
{
tgui::Texture textureBackground("resources/Black.png", {0, 154, 48, 48}, {16, 16, 16, 16});
tgui::Texture textureArrowUp("resources/Black.png", {60, 0, 32, 32});
tgui::Texture textureArrowUpHover("resources/Black.png", {60, 32, 32, 32});
tgui::Texture textureArrowDown("resources/Black.png", {92, 0, 32, 32});
tgui::Texture textureArrowDownHover("resources/Black.png", {92, 32, 32, 32});
tgui::Texture textureArrow("resources/Black.png", {92, 0, 32, 32});
tgui::Texture textureArrowHover("resources/Black.png", {92, 32, 32, 32});
SECTION("set serialized property")
{
REQUIRE_NOTHROW(renderer->setProperty("TextureBackground", tgui::Serializer::serialize(textureBackground)));
REQUIRE_NOTHROW(renderer->setProperty("TextureArrowUp", tgui::Serializer::serialize(textureArrowUp)));
REQUIRE_NOTHROW(renderer->setProperty("TextureArrowUpHover", tgui::Serializer::serialize(textureArrowUpHover)));
REQUIRE_NOTHROW(renderer->setProperty("TextureArrowDown", tgui::Serializer::serialize(textureArrowDown)));
REQUIRE_NOTHROW(renderer->setProperty("TextureArrowDownHover", tgui::Serializer::serialize(textureArrowDownHover)));
REQUIRE_NOTHROW(renderer->setProperty("TextureArrow", tgui::Serializer::serialize(textureArrow)));
REQUIRE_NOTHROW(renderer->setProperty("TextureArrowHover", tgui::Serializer::serialize(textureArrowHover)));
}
SECTION("set object property")
{
REQUIRE_NOTHROW(renderer->setProperty("TextureBackground", textureBackground));
REQUIRE_NOTHROW(renderer->setProperty("TextureArrowUp", textureArrowUp));
REQUIRE_NOTHROW(renderer->setProperty("TextureArrowUpHover", textureArrowUpHover));
REQUIRE_NOTHROW(renderer->setProperty("TextureArrowDown", textureArrowDown));
REQUIRE_NOTHROW(renderer->setProperty("TextureArrowDownHover", textureArrowDownHover));
REQUIRE_NOTHROW(renderer->setProperty("TextureArrow", textureArrow));
REQUIRE_NOTHROW(renderer->setProperty("TextureArrowHover", textureArrowHover));
}
SECTION("functions")
{
renderer->setTextureBackground(textureBackground);
renderer->setTextureArrowUp(textureArrowUp);
renderer->setTextureArrowUpHover(textureArrowUpHover);
renderer->setTextureArrowDown(textureArrowDown);
renderer->setTextureArrowDownHover(textureArrowDownHover);
renderer->setTextureArrow(textureArrow);
renderer->setTextureArrowHover(textureArrowHover);
}
REQUIRE(renderer->getProperty("TextureBackground").getTexture().getData() != nullptr);
REQUIRE(renderer->getProperty("TextureArrowUp").getTexture().getData() != nullptr);
REQUIRE(renderer->getProperty("TextureArrowUpHover").getTexture().getData() != nullptr);
REQUIRE(renderer->getProperty("TextureArrowDown").getTexture().getData() != nullptr);
REQUIRE(renderer->getProperty("TextureArrowDownHover").getTexture().getData() != nullptr);
REQUIRE(renderer->getProperty("TextureArrow").getTexture().getData() != nullptr);
REQUIRE(renderer->getProperty("TextureArrowHover").getTexture().getData() != nullptr);
REQUIRE(renderer->getTextureBackground().getData() == textureBackground.getData());
REQUIRE(renderer->getTextureArrowUp().getData() == textureArrowUp.getData());
REQUIRE(renderer->getTextureArrowUpHover().getData() == textureArrowUpHover.getData());
REQUIRE(renderer->getTextureArrowDown().getData() == textureArrowDown.getData());
REQUIRE(renderer->getTextureArrowDownHover().getData() == textureArrowDownHover.getData());
REQUIRE(renderer->getTextureArrow().getData() == textureArrow.getData());
REQUIRE(renderer->getTextureArrowHover().getData() == textureArrowHover.getData());
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 35 KiB

View File

@ -50,8 +50,7 @@ ChildWindow {
}
ComboBox {
TextureArrowUp = "BabyBlue.png" Part(199, 2, 20, 26);
TextureArrowDown = "BabyBlue.png" Part(177, 2, 20, 26);
TextureArrow = "BabyBlue.png" Part(177, 2, 20, 26);
BackgroundColor = rgb(210, 210, 210);
TextColor = rgb(100, 100, 100);
BorderColor = White;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 45 KiB

View File

@ -48,10 +48,8 @@ ChildWindow {
ComboBox {
TextureBackground = "Black.png" Part(0, 154, 48, 48) Middle(16, 16, 16, 16);
TextureArrowDown = "Black.png" Part(60, 0, 32, 32);
TextureArrowDownHover = "Black.png" Part(60, 32, 32, 32);
TextureArrowUp = "Black.png" Part(92, 0, 32, 32);
TextureArrowUpHover = "Black.png" Part(92, 32, 32, 32);
TextureArrow = "Black.png" Part(60, 0, 32, 32);
TextureArrowHover = "Black.png" Part(60, 32, 32, 32);
TextColor = rgb(190, 190, 190);
Padding = (3, 3, 3, 3);
ListBox = &ListBox;