| @@ -3,7 +3,7 @@ | |||||
| #include <widget/TransparentWidget.hpp> | #include <widget/TransparentWidget.hpp> | ||||
| #include <widget/FramebufferWidget.hpp> | #include <widget/FramebufferWidget.hpp> | ||||
| #include <widget/SvgWidget.hpp> | #include <widget/SvgWidget.hpp> | ||||
| #include <context.hpp> | |||||
| #include <settings.hpp> | |||||
| namespace rack { | namespace rack { | ||||
| @@ -34,8 +34,16 @@ struct ThemedSvgPanel : SvgPanel { | |||||
| std::shared_ptr<window::Svg> lightSvg; | std::shared_ptr<window::Svg> lightSvg; | ||||
| std::shared_ptr<window::Svg> darkSvg; | std::shared_ptr<window::Svg> darkSvg; | ||||
| void step() override; | |||||
| void setBackground(std::shared_ptr<window::Svg> lightSvg, std::shared_ptr<window::Svg> darkSvg); | |||||
| void setBackground(std::shared_ptr<window::Svg> lightSvg, std::shared_ptr<window::Svg> darkSvg) { | |||||
| this->lightSvg = lightSvg; | |||||
| this->darkSvg = darkSvg; | |||||
| SvgPanel::setBackground(settings::preferDarkPanels ? darkSvg : lightSvg); | |||||
| } | |||||
| void step() override { | |||||
| SvgPanel::setBackground(settings::preferDarkPanels ? darkSvg : lightSvg); | |||||
| SvgPanel::step(); | |||||
| } | |||||
| }; | }; | ||||
| @@ -3,6 +3,7 @@ | |||||
| #include <widget/Widget.hpp> | #include <widget/Widget.hpp> | ||||
| #include <widget/FramebufferWidget.hpp> | #include <widget/FramebufferWidget.hpp> | ||||
| #include <widget/SvgWidget.hpp> | #include <widget/SvgWidget.hpp> | ||||
| #include <settings.hpp> | |||||
| namespace rack { | namespace rack { | ||||
| @@ -26,8 +27,16 @@ struct ThemedSvgScrew : SvgScrew { | |||||
| std::shared_ptr<window::Svg> lightSvg; | std::shared_ptr<window::Svg> lightSvg; | ||||
| std::shared_ptr<window::Svg> darkSvg; | std::shared_ptr<window::Svg> darkSvg; | ||||
| void step() override; | |||||
| void setSvg(std::shared_ptr<window::Svg> lightSvg, std::shared_ptr<window::Svg> darkSvg); | |||||
| void setSvg(std::shared_ptr<window::Svg> lightSvg, std::shared_ptr<window::Svg> darkSvg) { | |||||
| this->lightSvg = lightSvg; | |||||
| this->darkSvg = darkSvg; | |||||
| SvgScrew::setSvg(settings::preferDarkPanels ? darkSvg : lightSvg); | |||||
| } | |||||
| void step() override { | |||||
| SvgScrew::setSvg(settings::preferDarkPanels ? darkSvg : lightSvg); | |||||
| SvgScrew::step(); | |||||
| } | |||||
| }; | }; | ||||
| @@ -39,6 +39,7 @@ void SvgButton::addFrame(std::shared_ptr<window::Svg> svg) { | |||||
| // Move shadow downward by 10% | // Move shadow downward by 10% | ||||
| shadow->box.size = sw->box.size; | shadow->box.size = sw->box.size; | ||||
| shadow->box.pos = math::Vec(0, sw->box.size.y * 0.10); | shadow->box.pos = math::Vec(0, sw->box.size.y * 0.10); | ||||
| fb->setDirty(); | |||||
| } | } | ||||
| } | } | ||||
| @@ -49,7 +50,7 @@ void SvgButton::onDragStart(const DragStartEvent& e) { | |||||
| if (frames.size() >= 2) { | if (frames.size() >= 2) { | ||||
| sw->setSvg(frames[1]); | sw->setSvg(frames[1]); | ||||
| fb->dirty = true; | |||||
| fb->setDirty(); | |||||
| } | } | ||||
| } | } | ||||
| @@ -57,7 +58,7 @@ void SvgButton::onDragStart(const DragStartEvent& e) { | |||||
| void SvgButton::onDragEnd(const DragEndEvent& e) { | void SvgButton::onDragEnd(const DragEndEvent& e) { | ||||
| if (frames.size() >= 1) { | if (frames.size() >= 1) { | ||||
| sw->setSvg(frames[0]); | sw->setSvg(frames[0]); | ||||
| fb->dirty = true; | |||||
| fb->setDirty(); | |||||
| } | } | ||||
| } | } | ||||
| @@ -21,14 +21,24 @@ SvgKnob::SvgKnob() { | |||||
| } | } | ||||
| void SvgKnob::setSvg(std::shared_ptr<window::Svg> svg) { | void SvgKnob::setSvg(std::shared_ptr<window::Svg> svg) { | ||||
| if (svg == sw->svg) | |||||
| return; | |||||
| sw->setSvg(svg); | sw->setSvg(svg); | ||||
| tw->box.size = sw->box.size; | tw->box.size = sw->box.size; | ||||
| fb->box.size = sw->box.size; | fb->box.size = sw->box.size; | ||||
| box.size = sw->box.size; | box.size = sw->box.size; | ||||
| shadow->box.size = sw->box.size; | shadow->box.size = sw->box.size; | ||||
| // Move shadow downward by 10% | // Move shadow downward by 10% | ||||
| shadow->box.pos = math::Vec(0, sw->box.size.y * 0.10); | shadow->box.pos = math::Vec(0, sw->box.size.y * 0.10); | ||||
| // shadow->box = shadow->box.grow(math::Vec(2, 2)); | // shadow->box = shadow->box.grow(math::Vec(2, 2)); | ||||
| fb->setDirty(); | |||||
| // Dispatch ChangeEvent | |||||
| ChangeEvent eChange; | |||||
| onChange(eChange); | |||||
| } | } | ||||
| void SvgKnob::onChange(const ChangeEvent& e) { | void SvgKnob::onChange(const ChangeEvent& e) { | ||||
| @@ -56,7 +66,7 @@ void SvgKnob::onChange(const ChangeEvent& e) { | |||||
| tw->translate(center); | tw->translate(center); | ||||
| tw->rotate(angle); | tw->rotate(angle); | ||||
| tw->translate(center.neg()); | tw->translate(center.neg()); | ||||
| fb->dirty = true; | |||||
| fb->setDirty(); | |||||
| } | } | ||||
| Knob::onChange(e); | Knob::onChange(e); | ||||
| } | } | ||||
| @@ -1,5 +1,5 @@ | |||||
| #include <app/SvgPanel.hpp> | #include <app/SvgPanel.hpp> | ||||
| #include <settings.hpp> | |||||
| #include <context.hpp> | |||||
| namespace rack { | namespace rack { | ||||
| @@ -40,31 +40,20 @@ void SvgPanel::step() { | |||||
| Widget::step(); | Widget::step(); | ||||
| } | } | ||||
| void SvgPanel::setBackground(std::shared_ptr<window::Svg> svg) { | void SvgPanel::setBackground(std::shared_ptr<window::Svg> svg) { | ||||
| if (svg == this->svg) | if (svg == this->svg) | ||||
| return; | return; | ||||
| this->svg = svg; | this->svg = svg; | ||||
| sw->setSvg(svg); | sw->setSvg(svg); | ||||
| fb->setDirty(); | |||||
| // Round framebuffer size to nearest grid | // Round framebuffer size to nearest grid | ||||
| fb->box.size = sw->box.size.div(RACK_GRID_SIZE).round().mult(RACK_GRID_SIZE); | fb->box.size = sw->box.size.div(RACK_GRID_SIZE).round().mult(RACK_GRID_SIZE); | ||||
| panelBorder->box.size = fb->box.size; | panelBorder->box.size = fb->box.size; | ||||
| box.size = fb->box.size; | box.size = fb->box.size; | ||||
| } | |||||
| void ThemedSvgPanel::step() { | |||||
| SvgPanel::setBackground(settings::preferDarkPanels ? darkSvg : lightSvg); | |||||
| SvgPanel::step(); | |||||
| } | |||||
| void ThemedSvgPanel::setBackground(std::shared_ptr<window::Svg> lightSvg, std::shared_ptr<window::Svg> darkSvg) { | |||||
| this->lightSvg = lightSvg; | |||||
| this->darkSvg = darkSvg; | |||||
| SvgPanel::setBackground(settings::preferDarkPanels ? darkSvg : lightSvg); | |||||
| fb->setDirty(); | |||||
| } | } | ||||
| @@ -20,14 +20,18 @@ SvgPort::SvgPort() { | |||||
| } | } | ||||
| void SvgPort::setSvg(std::shared_ptr<window::Svg> svg) { | void SvgPort::setSvg(std::shared_ptr<window::Svg> svg) { | ||||
| if (svg == sw->svg) | |||||
| return; | |||||
| sw->setSvg(svg); | sw->setSvg(svg); | ||||
| fb->box.size = sw->box.size; | fb->box.size = sw->box.size; | ||||
| box.size = sw->box.size; | box.size = sw->box.size; | ||||
| // Move shadow downward by 10% | // Move shadow downward by 10% | ||||
| shadow->box.size = sw->box.size; | shadow->box.size = sw->box.size; | ||||
| shadow->box.pos = math::Vec(0, sw->box.size.y * 0.10); | shadow->box.pos = math::Vec(0, sw->box.size.y * 0.10); | ||||
| fb->dirty = true; | |||||
| fb->setDirty(); | |||||
| } | } | ||||
| @@ -20,23 +20,10 @@ void SvgScrew::setSvg(std::shared_ptr<window::Svg> svg) { | |||||
| return; | return; | ||||
| sw->setSvg(svg); | sw->setSvg(svg); | ||||
| fb->setDirty(); | |||||
| fb->box.size = sw->box.size; | fb->box.size = sw->box.size; | ||||
| box.size = sw->box.size; | box.size = sw->box.size; | ||||
| } | |||||
| void ThemedSvgScrew::step() { | |||||
| SvgScrew::setSvg(settings::preferDarkPanels ? darkSvg : lightSvg); | |||||
| SvgScrew::step(); | |||||
| } | |||||
| void ThemedSvgScrew::setSvg(std::shared_ptr<window::Svg> lightSvg, std::shared_ptr<window::Svg> darkSvg) { | |||||
| this->lightSvg = lightSvg; | |||||
| this->darkSvg = darkSvg; | |||||
| SvgScrew::setSvg(settings::preferDarkPanels ? darkSvg : lightSvg); | |||||
| fb->setDirty(); | |||||
| } | } | ||||
| @@ -20,17 +20,31 @@ SvgSlider::SvgSlider() { | |||||
| void SvgSlider::setBackgroundSvg(std::shared_ptr<window::Svg> svg) { | void SvgSlider::setBackgroundSvg(std::shared_ptr<window::Svg> svg) { | ||||
| if (svg == background->svg) | |||||
| return; | |||||
| background->setSvg(svg); | background->setSvg(svg); | ||||
| box.size = background->box.size; | box.size = background->box.size; | ||||
| fb->box.size = background->box.size; | fb->box.size = background->box.size; | ||||
| fb->setDirty(); | fb->setDirty(); | ||||
| // Dispatch ChangeEvent | |||||
| ChangeEvent eChange; | |||||
| onChange(eChange); | |||||
| } | } | ||||
| void SvgSlider::setHandleSvg(std::shared_ptr<window::Svg> svg) { | void SvgSlider::setHandleSvg(std::shared_ptr<window::Svg> svg) { | ||||
| if (svg == handle->svg) | |||||
| return; | |||||
| handle->setSvg(svg); | handle->setSvg(svg); | ||||
| handle->box.pos = minHandlePos; | handle->box.pos = minHandlePos; | ||||
| fb->setDirty(); | fb->setDirty(); | ||||
| // Dispatch ChangeEvent | |||||
| ChangeEvent eChange; | |||||
| onChange(eChange); | |||||
| } | } | ||||
| @@ -38,7 +52,7 @@ void SvgSlider::setHandlePos(math::Vec minHandlePos, math::Vec maxHandlePos) { | |||||
| this->minHandlePos = minHandlePos; | this->minHandlePos = minHandlePos; | ||||
| this->maxHandlePos = maxHandlePos; | this->maxHandlePos = maxHandlePos; | ||||
| // Dispatch ChangeEvent since the handle position changed | |||||
| // Dispatch ChangeEvent | |||||
| ChangeEvent eChange; | ChangeEvent eChange; | ||||
| onChange(eChange); | onChange(eChange); | ||||
| } | } | ||||