Initial steps for icon buttons.
This commit is contained in:
parent
8130308f7f
commit
f2ab532005
17 changed files with 66 additions and 2 deletions
|
@ -96,11 +96,17 @@ void SvgPainter::setStyle(SceneModel* model, SvgShapeElement* element) const
|
||||||
if (model->hasFillColor())
|
if (model->hasFillColor())
|
||||||
{
|
{
|
||||||
element->setFill(model->getFillColor());
|
element->setFill(model->getFillColor());
|
||||||
|
auto opacity = static_cast<float>(model->getFillColor().getAlpha());
|
||||||
|
if (opacity != 1.0)
|
||||||
|
{
|
||||||
|
element->setFillOpacity(opacity);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
element->setNoFill();
|
element->setNoFill();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (model->hasOutlineColor())
|
if (model->hasOutlineColor())
|
||||||
{
|
{
|
||||||
element->setStrokeColor(model->getOutlineColor());
|
element->setStrokeColor(model->getOutlineColor());
|
||||||
|
@ -156,10 +162,18 @@ void SvgPainter::paintText(SvgDocument* document, SceneText* text) const
|
||||||
{
|
{
|
||||||
auto svg_text = std::make_unique<SvgTextElement>();
|
auto svg_text = std::make_unique<SvgTextElement>();
|
||||||
svg_text->setContent(text->getTextData().mContent);
|
svg_text->setContent(text->getTextData().mContent);
|
||||||
svg_text->setLocation(text->getTransform().getLocation());
|
auto loc = text->getTransform().getLocation();
|
||||||
|
loc.move(0.0, text->getTextHeight());
|
||||||
|
svg_text->setLocation(loc);
|
||||||
|
|
||||||
svg_text->setFontFamily(text->getTextData().mFont.getFaceName());
|
svg_text->setFontFamily(text->getTextData().mFont.getFaceName());
|
||||||
svg_text->setFill(text->getFillColor());
|
svg_text->setFill(text->getFillColor());
|
||||||
|
auto opacity = static_cast<float>(text->getFillColor().getAlpha());
|
||||||
|
if (opacity != 1.0)
|
||||||
|
{
|
||||||
|
svg_text->setFillOpacity(opacity);
|
||||||
|
}
|
||||||
|
|
||||||
svg_text->setFontSize(text->getTextData().mFont.getSize());
|
svg_text->setFontSize(text->getTextData().mFont.getSize());
|
||||||
|
|
||||||
document->getRoot()->addChild(std::move(svg_text));
|
document->getRoot()->addChild(std::move(svg_text));
|
||||||
|
|
|
@ -34,6 +34,8 @@ list(APPEND visual_elements_LIB_INCLUDES
|
||||||
svg/elements/SvgShapeElements.cpp
|
svg/elements/SvgShapeElements.cpp
|
||||||
nodes/MaterialNode.h
|
nodes/MaterialNode.h
|
||||||
nodes/MaterialNode.cpp
|
nodes/MaterialNode.cpp
|
||||||
|
nodes/ImageNode.h
|
||||||
|
nodes/ImageNode.cpp
|
||||||
nodes/MeshNode.h
|
nodes/MeshNode.h
|
||||||
nodes/MeshNode.cpp
|
nodes/MeshNode.cpp
|
||||||
nodes/TextNode.h
|
nodes/TextNode.h
|
||||||
|
|
0
src/rendering/visual_elements/nodes/ImageNode.cpp
Normal file
0
src/rendering/visual_elements/nodes/ImageNode.cpp
Normal file
0
src/rendering/visual_elements/nodes/ImageNode.h
Normal file
0
src/rendering/visual_elements/nodes/ImageNode.h
Normal file
|
@ -130,7 +130,13 @@ void SvgShapeElement::setStrokeWidth(double width)
|
||||||
{
|
{
|
||||||
auto attr = std::make_unique<XmlAttribute>("stroke-width");
|
auto attr = std::make_unique<XmlAttribute>("stroke-width");
|
||||||
attr->setValue(std::to_string(width));
|
attr->setValue(std::to_string(width));
|
||||||
|
addAttribute(std::move(attr));
|
||||||
|
}
|
||||||
|
|
||||||
|
void SvgShapeElement::setFillOpacity(float opacity)
|
||||||
|
{
|
||||||
|
auto attr = std::make_unique<XmlAttribute>("fill-opacity");
|
||||||
|
attr->setValue(std::to_string(opacity));
|
||||||
addAttribute(std::move(attr));
|
addAttribute(std::move(attr));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,8 @@ public:
|
||||||
|
|
||||||
void setNoFill();
|
void setNoFill();
|
||||||
|
|
||||||
|
void setFillOpacity(float opacity);
|
||||||
|
|
||||||
void setStrokeWidth(double width);
|
void setStrokeWidth(double width);
|
||||||
|
|
||||||
void setStrokeColor(const Color& stroke);
|
void setStrokeColor(const Color& stroke);
|
||||||
|
|
|
@ -10,6 +10,13 @@ SvgTextElement::SvgTextElement()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SvgTextElement::setFillOpacity(float opacity)
|
||||||
|
{
|
||||||
|
auto attr = std::make_unique<XmlAttribute>("fill-opacity");
|
||||||
|
attr->setValue(std::to_string(opacity));
|
||||||
|
addAttribute(std::move(attr));
|
||||||
|
}
|
||||||
|
|
||||||
void SvgTextElement::setLocation(const Point& loc)
|
void SvgTextElement::setLocation(const Point& loc)
|
||||||
{
|
{
|
||||||
auto x = std::make_unique<XmlAttribute>("x");
|
auto x = std::make_unique<XmlAttribute>("x");
|
||||||
|
|
|
@ -15,6 +15,8 @@ public:
|
||||||
|
|
||||||
void setFill(const Color& fill);
|
void setFill(const Color& fill);
|
||||||
|
|
||||||
|
void setFillOpacity(float opacity);
|
||||||
|
|
||||||
void setFontFamily(const std::string& family);
|
void setFontFamily(const std::string& family);
|
||||||
|
|
||||||
void setFontSize(float size);
|
void setFontSize(float size);
|
||||||
|
|
|
@ -62,16 +62,21 @@ void Button::setEnabled(bool isEnabled)
|
||||||
if (mEnabled != isEnabled)
|
if (mEnabled != isEnabled)
|
||||||
{
|
{
|
||||||
mEnabled = isEnabled;
|
mEnabled = isEnabled;
|
||||||
if (mStyle.mState == ButtonData::State::Disabled)
|
if (isEnabled && mStyle.mState == ButtonData::State::Disabled)
|
||||||
{
|
{
|
||||||
setState(ButtonData::State::Enabled);
|
setState(ButtonData::State::Enabled);
|
||||||
}
|
}
|
||||||
|
else if (!isEnabled && mStyle.mState == ButtonData::State::Enabled)
|
||||||
|
{
|
||||||
|
setState(ButtonData::State::Disabled);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Button::updateState()
|
void Button::updateState()
|
||||||
{
|
{
|
||||||
setBackground(mStyle.getContainerColor());
|
setBackground(mStyle.getContainerColor());
|
||||||
|
setBackgroundOpacity(mStyle.getStateLayerOverlayOpacity());
|
||||||
setBackgroundTone(mStyle.getContainerSurfaceTintColor());
|
setBackgroundTone(mStyle.getContainerSurfaceTintColor());
|
||||||
setElevation(mStyle.getContainerElevation());
|
setElevation(mStyle.getContainerElevation());
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
class PaintEvent;
|
class PaintEvent;
|
||||||
class MouseEvent;
|
class MouseEvent;
|
||||||
class TextNode;
|
class TextNode;
|
||||||
|
class IconNode;
|
||||||
|
|
||||||
class Button : public Widget
|
class Button : public Widget
|
||||||
{
|
{
|
||||||
|
@ -57,6 +58,8 @@ private:
|
||||||
std::unique_ptr<TextNode> mTextNode;
|
std::unique_ptr<TextNode> mTextNode;
|
||||||
bool mContentDirty{true};
|
bool mContentDirty{true};
|
||||||
|
|
||||||
|
std::unique_ptr<IconNode> mIconNode;
|
||||||
|
|
||||||
bool mEnabled{ true };
|
bool mEnabled{ true };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,10 @@ list(APPEND LIB_INCLUDES
|
||||||
style/FontTokens.cpp
|
style/FontTokens.cpp
|
||||||
style/ElevationTokens.h
|
style/ElevationTokens.h
|
||||||
style/OpacityTokens.h
|
style/OpacityTokens.h
|
||||||
|
style/MediaResources.h
|
||||||
|
style/MediaResources.cpp
|
||||||
|
style/MediaResourceManager.h
|
||||||
|
style/MediaResourceManager.cpp
|
||||||
IconNode.h
|
IconNode.h
|
||||||
IconNode.cpp
|
IconNode.cpp
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "AbstractVisualNode.h"
|
||||||
|
|
||||||
|
class IconNode
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
|
||||||
|
};
|
0
src/ui/ui_elements/style/MediaResourceManager.cpp
Normal file
0
src/ui/ui_elements/style/MediaResourceManager.cpp
Normal file
0
src/ui/ui_elements/style/MediaResourceManager.h
Normal file
0
src/ui/ui_elements/style/MediaResourceManager.h
Normal file
0
src/ui/ui_elements/style/MediaResources.cpp
Normal file
0
src/ui/ui_elements/style/MediaResources.cpp
Normal file
0
src/ui/ui_elements/style/MediaResources.h
Normal file
0
src/ui/ui_elements/style/MediaResources.h
Normal file
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include "ThemeManager.h"
|
#include "ThemeManager.h"
|
||||||
#include "PaintEvent.h"
|
#include "PaintEvent.h"
|
||||||
|
#include "MouseEvent.h"
|
||||||
|
|
||||||
#include "VerticalSpacer.h"
|
#include "VerticalSpacer.h"
|
||||||
|
|
||||||
|
@ -24,14 +25,23 @@ TEST_CASE(TestButton_Elevated, "ui_controls")
|
||||||
disabled_button->setEnabled(false);
|
disabled_button->setEnabled(false);
|
||||||
disabled_button->setLabel("Disabled");
|
disabled_button->setLabel("Disabled");
|
||||||
|
|
||||||
|
auto pressed_button = Button::Create(ButtonData::Component::Elevated);
|
||||||
|
pressed_button->setLabel("Pressed");
|
||||||
|
|
||||||
spacer.addWidget(std::move(enabled_button));
|
spacer.addWidget(std::move(enabled_button));
|
||||||
spacer.addWidget(std::move(disabled_button));
|
spacer.addWidget(std::move(disabled_button));
|
||||||
|
spacer.addWidget(std::move(pressed_button));
|
||||||
|
|
||||||
auto node = spacer.getRootNode();
|
auto node = spacer.getRootNode();
|
||||||
|
|
||||||
TestRenderer renderer;
|
TestRenderer renderer;
|
||||||
renderer.getScene()->addNode(node);
|
renderer.getScene()->addNode(node);
|
||||||
|
|
||||||
|
auto mouse_event = MouseEvent::Create();
|
||||||
|
mouse_event->setAction(MouseEvent::Action::Pressed);
|
||||||
|
mouse_event->setClientLocation({ 250, 20 });
|
||||||
|
spacer.onMouseEvent(mouse_event.get());
|
||||||
|
|
||||||
auto paint_event = PaintEvent::Create(theme_manager.get(), nullptr);
|
auto paint_event = PaintEvent::Create(theme_manager.get(), nullptr);
|
||||||
spacer.onPaintEvent(paint_event.get());
|
spacer.onPaintEvent(paint_event.get());
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue