@@ -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); | ||||
} | } | ||||