[apps/sequence] Enable to change cursor view in graph view

Change-Id: I32cadab6c9fe0ea05e503457f93b20bad7e2f84a
This commit is contained in:
Émilie Feral
2017-02-23 12:02:37 +01:00
parent 52ae38a060
commit 109000ce95
4 changed files with 33 additions and 5 deletions

View File

@@ -7,7 +7,8 @@ namespace Sequence {
GraphView::GraphView(SequenceStore * sequenceStore, InteractiveCurveViewRange * graphRange,
CurveViewCursor * cursor, BannerView * bannerView, View * cursorView) :
FunctionGraphView(graphRange, cursor, bannerView, cursorView),
m_sequenceStore(sequenceStore)
m_sequenceStore(sequenceStore),
m_verticalCursor(false)
{
}
@@ -27,9 +28,20 @@ void GraphView::drawRect(KDContext * ctx, KDRect rect) const {
}
}
void GraphView::setVerticalCursor(bool verticalCursor) {
m_verticalCursor = verticalCursor;
}
float GraphView::evaluateModelWithParameter(Model * curve, float abscissa) const {
Sequence * s = (Sequence *)curve;
return s->evaluateAtAbscissa(abscissa, context());
}
KDSize GraphView::cursorSize() {
if (m_verticalCursor) {
return KDSize(1, 2*bounds().height());
}
return CurveView::cursorSize();
}
}

View File

@@ -11,9 +11,12 @@ public:
GraphView(SequenceStore * sequenceStore, Shared::InteractiveCurveViewRange * graphRange,
Shared::CurveViewCursor * cursor, Shared::BannerView * bannerView, View * cursorView);
void drawRect(KDContext * ctx, KDRect rect) const override;
void setVerticalCursor(bool verticalCursor);
private:
float evaluateModelWithParameter(Model * expression, float abscissa) const override;
KDSize cursorSize() override;
SequenceStore * m_sequenceStore;
bool m_verticalCursor;
};
}

View File

@@ -51,6 +51,14 @@ void CurveView::setCurveViewRange(CurveViewRange * curveViewRange) {
m_curveViewRange = curveViewRange;
}
void CurveView::setCursorView(View * cursorView) {
m_cursorView = cursorView;
}
void CurveView::setBannerView(BannerView * bannerView) {
m_bannerView = bannerView;
}
float CurveView::min(Axis axis) const {
assert(axis == Axis::Horizontal || axis == Axis::Vertical);
return (axis == Axis::Horizontal ? m_curveViewRange->xMin(): m_curveViewRange->yMin());
@@ -333,6 +341,10 @@ float CurveView::evaluateModelWithParameter(Model * curve, float t) const {
return 0.0f;
}
KDSize CurveView::cursorSize() {
return KDSize(k_cursorSize, k_cursorSize);
}
void CurveView::jointDots(KDContext * ctx, KDRect rect, Model * curve, float x, float y, float u, float v, KDColor color, int maxNumberOfRecursion) const {
float pyf = floatToPixel(Axis::Vertical, y);
float pvf = floatToPixel(Axis::Vertical, v);
@@ -413,7 +425,7 @@ void CurveView::layoutSubviews() {
if (m_curveViewCursor != nullptr && m_cursorView != nullptr) {
KDCoordinate xCursorPixelPosition = roundf(floatToPixel(Axis::Horizontal, m_curveViewCursor->x()));
KDCoordinate yCursorPixelPosition = roundf(floatToPixel(Axis::Vertical, m_curveViewCursor->y()));
KDRect cursorFrame(xCursorPixelPosition - k_cursorSize/2, yCursorPixelPosition - k_cursorSize/2, k_cursorSize, k_cursorSize);
KDRect cursorFrame(xCursorPixelPosition - cursorSize().width()/2, yCursorPixelPosition - cursorSize().height()/2, cursorSize().width(), cursorSize().height());
if (!m_mainViewSelected || isnan(m_curveViewCursor->x()) || isnan(m_curveViewCursor->y())
|| isinf(m_curveViewCursor->x()) || isinf(m_curveViewCursor->y())) {
cursorFrame = KDRectZero;
@@ -436,7 +448,7 @@ int CurveView::numberOfSubviews() const {
View * CurveView::subviewAtIndex(int index) {
assert(index >= 0 && index < 2);
if (index == 0) {
if (index == 0 && m_bannerView != nullptr) {
return m_bannerView;
}
return m_cursorView;

View File

@@ -23,7 +23,8 @@ public:
// When the main view is selected, the banner view is visible
bool isMainViewSelected() const;
void selectMainView(bool mainViewSelected);
void setCursorView(View * cursorView);
void setBannerView(BannerView * bannerView);
protected:
void setCurveViewRange(CurveViewRange * curveViewRange);
// Drawing methods
@@ -49,7 +50,7 @@ protected:
bool fillBar, KDColor defaultColor, KDColor highlightColor, float highlightLowerBound = INFINITY, float highlightUpperBound = -INFINITY) const;
void computeLabels(Axis axis);
void drawLabels(KDContext * ctx, KDRect rect, Axis axis, bool shiftOrigin) const;
virtual KDSize cursorSize();
private:
/* The window bounds are deduced from the model bounds but also take into
account a margin (computed with k_marginFactor) */