mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-18 21:30:38 +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 \
|
vertical_cursor_view.cpp \
|
||||||
xy_banner_view.cpp\
|
xy_banner_view.cpp\
|
||||||
zoom_curve_view_controller.cpp \
|
zoom_curve_view_controller.cpp \
|
||||||
|
zoom_and_pan_curve_view_controller.cpp \
|
||||||
zoom_parameter_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 {
|
namespace Shared {
|
||||||
|
|
||||||
ZoomParameterController::ZoomParameterController(Responder * parentResponder, InteractiveCurveViewRange * interactiveRange, CurveView * curveView) :
|
ZoomParameterController::ZoomParameterController(Responder * parentResponder, InteractiveCurveViewRange * interactiveRange, CurveView * curveView) :
|
||||||
ViewController(parentResponder),
|
ZoomAndPanCurveViewController(parentResponder),
|
||||||
m_contentView(curveView),
|
m_contentView(curveView),
|
||||||
m_interactiveRange(interactiveRange)
|
m_interactiveRange(interactiveRange)
|
||||||
{
|
{
|
||||||
@@ -15,45 +15,6 @@ const char * ZoomParameterController::title() {
|
|||||||
return I18n::translate(I18n::Message::Zoom);
|
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() {
|
void ZoomParameterController::viewWillAppear() {
|
||||||
ViewController::viewWillAppear();
|
ViewController::viewWillAppear();
|
||||||
m_contentView.curveView()->setOkView(nullptr);
|
m_contentView.curveView()->setOkView(nullptr);
|
||||||
|
|||||||
@@ -1,25 +1,23 @@
|
|||||||
#ifndef SHARED_ZOOM_PARAMETER_CONTROLLER_H
|
#ifndef SHARED_ZOOM_PARAMETER_CONTROLLER_H
|
||||||
#define SHARED_ZOOM_PARAMETER_CONTROLLER_H
|
#define SHARED_ZOOM_PARAMETER_CONTROLLER_H
|
||||||
|
|
||||||
#include <escher.h>
|
#include "zoom_and_pan_curve_view_controller.h"
|
||||||
#include "interactive_curve_view_range.h"
|
|
||||||
#include "curve_view.h"
|
|
||||||
#include <apps/i18n.h>
|
#include <apps/i18n.h>
|
||||||
|
|
||||||
namespace Shared {
|
namespace Shared {
|
||||||
|
|
||||||
class ZoomParameterController : public ViewController {
|
class ZoomParameterController : public ZoomAndPanCurveViewController {
|
||||||
public:
|
public:
|
||||||
ZoomParameterController(Responder * parentResponder, InteractiveCurveViewRange * interactiveCurveViewRange, CurveView * curveView);
|
ZoomParameterController(Responder * parentResponder, InteractiveCurveViewRange * interactiveCurveViewRange, CurveView * curveView);
|
||||||
const char * title() override;
|
const char * title() override;
|
||||||
View * view() override;
|
View * view() override { return &m_contentView; }
|
||||||
bool handleEvent(Ion::Events::Event event) override;
|
|
||||||
void viewWillAppear() override;
|
void viewWillAppear() override;
|
||||||
void viewDidDisappear() override;
|
void viewDidDisappear() override;
|
||||||
void didBecomeFirstResponder() override;
|
void didBecomeFirstResponder() override;
|
||||||
TELEMETRY_ID("Zoom");
|
TELEMETRY_ID("Zoom");
|
||||||
private:
|
private:
|
||||||
constexpr static KDCoordinate k_standardViewHeight = 175;
|
constexpr static KDCoordinate k_standardViewHeight = 175;
|
||||||
|
|
||||||
class ContentView : public View {
|
class ContentView : public View {
|
||||||
public:
|
public:
|
||||||
constexpr static KDCoordinate k_legendHeight = 30;
|
constexpr static KDCoordinate k_legendHeight = 30;
|
||||||
@@ -46,7 +44,13 @@ private:
|
|||||||
CurveView * m_curveView;
|
CurveView * m_curveView;
|
||||||
LegendView m_legendView;
|
LegendView m_legendView;
|
||||||
};
|
};
|
||||||
|
|
||||||
void adaptCurveRange(bool viewWillAppear);
|
void adaptCurveRange(bool viewWillAppear);
|
||||||
|
|
||||||
|
// ZoomAndPanCurveViewController
|
||||||
|
InteractiveCurveViewRange * interactiveCurveViewRange() override { return m_interactiveRange; }
|
||||||
|
CurveView * curveView() override { return m_contentView.curveView(); }
|
||||||
|
|
||||||
ContentView m_contentView;
|
ContentView m_contentView;
|
||||||
InteractiveCurveViewRange * m_interactiveRange;
|
InteractiveCurveViewRange * m_interactiveRange;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user