mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[apps/shared] Create ZoomAndPanCurveViewController,
ZoomParameterController inherits from ZoomAndPanCurveViewController
This commit is contained in:
@@ -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 \
|
||||
)
|
||||
|
||||
|
||||
35
apps/shared/zoom_and_pan_curve_view_controller.cpp
Normal file
35
apps/shared/zoom_and_pan_curve_view_controller.cpp
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
23
apps/shared/zoom_and_pan_curve_view_controller.h
Normal file
23
apps/shared/zoom_and_pan_curve_view_controller.h
Normal 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
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user