[apps/shared] Create ZoomAndPanCurveViewController,

ZoomParameterController inherits from ZoomAndPanCurveViewController
This commit is contained in:
Émilie Feral
2020-03-23 13:44:56 +01:00
parent 52b6508d6c
commit d504564334
5 changed files with 70 additions and 46 deletions

View File

@@ -79,6 +79,7 @@ app_shared_src = $(addprefix apps/shared/,\
vertical_cursor_view.cpp \
xy_banner_view.cpp\
zoom_curve_view_controller.cpp \
zoom_and_pan_curve_view_controller.cpp \
zoom_parameter_controller.cpp \
)

View File

@@ -0,0 +1,35 @@
#include "zoom_and_pan_curve_view_controller.h"
#include <cmath>
#include <assert.h>
using namespace Poincare;
namespace Shared {
bool ZoomAndPanCurveViewController::handleEvent(Ion::Events::Event event) {
if (event == Ion::Events::Left || event == Ion::Events::Right || event == Ion::Events::Up || event == Ion::Events::Down) {
return handlePan(event);
}
return ZoomCurveViewController::handleEvent(event);
}
bool ZoomAndPanCurveViewController::handlePan(Ion::Events::Event event) {
float xMove = 0.0f;
float yMove = 0.0f;
if (event == Ion::Events::Up) {
yMove = interactiveCurveViewRange()->yGridUnit();
} else if (event == Ion::Events::Down) {
yMove = -interactiveCurveViewRange()->yGridUnit();
} else if (event == Ion::Events::Left) {
xMove = -interactiveCurveViewRange()->xGridUnit();
} else {
assert(event == Ion::Events::Right);
xMove = interactiveCurveViewRange()->xGridUnit();
}
interactiveCurveViewRange()->panWithVector(xMove, yMove);
curveView()->reload();
return true;
}
}

View File

@@ -0,0 +1,23 @@
#ifndef SHARED_ZOOM_AND_PAN_CURVE_VIEW_CONTROLLER_H
#define SHARED_ZOOM_AND_PAN_CURVE_VIEW_CONTROLLER_H
#include "zoom_curve_view_controller.h"
namespace Shared {
/* ZoomAndPanCurveViewController is a View controller with a cursor that can
* handles zoom in/out and directional pan events. */
class ZoomAndPanCurveViewController : public ZoomCurveViewController {
public:
ZoomAndPanCurveViewController(Responder * parentResponder) : ZoomCurveViewController(parentResponder) {}
bool handleEvent(Ion::Events::Event event) override;
protected:
virtual bool handlePan(Ion::Events::Event event);
float xFocus() override { return interactiveCurveViewRange()->xCenter(); }
float yFocus() override { return interactiveCurveViewRange()->yCenter(); }
};
}
#endif

View File

@@ -5,7 +5,7 @@
namespace Shared {
ZoomParameterController::ZoomParameterController(Responder * parentResponder, InteractiveCurveViewRange * interactiveRange, CurveView * curveView) :
ViewController(parentResponder),
ZoomAndPanCurveViewController(parentResponder),
m_contentView(curveView),
m_interactiveRange(interactiveRange)
{
@@ -15,45 +15,6 @@ const char * ZoomParameterController::title() {
return I18n::translate(I18n::Message::Zoom);
}
View * ZoomParameterController::view() {
return &m_contentView;
}
bool ZoomParameterController::handleEvent(Ion::Events::Event event) {
if (event == Ion::Events::Plus) {
m_interactiveRange->zoom(2.0f/3.0f, m_interactiveRange->xCenter(), m_interactiveRange->yCenter());
m_contentView.curveView()->reload();
return true;
}
if (event == Ion::Events::Minus) {
m_interactiveRange->zoom(3.0f/2.0f, m_interactiveRange->xCenter(), m_interactiveRange->yCenter());
m_contentView.curveView()->reload();
return true;
}
if (event == Ion::Events::Up) {
m_interactiveRange->panWithVector(0.0f, m_interactiveRange->yGridUnit());
m_contentView.curveView()->reload();
return true;
}
if (event == Ion::Events::Down) {
m_interactiveRange->panWithVector(0.0f, -m_interactiveRange->yGridUnit());
m_contentView.curveView()->reload();
return true;
}
if (event == Ion::Events::Left) {
m_interactiveRange->panWithVector(-m_interactiveRange->xGridUnit(), 0.0f);
m_contentView.curveView()->reload();
return true;
}
if (event == Ion::Events::Right) {
m_interactiveRange->panWithVector(m_interactiveRange->xGridUnit(), 0.0f);
m_contentView.curveView()->reload();
return true;
}
return false;
}
void ZoomParameterController::viewWillAppear() {
ViewController::viewWillAppear();
m_contentView.curveView()->setOkView(nullptr);

View File

@@ -1,25 +1,23 @@
#ifndef SHARED_ZOOM_PARAMETER_CONTROLLER_H
#define SHARED_ZOOM_PARAMETER_CONTROLLER_H
#include <escher.h>
#include "interactive_curve_view_range.h"
#include "curve_view.h"
#include "zoom_and_pan_curve_view_controller.h"
#include <apps/i18n.h>
namespace Shared {
class ZoomParameterController : public ViewController {
class ZoomParameterController : public ZoomAndPanCurveViewController {
public:
ZoomParameterController(Responder * parentResponder, InteractiveCurveViewRange * interactiveCurveViewRange, CurveView * curveView);
const char * title() override;
View * view() override;
bool handleEvent(Ion::Events::Event event) override;
View * view() override { return &m_contentView; }
void viewWillAppear() override;
void viewDidDisappear() override;
void didBecomeFirstResponder() override;
TELEMETRY_ID("Zoom");
private:
constexpr static KDCoordinate k_standardViewHeight = 175;
class ContentView : public View {
public:
constexpr static KDCoordinate k_legendHeight = 30;
@@ -46,7 +44,13 @@ private:
CurveView * m_curveView;
LegendView m_legendView;
};
void adaptCurveRange(bool viewWillAppear);
// ZoomAndPanCurveViewController
InteractiveCurveViewRange * interactiveCurveViewRange() override { return m_interactiveRange; }
CurveView * curveView() override { return m_contentView.curveView(); }
ContentView m_contentView;
InteractiveCurveViewRange * m_interactiveRange;
};