From 8f2c2cb19916dc12eafcb8e8f6ef18f574ffb7d7 Mon Sep 17 00:00:00 2001 From: Ryan Schneider Date: Thu, 6 Oct 2016 16:00:01 -0700 Subject: [PATCH] Use the same process for highlighting in `LineChartRenderer` that was used in `ScatterChartRenderer`. Fixes #1495. I'm not sure if iterating over entries is necessary, or if this can be collapsed to just a single `set.entryForXValue()` call. --- .../Charts/Renderers/LineChartRenderer.swift | 73 ++++++++++--------- 1 file changed, 38 insertions(+), 35 deletions(-) diff --git a/Source/Charts/Renderers/LineChartRenderer.swift b/Source/Charts/Renderers/LineChartRenderer.swift index bd8854ff65..d88313a553 100644 --- a/Source/Charts/Renderers/LineChartRenderer.swift +++ b/Source/Charts/Renderers/LineChartRenderer.swift @@ -708,44 +708,47 @@ open class LineChartRenderer: LineRadarRenderer for high in indices { - guard let set = lineData.getDataSetByIndex(high.dataSetIndex) as? ILineChartDataSet - , set.isHighlightEnabled + guard + let set = lineData.getDataSetByIndex(high.dataSetIndex) as? ILineChartDataSet, + set.isHighlightEnabled else { continue } - - guard let e = set.entryForXValue(high.x) else { continue } - - if !isInBoundsX(entry: e, dataSet: set) - { - continue - } - - context.setStrokeColor(set.highlightColor.cgColor) - context.setLineWidth(set.highlightLineWidth) - if set.highlightLineDashLengths != nil - { - context.setLineDash(phase: set.highlightLineDashPhase, lengths: set.highlightLineDashLengths!) - } - else - { - context.setLineDash(phase: 0.0, lengths: []) - } - - let x = high.x // get the x-position - let y = high.y * Double(animator.phaseY) - - if x > chartXMax * animator.phaseX + + let entries = set.entriesForXValue(high.x) + + for entry in entries { - continue + if entry.y != high.y { continue } + + if !isInBoundsX(entry: entry, dataSet: set) { continue } + + context.setStrokeColor(set.highlightColor.cgColor) + context.setLineWidth(set.highlightLineWidth) + if set.highlightLineDashLengths != nil + { + context.setLineDash(phase: set.highlightLineDashPhase, lengths: set.highlightLineDashLengths!) + } + else + { + context.setLineDash(phase: 0.0, lengths: []) + } + + let x = entry.x // get the x-position + let y = entry.y * Double(animator.phaseY) + + if x > chartXMax * animator.phaseX + { + continue + } + + let trans = dataProvider.getTransformer(forAxis: set.axisDependency) + + let pt = trans.pixelForValues(x: x, y: y) + + high.setDraw(pt: pt) + + // draw the lines + drawHighlightLines(context: context, point: pt, set: set) } - - let trans = dataProvider.getTransformer(forAxis: set.axisDependency) - - let pt = trans.pixelForValues(x: x, y: y) - - high.setDraw(pt: pt) - - // draw the lines - drawHighlightLines(context: context, point: pt, set: set) } context.restoreGState()