Browse Source

Fix zoom. Move ZoomWidget implementation to source file.

tags/v1.0.0
Andrew Belt 6 years ago
parent
commit
de240c231a
5 changed files with 46 additions and 29 deletions
  1. +4
    -27
      include/widgets/ZoomWidget.hpp
  2. +3
    -0
      src/app/Scene.cpp
  3. +0
    -2
      src/app/Toolbar.cpp
  4. +1
    -0
      src/widgets/Widget.cpp
  5. +38
    -0
      src/widgets/ZoomWidget.cpp

+ 4
- 27
include/widgets/ZoomWidget.hpp View File

@@ -8,33 +8,10 @@ namespace rack {
struct ZoomWidget : Widget {
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 {
event::Hover e2 = e;


+ 3
- 0
src/app/Scene.cpp View File

@@ -6,6 +6,7 @@
#include "app/RackScrollWidget.hpp"
#include "app.hpp"
#include "history.hpp"
#include "settings.hpp"
#include <thread>


@@ -52,6 +53,8 @@ void Scene::step() {
zoomWidget->box.size = rackWidget->box.size.mult(zoomWidget->zoom);
moduleBrowser->box.size = box.size;

zoomWidget->setZoom(settings::zoom);

// Request latest version from server
if (!devMode && checkVersion && !checkedVersion) {
std::thread t(&Scene::runCheckVersion, this);


+ 0
- 2
src/app/Toolbar.cpp View File

@@ -152,7 +152,6 @@ struct ZoomQuantity : Quantity {
void setDisplayValue(float displayValue) override {setValue(displayValue / 100.0);}
std::string getLabel() override {return "Zoom";}
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);}
std::string getLabel() override {return "Cable opacity";}
std::string getUnit() override {return "%";}
int getDisplayPrecision() override {return 0;}
};




+ 1
- 0
src/widgets/Widget.cpp View File

@@ -6,6 +6,7 @@

namespace rack {


Widget::~Widget() {
// You should only delete orphaned widgets
assert(!parent);


+ 38
- 0
src/widgets/ZoomWidget.cpp View File

@@ -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

Loading…
Cancel
Save