From 6d550f2c8d7b6ae40abc90cda562b5be7d0b66ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Fri, 23 Dec 2016 16:42:24 +0100 Subject: [PATCH] [apps] Add a method draw segment to draw curve view Change-Id: I770cf498ecb58a0d12a4019278ef4e536cad2401 --- apps/curve_view.cpp | 22 ++++++++++++++++++++++ apps/curve_view.h | 3 +++ 2 files changed, 25 insertions(+) diff --git a/apps/curve_view.cpp b/apps/curve_view.cpp index 954875d73..376eb833d 100644 --- a/apps/curve_view.cpp +++ b/apps/curve_view.cpp @@ -118,6 +118,28 @@ void CurveView::drawLine(KDContext * ctx, KDRect rect, Axis axis, float coordina } } +void CurveView::drawSegment(KDContext * ctx, KDRect rect, Axis axis, float coordinate, float lowerBound, float upperBound, KDColor color, KDCoordinate thickness) const { + KDRect lineRect = KDRectZero; + switch(axis) { + // WARNING TODO: anti-aliasing? + case Axis::Horizontal: + lineRect = KDRect( + floorf(floatToPixel(Axis::Horizontal, lowerBound)), floatToPixel(Axis::Vertical, coordinate), + ceilf(floatToPixel(Axis::Horizontal, upperBound) - floatToPixel(Axis::Horizontal, lowerBound)), thickness + ); + break; + case Axis::Vertical: + lineRect = KDRect( + floatToPixel(Axis::Horizontal, coordinate), floorf(floatToPixel(Axis::Vertical, upperBound)), + thickness, ceilf(floatToPixel(Axis::Vertical, lowerBound) - floatToPixel(Axis::Vertical, upperBound)) + ); + break; + } + if (rect.intersects(lineRect)) { + ctx->fillRect(lineRect, color); + } +} + void CurveView::drawAxes(Axis axis, KDContext * ctx, KDRect rect) const { drawLine(ctx, rect, axis, 0.0f, k_axisColor, 2); } diff --git a/apps/curve_view.h b/apps/curve_view.h index 52782885c..e3857f169 100644 --- a/apps/curve_view.h +++ b/apps/curve_view.h @@ -30,6 +30,9 @@ protected: float floatToPixel(Axis axis, float f) const; void drawLine(KDContext * ctx, KDRect rect, Axis axis, float coordinate, KDColor color, KDCoordinate thickness = 1) const; + void drawSegment(KDContext * ctx, KDRect rect, Axis axis, + float coordinate, float lowerBound, float upperBound, + KDColor color, KDCoordinate thickness = 1) const; void drawAxes(Axis axis, KDContext * ctx, KDRect rect) const; void drawCurve(void * curve, KDColor color, KDContext * ctx, KDRect rect, bool colorUnderCurve = false, float colorLowerBound = 0.0f, float colorUpperBound = 0.0f, bool continuously = false) const; void drawDiscreteHistogram(KDColor color, KDContext * ctx, KDRect rect, bool colorHighlightBin = false, KDColor highlightColor = KDColorBlack, float colorLowerBound = 0.0f, float colorUpperBound = 0.0f) const;