From e0518ecaf9dfe6a4d6f2cf32a825a3c9aeb14455 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Tue, 29 May 2018 14:42:47 +0200 Subject: [PATCH] [apps/stats] Remove histogram blinking --- apps/statistics/histogram_view.cpp | 15 +++++++++++++-- apps/statistics/histogram_view.h | 1 + apps/statistics/multiple_data_view_controller.cpp | 1 - 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/apps/statistics/histogram_view.cpp b/apps/statistics/histogram_view.cpp index 1bc1792fc..b48faf249 100644 --- a/apps/statistics/histogram_view.cpp +++ b/apps/statistics/histogram_view.cpp @@ -30,6 +30,17 @@ void HistogramView::reload() { markRectAsDirty(dirtyZone); } +void HistogramView::reloadSelectedBar() { + CurveView::reload(); + float pixelLowerBound = floatToPixel(Axis::Horizontal, m_highlightedBarStart)-2; + float pixelUpperBound = floatToPixel(Axis::Horizontal, m_highlightedBarEnd)+2; + /* We deliberately do not mark as dirty the frame of the banner view to avoid + *unpleasant blinking of the drawing of the banner view. */ + KDRect dirtyZone(KDRect(pixelLowerBound, 0, pixelUpperBound-pixelLowerBound, + bounds().height() - (displayBannerView() ? m_bannerView->bounds().height() : 0))); + markRectAsDirty(dirtyZone); +} + void HistogramView::drawRect(KDContext * ctx, KDRect rect) const { m_controller->setCurrentDrawnSeries(m_series); ctx->fillRect(rect, KDColorWhite); @@ -48,10 +59,10 @@ void HistogramView::drawRect(KDContext * ctx, KDRect rect) const { void HistogramView::setHighlight(float start, float end) { if (m_highlightedBarStart != start || m_highlightedBarEnd != end) { - reload(); + reloadSelectedBar(); m_highlightedBarStart = start; m_highlightedBarEnd = end; - reload(); + reloadSelectedBar(); } } diff --git a/apps/statistics/histogram_view.h b/apps/statistics/histogram_view.h index 91834219f..f871135db 100644 --- a/apps/statistics/histogram_view.h +++ b/apps/statistics/histogram_view.h @@ -15,6 +15,7 @@ public: HistogramView(HistogramController * controller, Store * store, int series, Shared::BannerView * bannerView, KDColor selectedHistogramColor = Palette::Select, KDColor notSelectedHistogramColor = Palette::GreyMiddle, KDColor selectedBarColor = Palette::YellowDark); int series() const { return m_series; } void reload() override; + void reloadSelectedBar(); void drawRect(KDContext * ctx, KDRect rect) const override; void setHighlight(float start, float end); void setDisplayLabels(bool display) { m_displayLabels = display; } diff --git a/apps/statistics/multiple_data_view_controller.cpp b/apps/statistics/multiple_data_view_controller.cpp index ac186d859..4f527979a 100644 --- a/apps/statistics/multiple_data_view_controller.cpp +++ b/apps/statistics/multiple_data_view_controller.cpp @@ -72,7 +72,6 @@ bool MultipleDataViewController::handleEvent(Ion::Events::Event event) { int direction = event == Ion::Events::Left ? -1 : 1; if (moveSelectionHorizontally(direction)) { reloadBannerView(); - multipleDataView()->reload(); } return true; }