@@ -8,33 +8,10 @@ namespace rack { | |||||
struct ZoomWidget : Widget { | struct ZoomWidget : Widget { | ||||
float zoom = 1.f; | float zoom = 1.f; | ||||
math::Vec getRelativeOffset(math::Vec v, Widget *relative) override { | |||||
return Widget::getRelativeOffset(v.mult(zoom), relative); | |||||
} | |||||
math::Rect getViewport(math::Rect r) override { | |||||
r.pos = r.pos.mult(zoom); | |||||
r.size = r.size.mult(zoom); | |||||
r = Widget::getViewport(r); | |||||
r.pos = r.pos.div(zoom); | |||||
r.size = r.size.div(zoom); | |||||
return r; | |||||
} | |||||
void setZoom(float zoom) { | |||||
this->zoom = zoom; | |||||
event::Context eZoomContext; | |||||
event::Zoom eZoom; | |||||
eZoom.context = &eZoomContext; | |||||
Widget::onZoom(eZoom); | |||||
} | |||||
void draw(NVGcontext *vg) override { | |||||
// No need to save the state because that is done in the parent | |||||
nvgScale(vg, zoom, zoom); | |||||
Widget::draw(vg); | |||||
} | |||||
math::Vec getRelativeOffset(math::Vec v, Widget *relative) override; | |||||
math::Rect getViewport(math::Rect r) override; | |||||
void setZoom(float zoom); | |||||
void draw(NVGcontext *vg) override; | |||||
void onHover(const event::Hover &e) override { | void onHover(const event::Hover &e) override { | ||||
event::Hover e2 = e; | event::Hover e2 = e; | ||||
@@ -6,6 +6,7 @@ | |||||
#include "app/RackScrollWidget.hpp" | #include "app/RackScrollWidget.hpp" | ||||
#include "app.hpp" | #include "app.hpp" | ||||
#include "history.hpp" | #include "history.hpp" | ||||
#include "settings.hpp" | |||||
#include <thread> | #include <thread> | ||||
@@ -52,6 +53,8 @@ void Scene::step() { | |||||
zoomWidget->box.size = rackWidget->box.size.mult(zoomWidget->zoom); | zoomWidget->box.size = rackWidget->box.size.mult(zoomWidget->zoom); | ||||
moduleBrowser->box.size = box.size; | moduleBrowser->box.size = box.size; | ||||
zoomWidget->setZoom(settings::zoom); | |||||
// Request latest version from server | // Request latest version from server | ||||
if (!devMode && checkVersion && !checkedVersion) { | if (!devMode && checkVersion && !checkedVersion) { | ||||
std::thread t(&Scene::runCheckVersion, this); | std::thread t(&Scene::runCheckVersion, this); | ||||
@@ -152,7 +152,6 @@ struct ZoomQuantity : Quantity { | |||||
void setDisplayValue(float displayValue) override {setValue(displayValue / 100.0);} | void setDisplayValue(float displayValue) override {setValue(displayValue / 100.0);} | ||||
std::string getLabel() override {return "Zoom";} | std::string getLabel() override {return "Zoom";} | ||||
std::string getUnit() override {return "%";} | std::string getUnit() override {return "%";} | ||||
int getDisplayPrecision() override {return 0;} | |||||
}; | }; | ||||
@@ -168,7 +167,6 @@ struct CableOpacityQuantity : Quantity { | |||||
void setDisplayValue(float displayValue) override {setValue(displayValue / 100.0);} | void setDisplayValue(float displayValue) override {setValue(displayValue / 100.0);} | ||||
std::string getLabel() override {return "Cable opacity";} | std::string getLabel() override {return "Cable opacity";} | ||||
std::string getUnit() override {return "%";} | std::string getUnit() override {return "%";} | ||||
int getDisplayPrecision() override {return 0;} | |||||
}; | }; | ||||
@@ -6,6 +6,7 @@ | |||||
namespace rack { | namespace rack { | ||||
Widget::~Widget() { | Widget::~Widget() { | ||||
// You should only delete orphaned widgets | // You should only delete orphaned widgets | ||||
assert(!parent); | assert(!parent); | ||||
@@ -0,0 +1,38 @@ | |||||
#include "widgets/ZoomWidget.hpp" | |||||
namespace rack { | |||||
math::Vec ZoomWidget::getRelativeOffset(math::Vec v, Widget *relative) { | |||||
return Widget::getRelativeOffset(v.mult(zoom), relative); | |||||
} | |||||
math::Rect ZoomWidget::getViewport(math::Rect r) { | |||||
r.pos = r.pos.mult(zoom); | |||||
r.size = r.size.mult(zoom); | |||||
r = Widget::getViewport(r); | |||||
r.pos = r.pos.div(zoom); | |||||
r.size = r.size.div(zoom); | |||||
return r; | |||||
} | |||||
void ZoomWidget::setZoom(float zoom) { | |||||
if (zoom == this->zoom) | |||||
return; | |||||
this->zoom = zoom; | |||||
event::Context eZoomContext; | |||||
event::Zoom eZoom; | |||||
eZoom.context = &eZoomContext; | |||||
Widget::onZoom(eZoom); | |||||
} | |||||
void ZoomWidget::draw(NVGcontext *vg) { | |||||
// No need to save the state because that is done in the parent | |||||
nvgScale(vg, zoom, zoom); | |||||
Widget::draw(vg); | |||||
} | |||||
} // namespace rack |