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