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; }