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

Minor cleanup to Highlighter types #3003

merged 5 commits into from
Jan 6, 2018

Conversation

jjatie
Copy link
Collaborator

@jjatie jjatie commented Nov 14, 2017

No description provided.

@codecov-io
Copy link

codecov-io commented Nov 14, 2017

Codecov Report

Merging #3003 into master will increase coverage by 0.06%.
The diff coverage is 0%.

Impacted file tree graph

@@            Coverage Diff             @@
##           master    #3003      +/-   ##
==========================================
+ Coverage   23.07%   23.14%   +0.06%     
==========================================
  Files         115      115              
  Lines       15469    15421      -48     
  Branches      271      271              
==========================================
- Hits         3570     3569       -1     
+ Misses      11863    11816      -47     
  Partials       36       36
Impacted Files Coverage Δ
Source/Charts/Highlight/Highlight.swift 40.54% <ø> (-0.8%) ⬇️
Source/Charts/Highlight/ChartHighlighter.swift 2.58% <0%> (+0.36%) ⬆️
...ce/Charts/Highlight/HorizontalBarHighlighter.swift 0% <0%> (ø) ⬆️
Source/Charts/Highlight/BarHighlighter.swift 0% <0%> (ø) ⬆️
Source/Charts/Highlight/CombinedHighlighter.swift 13.04% <0%> (+1.93%) ⬆️
Source/Charts/Highlight/PieHighlighter.swift 0% <0%> (ø) ⬆️
Source/Charts/Highlight/RadarHighlighter.swift 0% <0%> (ø) ⬆️
Source/Charts/Highlight/PieRadarHighlighter.swift 0% <0%> (ø) ⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 0ced631...fa1297a. Read the comment docs.

Copy link
Collaborator

@pmairoldi pmairoldi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are a couple things I don't really like. Changing some ifs to guards make it harder to read. My main issue is if statements to guards when nesting is not reduced. If the change to guard doesn't reduce nesting then I don't think we need to do it.

In addition, I think long conditions in guards are harder to read. I don't know if there is a convention of single expression per guard but that makes it easier to understand to me. What do you think?

{
return nil
}
guard !closestValues.isEmpty else { return nil }
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This guard is harder to read than how it was before. I have to think about it for a second when I try to understand this line. It was more straightforward before. It doesn't reduce nesting so we can switch it back.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While guard often does reduce nesting, it's purpose is to indicate that

You use a guard statement to require that a condition must be true in order for the code after the guard statement to be executed. Apple.

It seems reasonable to me to expect reading "only continue if closestValues is not empty"

@@ -17,12 +17,10 @@ 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],
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Combining these guard statements makes it harder to read. I think it was easier to understand before

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about all the other places in the framework where we are writing guard statements like this? Although usually it's written like

guard
    let set = chart?.data?.dataSets[0],
    let entry = set.entryForIndex(index)
    else { return nil }

@@ -23,32 +23,30 @@ open class PieRadarHighlighter: ChartHighlighter
let touchDistanceToCenter = chart.distanceToCenter(x: x, y: y)

// check if a slice was touched
if touchDistanceToCenter > chart.radius
{
guard touchDistanceToCenter <= chart.radius else {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

guard or if here doesn't really make a difference.

Copy link
Collaborator Author

@jjatie jjatie Nov 15, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You use a guard statement to require that a condition must be true in order for the code after the guard statement to be executed.

So in this case the guard makes it extra clear that the method can return early here

@jjatie
Copy link
Collaborator Author

jjatie commented Nov 15, 2017

The convention is as the Swift Book states:

You use a guard statement to require that a condition must be true in order for the code after the guard statement to be executed.

While technically it doesn't matter if we use an if or a guard, the guard does make it clear that we need a condition to be true to continue.

As for the longer guard conditions I don't know of any convention, but I like the way it's written in many places in Charts and I will update this one to look the same. (e.g.

    guard
        let data = _data as? BarChartData,
        let set = data.getDataSetForEntry(e) as? IBarChartDataSet
        else { return .null }

@jjatie
Copy link
Collaborator Author

jjatie commented Nov 23, 2017

@petester42 Do you have any further feedback or can this be merged?

@jjatie jjatie merged commit 76ba78a into ChartsOrg:master Jan 6, 2018
@jjatie
Copy link
Collaborator Author

jjatie commented Jan 6, 2018

Review has been discussed in #3034 and approved.

@jjatie jjatie deleted the highlight-logic branch January 6, 2018 14:11
@liuxuan30
Copy link
Member

liuxuan30 commented Jan 7, 2018

next time merging some old PRs, just pull master and trigger a new CI to make sure nothing breaks :)

@jjatie
Copy link
Collaborator Author

jjatie commented Jan 7, 2018

I did : )

jjatie added a commit that referenced this pull request Jan 7, 2018
* Fixed using wrong axis (Issue #2257)

* fix #1830. credit from #2049 (#2874)

* fix #1830. credit from #2049

* add combined chart unit tests for iOS, tvOS (macOS only have build process)

* use iterater rather than index

* Removed redundant ivars in BarLineChartViewBase (#3043)

* Removed redundant ivars in favour of proper access control

* Moved initialization of axes to their declaration to keep the same optionality exposed.

* Update 4.0.0 with master (#3135)

* Replaced relevant `ChartUtils` methods with `Double` extensions (#2994)

* Replaced relevant `ChartUtils` methods with `Double` extensions

Improves readability.
`nextUp` is built in and provides the same functionality.

* Updated `ChartUtilsTests` to match changes

* add option to build demo projects unit tests on iOS (#3121)

* add option to build demo projects unit tests on iOS

* add ChartsDemo-OSX build test.

* Update ViewPortHandler.swift (#3143)

fix a small bug

* Refactored ChartUtils method into CGPoint extension (#3087)

* Refactored ChartUtils method into CGPoint extension

* Replaced ChartUtils.defaultValueFormatter()

* Codestyle fixes

* Minor cleanup to Highlighter types (#3003)

* Minor cleanup to Highlighter types

* Fixes for PR

* Pulled master and updated code style

* added DataApproximator+N extension (#2848)

* added DataApproximator+N extension

* fixed PR notes

* Readded in missing files
liuxuan30 pushed a commit that referenced this pull request Jan 8, 2018
* Fixed using wrong axis (Issue #2257)

* fix #1830. credit from #2049 (#2874)

* fix #1830. credit from #2049

* add combined chart unit tests for iOS, tvOS (macOS only have build process)

* use iterater rather than index

* Removed redundant ivars in BarLineChartViewBase (#3043)

* Removed redundant ivars in favour of proper access control

* Moved initialization of axes to their declaration to keep the same optionality exposed.

* Update 4.0.0 with master (#3135)

* Replaced relevant `ChartUtils` methods with `Double` extensions (#2994)

* Replaced relevant `ChartUtils` methods with `Double` extensions

Improves readability.
`nextUp` is built in and provides the same functionality.

* Updated `ChartUtilsTests` to match changes

* add option to build demo projects unit tests on iOS (#3121)

* add option to build demo projects unit tests on iOS

* add ChartsDemo-OSX build test.

* Update ViewPortHandler.swift (#3143)

fix a small bug

* Refactored ChartUtils method into CGPoint extension (#3087)

* Refactored ChartUtils method into CGPoint extension

* Replaced ChartUtils.defaultValueFormatter()

* Codestyle fixes

* Minor cleanup to Highlighter types (#3003)

* Minor cleanup to Highlighter types

* Fixes for PR

* Pulled master and updated code style

* added DataApproximator+N extension (#2848)

* added DataApproximator+N extension

* fixed PR notes

* Moved drawing methods into CGContext extension

Much nicer call sites.
Renamed some parameter names.
Removed `NSAttributedStringKey` where type inference was sufficient.
Minor tidy of drawText calls in AxisRenderers

* Pulled latest master

* Pulled master

* Fixed code style
philipengberg pushed a commit to tonsser/Charts that referenced this pull request Jan 19, 2018
* Minor cleanup to Highlighter types

* Fixes for PR

* Pulled master and updated code style
FreddyZeng added a commit to FreddyZeng/Charts that referenced this pull request Jan 20, 2018
* 'master' of https://github.com/danielgindi/Charts: (34 commits)
  Fixed X-Axis Labels Not Showing (ChartsOrg#3154) (ChartsOrg#3174)
  fix programatical unhighlighting for BarCharView (ChartsOrg#3159)
  Give the users customizable axis label limits (Fixes ChartsOrg#2085) (ChartsOrg#2894)
  bump pod version
  chart views now use open legend renderer property instead of internal one (ChartsOrg#3149)
  Fix axis label disappear when zooming in deep enough (ChartsOrg#3132)
  added DataApproximator+N extension (ChartsOrg#2848)
  Minor cleanup to Highlighter types (ChartsOrg#3003)
  Refactored ChartUtils method into CGPoint extension (ChartsOrg#3087)
  Update ViewPortHandler.swift (ChartsOrg#3143)
  add option to build demo projects unit tests on iOS (ChartsOrg#3121)
  Replaced relevant `ChartUtils` methods with `Double` extensions (ChartsOrg#2994)
  Update 4.0.0 with master (ChartsOrg#3135)
  Removed redundant ivars in BarLineChartViewBase (ChartsOrg#3043)
  fix ChartsOrg#1830. credit from ChartsOrg#2049 (ChartsOrg#2874)
  Makes ChartsDemo compiling again (ChartsOrg#3117)
  Fixed using wrong axis (Issue ChartsOrg#2257)
  Removed methods and properties deprecated in 1.0 (ChartsOrg#2996)
  for ChartsOrg#3061 revert animationUpdate() and animationEnd() not trigger crash if subclass does nothing
  The backing var is not necessary. (ChartsOrg#3000)
  ...

# Conflicts:
#	Source/Charts/Data/Implementations/Standard/LineChartDataSet.swift
#	Source/Charts/Highlight/BarHighlighter.swift
#	Source/Charts/Renderers/BarChartRenderer.swift
jjatie added a commit that referenced this pull request Oct 30, 2020
* Remove java interface convention (#2997)

* Renamed `IMarker` to `Marker`

following Swift API guidelines.

* Renamed `IAxisValueFormatter` to `AxisValueFormatter`

* Renamed `IFillFormatter` to `FillFormatter`

* Renamed `IValueFormatter` to `ValueFormatter`

* Renamed `IHighlighter` to `Highlighter`

* Renamed `I*DataSet` to `*DataSetProtocol` to follow Swift API guidelines

* Fixed naming of `LineRadarChartDataSetProtocol` and `RadarChartDataSetProtocol` from previous commit

* Renamed "Interfaces" to "DataProviders" for clarity

* Updated Demos to for new type naming

* Renderer protocols (#3136)

* Renderer is now a protocol

Renamed Renderers, and organized the Renderer folder.

* DataRenderer is now a protocol

* AxisRenderer is now a protocol

* Chartviewbase redundant ivar (#3045)

* Fixed using wrong axis (Issue #2257)

* fix #1830. credit from #2049 (#2874)

* fix #1830. credit from #2049

* add combined chart unit tests for iOS, tvOS (macOS only have build process)

* use iterater rather than index

* Removed redundant ivars in BarLineChartViewBase (#3043)

* Removed redundant ivars in favour of proper access control

* Moved initialization of axes to their declaration to keep the same optionality exposed.

* Update 4.0.0 with master (#3135)

* Replaced relevant `ChartUtils` methods with `Double` extensions (#2994)

* Replaced relevant `ChartUtils` methods with `Double` extensions

Improves readability.
`nextUp` is built in and provides the same functionality.

* Updated `ChartUtilsTests` to match changes

* add option to build demo projects unit tests on iOS (#3121)

* add option to build demo projects unit tests on iOS

* add ChartsDemo-OSX build test.

* Update ViewPortHandler.swift (#3143)

fix a small bug

* Refactored ChartUtils method into CGPoint extension (#3087)

* Refactored ChartUtils method into CGPoint extension

* Replaced ChartUtils.defaultValueFormatter()

* Codestyle fixes

* ChartViewBase cleanup

For the most part, condensing logic and using `guard` where appropriate
Removed optionality of many internal variables as they were only optional to allow for deferred initialization. This is now replaced with lazy vars.
Removed empty initializer overrides.
`fileprivate` is now `private`

* Removed redundant ivars

In favour of proper access control

* Fixes after merge

* Renamed `animator` to `chartAnimator`

on `ChartViewBase` to no conflict with `NSView`'s `animator()` method.

* pulled latest master

* Code style fix

* Removed AxisRendererBase.swift

* Fixed demos

* BarChartRenderer Logic cleanup (#3008)

* Logic cleanup

Mostly using guard where appropriate
Few very minor performance improvements

* Made use of `==` where appropriate to simplify logic

* Returned fatalError message

* Replaced `Buffer` class

with simple typealias. There was only one instance where reference semantics might have be helpful, but was easily reimplemented with value semantics.

* Syncing 4.0.0 with master (#3160)

* Fixed using wrong axis (Issue #2257)

* fix #1830. credit from #2049 (#2874)

* fix #1830. credit from #2049

* add combined chart unit tests for iOS, tvOS (macOS only have build process)

* use iterater rather than index

* Removed redundant ivars in BarLineChartViewBase (#3043)

* Removed redundant ivars in favour of proper access control

* Moved initialization of axes to their declaration to keep the same optionality exposed.

* Update 4.0.0 with master (#3135)

* Replaced relevant `ChartUtils` methods with `Double` extensions (#2994)

* Replaced relevant `ChartUtils` methods with `Double` extensions

Improves readability.
`nextUp` is built in and provides the same functionality.

* Updated `ChartUtilsTests` to match changes

* add option to build demo projects unit tests on iOS (#3121)

* add option to build demo projects unit tests on iOS

* add ChartsDemo-OSX build test.

* Update ViewPortHandler.swift (#3143)

fix a small bug

* Refactored ChartUtils method into CGPoint extension (#3087)

* Refactored ChartUtils method into CGPoint extension

* Replaced ChartUtils.defaultValueFormatter()

* Codestyle fixes

* Minor cleanup to Highlighter types (#3003)

* Minor cleanup to Highlighter types

* Fixes for PR

* Pulled master and updated code style

* added DataApproximator+N extension (#2848)

* added DataApproximator+N extension

* fixed PR notes

* Readded in missing files

* Moved ChartUtils drawing methods into CGContext extension (#3086)

* Fixed using wrong axis (Issue #2257)

* fix #1830. credit from #2049 (#2874)

* fix #1830. credit from #2049

* add combined chart unit tests for iOS, tvOS (macOS only have build process)

* use iterater rather than index

* Removed redundant ivars in BarLineChartViewBase (#3043)

* Removed redundant ivars in favour of proper access control

* Moved initialization of axes to their declaration to keep the same optionality exposed.

* Update 4.0.0 with master (#3135)

* Replaced relevant `ChartUtils` methods with `Double` extensions (#2994)

* Replaced relevant `ChartUtils` methods with `Double` extensions

Improves readability.
`nextUp` is built in and provides the same functionality.

* Updated `ChartUtilsTests` to match changes

* add option to build demo projects unit tests on iOS (#3121)

* add option to build demo projects unit tests on iOS

* add ChartsDemo-OSX build test.

* Update ViewPortHandler.swift (#3143)

fix a small bug

* Refactored ChartUtils method into CGPoint extension (#3087)

* Refactored ChartUtils method into CGPoint extension

* Replaced ChartUtils.defaultValueFormatter()

* Codestyle fixes

* Minor cleanup to Highlighter types (#3003)

* Minor cleanup to Highlighter types

* Fixes for PR

* Pulled master and updated code style

* added DataApproximator+N extension (#2848)

* added DataApproximator+N extension

* fixed PR notes

* Moved drawing methods into CGContext extension

Much nicer call sites.
Renamed some parameter names.
Removed `NSAttributedStringKey` where type inference was sufficient.
Minor tidy of drawText calls in AxisRenderers

* Pulled latest master

* Pulled master

* Fixed code style

* Utils Cleanup (#3054)

* Cleanup

Replaced unnecessary getters with proper access control
Replaced unnecessary convenience inits with default parameters
Minor refactoring

* Pulled latest master

* Pulled latest master

* Pulled latest master

* Fix after pulling master

* Fixed using wrong axis (Issue #2257)

* fix #1830. credit from #2049 (#2874)

* fix #1830. credit from #2049

* add combined chart unit tests for iOS, tvOS (macOS only have build process)

* use iterater rather than index

* Removed redundant ivars in BarLineChartViewBase (#3043)

* Removed redundant ivars in favour of proper access control

* Moved initialization of axes to their declaration to keep the same optionality exposed.

* Update 4.0.0 with master (#3135)

* Replaced relevant `ChartUtils` methods with `Double` extensions (#2994)

* Replaced relevant `ChartUtils` methods with `Double` extensions

Improves readability.
`nextUp` is built in and provides the same functionality.

* Updated `ChartUtilsTests` to match changes

* add option to build demo projects unit tests on iOS (#3121)

* add option to build demo projects unit tests on iOS

* add ChartsDemo-OSX build test.

* Update ViewPortHandler.swift (#3143)

fix a small bug

* Refactored ChartUtils method into CGPoint extension (#3087)

* Refactored ChartUtils method into CGPoint extension

* Replaced ChartUtils.defaultValueFormatter()

* Codestyle fixes

* Finished cleanup

* Pulled master

* Chartdata collection conformance (#3023)

* Added Collection conformances

MutableCollection
RandomAccessCollection
RangeReplaceableCollection

* Fixed required initializers

* ChartData adopts ExressibleByArrayLiteral

* Updates for PR

Also added remove subrange.

* PR review fixes

* Removed unnecessary `get` from subscripts.

* Disabled `remove(at:)` for CombinedChartView

* Relocated `appendEntry(_:todataSet:)`

* Removed methods from CombinedChartData

* weak -> unowned (#3039)

* weak -> unowned

`ViewPortJob`s are owned by the Charts that make them. They are guaranteed to only exist while the chart exists. The `Transformer` and `ViewPortHandler` are supplied by the chart, so they will also only exist while the chart exists. Therefor none of them need to be `weak`, but can be `unowned` instead. It's a minor change in the code base (removing some guard statements), but it makes it much easier to discern how the framework is architected.

* pulled latest master

* Removed optionality from valueFormatter where appropriate (#3106)

* Removed optionality from valueFormatter where appropriate

In ChartBaseDataSet, `valueFormatter` never returned nil, and escaped early if trying to set it to nil. It appears this was made optional solely to provide lazy initialization. We now use a lazy var instead.

In AxisBase, the backing var `_axisValueFormatter` would never be treated as nil, and appears to be made optional solely to provide lazy initialization. We now use a lazy var instead. In `valueFormatter` we can remove the `nil` check, but leave it optional to keep the same functionality.

* Pulled 4.0.0

* Pulled latest 4.0.0

* Fixed pro file

* Chartdata collection refactor (#3024)

* Added Collection conformances

MutableCollection
RandomAccessCollection
RangeReplaceableCollection

* [#3018] Refactored use of `ChartData` to use new `Collection` conformances

* Fixed required initializers

* ChartData adopts ExressibleByArrayLiteral

* Modified demos to take advantage of collection conformance.

* Removed unnecessary `get` from subscripts.

* Removed redundant methods

* Relocated `appendEntry(_:todataSet:)`

* Removed methods from CombinedChartData

* Moved the default value formatter (#3088)

* Moved the default value formatter

It is now simply `DefaultValueFomatter()`
Removed unnecessary backing ivars in `DefaultValuetFormatter` in favour of property observers
Deprecated static func constructor in favour of initializer

* Add option to rotate value text for line charts

* Add value text rotation for bar charts

* Add value text rotation for other charts

* Fixed misuse/deprecation of "!" operator

* Updated projects for Xcode 9.3 and Swift 4.1
added a workspace to include all demos with the project to make it easier to test changes

* Pulled master

* Moved travis to Xcode 9.3beta temporarily

* Updated Rakefile for new project names

* Updated demo imports

* Rename valueRotationAngle -> valueLabelAngle

* Make function private & remove line break

* Refactored ChartData (#3169)

* Added Collection conformances

MutableCollection
RandomAccessCollection
RangeReplaceableCollection

* [#3018]

Refactored use of `ChartData` to use new `Collection` conformances

* Fixed required initializers

* ChartData adopts ExressibleByArrayLiteral

* Modified demos

to take advantage of collection conformance.

* Updates for PR

Also added remove subrange.

* Refactored ChartData

Removed redundancy from min/max logic.
Lots of naming changes.
Cleaner implementations.

* PR review fixes

* Removed unnecessary `get` from subscripts.

* Disabled `remove(at:)` for CombinedChartView

* Removed redundant methods

* Relocated `appendEntry(_:todataSet:)`

* pulled latest 4.0.0

* Disabled Collection support for CombinedChartData

* Removed methods from CombinedChartData

* Pulled latest 4.0

* Fixes after merge

* Removed used of dataSet(forIndex:)

* Fixed merge conflicts

* Fixed merge conflicts

* updated demos

* Pulled latest 4.0.0

* Fixed demos

* Fixed objective c demos

* Moved travis to Xcode 9.3 beta temporarily

* Fixed macOS demo info.plist and tv demo device name

* PR Fixes

* Fixed objective-c naming

* PR Fixes

* fix comment

* Remove unnecessary file (#3432)

* Dataset logic cleanup (#3001)

* Cleaned up `ChartDataSet` logic

Added TODOs for areas where simple changes can help improve Swift consistency.

* Tidied up logic for `ChartDataSet` subclasses

Minor changes to take advantage of Swift features and help improve readability.

* Added Collection conformances

MutableCollection
RandomAccessCollection
RangeReplaceableCollection

* [#3018]

Refactored use of `ChartData` to use new `Collection` conformances

* Fixed required initializers

* ChartData adopts ExressibleByArrayLiteral

* Modified demos

to take advantage of collection conformance.

* Pulled latest master

* Pulled latest master

* Updates for PR

Also added remove subrange.

* Refactored ChartData

Removed redundancy from min/max logic.
Lots of naming changes.
Cleaner implementations.

* PR review fixes

* Removed unnecessary `get` from subscripts.

* Disabled `remove(at:)` for CombinedChartView

* Removed redundant methods

* Relocated `appendEntry(_:todataSet:)`

* pulled latest 4.0.0

* Disabled Collection support for CombinedChartData

* Removed methods from CombinedChartData

* Pulled latest 4.0

* Fixes after merge

* Removed used of dataSet(forIndex:)

* Fixed merge conflicts

* Fixed merge conflicts

* updated demos

* Pulled latest 4.0.0

* Fixed demos

* Fixed objective c demos

* Moved travis to Xcode 9.3 beta temporarily

* Fixed macOS demo info.plist and tv demo device name

* PR Fixes

* Fixed objective-c naming

* PR Fixes

* PR Fixes

* Added gradient line drawing to LineChartRenderer

* Stabilize and clean the code

* Extract line drawing into function

* Fix macOS build

* Move `drawGradientLine` out of `drawLine` method

* Remove unused parameters from `drawLine` function

* Fix gradient location calculation

* Add toggle gradient line into demo options

* Improvements after code review

* Code cleanup

* Remove unnecessary function for generating gradient line

- additional code optimizations

* Fix: gradient lines peaks are truncated when line width > 1

* Make legendRenderer property public in order to be externally customizable

* fix build issue in objc demo

* Add minimum slice angle for value labels to PieChartView

* Rename drawSliceTextMinimumAngle to sliceTextDrawingThreshold

* Fix sliceTextDrawingThreshold renaming in demo

* fix build of demos

* Add label colors to legend entries (#3558)

* add label colors to legend entries

* Change interface of LegendEntry

* Add Swift version 4.1 to podspec

* Turned  gradient components and locations into constants (#3775)

* Cleaned up `ChartDataSet` logic

Added TODOs for areas where simple changes can help improve Swift consistency.

* Added Collection conformances

MutableCollection
RandomAccessCollection
RangeReplaceableCollection

* [#3018]

Refactored use of `ChartData` to use new `Collection` conformances

* Fixed required initializers

* ChartData adopts ExressibleByArrayLiteral

* Modified demos

to take advantage of collection conformance.

* Pulled latest master

* Unified Style

Replaced custom algorithms with built-in ones
Made axis renderer implementations feel "Swift-ier"

* Updates for PR

Also added remove subrange.

* Refactored ChartData

Removed redundancy from min/max logic.
Lots of naming changes.
Cleaner implementations.

* Fixed horizontal barchart bug,

* Removed unnecessary `get` from subscripts.

* Disabled `remove(at:)` for CombinedChartView

* Relocated `appendEntry(_:todataSet:)`

* Disabled Collection support for CombinedChartData

* Removed used of dataSet(forIndex:)

* Fixed merge conflicts

* updated demos

* PR Fixes

* Fixed axisLabels calculation

* Fill rewrite (#3084)

close #3140
* Fill is now a protocol

Different fill logic is broken up into separate classes. This has a few benefits:
1. It makes the `Fill` types more readable (logic is grouped together)
2. No optionals
3. Most importantly it allows consumers to create new Fill types without looking into the framework.

* Added super.init() for objc

* Updated Fill access

No need to subclass existing fills now that the system is more flexible. If functionality is needed from another fill, user can call it within their own `fillPath(context: CGContext, rect: CGRect)` implementation.

* Updated Fill Names

* Update Fill.swift

update code style

Co-authored-by: Jacob Christie <jchristie@christie.teamspace.ad>
Co-authored-by: Xuan <liuxuan30@gmail.com>

* update to Swift 5, Xcode 13.5.1, and fix warnings

* fix all compile errors and wrong symbols either by git or me.

* revert back to convenience init for BarChartDataSet
fix ChartDataTests compile errors: use new API dataSet(forLabel:, ignorecase: )

* actually, I compared the old master and find this is a mistake while merging to make init(label:) in BarChartDataSet. It should be in ChartDataSet.

* fix -0.0 issue in 4.0 merge. fix func calculateLegendOffsets in BarLineChartViewBase due to mistaking added back offsetBottom += xAxis.labelRotatedHeight. see #4277 for details
now bar & horizontal bar chart tests should pass.

* fix pie chart UT failures. didSet will no be called in init(), so we call it manually
also fix set.valueFormatter in data setter

* fix line chart UT failures

* Remove `isIndirectValuesCall`

* Bump Travis to Xcode 12

* Remove misuse of `count` (#4461)

* Remove misuse of `count`

* Fix protocol method name

* Update ChartColorTemplates.swift

use fallbackColor for `colorFromString()`

* Revert "Update ChartColorTemplates.swift"

This reverts commit b4111fd.

Co-authored-by: Xuan <liuxuan30@gmail.com>

* switch to source compiling swift code

* fix Carthage error after changing to source compile. Carthage/Carthage#3019

there is a workaround mentioned [here](Carthage/Carthage#3019 (comment))
making travis to build from carthage.sh until the root issue is fixed.

* update project settings

* recreate iOS+tvOS images due to iOS14 SDK uncertain changes.

* Remove unnecessary ternary in boolean expression (#4435)

* Remove internal use of datasets (#4459)

* Remove internal use of ChartData.dataSets

* Rebased onto ResolveConflicts

* Remove duplicated line

Co-authored-by: jjatie <j.christie@icloud.com>
Co-authored-by: ctran <chinh.tran@mail.de>
Co-authored-by: larryonoff <larryonoff@gmail.com>
Co-authored-by: Jacob Christie <jakechristie@dal.ca>
Co-authored-by: Katalin Nagy <nagy.katalin@codespring.ro>
Co-authored-by: Pierre-Marc Airoldi <pierremarcairoldi@gmail.com>
Co-authored-by: Marshall Weir <marshall.weir@gmail.com>
Co-authored-by: Jacob Christie <jacob.christie@kinduct.com>
Co-authored-by: Jacob Christie <19879272+jjatie@users.noreply.github.com>
Co-authored-by: Jacob Christie <jchristie@christie.teamspace.ad>
Co-authored-by: BJ Miller <2272819+SixFiveSoftware@users.noreply.github.com>
mosaic-engineering pushed a commit to mosaic-io/Charts that referenced this pull request Dec 3, 2020
* Remove java interface convention (ChartsOrg#2997)

* Renamed `IMarker` to `Marker`

following Swift API guidelines.

* Renamed `IAxisValueFormatter` to `AxisValueFormatter`

* Renamed `IFillFormatter` to `FillFormatter`

* Renamed `IValueFormatter` to `ValueFormatter`

* Renamed `IHighlighter` to `Highlighter`

* Renamed `I*DataSet` to `*DataSetProtocol` to follow Swift API guidelines

* Fixed naming of `LineRadarChartDataSetProtocol` and `RadarChartDataSetProtocol` from previous commit

* Renamed "Interfaces" to "DataProviders" for clarity

* Updated Demos to for new type naming

* Renderer protocols (ChartsOrg#3136)

* Renderer is now a protocol

Renamed Renderers, and organized the Renderer folder.

* DataRenderer is now a protocol

* AxisRenderer is now a protocol

* Chartviewbase redundant ivar (ChartsOrg#3045)

* Fixed using wrong axis (Issue ChartsOrg#2257)

* fix ChartsOrg#1830. credit from ChartsOrg#2049 (ChartsOrg#2874)

* fix ChartsOrg#1830. credit from ChartsOrg#2049

* add combined chart unit tests for iOS, tvOS (macOS only have build process)

* use iterater rather than index

* Removed redundant ivars in BarLineChartViewBase (ChartsOrg#3043)

* Removed redundant ivars in favour of proper access control

* Moved initialization of axes to their declaration to keep the same optionality exposed.

* Update 4.0.0 with master (ChartsOrg#3135)

* Replaced relevant `ChartUtils` methods with `Double` extensions (ChartsOrg#2994)

* Replaced relevant `ChartUtils` methods with `Double` extensions

Improves readability.
`nextUp` is built in and provides the same functionality.

* Updated `ChartUtilsTests` to match changes

* add option to build demo projects unit tests on iOS (ChartsOrg#3121)

* add option to build demo projects unit tests on iOS

* add ChartsDemo-OSX build test.

* Update ViewPortHandler.swift (ChartsOrg#3143)

fix a small bug

* Refactored ChartUtils method into CGPoint extension (ChartsOrg#3087)

* Refactored ChartUtils method into CGPoint extension

* Replaced ChartUtils.defaultValueFormatter()

* Codestyle fixes

* ChartViewBase cleanup

For the most part, condensing logic and using `guard` where appropriate
Removed optionality of many internal variables as they were only optional to allow for deferred initialization. This is now replaced with lazy vars.
Removed empty initializer overrides.
`fileprivate` is now `private`

* Removed redundant ivars

In favour of proper access control

* Fixes after merge

* Renamed `animator` to `chartAnimator`

on `ChartViewBase` to no conflict with `NSView`'s `animator()` method.

* pulled latest master

* Code style fix

* Removed AxisRendererBase.swift

* Fixed demos

* BarChartRenderer Logic cleanup (ChartsOrg#3008)

* Logic cleanup

Mostly using guard where appropriate
Few very minor performance improvements

* Made use of `==` where appropriate to simplify logic

* Returned fatalError message

* Replaced `Buffer` class

with simple typealias. There was only one instance where reference semantics might have be helpful, but was easily reimplemented with value semantics.

* Syncing 4.0.0 with master (ChartsOrg#3160)

* Fixed using wrong axis (Issue ChartsOrg#2257)

* fix ChartsOrg#1830. credit from ChartsOrg#2049 (ChartsOrg#2874)

* fix ChartsOrg#1830. credit from ChartsOrg#2049

* add combined chart unit tests for iOS, tvOS (macOS only have build process)

* use iterater rather than index

* Removed redundant ivars in BarLineChartViewBase (ChartsOrg#3043)

* Removed redundant ivars in favour of proper access control

* Moved initialization of axes to their declaration to keep the same optionality exposed.

* Update 4.0.0 with master (ChartsOrg#3135)

* Replaced relevant `ChartUtils` methods with `Double` extensions (ChartsOrg#2994)

* Replaced relevant `ChartUtils` methods with `Double` extensions

Improves readability.
`nextUp` is built in and provides the same functionality.

* Updated `ChartUtilsTests` to match changes

* add option to build demo projects unit tests on iOS (ChartsOrg#3121)

* add option to build demo projects unit tests on iOS

* add ChartsDemo-OSX build test.

* Update ViewPortHandler.swift (ChartsOrg#3143)

fix a small bug

* Refactored ChartUtils method into CGPoint extension (ChartsOrg#3087)

* Refactored ChartUtils method into CGPoint extension

* Replaced ChartUtils.defaultValueFormatter()

* Codestyle fixes

* Minor cleanup to Highlighter types (ChartsOrg#3003)

* Minor cleanup to Highlighter types

* Fixes for PR

* Pulled master and updated code style

* added DataApproximator+N extension (ChartsOrg#2848)

* added DataApproximator+N extension

* fixed PR notes

* Readded in missing files

* Moved ChartUtils drawing methods into CGContext extension (ChartsOrg#3086)

* Fixed using wrong axis (Issue ChartsOrg#2257)

* fix ChartsOrg#1830. credit from ChartsOrg#2049 (ChartsOrg#2874)

* fix ChartsOrg#1830. credit from ChartsOrg#2049

* add combined chart unit tests for iOS, tvOS (macOS only have build process)

* use iterater rather than index

* Removed redundant ivars in BarLineChartViewBase (ChartsOrg#3043)

* Removed redundant ivars in favour of proper access control

* Moved initialization of axes to their declaration to keep the same optionality exposed.

* Update 4.0.0 with master (ChartsOrg#3135)

* Replaced relevant `ChartUtils` methods with `Double` extensions (ChartsOrg#2994)

* Replaced relevant `ChartUtils` methods with `Double` extensions

Improves readability.
`nextUp` is built in and provides the same functionality.

* Updated `ChartUtilsTests` to match changes

* add option to build demo projects unit tests on iOS (ChartsOrg#3121)

* add option to build demo projects unit tests on iOS

* add ChartsDemo-OSX build test.

* Update ViewPortHandler.swift (ChartsOrg#3143)

fix a small bug

* Refactored ChartUtils method into CGPoint extension (ChartsOrg#3087)

* Refactored ChartUtils method into CGPoint extension

* Replaced ChartUtils.defaultValueFormatter()

* Codestyle fixes

* Minor cleanup to Highlighter types (ChartsOrg#3003)

* Minor cleanup to Highlighter types

* Fixes for PR

* Pulled master and updated code style

* added DataApproximator+N extension (ChartsOrg#2848)

* added DataApproximator+N extension

* fixed PR notes

* Moved drawing methods into CGContext extension

Much nicer call sites.
Renamed some parameter names.
Removed `NSAttributedStringKey` where type inference was sufficient.
Minor tidy of drawText calls in AxisRenderers

* Pulled latest master

* Pulled master

* Fixed code style

* Utils Cleanup (ChartsOrg#3054)

* Cleanup

Replaced unnecessary getters with proper access control
Replaced unnecessary convenience inits with default parameters
Minor refactoring

* Pulled latest master

* Pulled latest master

* Pulled latest master

* Fix after pulling master

* Fixed using wrong axis (Issue ChartsOrg#2257)

* fix ChartsOrg#1830. credit from ChartsOrg#2049 (ChartsOrg#2874)

* fix ChartsOrg#1830. credit from ChartsOrg#2049

* add combined chart unit tests for iOS, tvOS (macOS only have build process)

* use iterater rather than index

* Removed redundant ivars in BarLineChartViewBase (ChartsOrg#3043)

* Removed redundant ivars in favour of proper access control

* Moved initialization of axes to their declaration to keep the same optionality exposed.

* Update 4.0.0 with master (ChartsOrg#3135)

* Replaced relevant `ChartUtils` methods with `Double` extensions (ChartsOrg#2994)

* Replaced relevant `ChartUtils` methods with `Double` extensions

Improves readability.
`nextUp` is built in and provides the same functionality.

* Updated `ChartUtilsTests` to match changes

* add option to build demo projects unit tests on iOS (ChartsOrg#3121)

* add option to build demo projects unit tests on iOS

* add ChartsDemo-OSX build test.

* Update ViewPortHandler.swift (ChartsOrg#3143)

fix a small bug

* Refactored ChartUtils method into CGPoint extension (ChartsOrg#3087)

* Refactored ChartUtils method into CGPoint extension

* Replaced ChartUtils.defaultValueFormatter()

* Codestyle fixes

* Finished cleanup

* Pulled master

* Chartdata collection conformance (ChartsOrg#3023)

* Added Collection conformances

MutableCollection
RandomAccessCollection
RangeReplaceableCollection

* Fixed required initializers

* ChartData adopts ExressibleByArrayLiteral

* Updates for PR

Also added remove subrange.

* PR review fixes

* Removed unnecessary `get` from subscripts.

* Disabled `remove(at:)` for CombinedChartView

* Relocated `appendEntry(_:todataSet:)`

* Removed methods from CombinedChartData

* weak -> unowned (ChartsOrg#3039)

* weak -> unowned

`ViewPortJob`s are owned by the Charts that make them. They are guaranteed to only exist while the chart exists. The `Transformer` and `ViewPortHandler` are supplied by the chart, so they will also only exist while the chart exists. Therefor none of them need to be `weak`, but can be `unowned` instead. It's a minor change in the code base (removing some guard statements), but it makes it much easier to discern how the framework is architected.

* pulled latest master

* Removed optionality from valueFormatter where appropriate (ChartsOrg#3106)

* Removed optionality from valueFormatter where appropriate

In ChartBaseDataSet, `valueFormatter` never returned nil, and escaped early if trying to set it to nil. It appears this was made optional solely to provide lazy initialization. We now use a lazy var instead.

In AxisBase, the backing var `_axisValueFormatter` would never be treated as nil, and appears to be made optional solely to provide lazy initialization. We now use a lazy var instead. In `valueFormatter` we can remove the `nil` check, but leave it optional to keep the same functionality.

* Pulled 4.0.0

* Pulled latest 4.0.0

* Fixed pro file

* Chartdata collection refactor (ChartsOrg#3024)

* Added Collection conformances

MutableCollection
RandomAccessCollection
RangeReplaceableCollection

* [ChartsOrg#3018] Refactored use of `ChartData` to use new `Collection` conformances

* Fixed required initializers

* ChartData adopts ExressibleByArrayLiteral

* Modified demos to take advantage of collection conformance.

* Removed unnecessary `get` from subscripts.

* Removed redundant methods

* Relocated `appendEntry(_:todataSet:)`

* Removed methods from CombinedChartData

* Moved the default value formatter (ChartsOrg#3088)

* Moved the default value formatter

It is now simply `DefaultValueFomatter()`
Removed unnecessary backing ivars in `DefaultValuetFormatter` in favour of property observers
Deprecated static func constructor in favour of initializer

* Add option to rotate value text for line charts

* Add value text rotation for bar charts

* Add value text rotation for other charts

* Fixed misuse/deprecation of "!" operator

* Updated projects for Xcode 9.3 and Swift 4.1
added a workspace to include all demos with the project to make it easier to test changes

* Pulled master

* Moved travis to Xcode 9.3beta temporarily

* Updated Rakefile for new project names

* Updated demo imports

* Rename valueRotationAngle -> valueLabelAngle

* Make function private & remove line break

* Refactored ChartData (ChartsOrg#3169)

* Added Collection conformances

MutableCollection
RandomAccessCollection
RangeReplaceableCollection

* [ChartsOrg#3018]

Refactored use of `ChartData` to use new `Collection` conformances

* Fixed required initializers

* ChartData adopts ExressibleByArrayLiteral

* Modified demos

to take advantage of collection conformance.

* Updates for PR

Also added remove subrange.

* Refactored ChartData

Removed redundancy from min/max logic.
Lots of naming changes.
Cleaner implementations.

* PR review fixes

* Removed unnecessary `get` from subscripts.

* Disabled `remove(at:)` for CombinedChartView

* Removed redundant methods

* Relocated `appendEntry(_:todataSet:)`

* pulled latest 4.0.0

* Disabled Collection support for CombinedChartData

* Removed methods from CombinedChartData

* Pulled latest 4.0

* Fixes after merge

* Removed used of dataSet(forIndex:)

* Fixed merge conflicts

* Fixed merge conflicts

* updated demos

* Pulled latest 4.0.0

* Fixed demos

* Fixed objective c demos

* Moved travis to Xcode 9.3 beta temporarily

* Fixed macOS demo info.plist and tv demo device name

* PR Fixes

* Fixed objective-c naming

* PR Fixes

* fix comment

* Remove unnecessary file (ChartsOrg#3432)

* Dataset logic cleanup (ChartsOrg#3001)

* Cleaned up `ChartDataSet` logic

Added TODOs for areas where simple changes can help improve Swift consistency.

* Tidied up logic for `ChartDataSet` subclasses

Minor changes to take advantage of Swift features and help improve readability.

* Added Collection conformances

MutableCollection
RandomAccessCollection
RangeReplaceableCollection

* [ChartsOrg#3018]

Refactored use of `ChartData` to use new `Collection` conformances

* Fixed required initializers

* ChartData adopts ExressibleByArrayLiteral

* Modified demos

to take advantage of collection conformance.

* Pulled latest master

* Pulled latest master

* Updates for PR

Also added remove subrange.

* Refactored ChartData

Removed redundancy from min/max logic.
Lots of naming changes.
Cleaner implementations.

* PR review fixes

* Removed unnecessary `get` from subscripts.

* Disabled `remove(at:)` for CombinedChartView

* Removed redundant methods

* Relocated `appendEntry(_:todataSet:)`

* pulled latest 4.0.0

* Disabled Collection support for CombinedChartData

* Removed methods from CombinedChartData

* Pulled latest 4.0

* Fixes after merge

* Removed used of dataSet(forIndex:)

* Fixed merge conflicts

* Fixed merge conflicts

* updated demos

* Pulled latest 4.0.0

* Fixed demos

* Fixed objective c demos

* Moved travis to Xcode 9.3 beta temporarily

* Fixed macOS demo info.plist and tv demo device name

* PR Fixes

* Fixed objective-c naming

* PR Fixes

* PR Fixes

* Added gradient line drawing to LineChartRenderer

* Stabilize and clean the code

* Extract line drawing into function

* Fix macOS build

* Move `drawGradientLine` out of `drawLine` method

* Remove unused parameters from `drawLine` function

* Fix gradient location calculation

* Add toggle gradient line into demo options

* Improvements after code review

* Code cleanup

* Remove unnecessary function for generating gradient line

- additional code optimizations

* Fix: gradient lines peaks are truncated when line width > 1

* Make legendRenderer property public in order to be externally customizable

* fix build issue in objc demo

* Add minimum slice angle for value labels to PieChartView

* Rename drawSliceTextMinimumAngle to sliceTextDrawingThreshold

* Fix sliceTextDrawingThreshold renaming in demo

* fix build of demos

* Add label colors to legend entries (ChartsOrg#3558)

* add label colors to legend entries

* Change interface of LegendEntry

* Add Swift version 4.1 to podspec

* Turned  gradient components and locations into constants (ChartsOrg#3775)

* Cleaned up `ChartDataSet` logic

Added TODOs for areas where simple changes can help improve Swift consistency.

* Added Collection conformances

MutableCollection
RandomAccessCollection
RangeReplaceableCollection

* [ChartsOrg#3018]

Refactored use of `ChartData` to use new `Collection` conformances

* Fixed required initializers

* ChartData adopts ExressibleByArrayLiteral

* Modified demos

to take advantage of collection conformance.

* Pulled latest master

* Unified Style

Replaced custom algorithms with built-in ones
Made axis renderer implementations feel "Swift-ier"

* Updates for PR

Also added remove subrange.

* Refactored ChartData

Removed redundancy from min/max logic.
Lots of naming changes.
Cleaner implementations.

* Fixed horizontal barchart bug,

* Removed unnecessary `get` from subscripts.

* Disabled `remove(at:)` for CombinedChartView

* Relocated `appendEntry(_:todataSet:)`

* Disabled Collection support for CombinedChartData

* Removed used of dataSet(forIndex:)

* Fixed merge conflicts

* updated demos

* PR Fixes

* Fixed axisLabels calculation

* Fill rewrite (ChartsOrg#3084)

close ChartsOrg#3140
* Fill is now a protocol

Different fill logic is broken up into separate classes. This has a few benefits:
1. It makes the `Fill` types more readable (logic is grouped together)
2. No optionals
3. Most importantly it allows consumers to create new Fill types without looking into the framework.

* Added super.init() for objc

* Updated Fill access

No need to subclass existing fills now that the system is more flexible. If functionality is needed from another fill, user can call it within their own `fillPath(context: CGContext, rect: CGRect)` implementation.

* Updated Fill Names

* Update Fill.swift

update code style

Co-authored-by: Jacob Christie <jchristie@christie.teamspace.ad>
Co-authored-by: Xuan <liuxuan30@gmail.com>

* update to Swift 5, Xcode 13.5.1, and fix warnings

* fix all compile errors and wrong symbols either by git or me.

* revert back to convenience init for BarChartDataSet
fix ChartDataTests compile errors: use new API dataSet(forLabel:, ignorecase: )

* actually, I compared the old master and find this is a mistake while merging to make init(label:) in BarChartDataSet. It should be in ChartDataSet.

* fix -0.0 issue in 4.0 merge. fix func calculateLegendOffsets in BarLineChartViewBase due to mistaking added back offsetBottom += xAxis.labelRotatedHeight. see ChartsOrg#4277 for details
now bar & horizontal bar chart tests should pass.

* fix pie chart UT failures. didSet will no be called in init(), so we call it manually
also fix set.valueFormatter in data setter

* fix line chart UT failures

* Remove `isIndirectValuesCall`

* Bump Travis to Xcode 12

* Remove misuse of `count` (ChartsOrg#4461)

* Remove misuse of `count`

* Fix protocol method name

* Update ChartColorTemplates.swift

use fallbackColor for `colorFromString()`

* Revert "Update ChartColorTemplates.swift"

This reverts commit b4111fd.

Co-authored-by: Xuan <liuxuan30@gmail.com>

* switch to source compiling swift code

* fix Carthage error after changing to source compile. Carthage/Carthage#3019

there is a workaround mentioned [here](Carthage/Carthage#3019 (comment))
making travis to build from carthage.sh until the root issue is fixed.

* update project settings

* recreate iOS+tvOS images due to iOS14 SDK uncertain changes.

* Remove unnecessary ternary in boolean expression (ChartsOrg#4435)

* Remove internal use of datasets (ChartsOrg#4459)

* Remove internal use of ChartData.dataSets

* Rebased onto ResolveConflicts

* Remove duplicated line

Co-authored-by: jjatie <j.christie@icloud.com>
Co-authored-by: ctran <chinh.tran@mail.de>
Co-authored-by: larryonoff <larryonoff@gmail.com>
Co-authored-by: Jacob Christie <jakechristie@dal.ca>
Co-authored-by: Katalin Nagy <nagy.katalin@codespring.ro>
Co-authored-by: Pierre-Marc Airoldi <pierremarcairoldi@gmail.com>
Co-authored-by: Marshall Weir <marshall.weir@gmail.com>
Co-authored-by: Jacob Christie <jacob.christie@kinduct.com>
Co-authored-by: Jacob Christie <19879272+jjatie@users.noreply.github.com>
Co-authored-by: Jacob Christie <jchristie@christie.teamspace.ad>
Co-authored-by: BJ Miller <2272819+SixFiveSoftware@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants