diff --git a/apps/sequence/graph/graph_view.cpp b/apps/sequence/graph/graph_view.cpp index 9ef24dca9..daaec69fc 100644 --- a/apps/sequence/graph/graph_view.cpp +++ b/apps/sequence/graph/graph_view.cpp @@ -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(); +} + } diff --git a/apps/sequence/graph/graph_view.h b/apps/sequence/graph/graph_view.h index 710e11fb7..34c0f70fa 100644 --- a/apps/sequence/graph/graph_view.h +++ b/apps/sequence/graph/graph_view.h @@ -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; }; } diff --git a/apps/shared/curve_view.cpp b/apps/shared/curve_view.cpp index 447008b9a..0dc98a5ea 100644 --- a/apps/shared/curve_view.cpp +++ b/apps/shared/curve_view.cpp @@ -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; diff --git a/apps/shared/curve_view.h b/apps/shared/curve_view.h index c49f51d11..5c8e8fcef 100644 --- a/apps/shared/curve_view.h +++ b/apps/shared/curve_view.h @@ -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) */