Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Minor cleanup to Highlighter types #3003

Merged
merged 5 commits into from
Jan 6, 2018
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Pulled master and updated code style
  • Loading branch information
jjatie committed Jan 6, 2018
commit fa1297a46f065650e0f08a41543ce0a8a4f357cc
4 changes: 3 additions & 1 deletion Source/Charts/Highlight/BarHighlighter.swift
Original file line number Diff line number Diff line change
@@ -31,7 +31,9 @@ open class BarHighlighter: ChartHighlighter
set: set,
xValue: Double(pos.x),
yValue: Double(pos.y))
} else {
}
else
{
return high
}
}
20 changes: 9 additions & 11 deletions Source/Charts/Highlight/ChartHighlighter.swift
Original file line number Diff line number Diff line change
@@ -25,7 +25,6 @@ open class ChartHighlighter : NSObject, IHighlighter
open func getHighlight(x: CGFloat, y: CGFloat) -> Highlight?
{
let xVal = Double(getValsForTouch(x: x, y: y).x)

return getHighlight(xValue: xVal, x: x, y: y)
}

@@ -34,11 +33,10 @@ open class ChartHighlighter : NSObject, IHighlighter
/// - returns:
@objc open func getValsForTouch(x: CGFloat, y: CGFloat) -> CGPoint
{
guard let chart = self.chart as? BarLineScatterCandleBubbleChartDataProvider
else { return CGPoint.zero }
guard let chart = self.chart as? BarLineScatterCandleBubbleChartDataProvider else { return .zero }

// take any transformer to determine the values
return chart.getTransformer(forAxis: YAxis.AxisDependency.left).valueForTouchPoint(x: x, y: y)
return chart.getTransformer(forAxis: .left).valueForTouchPoint(x: x, y: y)
}

/// - returns: The corresponding ChartHighlight for a given x-value and xy-touch position in pixels.
@@ -56,7 +54,7 @@ open class ChartHighlighter : NSObject, IHighlighter
let leftAxisMinDist = getMinimumDistance(closestValues: closestValues, y: y, axis: .left)
let rightAxisMinDist = getMinimumDistance(closestValues: closestValues, y: y, axis: .right)

let axis = leftAxisMinDist < rightAxisMinDist ? YAxis.AxisDependency.left : .right
let axis: YAxis.AxisDependency = leftAxisMinDist < rightAxisMinDist ? .left : .right

let detail = closestSelectionDetailByPixel(closestValues: closestValues, x: x, y: y, axis: axis, minSelectionDistance: chart.maxHighlightDistance)

@@ -77,14 +75,14 @@ open class ChartHighlighter : NSObject, IHighlighter

for i in 0 ..< data.dataSetCount
{
guard let dataSet = data.getDataSetByIndex(i),
guard
let dataSet = data.getDataSetByIndex(i),
dataSet.isHighlightEnabled // don't include datasets that cannot be highlighted
else { continue }


// extract all y-values from all DataSets at the given x-value.
// some datasets (i.e bubble charts) make sense to have multiple values for an x-value. We'll have to find a way to handle that later on. It's more complicated now when x-indices are floating point.

vals.append(contentsOf: buildHighlights(dataSet: dataSet, dataSetIndex: i, xValue: xValue, rounding: .closest))
}

@@ -100,8 +98,7 @@ open class ChartHighlighter : NSObject, IHighlighter
{
var highlights = [Highlight]()

guard let chart = self.chart as? BarLineScatterCandleBubbleChartDataProvider
else { return highlights }
guard let chart = self.chart as? BarLineScatterCandleBubbleChartDataProvider else { return highlights }

var entries = set.entriesForXValue(xValue)
if entries.count == 0, let closest = set.entryForXValue(xValue, closestToY: .nan, rounding: rounding)
@@ -113,8 +110,9 @@ open class ChartHighlighter : NSObject, IHighlighter
for e in entries
{
let px = chart.getTransformer(forAxis: set.axisDependency).pixelForValues(x: e.x, y: e.y)

highlights.append(Highlight(x: e.x, y: e.y, xPx: px.x, yPx: px.y, dataSetIndex: dataSetIndex, axis: set.axisDependency))

let highlight = Highlight(x: e.x, y: e.y, xPx: px.x, yPx: px.y, dataSetIndex: dataSetIndex, axis: set.axisDependency)
highlights.append(highlight)
}

return highlights
3 changes: 2 additions & 1 deletion Source/Charts/Highlight/CombinedHighlighter.swift
Original file line number Diff line number Diff line change
@@ -30,7 +30,8 @@ open class CombinedHighlighter: ChartHighlighter
{
var vals = [Highlight]()

guard let chart = self.chart as? CombinedChartDataProvider,
guard
let chart = self.chart as? CombinedChartDataProvider,
let dataObjects = chart.combinedData?.allData
else { return vals }

1 change: 0 additions & 1 deletion Source/Charts/Highlight/Highlight.swift
Original file line number Diff line number Diff line change
@@ -192,6 +192,5 @@ extension Highlight /*: Equatable*/ {
&& dataIndex == object.dataIndex
&& _dataSetIndex == object._dataSetIndex
&& _stackIndex == object._stackIndex

}
}
8 changes: 3 additions & 5 deletions Source/Charts/Highlight/HorizontalBarHighlighter.swift
Original file line number Diff line number Diff line change
@@ -18,10 +18,9 @@ open class HorizontalBarHighlighter: BarHighlighter
open override func getHighlight(x: CGFloat, y: CGFloat) -> Highlight?
{
guard let barData = self.chart?.data as? BarChartData else { return nil }
let pos = getValsForTouch(x: y, y: x)

guard let high = getHighlight(xValue: Double(pos.y), x: y, y: x)
else { return nil }
let pos = getValsForTouch(x: y, y: x)
guard let high = getHighlight(xValue: Double(pos.y), x: y, y: x) else { return nil }

if let set = barData.getDataSetByIndex(high.dataSetIndex) as? IBarChartDataSet,
set.isStacked
@@ -43,8 +42,7 @@ open class HorizontalBarHighlighter: BarHighlighter
{
var highlights = [Highlight]()

guard let chart = self.chart as? BarLineScatterCandleBubbleChartDataProvider
else { return highlights }
guard let chart = self.chart as? BarLineScatterCandleBubbleChartDataProvider else { return highlights }

var entries = set.entriesForXValue(xValue)
if entries.count == 0, let closest = set.entryForXValue(xValue, closestToY: .nan, rounding: rounding)
3 changes: 2 additions & 1 deletion Source/Charts/Highlight/PieHighlighter.swift
Original file line number Diff line number Diff line change
@@ -17,7 +17,8 @@ open class PieHighlighter: PieRadarHighlighter
{
open override func closestHighlight(index: Int, x: CGFloat, y: CGFloat) -> Highlight?
{
guard let set = chart?.data?.dataSets[0],
guard
let set = chart?.data?.dataSets[0],
let entry = set.entryForIndex(index)
else { return nil }

6 changes: 3 additions & 3 deletions Source/Charts/Highlight/PieRadarHighlighter.swift
Original file line number Diff line number Diff line change
@@ -17,13 +17,13 @@ open class PieRadarHighlighter: ChartHighlighter
{
open override func getHighlight(x: CGFloat, y: CGFloat) -> Highlight?
{
guard let chart = self.chart as? PieRadarChartViewBase
else { return nil }
guard let chart = self.chart as? PieRadarChartViewBase else { return nil }

let touchDistanceToCenter = chart.distanceToCenter(x: x, y: y)

// check if a slice was touched
guard touchDistanceToCenter <= chart.radius else {
guard touchDistanceToCenter <= chart.radius else
{
// if no slice was touched, highlight nothing
return nil
}
16 changes: 9 additions & 7 deletions Source/Charts/Highlight/RadarHighlighter.swift
Original file line number Diff line number Diff line change
@@ -17,14 +17,13 @@ open class RadarHighlighter: PieRadarHighlighter
{
open override func closestHighlight(index: Int, x: CGFloat, y: CGFloat) -> Highlight?
{
guard let chart = self.chart as? RadarChartView
else { return nil }
guard let chart = self.chart as? RadarChartView else { return nil }

let highlights = getHighlights(forIndex: index)

let distanceToCenter = Double(chart.distanceToCenter(x: x, y: y) / chart.factor)

var closest: Highlight? = nil
var closest: Highlight?
var distance = Double.greatestFiniteMagnitude

for high in highlights
@@ -48,7 +47,8 @@ open class RadarHighlighter: PieRadarHighlighter
{
var vals = [Highlight]()

guard let chart = self.chart as? RadarChartView,
guard
let chart = self.chart as? RadarChartView,
let chartData = chart.data
else { return vals }

@@ -59,16 +59,18 @@ open class RadarHighlighter: PieRadarHighlighter

for i in chartData.dataSets.indices
{
guard let dataSet = chartData.getDataSetByIndex(i),
guard
let dataSet = chartData.getDataSetByIndex(i),
let entry = dataSet.entryForIndex(index)
else { continue }

let y = (entry.y - chart.chartYMin)

let p = chart.centerOffsets.moving(distance: CGFloat(y) * factor * CGFloat(phaseY),
atAngle: sliceangle * CGFloat(index) * CGFloat(phaseX) + chart.rotationAngle)

vals.append(Highlight(x: Double(index), y: entry.y, xPx: p.x, yPx: p.y, dataSetIndex: i, axis: dataSet.axisDependency))

let highlight = Highlight(x: Double(index), y: entry.y, xPx: p.x, yPx: p.y, dataSetIndex: i, axis: dataSet.axisDependency)
vals.append(highlight)
}

return vals