From 92cb62943125dc6cf95c14968987beaa5fb6c63c Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Wed, 5 Feb 2020 19:40:16 -0500 Subject: [PATCH 001/245] Fixed crashing bug when effectiveAppearance is not available (macOS < 10.14). Fixed issue #422. --- framework/MacOnly/CPTGraphHostingView.m | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/framework/MacOnly/CPTGraphHostingView.m b/framework/MacOnly/CPTGraphHostingView.m index 531d6b06b..63486a6df 100644 --- a/framework/MacOnly/CPTGraphHostingView.m +++ b/framework/MacOnly/CPTGraphHostingView.m @@ -73,10 +73,15 @@ -(void)commonInit self.locationInWindow = NSZeroPoint; self.scrollOffset = CGPointZero; - [self addObserver:self - forKeyPath:@"effectiveAppearance" - options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld | NSKeyValueObservingOptionInitial - context:CPTGraphHostingViewKVOContext]; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wundeclared-selector" + if ( [[self class] instancesRespondToSelector:@selector(effectiveAppearance)] ) { + [self addObserver:self + forKeyPath:@"effectiveAppearance" + options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld | NSKeyValueObservingOptionInitial + context:CPTGraphHostingViewKVOContext]; + } +#pragma clang diagnostic pop if ( !self.superview.wantsLayer ) { self.layer = [self makeBackingLayer]; @@ -107,7 +112,12 @@ -(void)dealloc [space removeObserver:self forKeyPath:@"isDragging" context:CPTGraphHostingViewKVOContext]; } - [self removeObserver:self forKeyPath:@"effectiveAppearance" context:CPTGraphHostingViewKVOContext]; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wundeclared-selector" + if ( [[self class] instancesRespondToSelector:@selector(effectiveAppearance)] ) { + [self removeObserver:self forKeyPath:@"effectiveAppearance" context:CPTGraphHostingViewKVOContext]; + } +#pragma clang diagnostic pop [hostedGraph removeFromSuperlayer]; } From 65551af1272819320121e15eab7a86cb053d2910 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 16 Feb 2020 08:42:19 -0500 Subject: [PATCH 002/245] Fixed pie chart drawing bug where the inner radius > 0, start angle == 0, and drawing in the clockwise direction. Fixed issue #421. --- framework/Source/CPTPieChart.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/Source/CPTPieChart.m b/framework/Source/CPTPieChart.m index 83bbda7c8..a189527b2 100644 --- a/framework/Source/CPTPieChart.m +++ b/framework/Source/CPTPieChart.m @@ -735,8 +735,8 @@ -(void)addSliceToPath:(nonnull CGMutablePathRef)slicePath centerPoint:(CGPoint)c if ( innerRadius > CPTFloat(0.0)) { if ( currentWidth >= CPTFloat(1.0)) { - CGPathAddArc(slicePath, NULL, center.x, center.y, outerRadius, startingAngle, startingAngle + CPTFloat(2.0 * M_PI), direction); - CGPathAddArc(slicePath, NULL, center.x, center.y, innerRadius, startingAngle + CPTFloat(2.0 * M_PI), startingAngle, !direction); + CGPathAddRelativeArc(slicePath, NULL, center.x, center.y, outerRadius, startingAngle, CPTFloat((direction ? 2.0 : -2.0) * M_PI)); + CGPathAddRelativeArc(slicePath, NULL, center.x, center.y, innerRadius, startingAngle, CPTFloat((direction ? -2.0 : 2.0) * M_PI)); } else { CGPathAddArc(slicePath, NULL, center.x, center.y, outerRadius, startingAngle, finishingAngle, direction); From 6bbf97de763b6f4bb9bdfca8743d10bd4bcb7bc8 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 22 Feb 2020 11:31:56 -0500 Subject: [PATCH 003/245] Updated http:// URLs to https:// everywhere, except for the few sites that don't support https. --- CorePlot-latest.podspec | 2 +- CorePlot.podspec | 2 +- README.md | 16 ++++++++-------- framework/MacOnly/CPTGraphHostingView.m | 2 +- framework/Source/CPTGradient.h | 2 +- framework/Source/CPTGradient.m | 2 +- framework/Source/CPTLineCap.m | 2 +- framework/Source/CPTLineStyle.m | 4 ++-- framework/Source/CPTNumericDataType.h | 2 +- framework/Source/CPTPlotSymbol.m | 2 +- framework/Source/CPTScatterPlot.m | 2 +- framework/Source/CPTShadow.m | 4 ++-- framework/Source/CPTUtilities.m | 2 +- framework/Source/mainpage.h | 14 +++++++------- 14 files changed, 29 insertions(+), 29 deletions(-) diff --git a/CorePlot-latest.podspec b/CorePlot-latest.podspec index 3b958f7e4..597cdda8f 100644 --- a/CorePlot-latest.podspec +++ b/CorePlot-latest.podspec @@ -5,7 +5,7 @@ Pod::Spec.new do |s| s.summary = 'Cocoa plotting framework for macOS, iOS, and tvOS.' s.homepage = 'https://github.com/core-plot' s.social_media_url = 'https://twitter.com/CorePlot' - s.documentation_url = 'http://core-plot.github.io' + s.documentation_url = 'https://core-plot.github.io' s.authors = { 'Drew McCormack' => 'drewmccormack@mac.com', 'Brad Larson' => 'larson@sunsetlakesoftware.com', diff --git a/CorePlot.podspec b/CorePlot.podspec index d6906a089..b02e100c9 100644 --- a/CorePlot.podspec +++ b/CorePlot.podspec @@ -5,7 +5,7 @@ Pod::Spec.new do |s| s.summary = 'Cocoa plotting framework for macOS, iOS, and tvOS.' s.homepage = 'https://github.com/core-plot' s.social_media_url = 'https://twitter.com/CorePlot' - s.documentation_url = 'http://core-plot.github.io' + s.documentation_url = 'https://core-plot.github.io' s.authors = { 'Drew McCormack' => 'drewmccormack@mac.com', 'Brad Larson' => 'larson@sunsetlakesoftware.com', diff --git a/README.md b/README.md index 2b6f54973..dc9e47455 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ *Cocoa plotting framework for macOS, iOS, and tvOS.* -[![Build Status](https://secure.travis-ci.org/core-plot/core-plot.svg)](http://travis-ci.org/core-plot/core-plot) [![Version Status](https://img.shields.io/cocoapods/v/CorePlot.svg)](https://cocoapods.org/pods/CorePlot) [![license MIT](https://img.shields.io/cocoapods/l/CorePlot.svg)](http://opensource.org/licenses/BSD-3-Clause) [![Platform](https://img.shields.io/cocoapods/p/CorePlot.svg)](http://core-plot.github.io) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) +[![Build Status](https://secure.travis-ci.org/core-plot/core-plot.svg)](https://travis-ci.org/core-plot/core-plot) [![Version Status](https://img.shields.io/cocoapods/v/CorePlot.svg)](https://cocoapods.org/pods/CorePlot) [![license MIT](https://img.shields.io/cocoapods/l/CorePlot.svg)](https://opensource.org/licenses/BSD-3-Clause) [![Platform](https://img.shields.io/cocoapods/p/CorePlot.svg)](https://core-plot.github.io) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) # Introduction @@ -17,8 +17,8 @@ See the [High Level Design Overview](https://github.com/core-plot/core-plot/wiki Documentation of the Core Plot API and high-level architecture can be found in the following places: * [Change log](https://github.com/core-plot/core-plot/blob/master/documentation/changelog.markdown) - * [API documentation](http://core-plot.github.io/MacOS/index.html) for Mac - * [API documentation](http://core-plot.github.io/iOS/index.html) for iOS and tvOS + * [API documentation](https://core-plot.github.io/MacOS/index.html) for Mac + * [API documentation](https://core-plot.github.io/iOS/index.html) for iOS and tvOS * API documentation built with [Doxygen](http://www.doxygen.org/) and installed locally in Xcode (see the [instructions](https://github.com/core-plot/core-plot/blob/master/READMEs/README%20for%20Docs%20Install.md) in the **READMEs** folder for details) * [Project Wiki](https://github.com/core-plot/core-plot/wiki) on GitHub * [Documentation](https://github.com/core-plot/core-plot/tree/master/documentation) folder in the code repository @@ -27,8 +27,8 @@ Documentation of the Core Plot API and high-level architecture can be found in t ## Q&A Sites - * [Core Plot](http://groups.google.com/group/coreplot-discuss) Google Group - * Stackoverflow.com [core-plot tag](http://stackoverflow.com/questions/tagged/core-plot) + * [Core Plot](https://groups.google.com/group/coreplot-discuss) Google Group + * Stackoverflow.com [core-plot tag](https://stackoverflow.com/questions/tagged/core-plot) ## Social Networks @@ -40,16 +40,16 @@ Core Plot is an open source project hosted on [GitHub](https://github.com/core-p * [core-plot](https://github.com/core-plot/core-plot): This is main code repository with the framework and all examples. This is where you will find the release packages, wiki pages, and issue tracker. - * [core-plot.github.io](https://github.com/core-plot/core-plot.github.io): This is the HTML API documentation. You can view the pages online at [http://core-plot.github.io](http://core-plot.github.io). + * [core-plot.github.io](https://github.com/core-plot/core-plot.github.io): This is the HTML API documentation. You can view the pages online at [https://core-plot.github.io](https://core-plot.github.io). ## Coding Standards Everyone has a their own preferred coding style, and no one way can be considered right. Nonetheless, in a project like Core Plot, with many developers contributing, it is worthwhile defining a set of basic coding standards to prevent a mishmash of different styles which can become frustrating when navigating the code base. See the file [CONTRIBUTING.md](https://github.com/core-plot/core-plot/blob/master/.github/CONTRIBUTING.md) found in the [.github](https://github.com/core-plot/core-plot/tree/master/.github) directory of the project source for specific guidelines. -Core Plot includes a [script](https://github.com/core-plot/core-plot/blob/master/scripts/format_core_plot.sh) to run [Uncrustify](http://uncrustify.sourceforge.net) on the source code to standardize the formatting. All source code will be formatted with this tool before being committed to the Core Plot repository. +Core Plot includes a [script](https://github.com/core-plot/core-plot/blob/master/scripts/format_core_plot.sh) to run [Uncrustify](https://github.com/uncrustify/uncrustify) on the source code to standardize the formatting. All source code will be formatted with this tool before being committed to the Core Plot repository. ## Testing Core Plot is intended to be applied in scientific, financial, and other domains where correctness is paramount. In order to assure the quality of the framework, unit testing is integrated. Good test coverage protects developers from introducing accidental regressions, and helps them to experiment and refactor without breaking existing code. See the [unit testing](https://github.com/core-plot/core-plot/wiki/Unit-Testing) wiki page for instructions on how to build unit tests for any new code you add to the project. # Support Core Plot -Flattr this +Flattr this diff --git a/framework/MacOnly/CPTGraphHostingView.m b/framework/MacOnly/CPTGraphHostingView.m index 63486a6df..8c93b2357 100644 --- a/framework/MacOnly/CPTGraphHostingView.m +++ b/framework/MacOnly/CPTGraphHostingView.m @@ -215,7 +215,7 @@ -(void)drawRect:(NSRect __unused)dirtyRect [transform concat]; // render CPTLayers recursively into the graphics context used for printing - // (thanks to Brad for the tip: http://stackoverflow.com/a/2791305/132867 ) + // (thanks to Brad for the tip: https://stackoverflow.com/a/2791305/132867 ) CGContextRef context = graphicsContext.graphicsPort; [self.hostedGraph recursivelyRenderInContext:context]; diff --git a/framework/Source/CPTGradient.h b/framework/Source/CPTGradient.h index b07f6d920..28db5148e 100644 --- a/framework/Source/CPTGradient.h +++ b/framework/Source/CPTGradient.h @@ -1,4 +1,4 @@ -// Based on CTGradient (http://blog.oofn.net/2006/01/15/gradients-in-cocoa/) +// Based on CTGradient (https://blog.oofn.net/2006/01/15/gradients-in-cocoa/) // CTGradient is in public domain (Thanks Chad Weider!) /// @file diff --git a/framework/Source/CPTGradient.m b/framework/Source/CPTGradient.m index 3d6028025..15b0da1cd 100644 --- a/framework/Source/CPTGradient.m +++ b/framework/Source/CPTGradient.m @@ -51,7 +51,7 @@ -(void)removeAllElements; * Radial gradients are drawn centered in the provided drawing region with position zero (@num{0}) * in the center and one (@num{1}) at the outer edge. * - * @note Based on @par{CTGradient} (http://blog.oofn.net/2006/01/15/gradients-in-cocoa/). + * @note Based on @par{CTGradient} (https://blog.oofn.net/2006/01/15/gradients-in-cocoa/). * @par{CTGradient} is in the public domain (Thanks Chad Weider!). **/ @implementation CPTGradient diff --git a/framework/Source/CPTLineCap.m b/framework/Source/CPTLineCap.m index 5350d1149..24bb04662 100644 --- a/framework/Source/CPTLineCap.m +++ b/framework/Source/CPTLineCap.m @@ -54,7 +54,7 @@ @implementation CPTLineCap /** @property BOOL usesEvenOddClipRule * @brief If @YES, the even-odd rule is used to draw the line cap, otherwise the non-zero winding number rule is used. - * @see Filling a Path in the Quartz 2D Programming Guide. + * @see Filling a Path in the Quartz 2D Programming Guide. **/ @synthesize usesEvenOddClipRule; diff --git a/framework/Source/CPTLineStyle.m b/framework/Source/CPTLineStyle.m index 2208471f6..4b2f0bda6 100644 --- a/framework/Source/CPTLineStyle.m +++ b/framework/Source/CPTLineStyle.m @@ -38,8 +38,8 @@ -(void)strokePathWithGradient:(nonnull CPTGradient *)gradient inContext:(nonnull * -# As a cut out mask over an area filled with a CPTFill (@ref lineFill) * -# Filled with a solid color (@ref lineColor) * - * @see See Apple’s Quartz 2D - * and CGContext + * @see See Apple’s Quartz 2D + * and CGContext * documentation for more information about each of these properties. **/ diff --git a/framework/Source/CPTNumericDataType.h b/framework/Source/CPTNumericDataType.h index 0898f7b60..e982851b3 100644 --- a/framework/Source/CPTNumericDataType.h +++ b/framework/Source/CPTNumericDataType.h @@ -14,7 +14,7 @@ typedef NS_ENUM (NSInteger, CPTDataTypeFormat) { /** * @brief Enumeration of memory arrangements for multi-dimensional data arrays. - * @see See Wikipedia for more information. + * @see See Wikipedia for more information. **/ typedef NS_CLOSED_ENUM(NSInteger, CPTDataOrder) { CPTDataOrderRowsFirst, ///< Numeric data is arranged in row-major order. diff --git a/framework/Source/CPTPlotSymbol.m b/framework/Source/CPTPlotSymbol.m index 9bae6be66..3537e2f2a 100644 --- a/framework/Source/CPTPlotSymbol.m +++ b/framework/Source/CPTPlotSymbol.m @@ -67,7 +67,7 @@ @implementation CPTPlotSymbol /** @property BOOL usesEvenOddClipRule * @brief If @YES, the even-odd rule is used to draw the symbol, otherwise the non-zero winding number rule is used. - * @see Filling a Path in the Quartz 2D Programming Guide. + * @see Filling a Path in the Quartz 2D Programming Guide. **/ @synthesize usesEvenOddClipRule; diff --git a/framework/Source/CPTScatterPlot.m b/framework/Source/CPTScatterPlot.m index d8417fc1f..28aa97f65 100644 --- a/framework/Source/CPTScatterPlot.m +++ b/framework/Source/CPTScatterPlot.m @@ -1471,7 +1471,7 @@ -(BOOL)monotonicViewPoints:(nonnull CGPoint *)viewPoints indexRange:(NSRange)ind return YES; } -// Compute the control points using the algorithm described at http://www.particleincell.com/blog/2012/bezier-splines/ +// Compute the control points using the algorithm described at https://www.particleincell.com/blog/2012/bezier-splines/ // cp1, cp2, and viewPoints should point to arrays of points with at least NSMaxRange(indexRange) elements each. -(void)computeBezierControlPoints:(nonnull CGPoint *)cp1 points2:(nonnull CGPoint *)cp2 forViewPoints:(nonnull CGPoint *)viewPoints indexRange:(NSRange)indexRange { diff --git a/framework/Source/CPTShadow.m b/framework/Source/CPTShadow.m index 6204c3943..65e247089 100644 --- a/framework/Source/CPTShadow.m +++ b/framework/Source/CPTShadow.m @@ -18,8 +18,8 @@ @interface CPTShadow() /** @brief Immutable wrapper for various shadow drawing properties. * - * @see See Apple’s Quartz 2D - * and CGContext + * @see See Apple’s Quartz 2D + * and CGContext * documentation for more information about each of these properties. * * In general, you will want to create a CPTMutableShadow if you want to customize properties. diff --git a/framework/Source/CPTUtilities.m b/framework/Source/CPTUtilities.m index 1a4641de6..3a644ca19 100644 --- a/framework/Source/CPTUtilities.m +++ b/framework/Source/CPTUtilities.m @@ -1114,7 +1114,7 @@ BOOL CPTEdgeInsetsEqualToEdgeInsets(CPTEdgeInsets insets1, CPTEdgeInsets insets2 /** @brief Computes the log modulus of the given value. * @param value The value. * @return The log modulus of the given value. - * @see A log transformation of positive and negative values for more information about the log-modulus transformation. + * @see A log transformation of positive and negative values for more information about the log-modulus transformation. **/ double CPTLogModulus(double value) { diff --git a/framework/Source/mainpage.h b/framework/Source/mainpage.h index 06ec0e648..3a6dd9495 100644 --- a/framework/Source/mainpage.h +++ b/framework/Source/mainpage.h @@ -12,7 +12,7 @@ * * See the High Level Design Overview * wiki for an overview of Core Plot's architecture and the - * Using Core Plot in an Application + * Using Core Plot in an Application * wiki for information on how to use Core Plot in your own application. * * @section documentation Documentation @@ -20,8 +20,8 @@ * Documentation of the Core Plot API and high-level architecture can be found in the following places: * * - Change log - * - API documentation for Mac - * - API documentation for iOS + * - API documentation for Mac + * - API documentation for iOS * - API documentation built with Doxygen and installed locally in Xcode * (see the instructions * in the READMEs folder for details) @@ -32,8 +32,8 @@ * * @subsection qasites Q&A Sites * - * - Core Plot Google Group - * - Stackoverflow.com core-plot tag + * - Core Plot Google Group + * - Stackoverflow.com core-plot tag * * @subsection socialnetworks Social Networks * @@ -47,7 +47,7 @@ * - core-plot: This is main code repository with the framework and all examples. * This is where you will find the release packages, wiki pages, and issue tracker. * - core-plot.github.io: This is the HTML API documentation. - * You can view the pages online at http://core-plot.github.io. + * You can view the pages online at https://core-plot.github.io. * * @subsection codingstandards Coding Standards * @@ -60,7 +60,7 @@ * directory of the project source for specific guidelines. * * Core Plot includes a script - * to run Uncrustify on the source code to standardize the formatting. + * to run Uncrustify on the source code to standardize the formatting. * All source code will be formatted with this tool before being committed to the Core Plot repository. * * @subsection testing Testing From 85432c6b5f7aaaf52a9d2cca0e1eb76789e72efa Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 22 Feb 2020 11:32:20 -0500 Subject: [PATCH 004/245] Updated the code formatting docs. --- scripts/README Automatic code formatting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/README Automatic code formatting.md b/scripts/README Automatic code formatting.md index 00737388c..ab7ee918d 100644 --- a/scripts/README Automatic code formatting.md +++ b/scripts/README Automatic code formatting.md @@ -1,6 +1,6 @@ Follow these steps to format the Core Plot code to conform with the coding guidelines. -1. Ensure [Uncrustify](http://uncrustify.sourceforge.net/), version 0.60 or later, is installed installed in **/usr/local/bin**. +1. Ensure [Uncrustify](http://uncrustify.sourceforge.net/), version 0.70 or later, is installed installed in **/usr/local/bin**. 2. Open the Terminal application and `cd` to the root directory of your local Core Plot source directory. From 5c48737c40d440def4a8cf7aecbc3ed23703d510 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 22 Feb 2020 11:33:10 -0500 Subject: [PATCH 005/245] Updated the contributing guidelines document and added it to the GitHub wiki pages. --- .github/CONTRIBUTING.md | 603 +++++++++++++++++++++------------------- 1 file changed, 316 insertions(+), 287 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 1165a8b3d..2d950ebf3 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,427 +1,456 @@ -Core Plot Coding Standards -========================== +# Core Plot Coding Standards Everyone has a their own preferred coding style, and no one way can be considered right. Nonetheless, in a project like Core Plot, with many developers contributing, it is worthwhile defining a set of basic coding standards, in order to prevent a mishmash of different styles arising, which can become frustrating when navigating the code base. This document defines the standards to which code in Core Plot should conform. -Naming ------- -Standard naming conventions are used throughout Core Plot, with the 'CPT' prefix used to avoid conflicts with other frameworks. +Core Plot uses the Uncrustify tool to maintain a consistent code formatting style. Refer to the "README Automatic code formatting.md" document in the Core Plot `/scripts` folder for instructions on setting up and using the code formatter. The formatter should be run before every code checkin. -As is typical in Cocoa, mixed case is used for identifiers, with classes beginning with a uppercase letter (e.g., `CPTPlot`, `CPTDecimalNumberValueTransformer`), and variables beginning with a lowercase letter (e.g., `plot`, `newTransformer`). Functions should begin with an uppercase letter (e.g., `CPTDecimalFromInt`), and constants should begin with the prefix 'kCPT' (e.g., `kCPTAxisExtent`). +## Naming + +Standard naming conventions are used throughout Core Plot, with the "CPT" prefix used to avoid conflicts with other frameworks. + +As is typical in Cocoa, mixed case is used for identifiers, with classes beginning with a uppercase letter (e.g., `CPTPlot`, `CPTDecimalNumberValueTransformer`), and variables beginning with a lowercase letter (e.g., `plot`, `newTransformer`). Functions should begin with an uppercase letter (e.g., `CPTDecimalFromInt`), and constants should begin with the prefix "kCPT" (e.g., `kCPTAxisExtent`). + +## Curly Brackets -Curly Brackets --------------- There are many different ways to indent code in C. In Core Plot, two different styles are used, based on the context, in line with Apple's own coding conventions. When declaring the interface of a class, curly brackets occur at the end of the first line, and on a separate line after all instance variables have been declared. All declarations inside the block are indented. - @interface CPTGraph : CPTLayer { - CPTAxisSet *axisSet; - CPTPlotArea *plotArea; - NSMutableArray *plots; - NSMutableArray *plotSpaces; - CPTFill *fill; - } - +```obj-c +@interface CPTGraph : CPTLayer { + CPTAxisSet *axisSet; + CPTPlotArea *plotArea; + NSMutableArray *plots; + NSMutableArray *plotSpaces; + CPTFill *fill; +} +``` + In defining a function or method, both curly brackets are isolated on a line. - -(CPTPlot *)plotWithIdentifier:(id )identifier - { - ... - } - -In all other uses (e.g., `for` loops, `if` statements), the first bracket is at the end of the first line in the block. +```obj-c +-(CPTPlot *)plotWithIdentifier:(id )identifier +{ + ... +} +``` - for (CPTPlot *plot in plots) { - if ( [[plot identifier] isEqual:identifier] ) return plot; +In all other uses (e.g., for loops, if statements), the first bracket is at the end of the first line in the block. + +```obj-c +for (CPTPlot *plot in plots) { + if ( [[plot identifier] isEqual:identifier] ) { + return plot; } - -Whenever a block spans more than one line, curly brackets should be used to avoid potentially introducing scoping bugs. For example, this statement is a single line, and does not need brackets +} +``` - if ( [[plot identifier] isEqual:identifier] ) return plot; +Curly brackets should always be used to avoid potentially introducing scoping bugs. Blocks containing a single statement should always use curly brackets, therefore single line statements like this are not allowed: -but if the `return` statement were to be added to the next line, curly brackets should be included +```obj-c +if ( [[plot identifier] isEqual:identifier] ) return plot; +``` - if ( [[plot identifier] isEqual:identifier] ) { - return plot; - } +That statement should be written with curly brackets like this: + +```obj-c +if ( [[plot identifier] isEqual:identifier] ) { + return plot; +} +``` + +## Indentation -Indentation ------------ -Indentation of blocks of code follows the default Xcode standard of 4 spaces. +Indentation of blocks of code follows the default Xcode standard of 4 spaces. When a method call is very long, spanning several lines, no new line characters should be inserted, unless this is for the purpose of making data appear in tabular form. Instead, the Xcode editor can be configured to perform code wrapping, with appropriate indentation. For example, this is acceptable - NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys: - @"one", [NSNumber numberWithInt:1], - @"two", [NSNumber numberWithInt:2], - @"three", [NSNumber numberWithInt:3], - nil]; +```obj-c +NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys: + @"one", [NSNumber numberWithInt:1], + @"two", [NSNumber numberWithInt:2], + @"three", [NSNumber numberWithInt:3], + nil]; +``` but the following is not - NSDictionary *dictionary = [NSDictionary dictionaryWithObject:@"one" - forKey:[NSNumber numberWithInt:1]]; +```obj-c +NSDictionary *dictionary = [NSDictionary dictionaryWithObject:@"one" forKey:[NSNumber +numberWithInt:1]]; +``` because the developer has inserted a new line rather than letting Xcode do the wrapping. -Whitespace ----------- +## Whitespace + Whitespace is used sparingly in method naming. Rather than this - - (id) initWithString:(NSString*)newString length:(NSUInteger)newLength; - +```obj-c +- (instancetype) initWithString:(NSString*)newString length:(NSUInteger)newLength; +``` + in Core Plot, the following should be used - -(id)initWithString:(NSString *)newString length:(NSUInteger)newLength; - -The example above shows that a space *is* used before any pointer-delimiting asterisk. +```obj-c +-(instancetype)initWithString:(NSString *)newString length:(NSUInteger)newLength; +``` + +The example above shows that a space is used before any pointer-delimiting asterisk. Whitespace should be used to help delimit blocks of code, but not excessively. A single line should be used between methods in a class, and other code blocks, as demonstrated by the following sample - #import "CPTXYAxisSet.h" - #import "CPTXYAxis.h" - #import "CPTDefinitions.h" - - @implementation CPTXYAxisSet - - -(id)init - { - if ((self = [super init])) { - CPTXYAxis *xAxis = [[CPTXYAxis alloc] init]; - xAxis.majorTickLength = 10.f; - CPTXYAxis *yAxis = [[CPTXYAxis alloc] init]; - yAxis.majorTickLength = -10.f; - - self.axes = [NSArray arrayWithObjects:xAxis, yAxis, nil]; - [xAxis release]; - [yAxis release]; - } - return self; - } +```obj-c +#import "CPTXYAxisSet.h" +#import "CPTXYAxis.h" +#import "CPTDefinitions.h" + +@implementation CPTXYAxisSet - -(CPTAxis *)xAxis - { - return [self.axes objectAtIndex:CPTCoordinateX]; +-(instancetype)init +{ + if ((self = [super init])) { + CPTXYAxis *xAxis = [[CPTXYAxis alloc] init]; + xAxis.majorTickLength = 10.f; + CPTXYAxis *yAxis = [[CPTXYAxis alloc] init]; + yAxis.majorTickLength = -10.f; + + self.axes = [NSArray arrayWithObjects:xAxis, yAxis, nil]; + [xAxis release]; + [yAxis release]; } + return self; +} + +-(CPTAxis *)xAxis +{ + return [self.axes objectAtIndex:CPTCoordinateX]; +} +``` Whitespace should be used inside expressions to make them more readable. Note, for example, that `self = [super init]` has been used in the initializer above, rather than the more compact but less readable `self=[super init]`. In the same way, a single space should be used after commas: - CPTPlot *plotOne, *plotTwo, *plotThree = nil; +```obj-c +CPTPlot *plotOne, *plotTwo, *plotThree = nil; +``` -Asterisk --------- -The convention used in Core Plot to locate an asterisk representing the pointer operator is to pair it with the variable to which it applies. +## Asterisk - NSString *string; - CPTPlot *plotOne, *plotTwo; - -The following variants *should not* be used +The convention used in Core Plot to locate an asterisk representing the pointer operator is to pair it with the variable to which it applies. - NSString* string; - CPTPlot * plotOne; +```obj-c +NSString *string; CPTPlot *plotOne, *plotTwo; +``` -Instance Variables ------------------- -Instance variables should be private or protected. No special naming convention should be used for instance variables, such as a standard letter prefix or underscore (e.g., `mString`, `_string`). +The following variants should not be used - @interface CPTGraph : CPTLayer { - @protected - CPTAxisSet *axisSet; - CPTPlotArea *plotArea; - NSMutableArray *plots; - NSMutableArray *plotSpaces; - CPTFill *fill; - } +```obj-c +NSString* string; CPTPlot * plotOne; +``` + +## Instance Variables - // property and method declarations - - @end +Instance variables should be private or protected. No special naming convention should be used for instance variables, such as a standard letter prefix or underscore (e.g., `mString`, `_string`). -Beginning with Core Plot 2.0, the minimum deployment target requires the modern Objective-C runtime. Core Plot classes should no longer declare instance variables in the header file and should instead declare public or private properties and rely on auto-synthesized instance variables. +```obj-c +@interface CPTGraph : CPTLayer { + @protected CPTAxisSet *axisSet; + CPTPlotArea *plotArea; + NSMutableArray *plots; + NSMutableArray *plotSpaces; + CPTFill *fill; +} +``` - @interface CPTGraph : CPTLayer - - // property and method declarations - - @end +## Methods -Methods -------- Methods are declared in a class header only if they have not already been declared in an ancestor class (e.g., `super`) or protocol. Methods such as `init` and `dealloc` thus need not be re-declared. -Method definitions *should not* include a semi-colon in the signature +Method definitions should not include a semi-colon in the signature - -(id)init; - { - ... - } +```obj-c +-(instancetype)init; +{ + ... +} +``` Although this can occasionally simplify coding, it is confusing to some developers, so it is not used in Core Plot. Private methods should be declared in a category in the class implementation (.m) file. - @interface CPTXYAxis () +```obj-c +@interface CPTXYAxis () - -(CGPoint)viewPointForCoordinateDecimalNumber:(NSDecimalNumber *)coordinateDecimal; +-(CGPoint)viewPointForCoordinateDecimalNumber:(NSDecimalNumber *)coordinateDecimal; - @end +@end +``` -Abstract methods — those that have no implementation in the declaring class, but are defined in a descendent class — can be declared in the header file in a separate category. This documents to developers that the method is abstract, and prevents the compiler issuing warnings about the missing implementation. +Abstract methods — those that have no implementation in the declaring class, but are defined in a descendent class — can be declared in the header file in a separate category. This documents to developers that the method is abstract, and prevents the compiler issuing warnings about the missing implementation. - @interface CPTAxis (AbstractMethods) +```obj-c +@interface CPTAxis (AbstractMethods) - -(void)drawInContext:(CGContextRef)theContext; +-(void)drawInContext:(CGContextRef)theContext; - @end +@end +``` + +## Pragmas -Pragmas -------- Pragmas are used in implementation (.m) files to split the file into easy to navigate sections. These sections also show up in the Xcode method popup. - #pragma mark - - #pragma mark Initialization +```obj-c +#pragma mark - #pragma mark Initialization - -(id)init - { - return [self initWithXScaleType:CPScaleTypeLinear yScaleType:CPTScaleTypeLinear]; - } +-(instancetype)init +{ + return [self initWithXScaleType:CPScaleTypeLinear yScaleType:CPTScaleTypeLinear]; +} - #pragma mark - - #pragma mark Drawing +#pragma mark - +#pragma mark Drawing - -(void)renderAsVectorInContext:(CGContextRef)theContext - { - [super renderAsVectorInContext:theContext]; // draw background fill - } +-(void)renderAsVectorInContext:(CGContextRef)theContext +{ + [super renderAsVectorInContext:theContext]; // draw background fill +} +``` Pragmas appear in pairs; the single hyphen in the first pragma is an indication to Xcode that it should insert a horizontal rule between sections in the method popup. -Properties ----------- +## Properties + Core Plot is designed to run on Mac OS X 10.5 and later, and iOS 3.0 and later. Core Plot makes use of Objective-C 2.0 features, such as properties, and embraces the so-called 'dot notation'. Where possible, synthesized properties should be used in place of hand written accessor methods. Properties are declared just under the instance variable block, like so - @interface CPTGraph : CPTLayer { - @protected - CPTAxisSet *axisSet; - CPTPlotArea *plotArea; - NSMutableArray *plots; - NSMutableArray *plotSpaces; - CPTFill *fill; - } +```obj-c +@interface CPTGraph : CPTLayer { + @protected + CPTAxisSet *axisSet; + CPTPlotArea *plotArea; + NSMutableArray *plots; NSMutableArray *plotSpaces; CPTFill *fill; +} + +@property (nonatomic, readwrite, retain) CPTAxisSet *axisSet; +@property (nonatomic, readwrite, retain) CPTPlotArea *plotArea; +@property (nonatomic, readonly, retain) CPTPlotSpace *defaultPlotSpace; +@property (nonatomic, readwrite, assign) CGRect plotAreaFrame; +@property (nonatomic, readwrite, retain) CPTFill *fill; +``` - @property (nonatomic, readwrite, retain) CPTAxisSet *axisSet; - @property (nonatomic, readwrite, retain) CPTPlotArea *plotArea; - @property (nonatomic, readonly, retain) CPTPlotSpace *defaultPlotSpace; - @property (nonatomic, readwrite, assign) CGRect plotAreaFrame; - @property (nonatomic, readwrite, retain) CPTFill *fill; - The `@synthesize` and/or `@dynamic` keywords should appear in the main class implementation at the top, before any methods are defined. - @implementation CPTGraph +```obj-c +@implementation CPTGraph - @synthesize axisSet; - @synthesize plotArea; - @synthesize defaultPlotSpace; - @synthesize fill; +@synthesize axisSet; +@synthesize plotArea; +@synthesize defaultPlotSpace; +@synthesize fill; - #pragma mark - - #pragma mark Init/Dealloc +#pragma mark - +#pragma mark Init/Dealloc - -(id)init - { +-(instancetype)init +{ +``` -Where possible, instance variables should not be accessed directly outside of the `init` and `dealloc` methods. Properties should be used everywhere else to provide support for KVO. Private read-write properties can be defined for those instance variables that should be read-only or inaccessible to other code. Simply include the `@property` declaration in a category in the implementation file as described above for private methods. For read-only properties, include the read-only `@property` declaration in the header file as always and redeclare the property in the implementation file using the `readwrite` attribute and keeping the other attributes the same. +Where possible, instance variables should not be accessed directly outside of the init and dealloc methods. Properties should be used everywhere else to provide support for KVO. Private read-write properties can be defined for those instance variables that should be read-only or inaccessible to other code. Simply include the `@property` declaration in a category in the implementation file as described above for private methods. For read-only properties, include the read-only @property declaration in the header file as always and redeclare the property in the implementation file using the readwrite attribute and keeping the other attributes the same. -Comments --------- -Comments should not be used excessively in code. No comment block should be added at the top of either the header or implementation files, as is common. No direct author attribution or copyright notice should be included in the files. +## Comments + +Comments should not be used excessively in code. No comment block should be added at the top of either the header or implementation files, as is common. No direct author attribution or copyright notice should be included in the files. Where code is already self documenting, no comments should be used, other than as a means of grouping sections of related code. In short, "don't state the bleedin' obvious". The following is an example of good use of comments in Core Plot. - -(void)drawInContext:(CGContextRef)theContext - { - // Ticks - for ( NSDecimalNumber *tickLocation in self.majorTickLocations ) { - // Tick end points - CGPoint baseViewPoint = [self viewPointForCoordinateDecimalNumber:tickLocation]; - CGPoint terminalViewPoint = baseViewPoint; - if ( self.coordinate == CPCoordinateX ) - terminalViewPoint.y -= self.majorTickLength; - else - terminalViewPoint.x -= self.majorTickLength; - - // Stroke tick - CGContextMoveToPoint(theContext, baseViewPoint.x, baseViewPoint.y); - CGContextBeginPath(theContext); - CGContextAddLineToPoint(theContext, terminalViewPoint.x, terminalViewPoint.y); - CGContextStrokePath(theContext); +```obj-c +-(void)drawInContext:(CGContextRef)theContext +{ + // Ticks + for ( NSDecimalNumber *tickLocation in self.majorTickLocations ) { + // Tick end points + CGPoint baseViewPoint = [self viewPointForCoordinateDecimalNumber:tickLocation]; + CGPoint terminalViewPoint = baseViewPoint; + if ( self.coordinate == CPCoordinateX ) { + terminalViewPoint.y -= self.majorTickLength; + } + else { + terminalViewPoint.x -= self.majorTickLength; } - // Axis Line - CGPoint startViewPoint = [self viewPointForCoordinateDecimalNumber:self.range.location]; - CGPoint endViewPoint = [self viewPointForCoordinateDecimalNumber:self.range.end]; - CGContextMoveToPoint(theContext, startViewPoint.x, startViewPoint.y); + // Stroke tick + CGContextMoveToPoint(theContext, baseViewPoint.x, baseViewPoint.y); CGContextBeginPath(theContext); - CGContextAddLineToPoint(theContext, endViewPoint.x, endViewPoint.y); - CGContextStrokePath(theContext); + CGContextAddLineToPoint(theContext, terminalViewPoint.x, terminalViewPoint.y); + CGContextStrokePath(theContext); } -The following is an example of bad usage. - - // Set view points + // Axis Line CGPoint startViewPoint = [self viewPointForCoordinateDecimalNumber:self.range.location]; CGPoint endViewPoint = [self viewPointForCoordinateDecimalNumber:self.range.end]; - - // Begin path - CGContextMoveToPoint(theContext, startViewPoint.x, startViewPoint.y); + CGContextMoveToPoint(theContext, startViewPoint.x, startViewPoint.y); CGContextBeginPath(theContext); + CGContextAddLineToPoint(theContext, endViewPoint.x, endViewPoint.y); + CGContextStrokePath(theContext); +} +``` + +The following is an example of bad usage. + +```obj-c +// Set view points CGPoint startViewPoint = [self viewPointForCoordinateDecimalNumber:self.range.location]; CGPoint endViewPoint = [self viewPointForCoordinateDecimalNumber:self.range.end]; + +// Begin path +CGContextMoveToPoint(theContext, startViewPoint.x, startViewPoint.y); +CGContextBeginPath(theContext); + +// Add line and stroke path +CGContextAddLineToPoint(theContext, endViewPoint.x, endViewPoint.y); +CGContextStrokePath(theContext); +``` - // Add line and stroke path - CGContextAddLineToPoint(theContext, endViewPoint.x, endViewPoint.y); - CGContextStrokePath(theContext); - Here the comments are doing nothing more than describing what is already clear from the code itself. Comments should only be used to delineate higher abstractions, which may not be obvious from the code (e.g., drawing an axis), and should be very concise. If a piece of code requires a lot of explanation, it is a good candidate for refactoring. In such cases, rather than adding long-winded comments, refactor the code so that it is obvious how it works and what it does. Comments are used in Core Plot headers to group related methods, in much the same way that pragmas fill this role in implementation files. - // Retrieving plots - -(NSArray *)allPlots; - -(CPTPlot *)plotAtIndex:(NSUInteger)index; - -(CPTPlot *)plotWithIdentifier:(id )identifier; - - // Organizing plots - -(void)addPlot:(CPTPlot *)plot; - -(void)addPlot:(CPTPlot *)plot toPlotSpace:(CPTPlotSpace *)space; - -(void)removePlot:(CPTPlot *)plot; - -(void)insertPlot:(CPTPlot*)plot atIndex:(NSUInteger)index; - -(void)insertPlot:(CPTPlot*)plot atIndex:(NSUInteger)index intoPlotSpace:(CPTPlotSpace *)space; - - // Retrieving plot spaces - -(NSArray *)allPlotSpaces; - -(CPTPlotSpace *)plotSpaceAtIndex:(NSUInteger)index; - -(CPTPlotSpace *)plotSpaceWithIdentifier:(id )identifier; - - // Adding and removing plot spaces - -(void)addPlotSpace:(CPTPlotSpace *)space; - -(void)removePlotSpace:(CPTPlotSpace *)plotSpace; - -In-Code Documentation ---------------------- -Core Plot uses Doxygen to document the project. See for more information. - -Constants ---------- +```obj-c +// Retrieving plots -(NSArray *)allPlots; -(CPTPlot *)plotAtIndex:(NSUInteger)index; -(CPTPlot *)plotWithIdentifier:(id )identifier; + +// Organizing plots +-(void)addPlot:(CPTPlot *)plot; +-(void)addPlot:(CPTPlot *)plot toPlotSpace:(CPPlotSpace *)space; +-(void)removePlot:(CPTPlot *)plot; +-(void)insertPlot:(CPTPlot*)plot atIndex:(NSUInteger)index; +-(void)insertPlot:(CPTPlot*)plot atIndex:(NSUInteger)index intoPlotSpace:(CPTPlotSpace *)space; + +// Retrieving plot spaces +-(NSArray *)allPlotSpaces; +-(CPTPlotSpace *)plotSpaceAtIndex:(NSUInteger)index; +-(CPTPlotSpace *)plotSpaceWithIdentifier:(id )identifier; + +// Adding and removing plot spaces +-(void)addPlotSpace:(CPTPlotSpace *)space; +-(void)removePlotSpace:(CPTPlotSpace *)plotSpace; +``` + +## Constants + Constant variables are often declared as preprocessor macros in Objective-C code. - #define kNSSomeConstant (10.0f) - +```obj-c +#define kNSSomeConstant (10.0f) +``` + In Core Plot, where possible, such constants should be declared as true variables at the top file scope. This allows the compiler to do type checking, and is generally cleaner than relying on the preprocessor. - const CPTFloat kCPTSomeConstant = 10.0f; - +```obj-c +const CPTFloat kCPTSomeConstant = 10.0f; +``` + Where a variable may take a finite number of discrete values, an enum should be declared. - typedef enum _CPTScaleType { - CPTScaleTypeLinear, - CPTScaleTypeLogN, - CPTScaleTypeLog10, - CPTScaleTypeAngular - } CPTScaleType; - +```obj-c +typedef enum _CPTScaleType { CPTScaleTypeLinear, CPTScaleTypeLogN, CPTScaleTypeLog10, CPTScaleTypeAngular } CPTScaleType; +``` + and any string constants should also be declared as variables, rather than hard coded as literals throughout the code (e.g., when declaring notifications). For example, a binding name would be declared in the header as - extern NSString * const kCPTScatterPlotBindingXValues; +```obj-c +extern NSString * const kCPTScatterPlotBindingXValues; +``` and defined in the implementation file as - NSString * const kCPTScatterPlotBindingXValues = @"xValues"; +```obj-c +NSString * const kCPTScatterPlotBindingXValues = @"xValues"; +``` + +## Numeric Data Types + +Internally, Core Plot has been designed to work with `NSDecimalNumber` and `NSDecimal`, so that user data can be handled with high precision. This does not mean NSDecimal should be used for all aspects of Core Plot. When drawing, there is no point using numbers with higher precision than CGFloat, the standard numeric type for Core Graphics. -Numeric Data Types ------------------- -Internally, Core Plot has been designed to work with `NSDecimalNumber` and `NSDecimal`, so that user data can be handled with high precision. This does not mean `NSDecimal` should be used for all aspects of Core Plot. When drawing, there is no point using numbers with higher precision than `CGFloat`, the standard numeric type for Core Graphics. +In summary, when handling user data, work with `double`, `NSDecimal` or `NSDecimalNumber` — depending on the context — and when drawing or carrying out other standard Cocoa operations, use the native Cocoa numerical types (e.g., `CGFloat`, `NSUInteger`, `NSInteger`). -In summary, when handling user data, work with `double`, `NSDecimal` or `NSDecimalNumber` — depending on the context — and when drawing or carrying out other standard Cocoa operations, use the native Cocoa numerical types (e.g., `CGFloat`, `NSUInteger`, `NSInteger`). +## Initialization and Deallocation -Memory Management ------------------ -Core Plot has been designed to work with apps utilizing garbage collected (GC), manual reference counting, and automatic reference counting (ARC). This means that internally, manual memory management techniques (e.g., `retain`/`release`/`autorelease`) must be utilized. And because Core Plot must also function on low memory devices like iPhone, care should be taken not to overuse autoreleased objects, and to avoid excessive use of memory. +All initialization methods should return `instancetype` rather than `id`. This helps the type checker validate object types. -Initialization and Deallocation -------------------------------- The initializers in Core Plot assign values to the instance variables directly, like so - -(id)init - { - if ( (self = [super init]) ) { - lineCap = kCGLineCapButt; - lineJoin = kCGLineJoinMiter; - lineWidth = 1.f; - patternPhase = CGSizeMake(0.f, 0.f); - lineColor = [[CPTColor blackColor] retain]; - } - return self; - } - +```obj-c +-(instancetype)init +{ + if ( (self = [super init]) ) { + lineCap = kCGLineCapButt; + lineJoin = kCGLineJoinMiter; + lineWidth = 1.f; + patternPhase = CGSizeMake(0.f, 0.f); + lineColor = [[CPTColor blackColor] retain]; + } return self; +} +``` + The `dealloc` method should release any object instance variables directly and not use accessor methods. - -(void)dealloc - { - [lineColor release]; - [super dealloc]; - } - +```obj-c +-(void)dealloc +{ + [lineColor release]; + [super dealloc]; +} +``` + Invoking an accessor can cause unwanted side effects during deallocation, especially in classes derived from `CPTLayer` where the accessors may try to set properties on other objects that may also be in the process of being deallocated. -Accessors ---------- +## Accessors + Wherever possible, Objective-C 2.0 properties should be used in place of handwritten accessor methods. When accessor methods are used they should take this form - -(NSString *)name - { - return [[name retain] autorelease]; - } - - -(void)setName:(NSString *)newName - { - if ( newName != name ) { - [name release]; - name = [newName copy]; - } +```obj-c +-(void)setName:(NSString *)newName +{ + if ( ![newName isEqualToString: name] ) { + name = [newName copy]; } +} +``` -Of course, `retain` may appear in place of `copy` depending on the context. +The dummy argument passed to the setter method should begin with "new", to prevent a naming conflict with the instance variable. -The dummy argument passed to the setter method should begin with 'new', to prevent a naming conflict with the instance variable. +## Nullability -Platform Dependencies ---------------------- -Core Plot is designed to run on both the Mac OS X and iOS. Even though many frameworks are very similar on the two platforms, the overlap is not 100%. Core Graphics on iOS is not exactly the same as on the Mac. The Mac uses AppKit classes like `NSColor` for drawing, where iOS uses `UIColor`. Image handling is also totally different on the two platforms. +All object properties, method parameters, function parameters, method return values, and function return values should be marked with the appropriate nullability annotation. + +## Platform Dependencies + +Core Plot is designed to run on macOS, iOS, and tvOS. Even though many frameworks are very similar on the different platforms, the overlap is not 100%. Core Graphics on iOS is not exactly the same as on the Mac. The Mac uses AppKit classes like `NSColor` for drawing, where iOS and tvOS use `UIColor`. Image handling is also totally different on the various platforms. Because of these differences, it is unavoidable that some platform specific code be introduced into Core Plot. One way to do this is to use branching in the preprocessor to modify the code used by each platform. For example, - +(CGColorSpaceRef)createGenericRGBSpace; - { - #if TARGET_IPHONE_SIMULATOR || TARGET_OS_IPHONE - return CGColorSpaceCreateDeviceRGB(); - #else - return CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); - #endif - } +```obj-c ++(CGColorSpaceRef)createGenericRGBSpace; +{ +#if TARGET_IPHONE_SIMULATOR || TARGET_OS_IPHONE + return CGColorSpaceCreateDeviceRGB(); +#else + return CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); +#endif +} +``` Sometimes code like this cannot easily be avoided, but where possible, it should be. This type of platform dependent code should be concentrated as much as possible in just a few files in the framework, and not spread throughout. When platform code is needed, it should be split off into a separate file, as a function, or a new class. A different copy of the file can then be used for each platform. This allows preprocessor branching to be completely removed from the code, and is much cleaner and easy to maintain. -One last aspect of platform dependency is frameworks. Many frameworks are only available on one platform. For example, you shouldn't use AppKit in Core Plot, other than in the Mac-specific code. Similarly, UIKit can only be imported into iOS-Specific code. - -In general, you should test your changes in both the Mac and iOS projects, to make sure you haven't inadvertently introduced platform dependencies. +One last aspect of platform dependency is frameworks. Many frameworks are only available on one platform. For example, you shouldn't use AppKit in Core Plot, other than in the Mac-specific code. Similarly, UIKit can only be imported into iOS-specific code. +In general, you should test your changes in Mac, iOS, and tvOS projects, to make sure you haven't inadvertently introduced platform dependencies. The *Plot Gallery* example app included with Core Plot is built to work on all three platforms. \ No newline at end of file From d6514a2dfc996fd84f9c01720e931b7ec36653a6 Mon Sep 17 00:00:00 2001 From: Antonio081014 Date: Wed, 26 Feb 2020 11:36:35 -0800 Subject: [PATCH 006/245] Fix typo in CPTRangePlot.h --- framework/Source/CPTRangePlot.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/Source/CPTRangePlot.h b/framework/Source/CPTRangePlot.h index 5e3434e38..1b9a7e877 100644 --- a/framework/Source/CPTRangePlot.h +++ b/framework/Source/CPTRangePlot.h @@ -76,7 +76,7 @@ typedef NS_ENUM (NSInteger, CPTRangePlotFillDirection) { * @param indexRange The range of the data indexes of interest. * @return An array of bar widths. **/ --(nullable CPTNumberArray *)barWidthsForRangePlot:(nonnull CPTRangePlot *)barPlot recordIndexRange:(NSRange)indexRange; +-(nullable CPTNumberArray *)barWidthsForRangePlot:(nonnull CPTRangePlot *)plot recordIndexRange:(NSRange)indexRange; /** @brief @optional Gets a bar width for the given range plot. * This method will not be called if From 102a283bbd9c27064ffd556e9693c527c3dce16b Mon Sep 17 00:00:00 2001 From: Antonio081014 Date: Wed, 26 Feb 2020 11:37:26 -0800 Subject: [PATCH 007/245] Fix typo in CPTTradingRangePlot.h --- framework/Source/CPTTradingRangePlot.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/Source/CPTTradingRangePlot.h b/framework/Source/CPTTradingRangePlot.h index b32085afe..1ea4d611e 100644 --- a/framework/Source/CPTTradingRangePlot.h +++ b/framework/Source/CPTTradingRangePlot.h @@ -97,7 +97,7 @@ typedef NS_ENUM (NSInteger, CPTTradingRangePlotField) { * @param indexRange The range of the data indexes of interest. * @return An array of bar widths. **/ --(nullable CPTNumberArray *)barWidthsForTradingRangePlot:(nonnull CPTTradingRangePlot *)barPlot recordIndexRange:(NSRange)indexRange; +-(nullable CPTNumberArray *)barWidthsForTradingRangePlot:(nonnull CPTTradingRangePlot *)plot recordIndexRange:(NSRange)indexRange; /** @brief @optional Gets a bar width for the given trading range plot. * This method will not be called if From 676f0a52f869f0417a17bfe1c15df8abe3ac5af1 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 29 Feb 2020 09:49:14 -0500 Subject: [PATCH 008/245] Updated the Doxygen configuration files for Doxygen 1.8.17. --- documentation/doxygen/doxygen touch.config | 218 +++++++++++++-------- documentation/doxygen/doxygen.config | 212 +++++++++++++------- documentation/{ => images}/axis ranges.png | Bin 3 files changed, 277 insertions(+), 153 deletions(-) rename documentation/{ => images}/axis ranges.png (100%) diff --git a/documentation/doxygen/doxygen touch.config b/documentation/doxygen/doxygen touch.config index 01d4c0b2d..5c120be8d 100644 --- a/documentation/doxygen/doxygen touch.config +++ b/documentation/doxygen/doxygen touch.config @@ -1,4 +1,4 @@ -# Doxyfile 1.8.14 +# Doxyfile 1.8.17 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -17,10 +17,10 @@ # Project related configuration options #--------------------------------------------------------------------------- -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all text -# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv -# built into libc) for the transcoding. See +# This tag specifies the encoding used for all characters in the configuration +# file that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See # https://www.gnu.org/software/libiconv/ for the list of possible encodings. # The default value is: UTF-8. @@ -93,6 +93,14 @@ ALLOW_UNICODE_NAMES = NO OUTPUT_LANGUAGE = English +# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all generated output in the proper direction. +# Possible values are: None, LTR, RTL and Context. +# The default value is: None. + +OUTPUT_TEXT_DIRECTION = None + # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. @@ -179,6 +187,16 @@ SHORT_NAMES = NO JAVADOC_AUTOBRIEF = NO +# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line +# such as +# /*************** +# as being the beginning of a Javadoc-style comment "banner". If set to NO, the +# Javadoc-style will behave just like regular comments and it will not be +# interpreted by doxygen. +# The default value is: NO. + +JAVADOC_BANNER = NO + # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If # set to NO, the Qt-style will behave just like regular Qt-style comments (thus @@ -228,6 +246,10 @@ TAB_SIZE = 4 # "Side Effects:". You can put \n's in the value part of an alias to insert # newlines (in the resulting output). You can put ^^ in the value part of an # alias to insert a newline as if a physical newline was in the original file. +# When you need a literal { or } or , in the value part of an alias you have to +# escape them by means of a backslash (\), this can lead to conflicts with the +# commands \{ and \} for these it is advised to use the version @{ and @} or use +# a double escape (\\{ and \\}) ALIASES = "YES=@ref YES" \ "NO=@ref NO" \ @@ -284,17 +306,26 @@ OPTIMIZE_FOR_FORTRAN = NO OPTIMIZE_OUTPUT_VHDL = NO +# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice +# sources only. Doxygen will then generate output that is more tailored for that +# language. For instance, namespaces will be presented as modules, types will be +# separated into more groups, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_SLICE = NO + # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: -# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: -# Fortran. In the later case the parser tries to guess whether the code is fixed -# or free formatted code, this is the default for Fortran type files), VHDL. For -# instance to make doxygen treat .inc files as Fortran files (default is PHP), -# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# language is one of the parsers supported by doxygen: IDL, Java, JavaScript, +# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, +# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: +# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser +# tries to guess whether the code is fixed or free formatted code, this is the +# default for Fortran type files), VHDL, tcl. For instance to make doxygen treat +# .inc files as Fortran files (default is PHP), and .f files as C (default is +# Fortran), use: inc=Fortran f=C. # # Note: For files without extension you can use no_extension as a placeholder. # @@ -305,7 +336,7 @@ EXTENSION_MAPPING = # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. +# documentation. See https://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you can # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. @@ -317,7 +348,7 @@ MARKDOWN_SUPPORT = NO # to that level are automatically included in the table of contents, even if # they do not have an id attribute. # Note: This feature currently applies only to Markdown headings. -# Minimum value: 0, maximum value: 99, default value: 0. +# Minimum value: 0, maximum value: 99, default value: 5. # This tag requires that the tag MARKDOWN_SUPPORT is set to YES. TOC_INCLUDE_HEADINGS = 0 @@ -453,6 +484,12 @@ EXTRACT_ALL = YES EXTRACT_PRIVATE = NO +# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual +# methods of a class will be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIV_VIRTUAL = NO + # If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal # scope will be included in the documentation. # The default value is: NO. @@ -507,8 +544,8 @@ HIDE_UNDOC_MEMBERS = YES HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO, these declarations will be -# included in the documentation. +# declarations. If set to NO, these declarations will be included in the +# documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO @@ -531,7 +568,7 @@ INTERNAL_DOCS = NO # names in lower-case letters. If set to YES, upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. +# (including Cygwin) ands Mac users are advised to set this option to NO. # The default value is: system dependent. CASE_SENSE_NAMES = NO @@ -763,7 +800,8 @@ WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return # value. If set to NO, doxygen will only warn about wrong or incomplete -# parameter documentation, but not about the absence of documentation. +# parameter documentation, but not about the absence of documentation. If +# EXTRACT_ALL is set to YES then this flag will automatically be disabled. # The default value is: NO. WARN_NO_PARAMDOC = YES @@ -824,8 +862,10 @@ INPUT_ENCODING = UTF-8 # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, # *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, -# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, -# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf. +# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment), +# *.doc (to be provided as doxygen C comment), *.txt (to be provided as doxygen +# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f, *.for, *.tcl, *.vhd, +# *.vhdl, *.ucf, *.qsf and *.ice. FILE_PATTERNS = @@ -899,7 +939,7 @@ EXAMPLE_RECURSIVE = NO # that contain images that are to be included in the documentation (see the # \image command). -IMAGE_PATH = "$(SOURCE_ROOT)/../documentation/" +IMAGE_PATH = "$(SOURCE_ROOT)/../documentation/images/" # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program @@ -984,7 +1024,7 @@ INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES then for each documented -# function all documented functions referencing it will be listed. +# entity all documented functions referencing it will be listed. # The default value is: NO. REFERENCED_BY_RELATION = NO @@ -1021,7 +1061,7 @@ SOURCE_TOOLTIPS = YES # # To use it do the following: # - Install the latest version of global -# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file # - Make sure the INPUT points to the root of the source tree # - Run doxygen as normal # @@ -1049,7 +1089,7 @@ VERBATIM_HEADERS = YES # rich C++ code for which doxygen's built-in parser lacks the necessary type # information. # Note: The availability of this option depends on whether or not doxygen was -# generated with the -Duse-libclang=ON option for CMake. +# generated with the -Duse_libclang=ON option for CMake. # The default value is: NO. CLANG_ASSISTED_PARSING = NO @@ -1068,10 +1108,9 @@ CLANG_OPTIONS = # were built. This is equivalent to specifying the "-p" option to a clang tool, # such as clang-check. These options will then be passed to the parser. # Note: The availability of this option depends on whether or not doxygen was -# generated with the -Duse-libclang=ON option for CMake. -# The default value is: 0. +# generated with the -Duse_libclang=ON option for CMake. -CLANG_COMPILATION_DATABASE_PATH = 0 +CLANG_DATABASE_PATH = #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index @@ -1230,9 +1269,9 @@ HTML_TIMESTAMP = NO # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # documentation will contain a main index with vertical navigation menus that -# are dynamically created via Javascript. If disabled, the navigation index will +# are dynamically created via JavaScript. If disabled, the navigation index will # consists of multiple levels of tabs that are statically embedded in every HTML -# page. Disable this option to support browsers that do not have Javascript, +# page. Disable this option to support browsers that do not have JavaScript, # like the Qt help browser. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1262,13 +1301,13 @@ HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: https://developer.apple.com/tools/xcode/), introduced with -# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# environment (see: https://developer.apple.com/xcode/), introduced with OSX +# 10.5 (Leopard). To create a documentation set, doxygen will generate a # Makefile in the HTML output directory. Running make will produce the docset in # that directory and running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See https://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. +# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy +# genXcode/_index.html for more information. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1307,7 +1346,7 @@ DOCSET_PUBLISHER_NAME = "Core Plot" # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on # Windows. # # The HTML Help Workshop contains a compiler that can convert all HTML output @@ -1383,7 +1422,7 @@ QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace -# (see: http://doc.qt.io/qt-4.8/qthelpproject.html#namespace). +# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1391,7 +1430,8 @@ QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: http://doc.qt.io/qt-4.8/qthelpproject.html#virtual-folders). +# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual- +# folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1399,21 +1439,23 @@ QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://doc.qt.io/qt-4.8/qthelpproject.html#custom-filters). +# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- +# filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://doc.qt.io/qt-4.8/qthelpproject.html#custom-filters). +# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- +# filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: -# http://doc.qt.io/qt-4.8/qthelpproject.html#filter-attributes). +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = @@ -1517,8 +1559,14 @@ FORMULA_FONTSIZE = 10 FORMULA_TRANSPARENT = YES +# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands +# to create new LaTeX commands to be used in formulas as building blocks. See +# the section "Including formulas" for details. + +FORMULA_MACROFILE = + # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# https://www.mathjax.org) which uses client side Javascript for the rendering +# https://www.mathjax.org) which uses client side JavaScript for the rendering # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path @@ -1546,7 +1594,7 @@ MATHJAX_FORMAT = HTML-CSS # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of # MathJax from https://www.mathjax.org before deployment. -# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/. +# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://www.mathjax.org/mathjax @@ -1588,7 +1636,7 @@ MATHJAX_CODEFILE = SEARCHENGINE = NO # When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a web server instead of a web client using Javascript. There +# implemented using a web server instead of a web client using JavaScript. There # are two flavors of web server based searching depending on the EXTERNAL_SEARCH # setting. When disabled, doxygen will generate a PHP script for searching and # an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing @@ -1672,21 +1720,35 @@ LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. # -# Note that when enabling USE_PDFLATEX this option is only used for generating -# bitmaps for formulas in the HTML output, but not in the Makefile that is -# written to the output directory. -# The default file is: latex. +# Note that when not enabling USE_PDFLATEX the default is latex when enabling +# USE_PDFLATEX the default is pdflatex and when in the later case latex is +# chosen this is overwritten by pdflatex. For specific output languages the +# default can have been set differently, this depends on the implementation of +# the output language. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate # index for LaTeX. +# Note: This tag is used in the Makefile / make.bat. +# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file +# (.tex). # The default file is: makeindex. # This tag requires that the tag GENERATE_LATEX is set to YES. MAKEINDEX_CMD_NAME = makeindex +# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to +# generate index for LaTeX. In case there is no backslash (\) as first character +# it will be automatically added in the LaTeX code. +# Note: This tag is used in the generated output file (.tex). +# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat. +# The default value is: makeindex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_MAKEINDEX_CMD = makeindex + # If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX # documents. This may be useful for small projects and may help to save some # trees in general. @@ -1821,6 +1883,14 @@ LATEX_BIB_STYLE = plain LATEX_TIMESTAMP = NO +# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute) +# path from which the emoji images will be read. If a relative path is entered, +# it will be relative to the LATEX_OUTPUT directory. If left blank the +# LATEX_OUTPUT directory will be used. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_EMOJI_DIRECTORY = + #--------------------------------------------------------------------------- # Configuration options related to the RTF output #--------------------------------------------------------------------------- @@ -1860,9 +1930,9 @@ COMPACT_RTF = NO RTF_HYPERLINKS = NO -# Load stylesheet definitions from file. Syntax is similar to doxygen's config -# file, i.e. a series of assignments. You only have to provide replacements, -# missing definitions are set to their default value. +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# configuration file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. # # See also section "Doxygen usage" for information on how to generate the # default style sheet that doxygen normally uses. @@ -1871,8 +1941,8 @@ RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an RTF document. Syntax is -# similar to doxygen's config file. A template extensions file can be generated -# using doxygen -e rtf extensionFile. +# similar to doxygen's configuration file. A template extensions file can be +# generated using doxygen -e rtf extensionFile. # This tag requires that the tag GENERATE_RTF is set to YES. RTF_EXTENSIONS_FILE = @@ -1958,6 +2028,13 @@ XML_OUTPUT = xml XML_PROGRAMLISTING = YES +# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include +# namespace members in file scope as well, matching the HTML output. +# The default value is: NO. +# This tag requires that the tag GENERATE_XML is set to YES. + +XML_NS_MEMB_FILE_SCOPE = NO + #--------------------------------------------------------------------------- # Configuration options related to the DOCBOOK output #--------------------------------------------------------------------------- @@ -2092,18 +2169,18 @@ INCLUDE_FILE_PATTERNS = # recursively expanded use the := operator instead of the = operator. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -PREDEFINED = TARGET_OS_IPHONE, \ - TARGET_OS_TV, \ - TARGET_OS_SIMULATOR, \ - "NS_DESIGNATED_INITIALIZER:= " \ - "NS_RETURNS_INNER_POINTER:= " \ - "NS_ENUM(_type,_name):=enum _name : _type _name; enum _name : _type " \ - "NS_CLOSED_ENUM(_type,_name):=enum _name : _type _name; enum _name : _type " \ - "NS_OPTIONS(_type,_name):=enum _name : _type _name; enum _name : _type " \ - "NS_SWIFT_NAME(_name):= " \ - "cpt_deprecated:= " \ - "cpt_swift_enum:= " \ - "cpt_swift_struct:= " +PREDEFINED = TARGET_OS_IPHONE \ + TARGET_OS_TV \ + TARGET_OS_SIMULATOR \ + NS_DESIGNATED_INITIALIZER \ + NS_RETURNS_INNER_POINTER \ + "NS_ENUM(_type,_name)=enum _name : _type _name; enum _name : _type " \ + "NS_CLOSED_ENUM(_type,_name)=enum _name : _type _name; enum _name : _type " \ + "NS_OPTIONS(_type,_name)=enum _name : _type _name; enum _name : _type " \ + "NS_SWIFT_NAME(_name)= " \ + cpt_deprecated \ + cpt_swift_enum \ + cpt_swift_struct # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this # tag can be used to specify a list of macro names that should be expanded. The @@ -2170,12 +2247,6 @@ EXTERNAL_GROUPS = YES EXTERNAL_PAGES = YES -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of 'which perl'). -# The default file (with absolute path) is: /usr/bin/perl. - -PERL_PATH = /usr/bin/perl - #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- @@ -2189,15 +2260,6 @@ PERL_PATH = /usr/bin/perl CLASS_DIAGRAMS = YES -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see: -# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - # You can include diagrams made with dia in doxygen documentation. Doxygen will # then run dia to produce the diagram and insert it in the documentation. The # DIA_PATH tag allows you to specify the directory where the dia binary resides. diff --git a/documentation/doxygen/doxygen.config b/documentation/doxygen/doxygen.config index 46ed09de4..d36aa5f81 100644 --- a/documentation/doxygen/doxygen.config +++ b/documentation/doxygen/doxygen.config @@ -1,4 +1,4 @@ -# Doxyfile 1.8.14 +# Doxyfile 1.8.17 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -17,10 +17,10 @@ # Project related configuration options #--------------------------------------------------------------------------- -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all text -# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv -# built into libc) for the transcoding. See +# This tag specifies the encoding used for all characters in the configuration +# file that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See # https://www.gnu.org/software/libiconv/ for the list of possible encodings. # The default value is: UTF-8. @@ -93,6 +93,14 @@ ALLOW_UNICODE_NAMES = NO OUTPUT_LANGUAGE = English +# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all generated output in the proper direction. +# Possible values are: None, LTR, RTL and Context. +# The default value is: None. + +OUTPUT_TEXT_DIRECTION = None + # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. @@ -179,6 +187,16 @@ SHORT_NAMES = NO JAVADOC_AUTOBRIEF = NO +# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line +# such as +# /*************** +# as being the beginning of a Javadoc-style comment "banner". If set to NO, the +# Javadoc-style will behave just like regular comments and it will not be +# interpreted by doxygen. +# The default value is: NO. + +JAVADOC_BANNER = NO + # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If # set to NO, the Qt-style will behave just like regular Qt-style comments (thus @@ -228,6 +246,10 @@ TAB_SIZE = 4 # "Side Effects:". You can put \n's in the value part of an alias to insert # newlines (in the resulting output). You can put ^^ in the value part of an # alias to insert a newline as if a physical newline was in the original file. +# When you need a literal { or } or , in the value part of an alias you have to +# escape them by means of a backslash (\), this can lead to conflicts with the +# commands \{ and \} for these it is advised to use the version @{ and @} or use +# a double escape (\\{ and \\}) ALIASES = "YES=@ref YES" \ "NO=@ref NO" \ @@ -284,17 +306,26 @@ OPTIMIZE_FOR_FORTRAN = NO OPTIMIZE_OUTPUT_VHDL = NO +# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice +# sources only. Doxygen will then generate output that is more tailored for that +# language. For instance, namespaces will be presented as modules, types will be +# separated into more groups, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_SLICE = NO + # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: -# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: -# Fortran. In the later case the parser tries to guess whether the code is fixed -# or free formatted code, this is the default for Fortran type files), VHDL. For -# instance to make doxygen treat .inc files as Fortran files (default is PHP), -# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# language is one of the parsers supported by doxygen: IDL, Java, JavaScript, +# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, +# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: +# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser +# tries to guess whether the code is fixed or free formatted code, this is the +# default for Fortran type files), VHDL, tcl. For instance to make doxygen treat +# .inc files as Fortran files (default is PHP), and .f files as C (default is +# Fortran), use: inc=Fortran f=C. # # Note: For files without extension you can use no_extension as a placeholder. # @@ -305,7 +336,7 @@ EXTENSION_MAPPING = # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. +# documentation. See https://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you can # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. @@ -317,7 +348,7 @@ MARKDOWN_SUPPORT = NO # to that level are automatically included in the table of contents, even if # they do not have an id attribute. # Note: This feature currently applies only to Markdown headings. -# Minimum value: 0, maximum value: 99, default value: 0. +# Minimum value: 0, maximum value: 99, default value: 5. # This tag requires that the tag MARKDOWN_SUPPORT is set to YES. TOC_INCLUDE_HEADINGS = 0 @@ -453,6 +484,12 @@ EXTRACT_ALL = YES EXTRACT_PRIVATE = NO +# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual +# methods of a class will be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIV_VIRTUAL = NO + # If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal # scope will be included in the documentation. # The default value is: NO. @@ -507,8 +544,8 @@ HIDE_UNDOC_MEMBERS = YES HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO, these declarations will be -# included in the documentation. +# declarations. If set to NO, these declarations will be included in the +# documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO @@ -531,7 +568,7 @@ INTERNAL_DOCS = NO # names in lower-case letters. If set to YES, upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. +# (including Cygwin) ands Mac users are advised to set this option to NO. # The default value is: system dependent. CASE_SENSE_NAMES = NO @@ -763,7 +800,8 @@ WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return # value. If set to NO, doxygen will only warn about wrong or incomplete -# parameter documentation, but not about the absence of documentation. +# parameter documentation, but not about the absence of documentation. If +# EXTRACT_ALL is set to YES then this flag will automatically be disabled. # The default value is: NO. WARN_NO_PARAMDOC = YES @@ -824,8 +862,10 @@ INPUT_ENCODING = UTF-8 # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, # *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, -# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, -# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf. +# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment), +# *.doc (to be provided as doxygen C comment), *.txt (to be provided as doxygen +# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f, *.for, *.tcl, *.vhd, +# *.vhdl, *.ucf, *.qsf and *.ice. FILE_PATTERNS = @@ -899,7 +939,7 @@ EXAMPLE_RECURSIVE = NO # that contain images that are to be included in the documentation (see the # \image command). -IMAGE_PATH = "$(SOURCE_ROOT)/../documentation/" +IMAGE_PATH = "$(SOURCE_ROOT)/../documentation/images/" # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program @@ -984,7 +1024,7 @@ INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES then for each documented -# function all documented functions referencing it will be listed. +# entity all documented functions referencing it will be listed. # The default value is: NO. REFERENCED_BY_RELATION = NO @@ -1021,7 +1061,7 @@ SOURCE_TOOLTIPS = YES # # To use it do the following: # - Install the latest version of global -# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file # - Make sure the INPUT points to the root of the source tree # - Run doxygen as normal # @@ -1049,7 +1089,7 @@ VERBATIM_HEADERS = YES # rich C++ code for which doxygen's built-in parser lacks the necessary type # information. # Note: The availability of this option depends on whether or not doxygen was -# generated with the -Duse-libclang=ON option for CMake. +# generated with the -Duse_libclang=ON option for CMake. # The default value is: NO. CLANG_ASSISTED_PARSING = NO @@ -1068,10 +1108,9 @@ CLANG_OPTIONS = # were built. This is equivalent to specifying the "-p" option to a clang tool, # such as clang-check. These options will then be passed to the parser. # Note: The availability of this option depends on whether or not doxygen was -# generated with the -Duse-libclang=ON option for CMake. -# The default value is: 0. +# generated with the -Duse_libclang=ON option for CMake. -CLANG_COMPILATION_DATABASE_PATH = 0 +CLANG_DATABASE_PATH = #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index @@ -1230,9 +1269,9 @@ HTML_TIMESTAMP = NO # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # documentation will contain a main index with vertical navigation menus that -# are dynamically created via Javascript. If disabled, the navigation index will +# are dynamically created via JavaScript. If disabled, the navigation index will # consists of multiple levels of tabs that are statically embedded in every HTML -# page. Disable this option to support browsers that do not have Javascript, +# page. Disable this option to support browsers that do not have JavaScript, # like the Qt help browser. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1262,13 +1301,13 @@ HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: https://developer.apple.com/tools/xcode/), introduced with -# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# environment (see: https://developer.apple.com/xcode/), introduced with OSX +# 10.5 (Leopard). To create a documentation set, doxygen will generate a # Makefile in the HTML output directory. Running make will produce the docset in # that directory and running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See https://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. +# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy +# genXcode/_index.html for more information. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1307,7 +1346,7 @@ DOCSET_PUBLISHER_NAME = "Core Plot" # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on # Windows. # # The HTML Help Workshop contains a compiler that can convert all HTML output @@ -1383,7 +1422,7 @@ QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace -# (see: http://doc.qt.io/qt-4.8/qthelpproject.html#namespace). +# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1391,7 +1430,8 @@ QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: http://doc.qt.io/qt-4.8/qthelpproject.html#virtual-folders). +# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual- +# folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1399,21 +1439,23 @@ QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://doc.qt.io/qt-4.8/qthelpproject.html#custom-filters). +# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- +# filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://doc.qt.io/qt-4.8/qthelpproject.html#custom-filters). +# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- +# filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: -# http://doc.qt.io/qt-4.8/qthelpproject.html#filter-attributes). +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = @@ -1517,8 +1559,14 @@ FORMULA_FONTSIZE = 10 FORMULA_TRANSPARENT = YES +# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands +# to create new LaTeX commands to be used in formulas as building blocks. See +# the section "Including formulas" for details. + +FORMULA_MACROFILE = + # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# https://www.mathjax.org) which uses client side Javascript for the rendering +# https://www.mathjax.org) which uses client side JavaScript for the rendering # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path @@ -1546,7 +1594,7 @@ MATHJAX_FORMAT = HTML-CSS # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of # MathJax from https://www.mathjax.org before deployment. -# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/. +# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://www.mathjax.org/mathjax @@ -1588,7 +1636,7 @@ MATHJAX_CODEFILE = SEARCHENGINE = NO # When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a web server instead of a web client using Javascript. There +# implemented using a web server instead of a web client using JavaScript. There # are two flavors of web server based searching depending on the EXTERNAL_SEARCH # setting. When disabled, doxygen will generate a PHP script for searching and # an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing @@ -1672,21 +1720,35 @@ LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. # -# Note that when enabling USE_PDFLATEX this option is only used for generating -# bitmaps for formulas in the HTML output, but not in the Makefile that is -# written to the output directory. -# The default file is: latex. +# Note that when not enabling USE_PDFLATEX the default is latex when enabling +# USE_PDFLATEX the default is pdflatex and when in the later case latex is +# chosen this is overwritten by pdflatex. For specific output languages the +# default can have been set differently, this depends on the implementation of +# the output language. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate # index for LaTeX. +# Note: This tag is used in the Makefile / make.bat. +# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file +# (.tex). # The default file is: makeindex. # This tag requires that the tag GENERATE_LATEX is set to YES. MAKEINDEX_CMD_NAME = makeindex +# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to +# generate index for LaTeX. In case there is no backslash (\) as first character +# it will be automatically added in the LaTeX code. +# Note: This tag is used in the generated output file (.tex). +# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat. +# The default value is: makeindex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_MAKEINDEX_CMD = makeindex + # If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX # documents. This may be useful for small projects and may help to save some # trees in general. @@ -1821,6 +1883,14 @@ LATEX_BIB_STYLE = plain LATEX_TIMESTAMP = NO +# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute) +# path from which the emoji images will be read. If a relative path is entered, +# it will be relative to the LATEX_OUTPUT directory. If left blank the +# LATEX_OUTPUT directory will be used. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_EMOJI_DIRECTORY = + #--------------------------------------------------------------------------- # Configuration options related to the RTF output #--------------------------------------------------------------------------- @@ -1860,9 +1930,9 @@ COMPACT_RTF = NO RTF_HYPERLINKS = NO -# Load stylesheet definitions from file. Syntax is similar to doxygen's config -# file, i.e. a series of assignments. You only have to provide replacements, -# missing definitions are set to their default value. +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# configuration file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. # # See also section "Doxygen usage" for information on how to generate the # default style sheet that doxygen normally uses. @@ -1871,8 +1941,8 @@ RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an RTF document. Syntax is -# similar to doxygen's config file. A template extensions file can be generated -# using doxygen -e rtf extensionFile. +# similar to doxygen's configuration file. A template extensions file can be +# generated using doxygen -e rtf extensionFile. # This tag requires that the tag GENERATE_RTF is set to YES. RTF_EXTENSIONS_FILE = @@ -1958,6 +2028,13 @@ XML_OUTPUT = xml XML_PROGRAMLISTING = YES +# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include +# namespace members in file scope as well, matching the HTML output. +# The default value is: NO. +# This tag requires that the tag GENERATE_XML is set to YES. + +XML_NS_MEMB_FILE_SCOPE = NO + #--------------------------------------------------------------------------- # Configuration options related to the DOCBOOK output #--------------------------------------------------------------------------- @@ -2092,15 +2169,15 @@ INCLUDE_FILE_PATTERNS = # recursively expanded use the := operator instead of the = operator. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -PREDEFINED = "NS_DESIGNATED_INITIALIZER:= " \ - "NS_RETURNS_INNER_POINTER:= " \ - "NS_ENUM(_type,_name):=enum _name : _type _name; enum _name : _type " \ - "NS_CLOSED_ENUM(_type,_name):=enum _name : _type _name; enum _name : _type " \ - "NS_OPTIONS(_type,_name):=enum _name : _type _name; enum _name : _type " \ - "NS_SWIFT_NAME(_name):= " \ - "cpt_deprecated:= " \ - "cpt_swift_enum:= " \ - "cpt_swift_struct:= " +PREDEFINED = NS_DESIGNATED_INITIALIZER \ + NS_RETURNS_INNER_POINTER \ + "NS_ENUM(_type,_name)=enum _name : _type _name; enum _name : _type " \ + "NS_CLOSED_ENUM(_type,_name)=enum _name : _type _name; enum _name : _type " \ + "NS_OPTIONS(_type,_name)=enum _name : _type _name; enum _name : _type " \ + "NS_SWIFT_NAME(_name)= " \ + cpt_deprecated \ + cpt_swift_enum \ + cpt_swift_struct # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this # tag can be used to specify a list of macro names that should be expanded. The @@ -2167,12 +2244,6 @@ EXTERNAL_GROUPS = YES EXTERNAL_PAGES = YES -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of 'which perl'). -# The default file (with absolute path) is: /usr/bin/perl. - -PERL_PATH = /usr/bin/perl - #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- @@ -2186,15 +2257,6 @@ PERL_PATH = /usr/bin/perl CLASS_DIAGRAMS = YES -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see: -# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - # You can include diagrams made with dia in doxygen documentation. Doxygen will # then run dia to produce the diagram and insert it in the documentation. The # DIA_PATH tag allows you to specify the directory where the dia binary resides. diff --git a/documentation/axis ranges.png b/documentation/images/axis ranges.png similarity index 100% rename from documentation/axis ranges.png rename to documentation/images/axis ranges.png From 1bb2c6864dbaa3c7162b3cba76b1c2d14c6a1363 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 29 Feb 2020 09:49:33 -0500 Subject: [PATCH 009/245] Fixed some documentation typos. --- framework/Source/CPTMutableNumericData+TypeConversion.m | 1 - framework/Source/CPTRangePlot.h | 2 +- framework/Source/CPTTradingRangePlot.h | 4 ++-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/framework/Source/CPTMutableNumericData+TypeConversion.m b/framework/Source/CPTMutableNumericData+TypeConversion.m index fd9fba1ef..6099cca29 100644 --- a/framework/Source/CPTMutableNumericData+TypeConversion.m +++ b/framework/Source/CPTMutableNumericData+TypeConversion.m @@ -28,7 +28,6 @@ @implementation CPTMutableNumericData(TypeConversion) * @param newDataType The new data type format. * @param newSampleBytes The number of bytes used to store each sample. * @param newByteOrder The new byte order. - * @return A copy of the current numeric data converted to the new data type. **/ -(void)convertToType:(CPTDataTypeFormat)newDataType sampleBytes:(size_t)newSampleBytes diff --git a/framework/Source/CPTRangePlot.h b/framework/Source/CPTRangePlot.h index 1b9a7e877..99cd2d1de 100644 --- a/framework/Source/CPTRangePlot.h +++ b/framework/Source/CPTRangePlot.h @@ -80,7 +80,7 @@ typedef NS_ENUM (NSInteger, CPTRangePlotFillDirection) { /** @brief @optional Gets a bar width for the given range plot. * This method will not be called if - * @link CPTRangePlotDataSource::barWidthForRangePlot:recordIndexRange: -barWidthForRangePlot:recordIndexRange: @endlink + * @link CPTRangePlotDataSource::barWidthsForRangePlot:recordIndexRange: -barWidthsForRangePlot:recordIndexRange: @endlink * is also implemented in the datasource. * @param plot The range plot. * @param idx The data index of interest. diff --git a/framework/Source/CPTTradingRangePlot.h b/framework/Source/CPTTradingRangePlot.h index 1ea4d611e..dfef3d62c 100644 --- a/framework/Source/CPTTradingRangePlot.h +++ b/framework/Source/CPTTradingRangePlot.h @@ -101,9 +101,9 @@ typedef NS_ENUM (NSInteger, CPTTradingRangePlotField) { /** @brief @optional Gets a bar width for the given trading range plot. * This method will not be called if - * @link CPTTradingRangePlotDataSource::barWidthForTradingRangePlot:recordIndexRange: -barWidthForTradingRangePlot:recordIndexRange: @endlink + * @link CPTTradingRangePlotDataSource::barWidthsForTradingRangePlot:recordIndexRange: -barWidthsForTradingRangePlot:recordIndexRange: @endlink * is also implemented in the datasource. - * @param plot The tradingrange plot. + * @param plot The trading range plot. * @param idx The data index of interest. * @return The bar width for the bar with the given index. If the data source returns @nil, the default barWidth is used. **/ From a3a46a633d9cec3da037570c894d3b4d7c1dafa7 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 1 Mar 2020 13:01:07 -0500 Subject: [PATCH 010/245] Removed Dtrace probe source file. --- framework/TestResources/checkformisalignedlayers.d | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 framework/TestResources/checkformisalignedlayers.d diff --git a/framework/TestResources/checkformisalignedlayers.d b/framework/TestResources/checkformisalignedlayers.d deleted file mode 100644 index 00cbb65c8..000000000 --- a/framework/TestResources/checkformisalignedlayers.d +++ /dev/null @@ -1,6 +0,0 @@ -#pragma D option quiet - -CorePlot$target:::layer_position_change -{ - printf("Misaligned layer: %20s (%u.%03u, %u.%03u, %u.%03u, %u.%03u)\n", copyinstr(arg0), arg1 / 1000, arg1 % 1000, arg2 / 1000, arg2 % 1000, arg3 / 1000, arg3 % 1000, arg4 / 1000, arg4 % 1000 ); -} \ No newline at end of file From 288e6d0084405ad8a8af3cdd016f2c53355b96ab Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 18 Apr 2020 15:01:37 -0400 Subject: [PATCH 011/245] Added Mac Catalyst support. Added Universal XCFramework build scheme to build an XCFramework that includes all available platforms and architectures. --- framework/CorePlot.xcodeproj/project.pbxproj | 70 +++++++++++++++++-- .../xcschemes/Universal XCFramework.xcscheme | 67 ++++++++++++++++++ framework/xcconfig/CorePlot.xcconfig | 1 + scripts/createrelease.py | 8 +++ 4 files changed, 142 insertions(+), 4 deletions(-) create mode 100644 framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Universal XCFramework.xcscheme diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index f6971f390..9336f841f 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -62,6 +62,17 @@ name = "Universal iOS Framework"; productName = Documentation; }; + C3AC175B244B594800E7380C /* Universal XCFramework */ = { + isa = PBXAggregateTarget; + buildConfigurationList = C3AC175D244B594800E7380C /* Build configuration list for PBXAggregateTarget "Universal XCFramework" */; + buildPhases = ( + C3AC175C244B594800E7380C /* ShellScript */, + ); + dependencies = ( + ); + name = "Universal XCFramework"; + productName = Documentation; + }; /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ @@ -2454,7 +2465,6 @@ 0867D690FE84028FC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { - BuildIndependentTargetsInParallel = YES; LastUpgradeCheck = 1100; TargetAttributes = { 8DC2EF4F0486A6940098B216 = { @@ -2503,6 +2513,7 @@ C38A09961A46193F00D45436 /* Universal Library */, C3A5467F1BC1A817005C1BBC /* Universal iOS Framework */, C37EA5C41BC83E900091C8F7 /* Universal tvOS Framework */, + C3AC175B244B594800E7380C /* Universal XCFramework */, ); }; /* End PBXProject section */ @@ -2586,7 +2597,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\nUFW_TARGET=\"CorePlot tvOS\"\nUFW_BUILD_DIR=\"${PROJECT_DIR}/../build\"\n\nif [ -z ${SDK_NAME} ]; then\n# Use the latest tvOS SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"appletvos.*$\")\nwhile read -r line; do\nUFW_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nelse\n# Use the SDK specified by XCode\nUFW_SDK_VERSION=\"${SDK_NAME}\"\nfi\n\nFRAMEWORK_NAME=\"${PROJECT_NAME}\"\nUFW_SDK_VERSION=$(echo \"${UFW_SDK_VERSION}\" | grep -o \"[0-9].*$\")\nUFW_IPHONE_PATH=\"${UFW_BUILD_DIR}/Release-appletvos/${FRAMEWORK_NAME}.framework\"\nUFW_SIMULATOR_PATH=\"${UFW_BUILD_DIR}/Release-appletvsimulator/${FRAMEWORK_NAME}.framework\"\nUFW_UNIVERSAL_DIR=\"${UFW_BUILD_DIR}/Release-appletvuniversal\"\nUFW_FRAMEWORK=\"${UFW_UNIVERSAL_DIR}/${FRAMEWORK_NAME}.framework\"\n\n# Build Framework\n\nrm -rf \"${UFW_UNIVERSAL_DIR}\"\n\nxcodebuild -target \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk appletvos${UFW_SDK_VERSION} clean build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -target \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk appletvsimulator${UFW_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n\nmkdir -p \"${UFW_UNIVERSAL_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\ncp -r \"${UFW_IPHONE_PATH}/.\" \"${UFW_FRAMEWORK}\"\n\nlipo -create -output \"${UFW_FRAMEWORK}/${FRAMEWORK_NAME}\" \"${UFW_SIMULATOR_PATH}/${FRAMEWORK_NAME}\" \"${UFW_IPHONE_PATH}/${FRAMEWORK_NAME}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: lipo failed\"; exit 1; fi\n"; + shellScript = "\nUFW_TARGET=\"CorePlot tvOS\"\nUFW_BUILD_DIR=\"${PROJECT_DIR}/../build\"\n\n# Use the latest tvOS SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"appletvos.*$\")\nwhile read -r line; do\nUFW_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_SDK_VERSION=$(echo \"${UFW_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\nFRAMEWORK_NAME=\"${PROJECT_NAME}\"\n\nUFW_IPHONE_PATH=\"${UFW_BUILD_DIR}/Release-appletvos/${FRAMEWORK_NAME}.framework\"\nUFW_SIMULATOR_PATH=\"${UFW_BUILD_DIR}/Release-appletvsimulator/${FRAMEWORK_NAME}.framework\"\nUFW_UNIVERSAL_DIR=\"${UFW_BUILD_DIR}/Release-appletvuniversal\"\nUFW_FRAMEWORK=\"${UFW_UNIVERSAL_DIR}/${FRAMEWORK_NAME}.framework\"\n\n# Build Framework\n\nrm -rf \"${UFW_UNIVERSAL_DIR}\"\n\nxcodebuild -scheme \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk appletvos${UFW_SDK_VERSION} clean build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -scheme \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk appletvsimulator${UFW_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n\nmkdir -p \"${UFW_UNIVERSAL_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\ncp -r \"${UFW_IPHONE_PATH}/.\" \"${UFW_FRAMEWORK}\"\n\nlipo -create -output \"${UFW_FRAMEWORK}/${FRAMEWORK_NAME}\" \"${UFW_SIMULATOR_PATH}/${FRAMEWORK_NAME}\" \"${UFW_IPHONE_PATH}/${FRAMEWORK_NAME}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: lipo failed\"; exit 1; fi\n"; }; C38A09921A4618B600D45436 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; @@ -2612,7 +2623,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\nUFW_TARGET=\"CorePlot-CocoaTouch\"\nUFW_BUILD_DIR=\"${PROJECT_DIR}/../build\"\n\nif [ -z ${SDK_NAME} ]; then\n# Use the latest iphoneos SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"iphoneos.*$\")\nwhile read -r line; do\nUFW_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nelse\n# Use the SDK specified by XCode\nUFW_SDK_VERSION=\"${SDK_NAME}\"\nfi\n\nUFW_SDK_VERSION=$(echo \"${UFW_SDK_VERSION}\" | grep -o \"[0-9].*$\")\nUFW_IPHONE_DIR=\"${UFW_BUILD_DIR}/Release-iphoneos\"\nUFW_SIMULATOR_DIR=\"${UFW_BUILD_DIR}/Release-iphonesimulator\"\nUFW_UNIVERSAL_DIR=\"${UFW_BUILD_DIR}/Release-universal\"\nUFW_HEADER_DIR=\"${UFW_UNIVERSAL_DIR}/CorePlotHeaders\"\nUFW_EXE_PATH=\"libCorePlot-CocoaTouch.a\"\n\n# Build Framework\n\nrm -rf \"${UFW_UNIVERSAL_DIR}\"\n\nxcodebuild -target \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphoneos${UFW_SDK_VERSION} clean build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -target \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphonesimulator${UFW_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n\nmkdir -p \"${UFW_UNIVERSAL_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\nlipo -create -output \"${UFW_UNIVERSAL_DIR}/${UFW_EXE_PATH}\" \"${UFW_IPHONE_DIR}/${UFW_EXE_PATH}\" \"${UFW_SIMULATOR_DIR}/${UFW_EXE_PATH}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: lipo failed\"; exit 1; fi\n\n# copy header files\nmkdir -p \"${UFW_HEADER_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\ncp \"${SOURCE_ROOT}/CorePlot-CocoaTouch.h\" \"${UFW_HEADER_DIR}\"\ncp \"${SOURCE_ROOT}/iPhoneOnly/\"[!_]*.h \"${UFW_HEADER_DIR}/\"\ncp \"${SOURCE_ROOT}/Source/\"[!_]*.h \"${UFW_HEADER_DIR}/\"\n\nrm \"${UFW_HEADER_DIR}/\"*Tests.*\n"; + shellScript = "\nUFW_TARGET=\"CorePlot-CocoaTouch\"\nUFW_BUILD_DIR=\"${PROJECT_DIR}/../build\"\n\n# Use the latest iphoneos SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"iphoneos.*$\")\nwhile read -r line; do\nUFW_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_SDK_VERSION=$(echo \"${UFW_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\nUFW_IPHONE_DIR=\"${UFW_BUILD_DIR}/Release-iphoneos\"\nUFW_SIMULATOR_DIR=\"${UFW_BUILD_DIR}/Release-iphonesimulator\"\nUFW_UNIVERSAL_DIR=\"${UFW_BUILD_DIR}/Release-universal\"\nUFW_HEADER_DIR=\"${UFW_UNIVERSAL_DIR}/CorePlotHeaders\"\nUFW_EXE_PATH=\"libCorePlot-CocoaTouch.a\"\n\n# Build Framework\n\nrm -rf \"${UFW_UNIVERSAL_DIR}\"\n\nxcodebuild -scheme \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphoneos${UFW_SDK_VERSION} clean build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -scheme \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphonesimulator${UFW_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n\nmkdir -p \"${UFW_UNIVERSAL_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\nlipo -create -output \"${UFW_UNIVERSAL_DIR}/${UFW_EXE_PATH}\" \"${UFW_IPHONE_DIR}/${UFW_EXE_PATH}\" \"${UFW_SIMULATOR_DIR}/${UFW_EXE_PATH}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: lipo failed\"; exit 1; fi\n\n# copy header files\nmkdir -p \"${UFW_HEADER_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\ncp \"${SOURCE_ROOT}/CorePlot-CocoaTouch.h\" \"${UFW_HEADER_DIR}\"\ncp \"${SOURCE_ROOT}/iPhoneOnly/\"[!_]*.h \"${UFW_HEADER_DIR}/\"\ncp \"${SOURCE_ROOT}/Source/\"[!_]*.h \"${UFW_HEADER_DIR}/\"\n\nrm \"${UFW_HEADER_DIR}/\"*Tests.*\n"; }; C3A546801BC1A817005C1BBC /* ShellScript */ = { isa = PBXShellScriptBuildPhase; @@ -2625,7 +2636,20 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\nUFW_TARGET=\"CorePlot iOS\"\nUFW_BUILD_DIR=\"${PROJECT_DIR}/../build\"\n\nif [ -z ${SDK_NAME} ]; then\n# Use the latest iphoneos SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"iphoneos.*$\")\nwhile read -r line; do\nUFW_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nelse\n# Use the SDK specified by XCode\nUFW_SDK_VERSION=\"${SDK_NAME}\"\nfi\n\nFRAMEWORK_NAME=\"${PROJECT_NAME}\"\nUFW_SDK_VERSION=$(echo \"${UFW_SDK_VERSION}\" | grep -o \"[0-9].*$\")\nUFW_IPHONE_PATH=\"${UFW_BUILD_DIR}/Release-iphoneos/${FRAMEWORK_NAME}.framework\"\nUFW_SIMULATOR_PATH=\"${UFW_BUILD_DIR}/Release-iphonesimulator/${FRAMEWORK_NAME}.framework\"\nUFW_UNIVERSAL_DIR=\"${UFW_BUILD_DIR}/Release-iphoneuniversal\"\nUFW_FRAMEWORK=\"${UFW_UNIVERSAL_DIR}/${FRAMEWORK_NAME}.framework\"\n\n# Build Framework\n\nrm -rf \"${UFW_UNIVERSAL_DIR}\"\n\nxcodebuild -target \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphoneos${UFW_SDK_VERSION} clean build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -target \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphonesimulator${UFW_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n\nmkdir -p \"${UFW_UNIVERSAL_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\ncp -r \"${UFW_IPHONE_PATH}/.\" \"${UFW_FRAMEWORK}\"\n\nlipo -create -output \"${UFW_FRAMEWORK}/${FRAMEWORK_NAME}\" \"${UFW_SIMULATOR_PATH}/${FRAMEWORK_NAME}\" \"${UFW_IPHONE_PATH}/${FRAMEWORK_NAME}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: lipo failed\"; exit 1; fi\n"; + shellScript = "\nUFW_TARGET=\"CorePlot iOS\"\nUFW_BUILD_DIR=\"${PROJECT_DIR}/../build\"\n\n# Use the latest iphoneos SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"iphoneos.*$\")\nwhile read -r line; do\nUFW_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_SDK_VERSION=$(echo \"${UFW_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\nFRAMEWORK_NAME=\"${PROJECT_NAME}\"\n\nUFW_IPHONE_PATH=\"${UFW_BUILD_DIR}/Release-iphoneos/${FRAMEWORK_NAME}.framework\"\nUFW_SIMULATOR_PATH=\"${UFW_BUILD_DIR}/Release-iphonesimulator/${FRAMEWORK_NAME}.framework\"\nUFW_UNIVERSAL_DIR=\"${UFW_BUILD_DIR}/Release-iphoneuniversal\"\nUFW_FRAMEWORK=\"${UFW_UNIVERSAL_DIR}/${FRAMEWORK_NAME}.framework\"\n\n# Build Framework\n\nrm -rf \"${UFW_UNIVERSAL_DIR}\"\n\nxcodebuild -scheme \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphoneos${UFW_SDK_VERSION} clean build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -scheme \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphonesimulator${UFW_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n\nmkdir -p \"${UFW_UNIVERSAL_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\ncp -r \"${UFW_IPHONE_PATH}/.\" \"${UFW_FRAMEWORK}\"\n\nlipo -create -output \"${UFW_FRAMEWORK}/${FRAMEWORK_NAME}\" \"${UFW_SIMULATOR_PATH}/${FRAMEWORK_NAME}\" \"${UFW_IPHONE_PATH}/${FRAMEWORK_NAME}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: lipo failed\"; exit 1; fi\n"; + }; + C3AC175C244B594800E7380C /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "UFW_MAC_TARGET=\"CorePlot Mac\"\nUFW_IOS_TARGET=\"CorePlot iOS\"\nUFW_TVOS_TARGET=\"CorePlot tvOS\"\n\nUFW_BUILD_DIR=\"${PROJECT_DIR}/../build\"\n\n# Mac SDK\n# Use the latest macOS SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"[^.]macosx.*$\")\nwhile read -r line; do\nUFW_MAC_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_MAC_SDK_VERSION=$(echo \"${UFW_MAC_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\n# iOS SDK\n# Use the latest iOS SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"iphoneos.*$\")\nwhile read -r line; do\nUFW_IOS_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_IOS_SDK_VERSION=$(echo \"${UFW_IOS_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\n# tvOS SDK\n# Use the latest tvOS SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"appletvos.*$\")\nwhile read -r line; do\nUFW_TVOS_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_TVOS_SDK_VERSION=$(echo \"${UFW_TVOS_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\nFRAMEWORK_NAME=\"${PROJECT_NAME}\"\n\nUFW_MAC_PATH=\"${UFW_BUILD_DIR}/Release/${FRAMEWORK_NAME}.framework\"\nUFW_CATALYST_PATH=\"${UFW_BUILD_DIR}/Release-maccatalyst/${FRAMEWORK_NAME}.framework\"\nUFW_IOS_PATH=\"${UFW_BUILD_DIR}/Release-iphoneos/${FRAMEWORK_NAME}.framework\"\nUFW_IOS_SIMULATOR_PATH=\"${UFW_BUILD_DIR}/Release-iphonesimulator/${FRAMEWORK_NAME}.framework\"\nUFW_TVOS_PATH=\"${UFW_BUILD_DIR}/Release-appletvos/${FRAMEWORK_NAME}.framework\"\nUFW_TVOS_SIMULATOR_PATH=\"${UFW_BUILD_DIR}/Release-appletvsimulator/${FRAMEWORK_NAME}.framework\"\n\nUFW_UNIVERSAL_DIR=\"${UFW_BUILD_DIR}/Release-universal\"\nUFW_FRAMEWORK=\"${UFW_UNIVERSAL_DIR}/${FRAMEWORK_NAME}.xcframework\"\n\n# Build Framework\n\nrm -rf \"${UFW_UNIVERSAL_DIR}\"\n\n# macOS\nxcodebuild -scheme \"${UFW_MAC_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk macosx${UFW_MAC_SDK_VERSION} clean build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n# Mac Catalyst\nxcodebuild -scheme \"${UFW_IOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphoneos${UFW_IOS_SDK_VERSION} -destination \"platform=macOS,variant=Mac Catalyst\" build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n# iOS\nxcodebuild -scheme \"${UFW_IOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphoneos${UFW_IOS_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -scheme \"${UFW_IOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphonesimulator${UFW_IOS_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n#tvOS\nxcodebuild -scheme \"${UFW_TVOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk appletvos${UFW_TVOS_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -scheme \"${UFW_TVOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk appletvsimulator${UFW_TVOS_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n\nmkdir -p \"${UFW_UNIVERSAL_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\nxcodebuild -create-xcframework -output \"${UFW_FRAMEWORK}\" \\\n -framework \"${UFW_MAC_PATH}\" \\\n -framework \"${UFW_CATALYST_PATH}\" \\\n -framework \"${UFW_IOS_PATH}\" \\\n -framework \"${UFW_IOS_SIMULATOR_PATH}\" \\\n -framework \"${UFW_TVOS_PATH}\" \\\n -framework \"${UFW_TVOS_SIMULATOR_PATH}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: create XCFramework failed\"; exit 1; fi\n\n"; }; /* End PBXShellScriptBuildPhase section */ @@ -3701,6 +3725,35 @@ }; name = Release; }; + C3AC175E244B594800E7380C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; + }; + name = Debug; + }; + C3AC175F244B594800E7380C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; + ZERO_LINK = NO; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -3830,6 +3883,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + C3AC175D244B594800E7380C /* Build configuration list for PBXAggregateTarget "Universal XCFramework" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C3AC175E244B594800E7380C /* Debug */, + C3AC175F244B594800E7380C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = 0867D690FE84028FC02AAC07 /* Project object */; diff --git a/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Universal XCFramework.xcscheme b/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Universal XCFramework.xcscheme new file mode 100644 index 000000000..8022bd237 --- /dev/null +++ b/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Universal XCFramework.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/xcconfig/CorePlot.xcconfig b/framework/xcconfig/CorePlot.xcconfig index f57ece3ce..5d4e435bd 100644 --- a/framework/xcconfig/CorePlot.xcconfig +++ b/framework/xcconfig/CorePlot.xcconfig @@ -32,5 +32,6 @@ SEPARATE_STRIP = YES SKIP_INSTALL = YES STRIP_STYLE = debugging STRIP_SWIFT_SYMBOLS = YES +SUPPORTS_MACCATALYST = YES SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule" USE_HEADERMAP = NO diff --git a/scripts/createrelease.py b/scripts/createrelease.py index 9375881c2..0d94efe65 100644 --- a/scripts/createrelease.py +++ b/scripts/createrelease.py @@ -59,9 +59,11 @@ def RunXcode(project, target): macosDir = join(binariesDir, 'MacOS') iosDir = join(binariesDir, 'iOS') tvosDir = join(binariesDir, 'tvOS') +universalDir = join(binariesDir, 'All') makedirs(macosDir) mkdir(iosDir) mkdir(tvosDir) +mkdir(universalDir) # Build Mac Framework chdir('framework') @@ -89,6 +91,12 @@ def RunXcode(project, target): tvOSFramework = join(tvOSProductsDir, 'CorePlot.framework') copytree(tvOSFramework, join(tvosDir, 'CorePlot.framework'), symlinks=True) +# Build Universal Framework +RunXcode('CorePlot.xcodeproj', 'Universal XCFramework') +universalProductsDir = join(projectRoot, 'build/Release-universal') +universalFramework = join(universalProductsDir, 'CorePlot.xcframework') +copytree(universalFramework, join(universalDir, 'CorePlot.xcframework'), symlinks=True) + # Build Docs RunXcode('CorePlot.xcodeproj', 'Documentation-Mac') RunXcode('CorePlot.xcodeproj', 'Documentation-iOS') From 97509324b97c46b117e017f97c4027b72352290b Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 16 May 2020 10:08:41 -0400 Subject: [PATCH 012/245] Updated code formatting with Uncrustify 0.71.0. --- QCPlugin/CPTBarPlotPlugin.m | 3 ++ QCPlugin/CPTPieChartPlugin.m | 10 +++-- QCPlugin/CPTScatterPlotPlugin.m | 5 +++ QCPlugin/CorePlotQCPlugin.m | 16 ++++++-- .../Classes/CPTTestApp_iPadViewController.m | 22 ++++++++++ .../CPTTestApp/Source/AxisDemoController.m | 9 +++++ .../Source/CPTPlotSymbolTestController.m | 6 +++ examples/CPTTestApp/Source/Controller.m | 38 ++++++++++++++++++ .../Source/SelectionDemoController.m | 8 ++++ .../CorePlotGallery/src/ios/AppDelegate.m | 2 + .../src/ios/DetailViewController.m | 2 + .../src/ios/RootViewController.m | 1 + .../src/ios/ThemeTableViewController.m | 2 +- .../src/mac/PlotGalleryController.m | 2 + examples/CorePlotGallery/src/mac/PlotView.m | 1 + .../src/plots/CurvedScatterPlot.m | 4 ++ .../CorePlotGallery/src/plots/FunctionPlot.m | 1 + .../src/plots/GradientScatterPlot.m | 3 ++ .../src/plots/SimplePieChart.m | 2 + .../src/plots/SimpleScatterPlot.m | 3 ++ .../src/plots/VerticalBarChart.m | 4 ++ .../CorePlotGallery/src/shared/PlotGallery.m | 1 + .../CorePlotGallery/src/shared/PlotItem.m | 1 + .../src/tvOS/RootViewControllerTV.m | 1 + .../src/tvOS/ThemeTableViewControllerTV.m | 2 +- examples/DropPlot/CPTPlotDocument.m | 7 ++++ examples/MinorTickLabels/Controller.m | 11 +++++ examples/RangePlot/Controller.m | 11 +++++ .../MacOnly/CPTPlatformSpecificCategories.m | 1 + .../MacOnly/CPTPlatformSpecificFunctions.m | 2 + .../MacOnly/CPTTextStylePlatformSpecific.m | 12 ++++-- framework/Source/CPTAnimation.m | 10 ++--- framework/Source/CPTAxis.m | 8 ++++ framework/Source/CPTAxisLabel.m | 1 + framework/Source/CPTBarPlot.m | 9 +++++ framework/Source/CPTBorderedLayer.m | 1 + framework/Source/CPTCalendarFormatterTests.m | 1 + framework/Source/CPTColor.m | 1 + framework/Source/CPTDataSourceTestCase.m | 1 + framework/Source/CPTFill.m | 2 + framework/Source/CPTGradient.m | 18 +++++++++ framework/Source/CPTGraph.m | 4 ++ framework/Source/CPTGridLineGroup.m | 1 + framework/Source/CPTGridLines.m | 1 + framework/Source/CPTImage.m | 1 + framework/Source/CPTLayer.m | 7 ++++ framework/Source/CPTLegend.m | 10 +++++ framework/Source/CPTLineStyle.m | 1 + framework/Source/CPTMutableNumericDataTests.m | 4 ++ ...CPTMutableNumericDataTypeConversionTests.m | 10 +++++ .../Source/CPTNumericData+TypeConversion.m | 1 + framework/Source/CPTNumericData.m | 1 + framework/Source/CPTNumericDataTests.m | 4 ++ .../CPTNumericDataTypeConversionTests.m | 17 ++++++++ framework/Source/CPTPieChart.m | 40 ++++++++++++++----- framework/Source/CPTPlot.m | 10 +++++ framework/Source/CPTPlotArea.m | 9 +++++ framework/Source/CPTPlotRangeTests.m | 9 +++++ framework/Source/CPTPlotSpace.m | 3 ++ framework/Source/CPTRangePlot.m | 5 +++ framework/Source/CPTScatterPlot.m | 5 +++ framework/Source/CPTScatterPlotTests.m | 1 + framework/Source/CPTTestCase.m | 1 + framework/Source/CPTTextLayer.m | 1 + framework/Source/CPTTheme.m | 3 ++ framework/Source/CPTTimeFormatterTests.m | 1 + framework/Source/CPTTradingRangePlot.m | 5 +++ framework/Source/CPTXYAxis.m | 2 + framework/Source/CPTXYAxisSet.m | 1 + framework/Source/CPTXYPlotSpace.m | 19 +++++++++ framework/Source/CPTXYPlotSpaceTests.m | 9 +++++ framework/Source/NSCoderExtensions.m | 7 ++++ framework/Source/_CPTAnimationCGFloatPeriod.m | 1 + framework/Source/_CPTAnimationCGPointPeriod.m | 1 + framework/Source/_CPTAnimationCGRectPeriod.m | 1 + framework/Source/_CPTAnimationCGSizePeriod.m | 1 + .../Source/_CPTAnimationNSDecimalPeriod.m | 1 + framework/Source/_CPTDarkGradientTheme.m | 4 ++ framework/Source/_CPTFillImage.m | 1 + framework/Source/_CPTPlainBlackTheme.m | 4 ++ framework/Source/_CPTPlainWhiteTheme.m | 4 ++ framework/Source/_CPTSlateTheme.m | 4 ++ framework/Source/_CPTStocksTheme.m | 4 ++ framework/Source/_CPTXYTheme.m | 1 + framework/iPhoneOnly/CPTGraphHostingView.m | 3 ++ .../CPTPlatformSpecificCategories.m | 2 + .../iPhoneOnly/CPTPlatformSpecificFunctions.m | 1 + .../iPhoneOnly/CPTTextStylePlatformSpecific.m | 3 ++ scripts/uncrustify.cfg | 29 +++++++++++++- 89 files changed, 472 insertions(+), 31 deletions(-) diff --git a/QCPlugin/CPTBarPlotPlugin.m b/QCPlugin/CPTBarPlotPlugin.m index 77d6fc9fc..61488114c 100644 --- a/QCPlugin/CPTBarPlotPlugin.m +++ b/QCPlugin/CPTBarPlotPlugin.m @@ -110,6 +110,7 @@ -(void)addPlotWithIndex:(NSUInteger)index ]; CGColorRef lineColor = [self newDefaultColorForPlot:index alpha:1.0]; + [self addInputPortWithType:QCPortTypeColor forKey:[NSString stringWithFormat:@"plotDataLineColor%lu", (unsigned long)index] withAttributes:@{ QCPortAttributeNameKey: [NSString stringWithFormat:@"Plot Line Color %lu", (unsigned long)(index + 1)], @@ -118,6 +119,7 @@ -(void)addPlotWithIndex:(NSUInteger)index ]; CGColorRef fillColor = [self newDefaultColorForPlot:index alpha:0.25]; + [self addInputPortWithType:QCPortTypeColor forKey:[NSString stringWithFormat:@"plotFillColor%lu", (unsigned long)index] withAttributes:@{ QCPortAttributeNameKey: [NSString stringWithFormat:@"Plot Fill Color %lu", (unsigned long)(index + 1)], @@ -135,6 +137,7 @@ -(void)addPlotWithIndex:(NSUInteger)index // Add the new plot to the graph CPTBarPlot *barPlot = [CPTBarPlot tubularBarPlotWithColor:[CPTColor greenColor] horizontalBars:NO]; + barPlot.identifier = [NSString stringWithFormat:@"Bar Plot %lu", (unsigned long)(index + 1)]; barPlot.dataSource = self; [self.graph addPlot:barPlot]; diff --git a/QCPlugin/CPTPieChartPlugin.m b/QCPlugin/CPTPieChartPlugin.m index 99aeb2ede..7955a4d75 100644 --- a/QCPlugin/CPTPieChartPlugin.m +++ b/QCPlugin/CPTPieChartPlugin.m @@ -107,16 +107,16 @@ +(nullable CPTDictionary *)attributesForPropertyPortWithKey:(nullable NSString * else if ( [key isEqualToString:@"inputBorderColor"] ) { CGColorRef grayColor = CGColorCreateGenericGray(0.0, 1.0); CPTDictionary *result = @{ - QCPortAttributeNameKey: @"Border Color", - QCPortAttributeDefaultValueKey: (id)CFBridgingRelease(grayColor) + QCPortAttributeNameKey: @"Border Color", + QCPortAttributeDefaultValueKey: (id)CFBridgingRelease(grayColor) }; return result; } else if ( [key isEqualToString:@"inputLabelColor"] ) { CGColorRef grayColor = CGColorCreateGenericGray(1.0, 1.0); CPTDictionary *result = @{ - QCPortAttributeNameKey: @"Label Color", - QCPortAttributeDefaultValueKey: (id)CFBridgingRelease(grayColor) + QCPortAttributeNameKey: @"Label Color", + QCPortAttributeDefaultValueKey: (id)CFBridgingRelease(grayColor) }; return result; } @@ -273,9 +273,11 @@ -(nullable CPTTextLayer *)sliceLabelForPieChart:(nonnull CPTPieChart *)pieChart NSString *label = dict[[NSString stringWithFormat:@"%lu", (unsigned long)index]]; CPTTextLayer *layer = [[CPTTextLayer alloc] initWithText:label]; + [layer sizeToFit]; CPTMutableTextStyle *style = [CPTMutableTextStyle textStyle]; + style.color = [CPTColor colorWithCGColor:self.inputLabelColor]; layer.textStyle = style; diff --git a/QCPlugin/CPTScatterPlotPlugin.m b/QCPlugin/CPTScatterPlotPlugin.m index 023a890db..fe0b15d07 100644 --- a/QCPlugin/CPTScatterPlotPlugin.m +++ b/QCPlugin/CPTScatterPlotPlugin.m @@ -47,6 +47,7 @@ -(void)addPlotWithIndex:(NSUInteger)index ]; CGColorRef lineColor = [self newDefaultColorForPlot:index alpha:1.0]; + [self addInputPortWithType:QCPortTypeColor forKey:[NSString stringWithFormat:@"plotDataLineColor%lu", (unsigned long)index] withAttributes:@{ QCPortAttributeNameKey: [NSString stringWithFormat:@"Plot Line Color %lu", (unsigned long)(index + 1)], @@ -55,6 +56,7 @@ -(void)addPlotWithIndex:(NSUInteger)index ]; CGColorRef fillColor = [self newDefaultColorForPlot:index alpha:0.25]; + [self addInputPortWithType:QCPortTypeColor forKey:[NSString stringWithFormat:@"plotFillColor%lu", (unsigned long)index] withAttributes:@{ QCPortAttributeNameKey: [NSString stringWithFormat:@"Plot Fill Color %lu", (unsigned long)(index + 1)], @@ -81,6 +83,7 @@ -(void)addPlotWithIndex:(NSUInteger)index ]; CGColorRef symbolColor = [self newDefaultColorForPlot:index alpha:0.25]; + [self addInputPortWithType:QCPortTypeColor forKey:[NSString stringWithFormat:@"plotDataSymbolColor%lu", (unsigned long)index] withAttributes:@{ QCPortAttributeNameKey: [NSString stringWithFormat:@"Data Symbol Color %lu", (unsigned long)(index + 1)], @@ -90,12 +93,14 @@ -(void)addPlotWithIndex:(NSUInteger)index // Add the new plot to the graph CPTScatterPlot *scatterPlot = [[CPTScatterPlot alloc] init]; + scatterPlot.identifier = [NSString stringWithFormat:@"Data Source Plot %lu", (unsigned long)(index + 1)]; // Line Style lineColor = [self newDefaultColorForPlot:index alpha:1.0]; fillColor = [self newDefaultColorForPlot:index alpha:0.25]; CPTMutableLineStyle *lineStyle = [CPTMutableLineStyle lineStyle]; + lineStyle.lineWidth = 3.0; lineStyle.lineColor = [CPTColor colorWithCGColor:lineColor]; scatterPlot.dataLineStyle = lineStyle; diff --git a/QCPlugin/CorePlotQCPlugin.m b/QCPlugin/CorePlotQCPlugin.m index 3aa3ef332..62f303356 100644 --- a/QCPlugin/CorePlotQCPlugin.m +++ b/QCPlugin/CorePlotQCPlugin.m @@ -36,6 +36,7 @@ void drawErrorText(CGContextRef __nonnull context, CGRect rect) // Compute the width of the text CGPoint r0 = CGContextGetTextPosition(context); + CGContextSetTextDrawingMode(context, kCGTextInvisible); CGContextShowText(context, "ERROR", 5); // 10 CGPoint r1 = CGContextGetTextPosition(context); @@ -255,8 +256,8 @@ +(nullable CPTDictionary *)attributesForPropertyPortWithKey:(nullable NSString * if ( [key isEqualToString:@"inputAxisColor"] ) { CGColorRef axisColor = CGColorCreateGenericRGB(1.0, 1.0, 1.0, 1.0); CPTDictionary *result = @{ - QCPortAttributeNameKey: @"Axis Color", - QCPortAttributeDefaultValueKey: (id)CFBridgingRelease(axisColor) + QCPortAttributeNameKey: @"Axis Color", + QCPortAttributeDefaultValueKey: (id)CFBridgingRelease(axisColor) }; return result; } @@ -320,8 +321,8 @@ +(nullable CPTDictionary *)attributesForPropertyPortWithKey:(nullable NSString * if ( [key isEqualToString:@"inputPlotAreaColor"] ) { CGColorRef plotAreaColor = CGColorCreateGenericRGB(0.0, 0.0, 0.0, 0.4); CPTDictionary *result = @{ - QCPortAttributeNameKey: @"Plot Area Color", - QCPortAttributeDefaultValueKey: (id)CFBridgingRelease(plotAreaColor) + QCPortAttributeNameKey: @"Plot Area Color", + QCPortAttributeDefaultValueKey: (id)CFBridgingRelease(plotAreaColor) }; return result; } @@ -447,14 +448,17 @@ -(BOOL)configureAxis set.yAxis.minorTickLineStyle = lineStyle; CPTMutableTextStyle *textStyle = [CPTMutableTextStyle textStyle]; + textStyle.color = axisColor; set.xAxis.labelTextStyle = textStyle; double xrange = self.inputXMax - self.inputXMin; + set.xAxis.majorIntervalLength = @(xrange / (self.inputXMajorIntervals)); set.xAxis.minorTicksPerInterval = self.inputXMinorIntervals; double yrange = self.inputYMax - self.inputYMin; + set.yAxis.majorIntervalLength = @(yrange / (self.inputYMajorIntervals)); set.yAxis.minorTicksPerInterval = self.inputYMinorIntervals; @@ -604,6 +608,7 @@ -(void)createImageResourcesWithContext:(nonnull id)context rowBytes, [context colorSpace], (CGBitmapInfo)kCGImageAlphaPremultipliedFirst); + self.bitmapContext = newContext; if ( !newContext ) { @@ -784,6 +789,7 @@ -(BOOL)configureGraph // Configure the plot space and axis sets CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; + plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@(self.inputXMin) length:@(self.inputXMax - self.inputXMin)]; plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@(self.inputYMin) length:@(self.inputYMax - self.inputYMin)]; @@ -817,6 +823,7 @@ -(BOOL)execute:(nonnull id)context atTime:(NSTimeInterval __unu // Draw the plot ... CGSize boundsSize = self.graph.bounds.size; CGContextRef bmContext = self.bitmapContext; + CGContextClearRect(bmContext, CPTRectMake(0.0, 0.0, boundsSize.width, boundsSize.height)); CGContextSetRGBFillColor(bmContext, 0.0, 0.0, 0.0, 0.0); CGContextFillRect(bmContext, CPTRectMake(0, 0, boundsSize.width, boundsSize.height)); @@ -835,6 +842,7 @@ -(BOOL)execute:(nonnull id)context atTime:(NSTimeInterval __unu // ... and put it on the output port id provider = self.imageProvider; + if ( provider ) { self.outputImage = provider; return YES; diff --git a/examples/CPTTestApp-iPad/Classes/CPTTestApp_iPadViewController.m b/examples/CPTTestApp-iPad/Classes/CPTTestApp_iPadViewController.m index 4312843d4..6a94ea0d1 100644 --- a/examples/CPTTestApp-iPad/Classes/CPTTestApp_iPadViewController.m +++ b/examples/CPTTestApp-iPad/Classes/CPTTestApp_iPadViewController.m @@ -59,6 +59,7 @@ -(void)viewDidAppear:(BOOL)animated // Add a rotation animation CABasicAnimation *rotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; + rotation.removedOnCompletion = YES; rotation.fromValue = @(M_PI * 5); rotation.toValue = @0.0; @@ -96,6 +97,7 @@ -(void)constructScatterPlot // Setup plot space CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)newGraph.defaultPlotSpace; + plotSpace.allowsUserInteraction = YES; plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@1.0 length:@2.0]; plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@1.0 length:@3.0]; @@ -103,15 +105,18 @@ -(void)constructScatterPlot // Axes CPTXYAxisSet *axisSet = (CPTXYAxisSet *)newGraph.axisSet; CPTXYAxis *x = axisSet.xAxis; + x.majorIntervalLength = @0.5; x.orthogonalPosition = @2.0; x.minorTicksPerInterval = 2; CPTPlotRangeArray *exclusionRanges = @[[CPTPlotRange plotRangeWithLocation:@1.99 length:@0.02], [CPTPlotRange plotRangeWithLocation:@0.99 length:@0.02], [CPTPlotRange plotRangeWithLocation:@2.99 length:@0.02]]; + x.labelExclusionRanges = exclusionRanges; CPTXYAxis *y = axisSet.yAxis; + y.majorIntervalLength = @0.5; y.minorTicksPerInterval = 5; y.orthogonalPosition = @2.0; @@ -122,9 +127,11 @@ -(void)constructScatterPlot // Create a green plot area CPTScatterPlot *dataSourceLinePlot = [[CPTScatterPlot alloc] init]; + dataSourceLinePlot.identifier = @"Green Plot"; CPTMutableLineStyle *lineStyle = [dataSourceLinePlot.dataLineStyle mutableCopy]; + lineStyle.lineWidth = 3.0; lineStyle.lineColor = [CPTColor greenColor]; lineStyle.dashPattern = @[@5.0f, @5.0f]; @@ -135,8 +142,10 @@ -(void)constructScatterPlot // Put an area gradient under the plot above CPTColor *areaColor = [CPTColor colorWithComponentRed:CPTFloat(0.3) green:CPTFloat(1.0) blue:CPTFloat(0.3) alpha:CPTFloat(0.8)]; CPTGradient *areaGradient = [CPTGradient gradientWithBeginningColor:areaColor endingColor:[CPTColor clearColor]]; + areaGradient.angle = -90.0; CPTFill *areaGradientFill = [CPTFill fillWithGradient:areaGradient]; + dataSourceLinePlot.areaFill = areaGradientFill; dataSourceLinePlot.areaBaseValue = @1.75; @@ -146,6 +155,7 @@ -(void)constructScatterPlot [newGraph addPlot:dataSourceLinePlot]; CABasicAnimation *fadeInAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"]; + fadeInAnimation.duration = 1.0; fadeInAnimation.removedOnCompletion = NO; fadeInAnimation.fillMode = kCAFillModeForwards; @@ -154,6 +164,7 @@ -(void)constructScatterPlot // Create a blue plot area CPTScatterPlot *boundLinePlot = [[CPTScatterPlot alloc] init]; + boundLinePlot.identifier = @"Blue Plot"; lineStyle = [boundLinePlot.dataLineStyle mutableCopy]; @@ -169,6 +180,7 @@ -(void)constructScatterPlot // Do a blue gradient CPTColor *areaColor1 = [CPTColor colorWithComponentRed:CPTFloat(0.3) green:CPTFloat(0.3) blue:CPTFloat(1.0) alpha:CPTFloat(0.8)]; CPTGradient *areaGradient1 = [CPTGradient gradientWithBeginningColor:areaColor1 endingColor:[CPTColor clearColor]]; + areaGradient1.angle = -90.0; areaGradientFill = [CPTFill fillWithGradient:areaGradient1]; boundLinePlot.areaFill = areaGradientFill; @@ -176,8 +188,10 @@ -(void)constructScatterPlot // Add plot symbols CPTMutableLineStyle *symbolLineStyle = [CPTMutableLineStyle lineStyle]; + symbolLineStyle.lineColor = [CPTColor blackColor]; CPTPlotSymbol *plotSymbol = [CPTPlotSymbol ellipsePlotSymbol]; + plotSymbol.fill = [CPTFill fillWithColor:[CPTColor blueColor]]; plotSymbol.lineStyle = symbolLineStyle; plotSymbol.size = CGSizeMake(10.0, 10.0); @@ -185,6 +199,7 @@ -(void)constructScatterPlot // Add some initial data NSMutableArray *contentArray = [NSMutableArray arrayWithCapacity:100]; + for ( NSUInteger i = 0; i < 60; i++ ) { NSNumber *xVal = @(1 + i * 0.05); NSNumber *yVal = @(1.2 * arc4random() / (double)UINT32_MAX + 1.2); @@ -213,11 +228,13 @@ -(void)constructBarChart // Add plot space for horizontal bar charts CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)newGraph.defaultPlotSpace; + plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@0.0 length:@300.0]; plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@0.0 length:@16.0]; CPTXYAxisSet *axisSet = (CPTXYAxisSet *)newGraph.axisSet; CPTXYAxis *x = axisSet.xAxis; + x.axisLineStyle = nil; x.majorTickLineStyle = nil; x.minorTickLineStyle = nil; @@ -234,6 +251,7 @@ -(void)constructBarChart CPTStringArray *xAxisLabels = @[@"Label A", @"Label B", @"Label C", @"Label D"]; NSUInteger labelLocation = 0; CPTMutableAxisLabelSet *customLabels = [NSMutableSet setWithCapacity:xAxisLabels.count]; + for ( NSNumber *tickLocation in customTickLocations ) { CPTAxisLabel *newLabel = [[CPTAxisLabel alloc] initWithText:xAxisLabels[labelLocation++] textStyle:x.labelTextStyle]; newLabel.tickLocation = tickLocation; @@ -245,6 +263,7 @@ -(void)constructBarChart x.axisLabels = customLabels; CPTXYAxis *y = axisSet.yAxis; + y.axisLineStyle = nil; y.majorTickLineStyle = nil; y.minorTickLineStyle = nil; @@ -256,6 +275,7 @@ -(void)constructBarChart // First bar plot CPTBarPlot *barPlot = [CPTBarPlot tubularBarPlotWithColor:[CPTColor darkGrayColor] horizontalBars:NO]; + barPlot.baseValue = @0.0; barPlot.dataSource = self; barPlot.barOffset = @(-0.25); @@ -295,6 +315,7 @@ -(void)constructPieChart // Prepare a radial overlay gradient for shading/gloss CPTGradient *overlayGradient = [[CPTGradient alloc] init]; + overlayGradient.gradientType = CPTGradientTypeRadial; overlayGradient = [overlayGradient addColorStop:[[CPTColor blackColor] colorWithAlphaComponent:CPTFloat(0.0)] atPosition:CPTFloat(0.0)]; overlayGradient = [overlayGradient addColorStop:[[CPTColor blackColor] colorWithAlphaComponent:CPTFloat(0.3)] atPosition:CPTFloat(0.9)]; @@ -302,6 +323,7 @@ -(void)constructPieChart // Add pie chart CPTPieChart *newPlot = [[CPTPieChart alloc] init]; + newPlot.dataSource = self; newPlot.pieRadius = 130.0; newPlot.identifier = @"Pie Chart 1"; diff --git a/examples/CPTTestApp/Source/AxisDemoController.m b/examples/CPTTestApp/Source/AxisDemoController.m index 51cf85317..2f61cea5f 100644 --- a/examples/CPTTestApp/Source/AxisDemoController.m +++ b/examples/CPTTestApp/Source/AxisDemoController.m @@ -18,6 +18,7 @@ -(void)awakeFromNib // Create graph CPTXYGraph *graph = [[CPTXYGraph alloc] initWithFrame:NSRectToCGRect(self.hostView.bounds)]; + graph.fill = [CPTFill fillWithColor:[CPTColor darkGrayColor]]; graph.cornerRadius = 20.0; self.hostView.hostedGraph = graph; @@ -37,25 +38,30 @@ -(void)awakeFromNib // Setup plot space CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)graph.defaultPlotSpace; + plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@0.0 length:@(-10.0)]; plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@0.5 length:@1500.0]; plotSpace.yScaleType = CPTScaleTypeLog; // Line styles CPTMutableLineStyle *axisLineStyle = [CPTMutableLineStyle lineStyle]; + axisLineStyle.lineWidth = 3.0; axisLineStyle.lineCap = kCGLineCapRound; CPTMutableLineStyle *majorGridLineStyle = [CPTMutableLineStyle lineStyle]; + majorGridLineStyle.lineWidth = 0.75; majorGridLineStyle.lineColor = [CPTColor redColor]; CPTMutableLineStyle *minorGridLineStyle = [CPTMutableLineStyle lineStyle]; + minorGridLineStyle.lineWidth = 0.25; minorGridLineStyle.lineColor = [CPTColor blueColor]; // Text styles CPTMutableTextStyle *axisTitleTextStyle = [CPTMutableTextStyle textStyle]; + axisTitleTextStyle.fontName = @"Helvetica Bold"; axisTitleTextStyle.fontSize = 14.0; @@ -63,6 +69,7 @@ -(void)awakeFromNib // Label x axis with a fixed interval policy CPTXYAxisSet *axisSet = (CPTXYAxisSet *)graph.axisSet; CPTXYAxis *x = axisSet.xAxis; + x.separateLayers = NO; x.orthogonalPosition = @0.5; x.majorIntervalLength = @0.5; @@ -84,6 +91,7 @@ -(void)awakeFromNib axisLineStyle.lineColor = [CPTColor greenColor]; CPTXYAxis *y = axisSet.yAxis; + y.separateLayers = YES; y.minorTicksPerInterval = 9; y.tickDirection = CPTSignNone; @@ -100,6 +108,7 @@ -(void)awakeFromNib y.labelingPolicy = CPTAxisLabelingPolicyAutomatic; CPTFill *bandFill = [CPTFill fillWithColor:[[CPTColor darkGrayColor] colorWithAlphaComponent:0.5]]; + [y addBackgroundLimitBand:[CPTLimitBand limitBandWithRange:[CPTPlotRange plotRangeWithLocation:@7.0 length:@1.5] fill:bandFill]]; [y addBackgroundLimitBand:[CPTLimitBand limitBandWithRange:[CPTPlotRange plotRangeWithLocation:@1.5 length:@3.0] fill:bandFill]]; } diff --git a/examples/CPTTestApp/Source/CPTPlotSymbolTestController.m b/examples/CPTTestApp/Source/CPTPlotSymbolTestController.m index 8cf7d0aee..666b90f20 100644 --- a/examples/CPTTestApp/Source/CPTPlotSymbolTestController.m +++ b/examples/CPTTestApp/Source/CPTPlotSymbolTestController.m @@ -20,6 +20,7 @@ -(void)awakeFromNib // Create graph CPTXYGraph *newGraph = [[CPTXYGraph alloc] initWithFrame:NSRectToCGRect(self.hostView.bounds)]; + self.hostView.hostedGraph = newGraph; self.graph = newGraph; @@ -28,6 +29,7 @@ -(void)awakeFromNib // Background CGColorRef grayColor = CGColorCreateGenericGray(0.7, 1.0); + newGraph.fill = [CPTFill fillWithColor:[CPTColor colorWithCGColor:grayColor]]; CGColorRelease(grayColor); @@ -39,10 +41,12 @@ -(void)awakeFromNib // Setup plot space CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)newGraph.defaultPlotSpace; + plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@(-1.0) length:@11.0]; plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@(-1.0) length:@14.0]; CPTMutableShadow *lineShadow = [CPTMutableShadow shadow]; + lineShadow.shadowOffset = CGSizeMake(3.0, -3.0); lineShadow.shadowBlurRadius = 4.0; lineShadow.shadowColor = [CPTColor redColor]; @@ -98,11 +102,13 @@ -(nullable CPTPlotSymbol *)symbolForScatterPlot:(nonnull CPTScatterPlot *)plot r gradientFill.gradientType = CPTGradientTypeRadial; CPTMutableShadow *symbolShadow = [CPTMutableShadow shadow]; + symbolShadow.shadowOffset = CGSizeMake(3.0, -3.0); symbolShadow.shadowBlurRadius = 3.0; symbolShadow.shadowColor = [CPTColor blackColor]; CPTPlotSymbol *symbol = [[CPTPlotSymbol alloc] init]; + symbol.symbolType = (CPTPlotSymbolType)((NSString *)plot.identifier).intValue; symbol.fill = [CPTFill fillWithGradient:gradientFill]; symbol.shadow = symbolShadow; diff --git a/examples/CPTTestApp/Source/Controller.m b/examples/CPTTestApp/Source/Controller.m index 9f1d5439a..692793df6 100644 --- a/examples/CPTTestApp/Source/Controller.m +++ b/examples/CPTTestApp/Source/Controller.m @@ -106,12 +106,15 @@ -(void)setupGraph NSString *lineTwo = @"This is the Second Line of the Title"; NSMutableAttributedString *graphTitle = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@\n%@", lineOne, lineTwo]]; + [graphTitle addAttribute:NSForegroundColorAttributeName value:[NSColor labelColor] range:NSMakeRange(0, lineOne.length)]; [graphTitle addAttribute:NSForegroundColorAttributeName value:[NSColor secondaryLabelColor] range:NSMakeRange(lineOne.length + 1, lineTwo.length)]; NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; + paragraphStyle.alignment = CPTTextAlignmentCenter; [graphTitle addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, graphTitle.length)]; NSFont *titleFont = [NSFont fontWithName:@"Helvetica-Bold" size:18.0]; + [graphTitle addAttribute:NSFontAttributeName value:titleFont range:NSMakeRange(0, lineOne.length)]; titleFont = [NSFont fontWithName:@"Helvetica" size:14.0]; [graphTitle addAttribute:NSFontAttributeName value:titleFont range:NSMakeRange(lineOne.length + 1, lineTwo.length)]; @@ -143,14 +146,17 @@ -(void)setupAxes // Grid line styles CPTMutableLineStyle *majorGridLineStyle = [CPTMutableLineStyle lineStyle]; + majorGridLineStyle.lineWidth = 0.75; majorGridLineStyle.lineColor = [[CPTColor colorWithNSColor:[NSColor gridColor]] colorWithAlphaComponent:0.75]; CPTMutableLineStyle *minorGridLineStyle = [CPTMutableLineStyle lineStyle]; + minorGridLineStyle.lineWidth = 0.25; minorGridLineStyle.lineColor = [[CPTColor colorWithNSColor:[NSColor gridColor]] colorWithAlphaComponent:0.1]; CPTMutableLineStyle *redLineStyle = [CPTMutableLineStyle lineStyle]; + redLineStyle.lineWidth = 10.0; redLineStyle.lineColor = [[CPTColor colorWithNSColor:[NSColor systemRedColor]] colorWithAlphaComponent:0.5]; @@ -160,6 +166,7 @@ -(void)setupAxes CPTXYAxis *x = axisSet.xAxis; CPTMutableTextStyle *textStyle = [x.titleTextStyle mutableCopy]; + textStyle.color = [CPTColor colorWithNSColor:[NSColor secondaryLabelColor]]; x.labelTextStyle = textStyle; @@ -171,12 +178,15 @@ -(void)setupAxes CPTPlotRangeArray *exclusionRanges = @[[CPTPlotRange plotRangeWithLocation:@1.99 length:@0.02], [CPTPlotRange plotRangeWithLocation:@0.99 length:@0.02], [CPTPlotRange plotRangeWithLocation:@2.99 length:@0.02]]; + x.labelExclusionRanges = exclusionRanges; NSMutableAttributedString *xTitle = [[NSMutableAttributedString alloc] initWithString:@"X Axis\nLine 2"]; + [xTitle addAttribute:NSForegroundColorAttributeName value:[NSColor secondaryLabelColor] range:NSMakeRange(0, 6)]; [xTitle addAttribute:NSForegroundColorAttributeName value:[NSColor tertiaryLabelColor] range:NSMakeRange(7, 6)]; NSMutableParagraphStyle *xParagraphStyle = [[NSMutableParagraphStyle alloc] init]; + xParagraphStyle.alignment = CPTTextAlignmentCenter; [xTitle addAttribute:NSParagraphStyleAttributeName value:xParagraphStyle range:NSMakeRange(0, xTitle.length)]; x.attributedTitle = xTitle; @@ -186,6 +196,7 @@ -(void)setupAxes // Label y with an automatic label policy. CPTXYAxis *y = axisSet.yAxis; + y.labelingPolicy = CPTAxisLabelingPolicyAutomatic; y.labelTextStyle = textStyle; y.orthogonalPosition = @2.0; @@ -200,9 +211,11 @@ -(void)setupAxes y.labelExclusionRanges = exclusionRanges; NSMutableAttributedString *yTitle = [[NSMutableAttributedString alloc] initWithString:@"Y Axis\nLine 2"]; + [yTitle addAttribute:NSForegroundColorAttributeName value:[NSColor secondaryLabelColor] range:NSMakeRange(0, 6)]; [yTitle addAttribute:NSForegroundColorAttributeName value:[NSColor tertiaryLabelColor] range:NSMakeRange(7, 6)]; NSMutableParagraphStyle *yParagraphStyle = [[NSMutableParagraphStyle alloc] init]; + yParagraphStyle.alignment = CPTTextAlignmentCenter; [yTitle addAttribute:NSParagraphStyleAttributeName value:yParagraphStyle range:NSMakeRange(0, yTitle.length)]; y.attributedTitle = yTitle; @@ -249,6 +262,7 @@ -(void)setupScatterPlots boundLinePlot.identifier = bindingsPlot; CPTMutableLineStyle *lineStyle = [boundLinePlot.dataLineStyle mutableCopy]; + lineStyle.miterLimit = 1.0; lineStyle.lineWidth = 3.0; lineStyle.lineColor = [CPTColor blueColor]; @@ -261,6 +275,7 @@ -(void)setupScatterPlots // Put an area gradient under the plot above CPTColor *areaColor = [CPTColor colorWithComponentRed:0.3 green:0.3 blue:1.0 alpha:0.8]; CPTGradient *areaGradient = [CPTGradient gradientWithBeginningColor:areaColor endingColor:[CPTColor clearColor]]; + areaGradient.angle = -90.0; CPTFill *areaGradientFill = [CPTFill fillWithGradient:areaGradient]; @@ -269,8 +284,10 @@ -(void)setupScatterPlots // Add plot symbols CPTMutableLineStyle *symbolLineStyle = [CPTMutableLineStyle lineStyle]; + symbolLineStyle.lineColor = [CPTColor blackColor]; CPTPlotSymbol *plotSymbol = [CPTPlotSymbol ellipsePlotSymbol]; + plotSymbol.fill = [CPTFill fillWithColor:[CPTColor colorWithNSColor:[NSColor systemBlueColor]]]; plotSymbol.lineStyle = symbolLineStyle; plotSymbol.size = CGSizeMake(10.0, 10.0); @@ -283,6 +300,7 @@ -(void)setupScatterPlots // Create a second plot that uses the data source method CPTScatterPlot *dataSourceLinePlot = [[CPTScatterPlot alloc] init]; + dataSourceLinePlot.identifier = dataSourcePlot; dataSourceLinePlot.cachePrecision = CPTPlotCachePrecisionDouble; @@ -294,6 +312,7 @@ -(void)setupScatterPlots dataSourceLinePlot.dataSource = self; CPTMutableTextStyle *textStyle = [CPTMutableTextStyle textStyle]; + textStyle.color = [CPTColor colorWithNSColor:[NSColor secondaryLabelColor]]; dataSourceLinePlot.labelTextStyle = textStyle; @@ -331,11 +350,13 @@ -(void)setupScatterPlots // Auto scale the plot space to fit the plot data // Extend the y range by 10% for neatness CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; + plotSpace.allowsMomentum = YES; [plotSpace scaleToFitPlots:@[boundLinePlot, dataSourceLinePlot]]; CPTPlotRange *xRange = plotSpace.xRange; CPTMutablePlotRange *yRange = [plotSpace.yRange mutableCopy]; + [yRange expandRangeByFactor:@1.1]; plotSpace.yRange = yRange; @@ -345,6 +366,7 @@ -(void)setupScatterPlots // set the x and y shift to match the new ranges CGFloat length = xRange.lengthDouble; + self.xShift = length - 3.0; length = yRange.lengthDouble; self.yShift = length - 2.0; @@ -369,9 +391,11 @@ -(void)setupBarPlots // First bar plot CPTMutableTextStyle *textStyle = [CPTMutableTextStyle textStyle]; + textStyle.color = [CPTColor colorWithNSColor:[NSColor secondaryLabelColor]]; CPTBarPlot *barPlot = [CPTBarPlot tubularBarPlotWithColor:[CPTColor darkGrayColor] horizontalBars:YES]; + barPlot.baseValue = @20.0; barPlot.dataSource = self; barPlot.barOffset = @(-0.25); @@ -490,6 +514,7 @@ -(void)scatterPlot:(nonnull CPTScatterPlot *__unused)plot plotSymbolWasSelectedA // Setup a style for the annotation CPTMutableTextStyle *hitAnnotationTextStyle = [CPTMutableTextStyle textStyle]; + hitAnnotationTextStyle.color = [CPTColor colorWithNSColor:[NSColor labelColor]]; hitAnnotationTextStyle.fontSize = CPTFloat(16.0); hitAnnotationTextStyle.fontName = @"Helvetica-Bold"; @@ -505,11 +530,13 @@ -(void)scatterPlot:(nonnull CPTScatterPlot *__unused)plot plotSymbolWasSelectedA // Add annotation // First make a string for the y value NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; + formatter.maximumFractionDigits = 2; NSString *yString = [formatter stringFromNumber:y]; // Now add the annotation to the plot area CPTPlotSpace *defaultSpace = self.graph.defaultPlotSpace; + if ( defaultSpace ) { CPTTextLayer *textLayer = [[CPTTextLayer alloc] initWithText:yString style:hitAnnotationTextStyle]; annotation = [[CPTPlotSpaceAnnotation alloc] initWithPlotSpace:defaultSpace anchorPlotPoint:anchorPoint]; @@ -528,6 +555,7 @@ -(void)barPlot:(nonnull CPTBarPlot *)plot barWasSelectedAtRecordIndex:(NSUIntege NSLog(@"barWasSelectedAtRecordIndex %u", (unsigned)index); CPTPlotSpaceAnnotation *annotation = self.symbolTextAnnotation; + if ( annotation ) { [self.graph.plotAreaFrame.plotArea removeAnnotation:annotation]; self.symbolTextAnnotation = nil; @@ -535,6 +563,7 @@ -(void)barPlot:(nonnull CPTBarPlot *)plot barWasSelectedAtRecordIndex:(NSUIntege // Setup a style for the annotation CPTMutableTextStyle *hitAnnotationTextStyle = [CPTMutableTextStyle textStyle]; + hitAnnotationTextStyle.color = [CPTColor colorWithNSColor:[NSColor labelColor]]; hitAnnotationTextStyle.fontSize = 16.0; hitAnnotationTextStyle.fontName = @"Helvetica-Bold"; @@ -549,11 +578,13 @@ -(void)barPlot:(nonnull CPTBarPlot *)plot barWasSelectedAtRecordIndex:(NSUIntege // Add annotation // First make a string for the y value NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; + formatter.maximumFractionDigits = 2; NSString *yString = [formatter stringFromNumber:y]; // Now add the annotation to the plot area CPTPlotSpace *plotSpace = plot.plotSpace; + if ( plotSpace ) { CPTTextLayer *textLayer = [[CPTTextLayer alloc] initWithText:yString style:hitAnnotationTextStyle]; annotation = [[CPTPlotSpaceAnnotation alloc] initWithPlotSpace:plotSpace anchorPlotPoint:anchorPoint]; @@ -655,6 +686,7 @@ -(IBAction)printDocument:(nullable id __unused)sender CPTGraphHostingView *host = self.hostView; NSWindow *window = host.window; + if ( window ) { NSPrintOperation *printOperation = [NSPrintOperation printOperationWithView:host printInfo:printInfo]; [printOperation runOperationModalForWindow:window @@ -684,6 +716,7 @@ -(IBAction)explodeLayers:(nullable id __unused)sender self.graph.superlayer.masksToBounds = NO; RotationView *overlayView = [[RotationView alloc] initWithFrame:self.hostView.frame]; + overlayView.rotationDelegate = self; overlayView.rotationTransform = perspectiveRotation; overlayView.autoresizingMask = self.hostView.autoresizingMask; @@ -747,6 +780,7 @@ -(IBAction)plotSymbolDemo:(nullable id)sender } NSWindow *window = self.plotSymbolWindow; + [window makeKeyAndOrderFront:sender]; [[NSNotificationCenter defaultCenter] addObserver:self @@ -764,6 +798,7 @@ -(IBAction)axisDemo:(nullable id)sender } NSWindow *window = self.axisDemoWindow; + [window makeKeyAndOrderFront:sender]; [[NSNotificationCenter defaultCenter] addObserver:self @@ -781,6 +816,7 @@ -(IBAction)selectionDemo:(nullable id)sender } NSWindow *window = self.selectionDemoWindow; + [window makeKeyAndOrderFront:sender]; [[NSNotificationCenter defaultCenter] addObserver:self @@ -828,6 +864,7 @@ -(void)setXShift:(CGFloat)newShift xShift = newShift; CPTXYPlotSpace *space = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; CPTMutablePlotRange *newRange = [space.xRange mutableCopy]; + newRange.lengthDouble = 3.0 + newShift; space.xRange = newRange; } @@ -837,6 +874,7 @@ -(void)setYShift:(CGFloat)newShift yShift = newShift; CPTXYPlotSpace *space = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; CPTMutablePlotRange *newRange = [space.yRange mutableCopy]; + newRange.lengthDouble = 2.0 + newShift; space.yRange = newRange; } diff --git a/examples/CPTTestApp/Source/SelectionDemoController.m b/examples/CPTTestApp/Source/SelectionDemoController.m index bcf2fdde1..01a536768 100644 --- a/examples/CPTTestApp/Source/SelectionDemoController.m +++ b/examples/CPTTestApp/Source/SelectionDemoController.m @@ -57,6 +57,7 @@ -(void)setupGraph // Graph title newGraph.title = @"This is the Graph Title"; CPTMutableTextStyle *textStyle = [CPTMutableTextStyle textStyle]; + textStyle.color = [CPTColor grayColor]; textStyle.fontName = @"Helvetica-Bold"; textStyle.fontSize = 18.0; @@ -123,6 +124,7 @@ -(void)setupScatterPlots dataSourceLinePlot.cachePrecision = CPTPlotCachePrecisionDouble; CPTMutableLineStyle *lineStyle = [dataSourceLinePlot.dataLineStyle mutableCopy]; + lineStyle.lineWidth = 2.0; lineStyle.lineColor = [CPTColor greenColor]; dataSourceLinePlot.dataLineStyle = lineStyle; @@ -137,6 +139,7 @@ -(void)setupScatterPlots // Create a plot for the selection marker CPTScatterPlot *selectionPlot = [[CPTScatterPlot alloc] init]; + selectionPlot.identifier = SELECTION_PLOT; selectionPlot.cachePrecision = CPTPlotCachePrecisionDouble; @@ -151,17 +154,22 @@ -(void)setupScatterPlots // Auto scale the plot space to fit the plot data // Compress ranges so we can scroll CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; + [plotSpace scaleToFitPlots:@[dataSourceLinePlot]]; CPTMutablePlotRange *xRange = [plotSpace.xRange mutableCopy]; + [xRange expandRangeByFactor:@0.75]; plotSpace.xRange = xRange; CPTMutablePlotRange *yRange = [plotSpace.yRange mutableCopy]; + [yRange expandRangeByFactor:@0.75]; plotSpace.yRange = yRange; CPTPlotRange *globalXRange = [CPTPlotRange plotRangeWithLocation:@(-1.0) length:@10.0]; + plotSpace.globalXRange = globalXRange; CPTPlotRange *globalYRange = [CPTPlotRange plotRangeWithLocation:@(-5.0) length:@10.0]; + plotSpace.globalYRange = globalYRange; } diff --git a/examples/CorePlotGallery/src/ios/AppDelegate.m b/examples/CorePlotGallery/src/ios/AppDelegate.m index e3bafe91b..d74aa8ef2 100644 --- a/examples/CorePlotGallery/src/ios/AppDelegate.m +++ b/examples/CorePlotGallery/src/ios/AppDelegate.m @@ -23,9 +23,11 @@ -(BOOL)application:(nonnull UIApplication *__unused)application didFinishLaunchi [[PlotGallery sharedPlotGallery] sortByTitle]; UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController; + splitViewController.delegate = self; UINavigationController *navigationController = splitViewController.viewControllers.lastObject; + navigationController.topViewController.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem; return YES; diff --git a/examples/CorePlotGallery/src/ios/DetailViewController.m b/examples/CorePlotGallery/src/ios/DetailViewController.m index 9d787a9fa..75f0f9af0 100644 --- a/examples/CorePlotGallery/src/ios/DetailViewController.m +++ b/examples/CorePlotGallery/src/ios/DetailViewController.m @@ -37,6 +37,7 @@ -(void)setupView object:nil]; UIView *hostView = self.hostingView; + if ( hostView ) { [self.detailItem renderInView:hostView withTheme:[self currentTheme] animated:YES]; } @@ -124,6 +125,7 @@ -(void)themeSelectedWithName:(nonnull NSString *)themeName self.currentThemeName = themeName; UIView *hostView = self.hostingView; + if ( hostView ) { [self.detailItem renderInView:hostView withTheme:[self currentTheme] animated:YES]; } diff --git a/examples/CorePlotGallery/src/ios/RootViewController.m b/examples/CorePlotGallery/src/ios/RootViewController.m index 9d81892b5..94be858ae 100644 --- a/examples/CorePlotGallery/src/ios/RootViewController.m +++ b/examples/CorePlotGallery/src/ios/RootViewController.m @@ -106,6 +106,7 @@ -(nonnull UITableViewCell *)tableView:(nonnull UITableView *)tv cellForRowAtInde PlotItem *plotItem = [[PlotGallery sharedPlotGallery] objectInSection:[indexPath indexAtPosition:0] atIndex:[indexPath indexAtPosition:1]]; + cell.imageView.image = [plotItem image]; cell.textLabel.text = plotItem.title; diff --git a/examples/CorePlotGallery/src/ios/ThemeTableViewController.m b/examples/CorePlotGallery/src/ios/ThemeTableViewController.m index a705f18cf..2a7a8a858 100644 --- a/examples/CorePlotGallery/src/ios/ThemeTableViewController.m +++ b/examples/CorePlotGallery/src/ios/ThemeTableViewController.m @@ -89,7 +89,7 @@ -(nonnull UITableViewCell *)tableView:(nonnull UITableView *)tableView cellForRo -(void)tableView:(nonnull UITableView *__unused)tableView didSelectRowAtIndexPath:(nonnull NSIndexPath *)indexPath { NSDictionary *themeInfo = @{ - PlotGalleryThemeNameKey: self.themes[(NSUInteger)indexPath.row] + PlotGalleryThemeNameKey: self.themes[(NSUInteger)indexPath.row] }; [[NSNotificationCenter defaultCenter] postNotificationName:PlotGalleryThemeDidChangeNotification diff --git a/examples/CorePlotGallery/src/mac/PlotGalleryController.m b/examples/CorePlotGallery/src/mac/PlotGalleryController.m index be4239e94..de4cfa8f2 100644 --- a/examples/CorePlotGallery/src/mac/PlotGalleryController.m +++ b/examples/CorePlotGallery/src/mac/PlotGalleryController.m @@ -120,6 +120,7 @@ -(IBAction)themeSelectionDidChange:(nonnull id)sender self.currentThemeName = [sender titleOfSelectedItem]; PlotView *hostView = self.hostingView; + if ( hostView ) { [self.plotItem renderInView:hostView withTheme:[self currentTheme] animated:YES]; } @@ -295,6 +296,7 @@ -(nonnull NSView *) collectionView:(nonnull NSCollectionView *)collectionView NSString *content = [PlotGallery sharedPlotGallery].sectionTitles[(NSUInteger)indexPath.section]; NSView *view = [collectionView makeSupplementaryViewOfKind:kind withIdentifier:identifier forIndexPath:indexPath]; + if ( content && [view isKindOfClass:[NSTextField class]] ) { NSTextField *titleTextField = (NSTextField *)view; diff --git a/examples/CorePlotGallery/src/mac/PlotView.m b/examples/CorePlotGallery/src/mac/PlotView.m index b769c4a9e..36a1f8857 100644 --- a/examples/CorePlotGallery/src/mac/PlotView.m +++ b/examples/CorePlotGallery/src/mac/PlotView.m @@ -26,6 +26,7 @@ -(void)setFrameSize:(NSSize)newSize [super setFrameSize:newSize]; id theDelegate = self.delegate; + if ( [theDelegate respondsToSelector:@selector(setFrameSize:)] ) { [theDelegate setFrameSize:newSize]; } diff --git a/examples/CorePlotGallery/src/plots/CurvedScatterPlot.m b/examples/CorePlotGallery/src/plots/CurvedScatterPlot.m index 27e300d0f..1b0a3986c 100644 --- a/examples/CorePlotGallery/src/plots/CurvedScatterPlot.m +++ b/examples/CorePlotGallery/src/plots/CurvedScatterPlot.m @@ -378,6 +378,7 @@ -(void)scatterPlot:(nonnull CPTScatterPlot *__unused)plot plotSymbolWasSelectedA // Setup a style for the annotation CPTMutableTextStyle *hitAnnotationTextStyle = [CPTMutableTextStyle textStyle]; + hitAnnotationTextStyle.color = [CPTColor whiteColor]; hitAnnotationTextStyle.fontName = @"Helvetica-Bold"; @@ -392,12 +393,14 @@ -(void)scatterPlot:(nonnull CPTScatterPlot *__unused)plot plotSymbolWasSelectedA // Add annotation // First make a string for the y value NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; + formatter.maximumFractionDigits = 2; NSString *yString = [formatter stringFromNumber:y]; // Now add the annotation to the plot area CPTTextLayer *textLayer = [[CPTTextLayer alloc] initWithText:yString style:hitAnnotationTextStyle]; CPTImage *background = [CPTImage imageNamed:@"BlueBackground"]; + background.edgeInsets = CPTEdgeInsetsMake(8.0, 8.0, 8.0, 8.0); textLayer.fill = [CPTFill fillWithImage:background]; textLayer.paddingLeft = 2.0; @@ -406,6 +409,7 @@ -(void)scatterPlot:(nonnull CPTScatterPlot *__unused)plot plotSymbolWasSelectedA textLayer.paddingBottom = 2.0; CPTPlotSpace *defaultSpace = graph.defaultPlotSpace; + if ( defaultSpace ) { annotation = [[CPTPlotSpaceAnnotation alloc] initWithPlotSpace:defaultSpace anchorPlotPoint:anchorPoint]; annotation.contentLayer = textLayer; diff --git a/examples/CorePlotGallery/src/plots/FunctionPlot.m b/examples/CorePlotGallery/src/plots/FunctionPlot.m index 839ca3d52..68146403c 100644 --- a/examples/CorePlotGallery/src/plots/FunctionPlot.m +++ b/examples/CorePlotGallery/src/plots/FunctionPlot.m @@ -223,6 +223,7 @@ -(nullable UIFont *)italicFontForFont:(nonnull UIFont *)oldFont } UIFont *italicFont = nil; + if ( italicName ) { italicFont = [UIFont fontWithName:italicName size:oldFont.pointSize]; diff --git a/examples/CorePlotGallery/src/plots/GradientScatterPlot.m b/examples/CorePlotGallery/src/plots/GradientScatterPlot.m index db1004011..625b81f16 100644 --- a/examples/CorePlotGallery/src/plots/GradientScatterPlot.m +++ b/examples/CorePlotGallery/src/plots/GradientScatterPlot.m @@ -235,6 +235,7 @@ -(void)scatterPlot:(nonnull CPTScatterPlot *__unused)plot plotSymbolWasSelectedA // Setup a style for the annotation CPTMutableTextStyle *hitAnnotationTextStyle = [CPTMutableTextStyle textStyle]; + hitAnnotationTextStyle.color = [CPTColor whiteColor]; hitAnnotationTextStyle.fontSize = 16.0; hitAnnotationTextStyle.fontName = @"Helvetica-Bold"; @@ -250,11 +251,13 @@ -(void)scatterPlot:(nonnull CPTScatterPlot *__unused)plot plotSymbolWasSelectedA // Add annotation // First make a string for the y value NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; + formatter.maximumFractionDigits = 2; NSString *yString = [formatter stringFromNumber:y]; // Now add the annotation to the plot area CPTPlotSpace *defaultSpace = graph.defaultPlotSpace; + if ( defaultSpace ) { CPTTextLayer *textLayer = [[CPTTextLayer alloc] initWithText:yString style:hitAnnotationTextStyle]; annotation = [[CPTPlotSpaceAnnotation alloc] initWithPlotSpace:defaultSpace anchorPlotPoint:anchorPoint]; diff --git a/examples/CorePlotGallery/src/plots/SimplePieChart.m b/examples/CorePlotGallery/src/plots/SimplePieChart.m index 76e5c79ac..8e396bf91 100644 --- a/examples/CorePlotGallery/src/plots/SimplePieChart.m +++ b/examples/CorePlotGallery/src/plots/SimplePieChart.m @@ -118,6 +118,7 @@ -(nullable CPTLayer *)dataLabelForPlot:(nonnull CPTPlot *__unused)plot recordInd CPTTextLayer *newLayer = [[CPTTextLayer alloc] initWithText:[NSString stringWithFormat:@"%1.0f", self.plotData[index].doubleValue] style:whiteText]; + return newLayer; } @@ -137,6 +138,7 @@ -(void)pieChart:(nonnull CPTPieChart *)plot sliceWasSelectedAtRecordIndex:(NSUIn CPTMutableNumberArray *newData = [[NSMutableArray alloc] init]; NSUInteger dataCount = (NSUInteger)lrint(ceil(10.0 * arc4random() / (double)UINT32_MAX)) + 1; + for ( NSUInteger i = 1; i < dataCount; i++ ) { [newData addObject:@(100.0 * arc4random() / (double)UINT32_MAX)]; } diff --git a/examples/CorePlotGallery/src/plots/SimpleScatterPlot.m b/examples/CorePlotGallery/src/plots/SimpleScatterPlot.m index 4a321efc4..b5f9f777b 100644 --- a/examples/CorePlotGallery/src/plots/SimpleScatterPlot.m +++ b/examples/CorePlotGallery/src/plots/SimpleScatterPlot.m @@ -230,6 +230,7 @@ -(void)scatterPlot:(nonnull CPTScatterPlot *__unused)plot plotSymbolWasSelectedA // Setup a style for the annotation CPTMutableTextStyle *hitAnnotationTextStyle = [CPTMutableTextStyle textStyle]; + hitAnnotationTextStyle.color = [CPTColor whiteColor]; hitAnnotationTextStyle.fontSize = 16.0; hitAnnotationTextStyle.fontName = @"Helvetica-Bold"; @@ -245,11 +246,13 @@ -(void)scatterPlot:(nonnull CPTScatterPlot *__unused)plot plotSymbolWasSelectedA // Add annotation // First make a string for the y value NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; + formatter.maximumFractionDigits = 2; NSString *yString = [formatter stringFromNumber:y]; // Now add the annotation to the plot area CPTPlotSpace *defaultSpace = graph.defaultPlotSpace; + if ( defaultSpace ) { CPTTextLayer *textLayer = [[CPTTextLayer alloc] initWithText:yString style:hitAnnotationTextStyle]; annotation = [[CPTPlotSpaceAnnotation alloc] initWithPlotSpace:defaultSpace anchorPlotPoint:anchorPoint]; diff --git a/examples/CorePlotGallery/src/plots/VerticalBarChart.m b/examples/CorePlotGallery/src/plots/VerticalBarChart.m index 2236f441f..393cfcb39 100644 --- a/examples/CorePlotGallery/src/plots/VerticalBarChart.m +++ b/examples/CorePlotGallery/src/plots/VerticalBarChart.m @@ -249,6 +249,7 @@ -(void)barPlot:(nonnull CPTBarPlot *)plot barWasSelectedAtRecordIndex:(NSUIntege CPTGraph *graph = (self.graphs)[0]; CPTPlotSpaceAnnotation *annotation = self.symbolTextAnnotation; + if ( annotation ) { [graph.plotAreaFrame.plotArea removeAnnotation:annotation]; self.symbolTextAnnotation = nil; @@ -256,6 +257,7 @@ -(void)barPlot:(nonnull CPTBarPlot *)plot barWasSelectedAtRecordIndex:(NSUIntege // Setup a style for the annotation CPTMutableTextStyle *hitAnnotationTextStyle = [CPTMutableTextStyle textStyle]; + hitAnnotationTextStyle.color = [CPTColor orangeColor]; hitAnnotationTextStyle.fontSize = 16.0; hitAnnotationTextStyle.fontName = @"Helvetica-Bold"; @@ -269,11 +271,13 @@ -(void)barPlot:(nonnull CPTBarPlot *)plot barWasSelectedAtRecordIndex:(NSUIntege // Add annotation // First make a string for the y value NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; + formatter.maximumFractionDigits = 2; NSString *yString = [formatter stringFromNumber:value]; // Now add the annotation to the plot area CPTPlotSpace *space = plot.plotSpace; + if ( space ) { CPTTextLayer *textLayer = [[CPTTextLayer alloc] initWithText:yString style:hitAnnotationTextStyle]; annotation = [[CPTPlotSpaceAnnotation alloc] initWithPlotSpace:space anchorPlotPoint:anchorPoint]; diff --git a/examples/CorePlotGallery/src/shared/PlotGallery.m b/examples/CorePlotGallery/src/shared/PlotGallery.m index fc40ffe5a..d66225db8 100644 --- a/examples/CorePlotGallery/src/shared/PlotGallery.m +++ b/examples/CorePlotGallery/src/shared/PlotGallery.m @@ -68,6 +68,7 @@ -(void)addPlotItem:(nonnull PlotItem *)plotItem [self.plotItems addObject:plotItem]; NSString *sectionName = plotItem.section; + if ( sectionName ) { [self.plotSections addObject:sectionName]; } diff --git a/examples/CorePlotGallery/src/shared/PlotItem.m b/examples/CorePlotGallery/src/shared/PlotItem.m index 08bc060b7..166d5a625 100644 --- a/examples/CorePlotGallery/src/shared/PlotItem.m +++ b/examples/CorePlotGallery/src/shared/PlotItem.m @@ -84,6 +84,7 @@ -(void)killGraph // Remove the CPTLayerHostingView CPTGraphHostingView *hostingView = self.defaultLayerHostingView; + if ( hostingView ) { [hostingView removeFromSuperview]; diff --git a/examples/CorePlotGallery/src/tvOS/RootViewControllerTV.m b/examples/CorePlotGallery/src/tvOS/RootViewControllerTV.m index 0e114aef2..63615f612 100644 --- a/examples/CorePlotGallery/src/tvOS/RootViewControllerTV.m +++ b/examples/CorePlotGallery/src/tvOS/RootViewControllerTV.m @@ -111,6 +111,7 @@ -(UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPa PlotItem *plotItem = [[PlotGallery sharedPlotGallery] objectInSection:[indexPath indexAtPosition:0] atIndex:[indexPath indexAtPosition:1]]; + cell.imageView.image = [plotItem image]; cell.textLabel.text = plotItem.title; diff --git a/examples/CorePlotGallery/src/tvOS/ThemeTableViewControllerTV.m b/examples/CorePlotGallery/src/tvOS/ThemeTableViewControllerTV.m index fb6aac50e..4e867d9ce 100644 --- a/examples/CorePlotGallery/src/tvOS/ThemeTableViewControllerTV.m +++ b/examples/CorePlotGallery/src/tvOS/ThemeTableViewControllerTV.m @@ -89,7 +89,7 @@ -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NS -(void)tableView:(UITableView *__unused)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSDictionary *themeInfo = @{ - PlotGalleryThemeNameKey: self.themes[(NSUInteger)indexPath.row] + PlotGalleryThemeNameKey: self.themes[(NSUInteger)indexPath.row] }; [[NSNotificationCenter defaultCenter] postNotificationName:PlotGalleryThemeDidChangeNotification diff --git a/examples/DropPlot/CPTPlotDocument.m b/examples/DropPlot/CPTPlotDocument.m index 537a8bdcb..2d3ae253d 100644 --- a/examples/DropPlot/CPTPlotDocument.m +++ b/examples/DropPlot/CPTPlotDocument.m @@ -89,6 +89,7 @@ -(void)windowControllerDidLoadNib:(nonnull NSWindowController *__unused)windowCo // Setup plot space CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)newGraph.defaultPlotSpace; + plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@(self.minimumValueForXAxis) length:@(ceil((self.maximumValueForXAxis - self.minimumValueForXAxis) / self.majorIntervalLengthForX) * self.majorIntervalLengthForX)]; plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@(self.minimumValueForYAxis) @@ -101,12 +102,14 @@ -(void)windowControllerDidLoadNib:(nonnull NSWindowController *__unused)windowCo CPTXYAxisSet *axisSet = (CPTXYAxisSet *)newGraph.axisSet; CPTXYAxis *x = axisSet.xAxis; + x.minorTicksPerInterval = 9; x.majorIntervalLength = @(self.majorIntervalLengthForX); x.labelOffset = 5.0; x.axisConstraints = [CPTConstraints constraintWithLowerOffset:0.0]; CPTXYAxis *y = axisSet.yAxis; + y.minorTicksPerInterval = 9; y.majorIntervalLength = @(self.majorIntervalLengthForY); y.labelOffset = 5.0; @@ -114,9 +117,11 @@ -(void)windowControllerDidLoadNib:(nonnull NSWindowController *__unused)windowCo // Create the main plot for the delimited data CPTScatterPlot *dataSourceLinePlot = [[CPTScatterPlot alloc] initWithFrame:newGraph.bounds]; + dataSourceLinePlot.identifier = @"Data Source Plot"; CPTMutableLineStyle *lineStyle = [dataSourceLinePlot.dataLineStyle mutableCopy]; + lineStyle.lineWidth = 1.0; lineStyle.lineColor = [CPTColor whiteColor]; dataSourceLinePlot.dataLineStyle = lineStyle; @@ -257,6 +262,7 @@ -(IBAction)zoomIn length:@(self.maximumValueForYAxis - self.minimumValueForYAxis)]; CPTXYAxisSet *axisSet = (CPTXYAxisSet *)self.graph.axisSet; + axisSet.xAxis.labelingPolicy = CPTAxisLabelingPolicyAutomatic; axisSet.yAxis.labelingPolicy = CPTAxisLabelingPolicyAutomatic; } @@ -301,6 +307,7 @@ -(IBAction)zoomOut plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@(minY) length:@(ceil((maxY - minY) / intervalY) * intervalY)]; CPTXYAxisSet *axisSet = (CPTXYAxisSet *)self.graph.axisSet; + axisSet.xAxis.labelingPolicy = CPTAxisLabelingPolicyFixedInterval; axisSet.yAxis.labelingPolicy = CPTAxisLabelingPolicyFixedInterval; } diff --git a/examples/MinorTickLabels/Controller.m b/examples/MinorTickLabels/Controller.m index 194c6a92a..0ea576ea3 100644 --- a/examples/MinorTickLabels/Controller.m +++ b/examples/MinorTickLabels/Controller.m @@ -31,6 +31,7 @@ -(void)awakeFromNib // Create graph from theme CPTXYGraph *newGraph = [[CPTXYGraph alloc] initWithFrame:CGRectZero]; CPTTheme *theme = [CPTTheme themeNamed:kCPTDarkGradientTheme]; + [newGraph applyTheme:theme]; self.graph = newGraph; @@ -40,39 +41,48 @@ -(void)awakeFromNib // Setup scatter plot space CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)newGraph.defaultPlotSpace; NSTimeInterval xLow = 0.0; + plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@(xLow) length:@(oneDay * 3.0)]; plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@1.0 length:@3.0]; // Axes CPTXYAxisSet *axisSet = (CPTXYAxisSet *)newGraph.axisSet; CPTXYAxis *x = axisSet.xAxis; + x.majorIntervalLength = @(oneDay); x.orthogonalPosition = @2.0; x.minorTicksPerInterval = 3; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + dateFormatter.dateStyle = kCFDateFormatterShortStyle; CPTTimeFormatter *myDateFormatter = [[CPTTimeFormatter alloc] initWithDateFormatter:dateFormatter]; + myDateFormatter.referenceDate = refDate; x.labelFormatter = myDateFormatter; NSDateFormatter *timeFormatter = [[NSDateFormatter alloc] init]; + timeFormatter.timeStyle = kCFDateFormatterShortStyle; CPTTimeFormatter *myTimeFormatter = [[CPTTimeFormatter alloc] initWithDateFormatter:timeFormatter]; + myTimeFormatter.referenceDate = refDate; x.minorTickLabelFormatter = myTimeFormatter; // x.minorTickLabelRotation = M_PI_2; CPTXYAxis *y = axisSet.yAxis; + y.majorIntervalLength = @0.5; y.minorTicksPerInterval = 5; y.orthogonalPosition = @(0.5 * oneDay); // Create a plot that uses the data source method CPTScatterPlot *dataSourceLinePlot = [[CPTScatterPlot alloc] init]; + dataSourceLinePlot.identifier = @"Date Plot"; CPTMutableLineStyle *lineStyle = [dataSourceLinePlot.dataLineStyle mutableCopy]; + lineStyle.lineWidth = 3.; lineStyle.lineColor = [CPTColor greenColor]; dataSourceLinePlot.dataLineStyle = lineStyle; @@ -82,6 +92,7 @@ -(void)awakeFromNib // Add some data NSMutableArray *newData = [NSMutableArray array]; + for ( NSUInteger i = 0; i < 7; i++ ) { NSTimeInterval xVal = oneDay * i * 0.5; diff --git a/examples/RangePlot/Controller.m b/examples/RangePlot/Controller.m index bf6741983..c40f6586e 100644 --- a/examples/RangePlot/Controller.m +++ b/examples/RangePlot/Controller.m @@ -35,6 +35,7 @@ -(void)awakeFromNib // Create graph from theme CPTXYGraph *newGraph = [[CPTXYGraph alloc] initWithFrame:CGRectZero]; CPTTheme *theme = [CPTTheme themeNamed:kCPTDarkGradientTheme]; + [newGraph applyTheme:theme]; self.graph = newGraph; @@ -43,6 +44,7 @@ -(void)awakeFromNib // Title CPTMutableTextStyle *textStyle = [CPTMutableTextStyle textStyle]; + textStyle.color = [CPTColor whiteColor]; textStyle.fontSize = 18.0; textStyle.fontName = @"Helvetica"; @@ -53,32 +55,39 @@ -(void)awakeFromNib // Setup scatter plot space CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)newGraph.defaultPlotSpace; NSTimeInterval xLow = oneDay * 0.5; + plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@(xLow) length:@(oneDay * 5.0)]; plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@1.0 length:@3.0]; // Axes CPTXYAxisSet *axisSet = (CPTXYAxisSet *)newGraph.axisSet; CPTXYAxis *x = axisSet.xAxis; + x.majorIntervalLength = @(oneDay); x.orthogonalPosition = @2.0; x.minorTicksPerInterval = 0; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + dateFormatter.dateStyle = kCFDateFormatterShortStyle; CPTTimeFormatter *timeFormatter = [[CPTTimeFormatter alloc] initWithDateFormatter:dateFormatter]; + timeFormatter.referenceDate = refDate; x.labelFormatter = timeFormatter; CPTXYAxis *y = axisSet.yAxis; + y.majorIntervalLength = @0.5; y.minorTicksPerInterval = 5; y.orthogonalPosition = @(oneDay); // Create a plot that uses the data source method CPTRangePlot *dataSourceLinePlot = [[CPTRangePlot alloc] init]; + dataSourceLinePlot.identifier = @"Date Plot"; // Add line style CPTMutableLineStyle *lineStyle = [CPTMutableLineStyle lineStyle]; + lineStyle.lineWidth = 1.0; lineStyle.lineColor = [CPTColor greenColor]; self.barLineStyle = lineStyle; @@ -96,10 +105,12 @@ -(void)awakeFromNib // Store area fill for use later CPTColor *transparentGreen = [[CPTColor greenColor] colorWithAlphaComponent:0.2]; + self.areaFill = [[CPTFill alloc] initWithColor:transparentGreen]; // Add some data NSMutableArray *newData = [NSMutableArray array]; + for ( NSUInteger i = 0; i < 5; i++ ) { NSTimeInterval xVal = oneDay * (i + 1.0); diff --git a/framework/MacOnly/CPTPlatformSpecificCategories.m b/framework/MacOnly/CPTPlatformSpecificCategories.m index 8b6229cc5..9c46a5f07 100644 --- a/framework/MacOnly/CPTPlatformSpecificCategories.m +++ b/framework/MacOnly/CPTPlatformSpecificCategories.m @@ -63,6 +63,7 @@ -(nonnull CPTNativeImage *)imageOfLayer CGContextFlush(context); NSImage *image = [[NSImage alloc] initWithSize:NSSizeFromCGSize(boundsSize)]; + [image addRepresentation:layerImage]; return image; diff --git a/framework/MacOnly/CPTPlatformSpecificFunctions.m b/framework/MacOnly/CPTPlatformSpecificFunctions.m index 4e5668a58..a474cc482 100644 --- a/framework/MacOnly/CPTPlatformSpecificFunctions.m +++ b/framework/MacOnly/CPTPlatformSpecificFunctions.m @@ -98,6 +98,7 @@ CPTRGBAColor CPTRGBAColorFromNSColor(NSColor *__nonnull nsColor) [[nsColor colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&red green:&green blue:&blue alpha:&alpha]; CPTRGBAColor rgbColor; + rgbColor.red = red; rgbColor.green = green; rgbColor.blue = blue; @@ -134,6 +135,7 @@ CPTRGBAColor CPTRGBAColorFromNSColor(NSColor *__nonnull nsColor) CGContextFlush(context); NSImage *image = [[NSImage alloc] initWithSize:NSSizeFromCGSize(rect.size)]; + [image addRepresentation:layerImage]; return image; diff --git a/framework/MacOnly/CPTTextStylePlatformSpecific.m b/framework/MacOnly/CPTTextStylePlatformSpecific.m index 21af2ac93..a4df91cac 100644 --- a/framework/MacOnly/CPTTextStylePlatformSpecific.m +++ b/framework/MacOnly/CPTTextStylePlatformSpecific.m @@ -47,6 +47,7 @@ +(nonnull instancetype)textStyleWithAttributes:(nullable CPTDictionary *)attribu // Color NSColor *styleColor = attributes[NSForegroundColorAttributeName]; + if ( styleColor ) { // CGColor property is available in macOS 10.8 and later if ( [styleColor respondsToSelector:@selector(CGColor)] ) { @@ -70,6 +71,7 @@ +(nonnull instancetype)textStyleWithAttributes:(nullable CPTDictionary *)attribu // Text alignment and line break mode NSParagraphStyle *paragraphStyle = attributes[NSParagraphStyleAttributeName]; + if ( paragraphStyle ) { newStyle.textAlignment = (CPTTextAlignment)paragraphStyle.alignment; newStyle.lineBreakMode = paragraphStyle.lineBreakMode; @@ -102,6 +104,7 @@ -(nonnull CPTDictionary *)attributes // Color NSColor *styleColor = self.color.nsColor; + if ( styleColor ) { [myAttributes setValue:styleColor forKey:NSForegroundColorAttributeName]; @@ -109,6 +112,7 @@ -(nonnull CPTDictionary *)attributes // Text alignment and line break mode NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; + paragraphStyle.alignment = (NSTextAlignment)self.textAlignment; paragraphStyle.lineBreakMode = self.lineBreakMode; @@ -154,6 +158,7 @@ +(nonnull instancetype)textStyleWithAttributes:(nullable CPTDictionary *)attribu // Color NSColor *styleColor = attributes[NSForegroundColorAttributeName]; + if ( styleColor ) { // CGColor property is available in macOS 10.8 and later if ( [styleColor respondsToSelector:@selector(CGColor)] ) { @@ -177,6 +182,7 @@ +(nonnull instancetype)textStyleWithAttributes:(nullable CPTDictionary *)attribu // Text alignment and line break mode NSParagraphStyle *paragraphStyle = attributes[NSParagraphStyleAttributeName]; + if ( paragraphStyle ) { newStyle.textAlignment = (CPTTextAlignment)paragraphStyle.alignment; newStyle.lineBreakMode = paragraphStyle.lineBreakMode; @@ -257,9 +263,9 @@ -(void)drawInRect:(CGRect)rect withTextStyle:(nullable CPTTextStyle *)style inCo paragraphStyle.lineBreakMode = style.lineBreakMode; CPTDictionary *attributes = @{ - NSFontAttributeName: theFont, - NSForegroundColorAttributeName: foregroundColor, - NSParagraphStyleAttributeName: paragraphStyle + NSFontAttributeName: theFont, + NSForegroundColorAttributeName: foregroundColor, + NSParagraphStyleAttributeName: paragraphStyle }; [self drawWithRect:NSRectFromCGRect(rect) options:CPTStringDrawingOptions diff --git a/framework/Source/CPTAnimation.m b/framework/Source/CPTAnimation.m index a626f2dc7..3843bb0f7 100644 --- a/framework/Source/CPTAnimation.m +++ b/framework/Source/CPTAnimation.m @@ -334,11 +334,11 @@ -(void)update CGFloat progress = timingFunction(currentTime - startTime, duration); CPTDictionary *parameters = @{ - CPTAnimationOperationKey: animationOperation, - CPTAnimationValueKey: [period tweenedValueForProgress:progress], - CPTAnimationValueClassKey: valueClass ? valueClass : [NSNull null], - CPTAnimationStartedKey: @(started), - CPTAnimationFinishedKey: @(currentTime >= endTime) + CPTAnimationOperationKey: animationOperation, + CPTAnimationValueKey: [period tweenedValueForProgress:progress], + CPTAnimationValueClassKey: valueClass ? valueClass : [NSNull null], + CPTAnimationStartedKey: @(started), + CPTAnimationFinishedKey: @(currentTime >= endTime) }; // Used -performSelectorOnMainThread:... instead of GCD to ensure the animation continues to run in all run loop common modes. diff --git a/framework/Source/CPTAxis.m b/framework/Source/CPTAxis.m index 102318084..cd607d047 100644 --- a/framework/Source/CPTAxis.m +++ b/framework/Source/CPTAxis.m @@ -1389,6 +1389,7 @@ NSDecimal CPTNiceNum(NSDecimal x) NSDecimal minusOne = CPTDecimalFromInteger(-1); BOOL xIsNegative = CPTDecimalLessThan(x, zero); + if ( xIsNegative ) { x = CPTDecimalMultiply(x, minusOne); } @@ -1396,6 +1397,7 @@ NSDecimal CPTNiceNum(NSDecimal x) short exponent = (short)lrint(floor(log10(CPTDecimalDoubleValue(x)))); NSDecimal fractionPart; + NSDecimalMultiplyByPowerOf10(&fractionPart, &x, -exponent, NSRoundPlain); NSDecimal roundedFraction; @@ -1418,6 +1420,7 @@ NSDecimal CPTNiceNum(NSDecimal x) } NSDecimal roundedNumber; + NSDecimalMultiplyByPowerOf10(&roundedNumber, &roundedFraction, exponent, NSRoundPlain); return roundedNumber; @@ -1439,6 +1442,7 @@ NSDecimal CPTNiceLength(NSDecimal length) NSDecimal minusOne = CPTDecimalFromInteger(-1); BOOL isNegative = CPTDecimalLessThan(length, zero); + if ( isNegative ) { length = CPTDecimalMultiply(length, minusOne); } @@ -1618,9 +1622,11 @@ -(void)updateAxisLabelsAtLocations:(nullable CPTNumberSet *)locations inRange:(n } CPTPlotArea *thePlotArea = self.plotArea; + [thePlotArea setAxisSetLayersForType:CPTGraphLayerTypeAxisLabels]; CPTMutableAxisLabelSet *oldAxisLabels; + if ( useMajorAxisLabels ) { oldAxisLabels = [self.axisLabels mutableCopy]; } @@ -1733,6 +1739,7 @@ -(void)relabel return; } id theDelegate = (id)self.delegate; + if ( [theDelegate respondsToSelector:@selector(axisShouldRelabel:)] && ![theDelegate axisShouldRelabel:self] ) { self.needsRelabel = NO; return; @@ -2036,6 +2043,7 @@ -(void)removeAllBackgroundLimitBands [self.mutableBackgroundLimitBands removeAllObjects]; CPTPlotArea *thePlotArea = self.plotArea; + [thePlotArea setNeedsDisplay]; } diff --git a/framework/Source/CPTAxisLabel.m b/framework/Source/CPTAxisLabel.m index 2f9f23f5e..68d8b1e82 100644 --- a/framework/Source/CPTAxisLabel.m +++ b/framework/Source/CPTAxisLabel.m @@ -155,6 +155,7 @@ -(void)positionRelativeToViewPoint:(CGPoint)point forCoordinate:(CPTCoordinate)c CGFloat angle = CPTFloat(0.0); CGFloat labelRotation = self.rotation; + if ( isnan(labelRotation)) { labelRotation = (coordinate == CPTCoordinateX ? CPTFloat(M_PI_2) : CPTFloat(0.0)); } diff --git a/framework/Source/CPTBarPlot.m b/framework/Source/CPTBarPlot.m index e667773e3..f26f32392 100644 --- a/framework/Source/CPTBarPlot.m +++ b/framework/Source/CPTBarPlot.m @@ -186,6 +186,7 @@ +(nonnull instancetype)tubularBarPlotWithColor:(nonnull CPTColor *)color horizon barPlot.barCornerRadius = CPTFloat(2.0); CPTGradient *fillGradient = [CPTGradient gradientWithBeginningColor:color endingColor:[CPTColor blackColor]]; + fillGradient.angle = CPTFloat(horizontal ? -90.0 : 0.0); barPlot.fill = [CPTFill fillWithGradient:fillGradient]; @@ -878,17 +879,20 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context CPTMutableNumericData *cachedLocations = [self cachedNumbersForField:CPTBarPlotFieldBarLocation]; CPTMutableNumericData *cachedLengths = [self cachedNumbersForField:CPTBarPlotFieldBarTip]; + if ((cachedLocations == nil) || (cachedLengths == nil)) { return; } BOOL basesVary = self.barBasesVary; CPTMutableNumericData *cachedBases = [self cachedNumbersForField:CPTBarPlotFieldBarBase]; + if ( basesVary && (cachedBases == nil)) { return; } NSUInteger barCount = self.cachedDataCount; + if ( barCount == 0 ) { return; } @@ -1066,6 +1070,7 @@ -(nonnull CGMutablePathRef)newBarPathWithContext:(nullable CGContextRef)context } CGMutablePathRef path = CGPathCreateMutable(); + if ( radius == CPTFloat(0.0)) { if ( baseRadius == CPTFloat(0.0)) { // square corners @@ -1307,11 +1312,13 @@ -(void)positionLabelAnnotation:(nonnull CPTPlotSpaceAnnotation *)label forIndex: BOOL horizontalBars = self.barsAreHorizontal; CPTCoordinate coordinate = (horizontalBars ? CPTCoordinateX : CPTCoordinateY); CPTPlotRange *lengthRange = [self.plotSpace plotRangeForCoordinate:coordinate]; + if ( CPTDecimalLessThan(lengthRange.lengthDecimal, CPTDecimalFromInteger(0))) { positiveDirection = !positiveDirection; } NSNumber *offsetLocation; + if ( self.doublePrecisionCache ) { offsetLocation = @(location.doubleValue + [self doubleLengthInPlotCoordinates:self.barOffset.decimalValue]); } @@ -1475,6 +1482,7 @@ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint) } id theDelegate = (id)self.delegate; + if ( [theDelegate respondsToSelector:@selector(barPlot:barTouchDownAtRecordIndex:)] || [theDelegate respondsToSelector:@selector(barPlot:barTouchDownAtRecordIndex:withEvent:)] || [theDelegate respondsToSelector:@selector(barPlot:barWasSelectedAtRecordIndex:)] || @@ -1544,6 +1552,7 @@ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)in } id theDelegate = (id)self.delegate; + if ( [theDelegate respondsToSelector:@selector(barPlot:barTouchUpAtRecordIndex:)] || [theDelegate respondsToSelector:@selector(barPlot:barTouchUpAtRecordIndex:withEvent:)] || [theDelegate respondsToSelector:@selector(barPlot:barWasSelectedAtRecordIndex:)] || diff --git a/framework/Source/CPTBorderedLayer.m b/framework/Source/CPTBorderedLayer.m index 7a6126c00..fe96ffe6b 100644 --- a/framework/Source/CPTBorderedLayer.m +++ b/framework/Source/CPTBorderedLayer.m @@ -175,6 +175,7 @@ -(void)renderBorderedLayerAsVectorInContext:(nonnull CGContextRef)context } CPTLineStyle *theLineStyle = self.borderLineStyle; + if ( theLineStyle ) { CGFloat inset = theLineStyle.lineWidth * CPTFloat(0.5); CGRect layerBounds = CGRectInset(self.bounds, inset, inset); diff --git a/framework/Source/CPTCalendarFormatterTests.m b/framework/Source/CPTCalendarFormatterTests.m index ce3a609d5..2c63142f9 100644 --- a/framework/Source/CPTCalendarFormatterTests.m +++ b/framework/Source/CPTCalendarFormatterTests.m @@ -16,6 +16,7 @@ -(void)testKeyedArchivingRoundTrip dateFormatter.dateStyle = NSDateFormatterShortStyle; CPTCalendarFormatter *calendarFormatter = [[CPTCalendarFormatter alloc] initWithDateFormatter:dateFormatter]; + calendarFormatter.referenceDate = refDate; CPTCalendarFormatter *newCalendarFormatter = [self archiveRoundTrip:calendarFormatter]; diff --git a/framework/Source/CPTColor.m b/framework/Source/CPTColor.m index 2be62efdf..f173b86bd 100644 --- a/framework/Source/CPTColor.m +++ b/framework/Source/CPTColor.m @@ -499,6 +499,7 @@ -(nonnull instancetype)initWithComponentRed:(CGFloat)red green:(CGFloat)green bl colorComponents[2] = blue; colorComponents[3] = alpha; CGColorRef color = CGColorCreate([CPTColorSpace genericRGBSpace].cgColorSpace, colorComponents); + self = [self initWithCGColor:color]; CGColorRelease(color); return self; diff --git a/framework/Source/CPTDataSourceTestCase.m b/framework/Source/CPTDataSourceTestCase.m index 1c71e3e1d..2499b4479 100644 --- a/framework/Source/CPTDataSourceTestCase.m +++ b/framework/Source/CPTDataSourceTestCase.m @@ -70,6 +70,7 @@ -(nonnull CPTPlotRange *)xRange [self buildData]; CPTNumberArray *data = self.xData; + return [self plotRangeForData:data]; } diff --git a/framework/Source/CPTFill.m b/framework/Source/CPTFill.m index b884fdd99..2b952e1f8 100644 --- a/framework/Source/CPTFill.m +++ b/framework/Source/CPTFill.m @@ -114,12 +114,14 @@ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder id gradient = [coder decodeObjectOfClass:[CPTGradient class] forKey:@"_CPTFillGradient.fillGradient"]; + if ( gradient ) { return [self initWithGradient:gradient]; } id image = [coder decodeObjectOfClass:[CPTImage class] forKey:@"_CPTFillImage.fillImage"]; + if ( image ) { return [self initWithImage:image]; } diff --git a/framework/Source/CPTGradient.m b/framework/Source/CPTGradient.m index 15b0da1cd..c6ee1c6d1 100644 --- a/framework/Source/CPTGradient.m +++ b/framework/Source/CPTGradient.m @@ -302,6 +302,7 @@ +(nonnull instancetype)aquaSelectedGradient color1.position = CPTFloat(0.0); CPTGradientElement color2; + color2.color.red = CPTFloat(0.42); color2.color.green = CPTFloat(0.68); color2.color.blue = CPTFloat(0.90); @@ -309,6 +310,7 @@ +(nonnull instancetype)aquaSelectedGradient color2.position = CPTFloat(0.5); CPTGradientElement color3; + color3.color.red = CPTFloat(0.64); color3.color.green = CPTFloat(0.80); color3.color.blue = CPTFloat(0.94); @@ -316,6 +318,7 @@ +(nonnull instancetype)aquaSelectedGradient color3.position = CPTFloat(0.5); CPTGradientElement color4; + color4.color.red = CPTFloat(0.56); color4.color.green = CPTFloat(0.70); color4.color.blue = CPTFloat(0.90); @@ -344,16 +347,19 @@ +(nonnull instancetype)aquaNormalGradient color1.position = CPTFloat(0.0); CPTGradientElement color2; + color2.color.red = color2.color.green = color2.color.blue = CPTFloat(0.83); color2.color.alpha = CPTFloat(1.00); color2.position = CPTFloat(0.5); CPTGradientElement color3; + color3.color.red = color3.color.green = color3.color.blue = CPTFloat(0.95); color3.color.alpha = CPTFloat(1.00); color3.position = CPTFloat(0.5); CPTGradientElement color4; + color4.color.red = color4.color.green = color4.color.blue = CPTFloat(0.92); color4.color.alpha = CPTFloat(1.00); color4.position = CPTFloat(1.0); @@ -380,16 +386,19 @@ +(nonnull instancetype)aquaPressedGradient color1.position = CPTFloat(0.0); CPTGradientElement color2; + color2.color.red = color2.color.green = color2.color.blue = CPTFloat(0.64); color2.color.alpha = CPTFloat(1.00); color2.position = CPTFloat(0.5); CPTGradientElement color3; + color3.color.red = color3.color.green = color3.color.blue = CPTFloat(0.80); color3.color.alpha = CPTFloat(1.00); color3.position = CPTFloat(0.5); CPTGradientElement color4; + color4.color.red = color4.color.green = color4.color.blue = CPTFloat(0.77); color4.color.alpha = CPTFloat(1.00); color4.position = CPTFloat(1.0); @@ -416,6 +425,7 @@ +(nonnull instancetype)unifiedSelectedGradient color1.position = CPTFloat(0.0); CPTGradientElement color2; + color2.color.red = color2.color.green = color2.color.blue = CPTFloat(0.95); color2.color.alpha = CPTFloat(1.00); color2.position = CPTFloat(1.0); @@ -440,6 +450,7 @@ +(nonnull instancetype)unifiedNormalGradient color1.position = CPTFloat(0.0); CPTGradientElement color2; + color2.color.red = color2.color.green = color2.color.blue = CPTFloat(0.90); color2.color.alpha = CPTFloat(1.00); color2.position = CPTFloat(1.0); @@ -464,6 +475,7 @@ +(nonnull instancetype)unifiedPressedGradient color1.position = CPTFloat(0.0); CPTGradientElement color2; + color2.color.red = color2.color.green = color2.color.blue = CPTFloat(0.75); color2.color.alpha = CPTFloat(1.00); color2.position = CPTFloat(1.0); @@ -488,6 +500,7 @@ +(nonnull instancetype)unifiedDarkGradient color1.position = CPTFloat(0.0); CPTGradientElement color2; + color2.color.red = color2.color.green = color2.color.blue = CPTFloat(0.83); color2.color.alpha = CPTFloat(1.00); color2.position = CPTFloat(1.0); @@ -514,6 +527,7 @@ +(nonnull instancetype)sourceListSelectedGradient color1.position = CPTFloat(0.0); CPTGradientElement color2; + color2.color.red = CPTFloat(0.30); color2.color.green = CPTFloat(0.60); color2.color.blue = CPTFloat(0.92); @@ -542,6 +556,7 @@ +(nonnull instancetype)sourceListUnselectedGradient color1.position = CPTFloat(0.0); CPTGradientElement color2; + color2.color.red = CPTFloat(0.60); color2.color.green = CPTFloat(0.60); color2.color.blue = CPTFloat(0.60); @@ -570,6 +585,7 @@ +(nonnull instancetype)rainbowGradient color1.position = CPTFloat(0.0); CPTGradientElement color2; + color2.color.red = CPTFloat(0.54); color2.color.green = CPTFloat(0.00); color2.color.blue = CPTFloat(1.00); @@ -1100,6 +1116,7 @@ -(nonnull CGShadingRef)newRadialGradientInRect:(CGRect)rect context:(nonnull CGC fma(CGRectGetHeight(rect), theStartAnchor.y, CGRectGetMinY(rect))); CGPoint theEndAnchor = self.endAnchor; + endPoint = CPTPointMake(fma(CGRectGetWidth(rect), theEndAnchor.x, CGRectGetMinX(rect)), fma(CGRectGetHeight(rect), theEndAnchor.y, CGRectGetMinY(rect))); @@ -1132,6 +1149,7 @@ -(void)setBlendingMode:(CPTGradientBlendingMode)mode // Choose what blending function to use CGFunctionEvaluateCallback evaluationFunction = NULL; + switch ( blendingMode ) { case CPTLinearBlendingMode: evaluationFunction = &CPTLinearEvaluation; diff --git a/framework/Source/CPTGraph.m b/framework/Source/CPTGraph.m index 9255efe02..3daabad65 100644 --- a/framework/Source/CPTGraph.m +++ b/framework/Source/CPTGraph.m @@ -1101,6 +1101,7 @@ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint) // Plot spaces do not block events, because several spaces may need to receive // the same event sequence (e.g., dragging coordinate translation) BOOL handledEvent = NO; + for ( CPTPlotSpace *space in self.plotSpaces ) { BOOL handled = [space pointingDeviceDownEvent:event atPoint:interactionPoint]; handledEvent |= handled; @@ -1227,6 +1228,7 @@ -(BOOL)pointingDeviceDraggedEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoi // Plot spaces do not block events, because several spaces may need to receive // the same event sequence (e.g., dragging coordinate translation) BOOL handledEvent = NO; + for ( CPTPlotSpace *space in self.plotSpaces ) { BOOL handled = [space pointingDeviceDraggedEvent:event atPoint:interactionPoint]; handledEvent |= handled; @@ -1286,6 +1288,7 @@ -(BOOL)pointingDeviceCancelledEvent:(nonnull CPTNativeEvent *)event // Plot spaces BOOL handledEvent = NO; + for ( CPTPlotSpace *space in self.plotSpaces ) { BOOL handled = [space pointingDeviceCancelledEvent:event]; handledEvent |= handled; @@ -1347,6 +1350,7 @@ -(BOOL)scrollWheelEvent:(nonnull CPTNativeEvent *)event fromPoint:(CGPoint)fromP // Plot spaces BOOL handledEvent = NO; + for ( CPTPlotSpace *space in self.plotSpaces ) { BOOL handled = [space scrollWheelEvent:event fromPoint:fromPoint toPoint:toPoint]; handledEvent |= handled; diff --git a/framework/Source/CPTGridLineGroup.m b/framework/Source/CPTGridLineGroup.m index d68f67fc4..0cdc8cc49 100644 --- a/framework/Source/CPTGridLineGroup.m +++ b/framework/Source/CPTGridLineGroup.m @@ -115,6 +115,7 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context } CPTPlotArea *thePlotArea = self.plotArea; + for ( CPTAxis *axis in thePlotArea.axisSet.axes ) { if ( !axis.separateLayers ) { [axis drawGridLinesInContext:context isMajor:self.major]; diff --git a/framework/Source/CPTGridLines.m b/framework/Source/CPTGridLines.m index 6c0992e6b..83d74add8 100644 --- a/framework/Source/CPTGridLines.m +++ b/framework/Source/CPTGridLines.m @@ -110,6 +110,7 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context } CPTAxis *theAxis = self.axis; + [theAxis drawGridLinesInContext:context isMajor:self.major]; } diff --git a/framework/Source/CPTImage.m b/framework/Source/CPTImage.m index baebbc284..2d1b97b3a 100644 --- a/framework/Source/CPTImage.m +++ b/framework/Source/CPTImage.m @@ -198,6 +198,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder [coder encodeBool:self.tileAnchoredToContext forKey:@"CPTImage.tileAnchoredToContext"]; CPTEdgeInsets insets = self.edgeInsets; + [coder encodeCGFloat:insets.top forKey:@"CPTImage.edgeInsets.top"]; [coder encodeCGFloat:insets.left forKey:@"CPTImage.edgeInsets.left"]; [coder encodeCGFloat:insets.bottom forKey:@"CPTImage.edgeInsets.bottom"]; diff --git a/framework/Source/CPTLayer.m b/framework/Source/CPTLayer.m index eef476e9a..d1eca51db 100644 --- a/framework/Source/CPTLayer.m +++ b/framework/Source/CPTLayer.m @@ -747,6 +747,7 @@ -(void)setSublayers:(nullable CPTSublayerArray *)sublayers Class layerClass = [CPTLayer class]; CGFloat scale = self.contentsScale; + for ( CALayer *layer in sublayers ) { if ( [layer isKindOfClass:layerClass] ) { ((CPTLayer *)layer).contentsScale = scale; @@ -854,14 +855,17 @@ -(void)applySublayerMaskToContext:(nonnull CGContextRef)context forSublayer:(non } CGAffineTransform sublayerTransform = CATransform3DGetAffineTransform(sublayer.transform); + CGContextConcatCTM(context, CGAffineTransformInvert(sublayerTransform)); CALayer *superlayer = self.superlayer; + if ( [superlayer isKindOfClass:[CPTLayer class]] ) { [(CPTLayer *) superlayer applySublayerMaskToContext:context forSublayer:self withOffset:layerOffset]; } CGPathRef maskPath = self.sublayerMaskingPath; + if ( maskPath ) { CGContextTranslateCTM(context, -layerOffset.x, -layerOffset.y); CGContextAddPath(context, maskPath); @@ -888,6 +892,7 @@ -(void)applyMaskToContext:(nonnull CGContextRef)context } CGPathRef maskPath = self.maskingPath; + if ( maskPath ) { CGContextAddPath(context, maskPath); CGContextClip(context); @@ -901,6 +906,7 @@ -(void)setNeedsLayout [super setNeedsLayout]; CPTGraph *theGraph = self.graph; + if ( theGraph ) { [[NSNotificationCenter defaultCenter] postNotificationName:CPTGraphNeedsRedrawNotification object:theGraph]; @@ -912,6 +918,7 @@ -(void)setNeedsDisplay [super setNeedsDisplay]; CPTGraph *theGraph = self.graph; + if ( theGraph ) { [[NSNotificationCenter defaultCenter] postNotificationName:CPTGraphNeedsRedrawNotification object:theGraph]; diff --git a/framework/Source/CPTLegend.m b/framework/Source/CPTLegend.m index c5fcb69c4..17d4ce474 100644 --- a/framework/Source/CPTLegend.m +++ b/framework/Source/CPTLegend.m @@ -571,6 +571,7 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context NSUInteger columnCount = computedColumnWidths.count; CGFloat *actualColumnWidths = calloc(columnCount, sizeof(CGFloat)); CGFloat *columnPositions = calloc(columnCount, sizeof(CGFloat)); + columnPositions[0] = self.paddingLeft; CGFloat theOffset = self.titleOffset; CGSize theSwatchSize = self.swatchSize; @@ -595,6 +596,7 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context NSUInteger rowCount = computedRowHeights.count; CGFloat *actualRowHeights = calloc(rowCount, sizeof(CGFloat)); CGFloat *rowPositions = calloc(rowCount, sizeof(CGFloat)); + rowPositions[rowCount - 1] = self.paddingBottom; CGFloat theRowMargin = self.rowMargin; CGFloat lastRowHeight = 0.0; @@ -828,6 +830,7 @@ -(void)recalculateLayout NSUInteger desiredColumnCount = columnCount; NSUInteger legendEntryCount = self.legendEntries.count; + if ((rowCount == 0) && (columnCount == 0)) { rowCount = (NSUInteger)lrint(sqrt((double)legendEntryCount)); columnCount = rowCount; @@ -906,12 +909,14 @@ -(void)recalculateLayout // save row heights and column widths CPTMutableNumberArray *maxRowHeights = [[NSMutableArray alloc] initWithCapacity:rowCount]; + for ( NSUInteger i = 0; i < rowCount; i++ ) { [maxRowHeights addObject:@(maxTitleHeight[i])]; } self.rowHeightsThatFit = maxRowHeights; CPTMutableNumberArray *maxColumnWidths = [[NSMutableArray alloc] initWithCapacity:columnCount]; + for ( NSUInteger i = 0; i < columnCount; i++ ) { [maxColumnWidths addObject:@(maxTitleWidth[i])]; } @@ -924,6 +929,7 @@ -(void)recalculateLayout CGSize legendSize = CPTSizeMake(self.paddingLeft + self.paddingRight, self.paddingTop + self.paddingBottom); CGFloat lineWidth = self.borderLineStyle.lineWidth; + legendSize.width += lineWidth; legendSize.height += lineWidth; @@ -944,6 +950,7 @@ -(void)recalculateLayout } NSUInteger rows = row; + if ( col ) { rows++; } @@ -1172,6 +1179,7 @@ -(void)legendNeedsReloadEntries:(nonnull NSNotification *)notif CPTTextStyle *theTextStyle = self.textStyle; NSUInteger numberOfLegendEntries = [thePlot numberOfLegendEntries]; + for ( NSUInteger i = 0; i < numberOfLegendEntries; i++ ) { NSString *newTitle = [thePlot titleForLegendEntryAtIndex:i]; if ( newTitle ) { @@ -1285,6 +1293,7 @@ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint) } id theDelegate = (id)self.delegate; + if ( [theDelegate respondsToSelector:@selector(legend:legendEntryForPlot:touchDownAtIndex:)] || [theDelegate respondsToSelector:@selector(legend:legendEntryForPlot:touchDownAtIndex:withEvent:)] || [theDelegate respondsToSelector:@selector(legend:legendEntryForPlot:wasSelectedAtIndex:)] || @@ -1356,6 +1365,7 @@ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)in } id theDelegate = (id)self.delegate; + if ( [theDelegate respondsToSelector:@selector(legend:legendEntryForPlot:touchUpAtIndex:)] || [theDelegate respondsToSelector:@selector(legend:legendEntryForPlot:touchUpAtIndex:withEvent:)] || [theDelegate respondsToSelector:@selector(legend:legendEntryForPlot:wasSelectedAtIndex:)] || diff --git a/framework/Source/CPTLineStyle.m b/framework/Source/CPTLineStyle.m index 4b2f0bda6..26fcb8d08 100644 --- a/framework/Source/CPTLineStyle.m +++ b/framework/Source/CPTLineStyle.m @@ -238,6 +238,7 @@ -(void)setLineStyleInContext:(nonnull CGContextRef)context CPTNumberArray *myDashPattern = self.dashPattern; NSUInteger dashCount = myDashPattern.count; + if ( dashCount > 0 ) { CGFloat *dashLengths = (CGFloat *)calloc(dashCount, sizeof(CGFloat)); diff --git a/framework/Source/CPTMutableNumericDataTests.m b/framework/Source/CPTMutableNumericDataTests.m index d5cc0870a..0427f2619 100644 --- a/framework/Source/CPTMutableNumericDataTests.m +++ b/framework/Source/CPTMutableNumericDataTests.m @@ -46,6 +46,7 @@ -(void)testNilShapeCorrectElementCount XCTAssertEqual(nd.numberOfDimensions, (NSUInteger)1, @"numberOfDimensions == 1"); NSUInteger prod = 1; + for ( NSNumber *num in nd.shape ) { prod *= num.unsignedIntegerValue; } @@ -99,6 +100,7 @@ -(void)testBytesEqualDataBytes shape:nil]; NSMutableData *expected = data; + XCTAssertTrue([expected isEqualToData:nd.data], @"data isEqualToData:"); } @@ -148,6 +150,7 @@ -(void)testNumberOfSamplesCorrectForDataType nElems = 10; data = [NSMutableData dataWithLength:nElems * sizeof(char)]; char *charSamples = (char *)data.mutableBytes; + for ( NSUInteger i = 0; i < nElems; i++ ) { charSamples[i] = (char)lrint(sin(i) * 100.0); } @@ -197,6 +200,7 @@ -(void)testConvertTypeConvertsType byteOrder:NSHostByteOrder()]; const double *doubleSamples = (const double *)dd.data.bytes; + for ( NSUInteger i = 0; i < numberOfSamples; i++ ) { XCTAssertTrue((double)samples[i] == doubleSamples[i], @"(float)%g != (double)%g", (double)samples[i], doubleSamples[i]); } diff --git a/framework/Source/CPTMutableNumericDataTypeConversionTests.m b/framework/Source/CPTMutableNumericDataTypeConversionTests.m index 2c01ecfe5..575b30666 100644 --- a/framework/Source/CPTMutableNumericDataTypeConversionTests.m +++ b/framework/Source/CPTMutableNumericDataTypeConversionTests.m @@ -24,6 +24,7 @@ -(void)testFloatToDoubleInPlaceConversion numericData.sampleBytes = sizeof(double); const double *doubleSamples = (const double *)numericData.data.bytes; + for ( NSUInteger i = 0; i < numberOfSamples; i++ ) { XCTAssertEqualWithAccuracy((double)samples[i], doubleSamples[i], precision, @"(float)%g != (double)%g", (double)samples[i], doubleSamples[i]); } @@ -45,6 +46,7 @@ -(void)testDoubleToFloatInPlaceConversion numericData.sampleBytes = sizeof(float); const float *floatSamples = (const float *)numericData.data.bytes; + for ( NSUInteger i = 0; i < numberOfSamples; i++ ) { XCTAssertEqualWithAccuracy((double)floatSamples[i], samples[i], precision, @"(float)%g != (double)%g", (double)floatSamples[i], samples[i]); } @@ -66,6 +68,7 @@ -(void)testFloatToIntegerInPlaceConversion numericData.dataType = CPTDataType(CPTIntegerDataType, sizeof(NSInteger), NSHostByteOrder()); const NSInteger *intSamples = (const NSInteger *)numericData.data.bytes; + for ( NSUInteger i = 0; i < numberOfSamples; i++ ) { XCTAssertEqualWithAccuracy((NSInteger)samples[i], intSamples[i], precision, @"(float)%g != (NSInteger)%ld", (double)samples[i], (long)intSamples[i]); } @@ -87,6 +90,7 @@ -(void)testIntegerToFloatInPlaceConversion numericData.dataType = CPTDataType(CPTFloatingPointDataType, sizeof(float), NSHostByteOrder()); const float *floatSamples = (const float *)numericData.data.bytes; + for ( NSUInteger i = 0; i < numberOfSamples; i++ ) { XCTAssertEqualWithAccuracy(floatSamples[i], (float)samples[i], (float)precision, @"(float)%g != (NSInteger)%ld", (double)floatSamples[i], (long)samples[i]); } @@ -108,6 +112,7 @@ -(void)testDecimalToDoubleInPlaceConversion numericData.dataType = CPTDataType(CPTFloatingPointDataType, sizeof(double), NSHostByteOrder()); const double *doubleSamples = (const double *)numericData.data.bytes; + for ( NSUInteger i = 0; i < numberOfSamples; i++ ) { XCTAssertEqual(CPTDecimalDoubleValue(samples[i]), doubleSamples[i], @"(NSDecimal)%@ != (double)%g", CPTDecimalStringValue(samples[i]), doubleSamples[i]); } @@ -129,6 +134,7 @@ -(void)testDoubleToDecimalInPlaceConversion numericData.dataType = CPTDataType(CPTDecimalDataType, sizeof(NSDecimal), NSHostByteOrder()); const NSDecimal *decimalSamples = (const NSDecimal *)numericData.data.bytes; + for ( NSUInteger i = 0; i < numberOfSamples; i++ ) { XCTAssertTrue(CPTDecimalEquals(decimalSamples[i], CPTDecimalFromDouble(samples[i])), @"(NSDecimal)%@ != (double)%g", CPTDecimalStringValue(decimalSamples[i]), samples[i]); } @@ -151,11 +157,13 @@ -(void)testTypeConversionSwapsByteOrderIntegerInPlace numericData.byteOrder = swappedByteOrder; uint32_t end = *(const uint32_t *)numericData.bytes; + XCTAssertEqual(CFSwapInt32(start), end, @"Bytes swapped"); numericData.byteOrder = hostByteOrder; uint32_t startRoundTrip = *(const uint32_t *)numericData.bytes; + XCTAssertEqual(start, startRoundTrip, @"Round trip"); } @@ -181,12 +189,14 @@ -(void)testTypeConversionSwapsByteOrderDoubleInPlace CFSwappedFloat64 sv; } result; + result.v = start; XCTAssertEqual(CFSwapInt64(result.sv.v), end, @"Bytes swapped"); numericData.byteOrder = hostByteOrder; double startRoundTrip = *(const double *)numericData.bytes; + XCTAssertEqual(start, startRoundTrip, @"Round trip"); } diff --git a/framework/Source/CPTNumericData+TypeConversion.m b/framework/Source/CPTNumericData+TypeConversion.m index 2ebfd19a1..31e492af4 100644 --- a/framework/Source/CPTNumericData+TypeConversion.m +++ b/framework/Source/CPTNumericData+TypeConversion.m @@ -66,6 +66,7 @@ -(nonnull CPTNumericData *)dataByConvertingToDataType:(CPTNumericDataType)newDat CPTNumericData *result = [CPTNumericData numericDataWithData:newData dataType:newDataType shape:self.shape]; + return result; } diff --git a/framework/Source/CPTNumericData.m b/framework/Source/CPTNumericData.m index b8c5d1243..6f3fe9c20 100644 --- a/framework/Source/CPTNumericData.m +++ b/framework/Source/CPTNumericData.m @@ -1161,6 +1161,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)encoder [encoder encodeObject:self.data forKey:@"CPTNumericData.data"]; CPTNumericDataType selfDataType = self.dataType; + [encoder encodeInteger:selfDataType.dataTypeFormat forKey:@"CPTNumericData.dataType.dataTypeFormat"]; [encoder encodeInt64:(int64_t)selfDataType.sampleBytes forKey:@"CPTNumericData.dataType.sampleBytes"]; [encoder encodeInt64:selfDataType.byteOrder forKey:@"CPTNumericData.dataType.byteOrder"]; diff --git a/framework/Source/CPTNumericDataTests.m b/framework/Source/CPTNumericDataTests.m index 26e0ca4c6..51db54f81 100644 --- a/framework/Source/CPTNumericDataTests.m +++ b/framework/Source/CPTNumericDataTests.m @@ -45,6 +45,7 @@ -(void)testNilShapeCorrectElementCount XCTAssertEqual(nd.numberOfDimensions, (NSUInteger)1, @"numberOfDimensions == 1"); NSUInteger prod = 1; + for ( NSNumber *num in nd.shape ) { prod *= num.unsignedIntegerValue; } @@ -98,6 +99,7 @@ -(void)testBytesEqualDataBytes shape:nil]; NSData *expected = data; + XCTAssertEqualObjects(data, nd.data, @"equal objects"); XCTAssertTrue([expected isEqualToData:nd.data], @"data isEqualToData:"); } @@ -175,6 +177,7 @@ -(void)testNumberOfSamplesCorrectForDataType nElems = 10; data = [NSMutableData dataWithLength:nElems * sizeof(char)]; char *charSamples = (char *)data.mutableBytes; + for ( NSUInteger i = 0; i < nElems; i++ ) { charSamples[i] = (char)lrint(sin(i) * 100.0); } @@ -224,6 +227,7 @@ -(void)testConvertTypeConvertsType byteOrder:NSHostByteOrder()]; const double *doubleSamples = (const double *)dd.data.bytes; + for ( NSUInteger i = 0; i < numberOfSamples; i++ ) { XCTAssertTrue((double)samples[i] == doubleSamples[i], @"(float)%g != (double)%g", (double)samples[i], doubleSamples[i]); } diff --git a/framework/Source/CPTNumericDataTypeConversionTests.m b/framework/Source/CPTNumericDataTypeConversionTests.m index 8fc215339..48ba00911 100644 --- a/framework/Source/CPTNumericDataTypeConversionTests.m +++ b/framework/Source/CPTNumericDataTypeConversionTests.m @@ -26,6 +26,7 @@ -(void)testFloatToDoubleConversion byteOrder:NSHostByteOrder()]; const double *doubleSamples = (const double *)dd.data.bytes; + for ( NSUInteger i = 0; i < numberOfSamples; i++ ) { XCTAssertEqualWithAccuracy((double)samples[i], doubleSamples[i], precision, @"(float)%g != (double)%g", (double)samples[i], doubleSamples[i]); } @@ -49,6 +50,7 @@ -(void)testDoubleToFloatConversion byteOrder:NSHostByteOrder()]; const float *floatSamples = (const float *)fd.data.bytes; + for ( NSUInteger i = 0; i < numberOfSamples; i++ ) { XCTAssertEqualWithAccuracy((double)floatSamples[i], samples[i], precision, @"(float)%g != (double)%g", (double)floatSamples[i], samples[i]); } @@ -72,6 +74,7 @@ -(void)testFloatToIntegerConversion byteOrder:NSHostByteOrder()]; const NSInteger *intSamples = (const NSInteger *)intData.data.bytes; + for ( NSUInteger i = 0; i < numberOfSamples; i++ ) { XCTAssertEqualWithAccuracy((NSInteger)samples[i], intSamples[i], precision, @"(float)%g != (NSInteger)%ld", (double)samples[i], (long)intSamples[i]); } @@ -95,6 +98,7 @@ -(void)testIntegerToFloatConversion byteOrder:NSHostByteOrder()]; const float *floatSamples = (const float *)fd.data.bytes; + for ( NSUInteger i = 0; i < numberOfSamples; i++ ) { XCTAssertEqualWithAccuracy(floatSamples[i], (float)samples[i], (float)precision, @"(float)%g != (NSInteger)%ld", (double)floatSamples[i], (long)samples[i]); } @@ -127,6 +131,7 @@ -(void)testTypeConversionSwapsByteOrderInteger byteOrder:hostByteOrder]; uint32_t startRoundTrip = *(const uint32_t *)roundTripData.bytes; + XCTAssertEqual(start, startRoundTrip, @"Round trip"); } @@ -148,6 +153,7 @@ -(void)testDecimalToDoubleConversion byteOrder:NSHostByteOrder()]; const double *doubleSamples = (const double *)doubleData.data.bytes; + for ( NSUInteger i = 0; i < numberOfSamples; i++ ) { XCTAssertEqual(CPTDecimalDoubleValue(samples[i]), doubleSamples[i], @"(NSDecimal)%@ != (double)%g", CPTDecimalStringValue(samples[i]), doubleSamples[i]); } @@ -171,6 +177,7 @@ -(void)testDoubleToDecimalConversion byteOrder:NSHostByteOrder()]; const NSDecimal *decimalSamples = (const NSDecimal *)decimalData.data.bytes; + for ( NSUInteger i = 0; i < numberOfSamples; i++ ) { XCTAssertTrue(CPTDecimalEquals(decimalSamples[i], CPTDecimalFromDouble(samples[i])), @"(NSDecimal)%@ != (double)%g", CPTDecimalStringValue(decimalSamples[i]), samples[i]); } @@ -209,6 +216,7 @@ -(void)testTypeConversionSwapsByteOrderDouble byteOrder:hostByteOrder]; double startRoundTrip = *(const double *)roundTripData.bytes; + XCTAssertEqual(start, startRoundTrip, @"Round trip"); } @@ -227,14 +235,17 @@ -(void)testRoundTripToDoubleArray shape:nil]; CPTNumberArray *doubleArray = [doubleData sampleArray]; + XCTAssertEqual(doubleArray.count, numberOfSamples, @"doubleArray size"); CPTNumericData *roundTripData = [[CPTNumericData alloc] initWithArray:doubleArray dataType:theDataType shape:nil]; + XCTAssertEqual(roundTripData.numberOfSamples, numberOfSamples, @"roundTripData size"); const double *roundTrip = (const double *)roundTripData.bytes; + for ( NSUInteger i = 0; i < numberOfSamples; i++ ) { XCTAssertEqual(samples[i], roundTrip[i], @"Round trip"); } @@ -255,14 +266,17 @@ -(void)testRoundTripToIntegerArray shape:nil]; CPTNumberArray *integerArray = [intData sampleArray]; + XCTAssertEqual(integerArray.count, numberOfSamples, @"integerArray size"); CPTNumericData *roundTripData = [[CPTNumericData alloc] initWithArray:integerArray dataType:theDataType shape:nil]; + XCTAssertEqual(roundTripData.numberOfSamples, numberOfSamples, @"roundTripData size"); const NSInteger *roundTrip = (const NSInteger *)roundTripData.bytes; + for ( NSUInteger i = 0; i < numberOfSamples; i++ ) { XCTAssertEqual(samples[i], roundTrip[i], @"Round trip"); } @@ -283,14 +297,17 @@ -(void)testRoundTripToDecimalArray shape:nil]; CPTNumberArray *decimalArray = [decimalData sampleArray]; + XCTAssertEqual(decimalArray.count, numberOfSamples, @"doubleArray size"); CPTNumericData *roundTripData = [[CPTNumericData alloc] initWithArray:decimalArray dataType:theDataType shape:nil]; + XCTAssertEqual(roundTripData.numberOfSamples, numberOfSamples, @"roundTripData size"); const NSDecimal *roundTrip = (const NSDecimal *)roundTripData.bytes; + for ( NSUInteger i = 0; i < numberOfSamples; i++ ) { XCTAssertTrue(CPTDecimalEquals(samples[i], roundTrip[i]), @"Round trip"); } diff --git a/framework/Source/CPTPieChart.m b/framework/Source/CPTPieChart.m index a189527b2..3182e20a4 100644 --- a/framework/Source/CPTPieChart.m +++ b/framework/Source/CPTPieChart.m @@ -128,27 +128,35 @@ @implementation CPTPieChart #pragma mark - #pragma mark Convenience Factory Methods -static const CGFloat colorLookupTable[10][3] = -{ +static const CGFloat colorLookupTable[10][3] = { { CPTFloat(1.0), CPTFloat(0.0), CPTFloat(0.0) - },{ + }, + { CPTFloat(0.0), CPTFloat(1.0), CPTFloat(0.0) - },{ + }, + { CPTFloat(0.0), CPTFloat(0.0), CPTFloat(1.0) - },{ + }, + { CPTFloat(1.0), CPTFloat(1.0), CPTFloat(0.0) - },{ + }, + { CPTFloat(0.25), CPTFloat(0.5), CPTFloat(0.25) - },{ + }, + { CPTFloat(1.0), CPTFloat(0.0), CPTFloat(1.0) - },{ + }, + { CPTFloat(0.5), CPTFloat(0.5), CPTFloat(0.5) - },{ + }, + { CPTFloat(0.25), CPTFloat(0.5), CPTFloat(0.0) - },{ + }, + { CPTFloat(0.25), CPTFloat(0.25), CPTFloat(0.25) - },{ + }, + { CPTFloat(0.0), CPTFloat(1.0), CPTFloat(1.0) } }; @@ -462,6 +470,7 @@ -(void)updateNormalizedData // Labels id theDataSource = self.dataSource; + [self relabelIndexRange:NSMakeRange(0, [theDataSource numberOfRecordsForPlot:self])]; } @@ -566,11 +575,13 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context } NSUInteger sampleCount = self.cachedDataCount; + if ( sampleCount == 0 ) { return; } CPTPlotArea *thePlotArea = self.plotArea; + if ( !thePlotArea ) { return; } @@ -583,6 +594,7 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context CGPoint anchor = self.centerAnchor; CGPoint centerPoint = CPTPointMake(plotAreaBounds.origin.x + plotAreaBounds.size.width * anchor.x, plotAreaBounds.origin.y + plotAreaBounds.size.height * anchor.y); + centerPoint = [self convertPoint:centerPoint fromLayer:thePlotArea]; if ( self.alignsPointsToPixels ) { centerPoint = CPTAlignPointToUserSpace(context, centerPoint); @@ -596,6 +608,7 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context BOOL hasNonZeroOffsets = NO; CPTNumberArray *offsetArray = [self cachedArrayForKey:CPTPieChartBindingPieSliceRadialOffsets]; + for ( NSNumber *offset in offsetArray ) { if ( [offset cgFloatValue] != CPTFloat(0.0)) { hasNonZeroOffsets = YES; @@ -604,6 +617,7 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context } CGRect bounds; + if ( overlay && hasNonZeroOffsets ) { CGFloat radius = self.pieRadius + borderStyle.lineWidth * CPTFloat(0.5); @@ -1109,6 +1123,7 @@ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint) } id theDelegate = (id)self.delegate; + if ( [theDelegate respondsToSelector:@selector(pieChart:sliceTouchDownAtRecordIndex:)] || [theDelegate respondsToSelector:@selector(pieChart:sliceTouchDownAtRecordIndex:withEvent:)] || [theDelegate respondsToSelector:@selector(pieChart:sliceWasSelectedAtRecordIndex:)] || @@ -1178,6 +1193,7 @@ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)in } id theDelegate = (id)self.delegate; + if ( [theDelegate respondsToSelector:@selector(pieChart:sliceTouchUpAtRecordIndex:)] || [theDelegate respondsToSelector:@selector(pieChart:sliceTouchUpAtRecordIndex:withEvent:)] || [theDelegate respondsToSelector:@selector(pieChart:sliceWasSelectedAtRecordIndex:)] || @@ -1233,6 +1249,7 @@ -(NSUInteger)dataIndexFromInteractionPoint:(CGPoint)point } NSUInteger sampleCount = self.cachedDataCount; + if ( sampleCount == 0 ) { return NSNotFound; } @@ -1241,6 +1258,7 @@ -(NSUInteger)dataIndexFromInteractionPoint:(CGPoint)point CGPoint anchor = self.centerAnchor; CGPoint centerPoint = CPTPointMake(plotAreaBounds.origin.x + plotAreaBounds.size.width * anchor.x, plotAreaBounds.origin.y + plotAreaBounds.size.height * anchor.y); + centerPoint = [self convertPoint:centerPoint fromLayer:thePlotArea]; CGFloat chartRadius = self.pieRadius; diff --git a/framework/Source/CPTPlot.m b/framework/Source/CPTPlot.m index 5cd2637a0..f15d59c1a 100644 --- a/framework/Source/CPTPlot.m +++ b/framework/Source/CPTPlot.m @@ -373,6 +373,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder [super encodeWithCoder:coder]; id theDataSource = self.dataSource; + if ( [theDataSource conformsToProtocol:@protocol(NSCoding)] ) { [coder encodeConditionalObject:theDataSource forKey:@"CPTPlot.dataSource"]; } @@ -492,6 +493,7 @@ -(void)drawInContext:(nonnull CGContextRef)context [super drawInContext:context]; id theDelegate = (id)self.delegate; + if ( [theDelegate respondsToSelector:@selector(didFinishDrawing:)] ) { [theDelegate didFinishDrawing:self]; } @@ -629,6 +631,7 @@ -(void)insertDataAtIndex:(NSUInteger)idx numberOfRecords:(NSUInteger)numberOfRec } CPTMutableAnnotationArray *labelArray = self.labelAnnotations; + if ( labelArray ) { id nullObject = [NSNull null]; NSUInteger lastIndex = idx + numberOfRecords - 1; @@ -1465,6 +1468,7 @@ -(nullable CPTPlotRange *)plotRangeForField:(NSUInteger)fieldEnum CPTPlotRange *range = nil; NSUInteger numberOfSamples = numbers.numberOfSamples; + if ( numberOfSamples > 0 ) { if ( self.doublePrecisionCache ) { double min = (double)INFINITY; @@ -1531,6 +1535,7 @@ -(nullable CPTPlotRange *)plotRangeForCoordinate:(CPTCoordinate)coord } CPTMutablePlotRange *unionRange = nil; + for ( NSNumber *field in fields ) { CPTPlotRange *currentRange = [self plotRangeForField:field.unsignedIntegerValue]; if ( !unionRange ) { @@ -1566,6 +1571,7 @@ -(nullable CPTPlotRange *)plotRangeEnclosingCoordinate:(CPTCoordinate)coord } CPTMutablePlotRange *unionRange = nil; + for ( NSNumber *field in fields ) { CPTPlotRange *currentRange = [self plotRangeEnclosingField:field.unsignedIntegerValue]; if ( !unionRange ) { @@ -1613,6 +1619,7 @@ -(void)relabel BOOL hasCachedLabels = NO; CPTMutableLayerArray *cachedLabels = (CPTMutableLayerArray *)[self cachedArrayForKey:CPTPlotBindingDataLabels]; + for ( CPTLayer *label in cachedLabels ) { if ( ![label isKindOfClass:nullClass] ) { hasCachedLabels = YES; @@ -1850,6 +1857,7 @@ -(void)drawSwatchForLegend:(nonnull CPTLegend *)legend atIndex:(NSUInteger)idx i } CPTLineStyle *theLineStyle = nil; + if ( [theDelegate respondsToSelector:@selector(legend:lineStyleForSwatchAtIndex:forPlot:)] ) { theLineStyle = [theDelegate legend:legend lineStyleForSwatchAtIndex:idx forPlot:self]; } @@ -1909,6 +1917,7 @@ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint) } id theDelegate = (id)self.delegate; + if ( [theDelegate respondsToSelector:@selector(plot:dataLabelTouchDownAtRecordIndex:)] || [theDelegate respondsToSelector:@selector(plot:dataLabelTouchDownAtRecordIndex:withEvent:)] || [theDelegate respondsToSelector:@selector(plot:dataLabelWasSelectedAtRecordIndex:)] || @@ -1987,6 +1996,7 @@ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)in } id theDelegate = (id)self.delegate; + if ( [theDelegate respondsToSelector:@selector(plot:dataLabelTouchUpAtRecordIndex:)] || [theDelegate respondsToSelector:@selector(plot:dataLabelTouchUpAtRecordIndex:withEvent:)] || [theDelegate respondsToSelector:@selector(plot:dataLabelWasSelectedAtRecordIndex:)] || diff --git a/framework/Source/CPTPlotArea.m b/framework/Source/CPTPlotArea.m index 34f04616d..c93cb9137 100644 --- a/framework/Source/CPTPlotArea.m +++ b/framework/Source/CPTPlotArea.m @@ -296,10 +296,12 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context [super renderAsVectorInContext:context]; BOOL useMask = self.masksToBounds; + self.masksToBounds = YES; CGContextSaveGState(context); CGPathRef maskPath = self.maskingPath; + if ( maskPath ) { CGContextBeginPath(context); CGContextAddPath(context, maskPath); @@ -345,8 +347,10 @@ -(void)layoutSublayers CALayer *superlayer = self.superlayer; CGRect sublayerBounds = [self convertRect:superlayer.bounds fromLayer:superlayer]; + sublayerBounds.origin = CGPointZero; CGPoint sublayerPosition = [self convertPoint:self.bounds.origin toLayer:superlayer]; + sublayerPosition = CPTPointMake(-sublayerPosition.x, -sublayerPosition.y); CGRect sublayerFrame = CPTRectMake(sublayerPosition.x, sublayerPosition.y, sublayerBounds.size.width, sublayerBounds.size.height); @@ -358,6 +362,7 @@ -(void)layoutSublayers // make the plot group the same size as the plot area to clip the plots CPTPlotGroup *thePlotGroup = self.plotGroup; + if ( thePlotGroup ) { CGSize selfBoundsSize = self.bounds.size; thePlotGroup.frame = CPTRectMake(0.0, 0.0, selfBoundsSize.width, selfBoundsSize.height); @@ -434,6 +439,7 @@ -(void)updateLayerOrder } CPTNumberArray *tdLayerOrder = self.topDownLayerOrder; + if ( tdLayerOrder ) { buLayerOrder = self.bottomUpLayerOrder; @@ -703,6 +709,7 @@ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint) } id theDelegate = (id)self.delegate; + if ( [theDelegate respondsToSelector:@selector(plotAreaTouchDown:)] || [theDelegate respondsToSelector:@selector(plotAreaTouchDown:withEvent:)] || [theDelegate respondsToSelector:@selector(plotAreaWasSelected:)] || @@ -754,9 +761,11 @@ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)in } CGPoint lastPoint = self.touchedPoint; + self.touchedPoint = CPTPointMake(NAN, NAN); id theDelegate = (id)self.delegate; + if ( [theDelegate respondsToSelector:@selector(plotAreaTouchUp:)] || [theDelegate respondsToSelector:@selector(plotAreaTouchUp:withEvent:)] || [theDelegate respondsToSelector:@selector(plotAreaWasSelected:)] || diff --git a/framework/Source/CPTPlotRangeTests.m b/framework/Source/CPTPlotRangeTests.m index c5cfeabd0..57ab7825b 100644 --- a/framework/Source/CPTPlotRangeTests.m +++ b/framework/Source/CPTPlotRangeTests.m @@ -338,6 +338,7 @@ -(void)testIntersectRangeNegative self.plotRange.lengthDouble = -2.0; CPTPlotRange *otherRange = [CPTPlotRange plotRangeWithLocation:@0.0 length:@4.0]; + XCTAssertTrue([self.plotRange intersectsRange:otherRange], @"otherRange was {%g, %g}", otherRange.locationDouble, otherRange.lengthDouble); [self.plotRange intersectionPlotRange:otherRange]; [self checkRangeWithLocation:1.0 length:-1.0]; @@ -358,6 +359,7 @@ -(void)testIntersectRangeNegative2 self.plotRange.lengthDouble = -2.0; CPTPlotRange *otherRange = [CPTPlotRange plotRangeWithLocation:@0.0 length:@(-4.0)]; + XCTAssertTrue([self.plotRange intersectsRange:otherRange], @"otherRange was {%g, %g}", otherRange.locationDouble, otherRange.lengthDouble); [self.plotRange intersectionPlotRange:otherRange]; [self checkRangeWithLocation:0.0 length:-1.0]; @@ -378,6 +380,7 @@ -(void)testIntersectRangeInfinite1 self.plotRange.lengthDouble = HUGE_VAL; CPTPlotRange *otherRange = [CPTPlotRange plotRangeWithLocation:@0.0 length:@4.0]; + XCTAssertTrue([self.plotRange intersectsRange:otherRange], @"otherRange was {%g, %g}", otherRange.locationDouble, otherRange.lengthDouble); [self.plotRange intersectionPlotRange:otherRange]; [self checkRangeWithLocation:1.0 length:3.0]; @@ -388,6 +391,7 @@ -(void)testIntersectRangeInfinite2 self.plotRange.lengthDouble = HUGE_VAL; CPTPlotRange *otherRange = [CPTPlotRange plotRangeWithLocation:@0.0 length:@(HUGE_VAL)]; + XCTAssertTrue([self.plotRange intersectsRange:otherRange], @"otherRange was {%g, %g}", otherRange.locationDouble, otherRange.lengthDouble); [self.plotRange intersectionPlotRange:otherRange]; [self checkRangeWithLocation:1.0 length:HUGE_VAL]; @@ -398,6 +402,7 @@ -(void)testIntersectRangeInfinite3 self.plotRange.lengthDouble = HUGE_VAL; CPTPlotRange *otherRange = [CPTPlotRange plotRangeWithLocation:@0.0 length:@(-4.0)]; + XCTAssertFalse([self.plotRange intersectsRange:otherRange], @"otherRange was {%g, %g}", otherRange.locationDouble, otherRange.lengthDouble); [self.plotRange intersectionPlotRange:otherRange]; [self checkRangeWithLocation:(double)NAN length:(double)NAN]; @@ -408,6 +413,7 @@ -(void)testIntersectRangeNegativeInfinite1 self.plotRange.lengthDouble = -HUGE_VAL; CPTPlotRange *otherRange = [CPTPlotRange plotRangeWithLocation:@0.0 length:@4.0]; + XCTAssertTrue([self.plotRange intersectsRange:otherRange], @"otherRange was {%g, %g}", otherRange.locationDouble, otherRange.lengthDouble); [self.plotRange intersectionPlotRange:otherRange]; [self checkRangeWithLocation:1.0 length:-1.0]; @@ -418,6 +424,7 @@ -(void)testIntersectRangeNegativeInfinite2 self.plotRange.lengthDouble = -HUGE_VAL; CPTPlotRange *otherRange = [CPTPlotRange plotRangeWithLocation:@0.0 length:@(-HUGE_VAL)]; + XCTAssertTrue([self.plotRange intersectsRange:otherRange], @"otherRange was {%g, %g}", otherRange.locationDouble, otherRange.lengthDouble); [self.plotRange intersectionPlotRange:otherRange]; [self checkRangeWithLocation:0.0 length:-HUGE_VAL]; @@ -428,6 +435,7 @@ -(void)testIntersectRangeNegativeInfinite3 self.plotRange.lengthDouble = -HUGE_VAL; CPTPlotRange *otherRange = [CPTPlotRange plotRangeWithLocation:@10.0 length:@(-4.0)]; + XCTAssertFalse([self.plotRange intersectsRange:otherRange], @"otherRange was {%g, %g}", otherRange.locationDouble, otherRange.lengthDouble); [self.plotRange intersectionPlotRange:otherRange]; [self checkRangeWithLocation:(double)NAN length:(double)NAN]; @@ -695,6 +703,7 @@ -(void)checkRangeWithLocation:(double)loc length:(double)len XCTAssertTrue(CPTDecimalEquals(newLocation, CPTDecimalFromDouble(loc)), @"%@", errMessage); NSDecimal newLength = self.plotRange.lengthDecimal; + errMessage = [NSString stringWithFormat:@"expected location = %g, was %@", loc, NSDecimalString(&newLength, nil)]; XCTAssertTrue(CPTDecimalEquals(newLength, CPTDecimalFromDouble(len)), @"%@", errMessage); } diff --git a/framework/Source/CPTPlotSpace.m b/framework/Source/CPTPlotSpace.m index 644b1df79..fde216738 100644 --- a/framework/Source/CPTPlotSpace.m +++ b/framework/Source/CPTPlotSpace.m @@ -125,6 +125,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder [coder encodeConditionalObject:self.graph forKey:@"CPTPlotSpace.graph"]; [coder encodeObject:self.identifier forKey:@"CPTPlotSpace.identifier"]; id theDelegate = self.delegate; + if ( [theDelegate conformsToProtocol:@protocol(NSCoding)] ) { [coder encodeConditionalObject:theDelegate forKey:@"CPTPlotSpace.delegate"]; } @@ -656,6 +657,7 @@ -(void)scaleToFitPlots:(nullable CPTPlotArray *)plots forCoordinate:(CPTCoordina // Determine union of ranges CPTMutablePlotRange *unionRange = nil; + for ( CPTPlot *plot in plots ) { CPTPlotRange *currentRange = [plot plotRangeForCoordinate:coordinate]; if ( !unionRange ) { @@ -692,6 +694,7 @@ -(void)scaleToFitEntirePlots:(nullable CPTPlotArray *)plots forCoordinate:(CPTCo // Determine union of ranges CPTMutablePlotRange *unionRange = nil; + for ( CPTPlot *plot in plots ) { CPTPlotRange *currentRange = [plot plotRangeForCoordinate:coordinate]; if ( !unionRange ) { diff --git a/framework/Source/CPTRangePlot.m b/framework/Source/CPTRangePlot.m index b03c7e6e2..4fcff4c7b 100644 --- a/framework/Source/CPTRangePlot.m +++ b/framework/Source/CPTRangePlot.m @@ -714,6 +714,7 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context return; } NSUInteger dataCount = self.cachedDataCount; + if ( dataCount == 0 ) { return; } @@ -728,6 +729,7 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context BOOL *drawPointFlags = calloc(dataCount, sizeof(BOOL)); CPTXYPlotSpace *thePlotSpace = (CPTXYPlotSpace *)self.plotSpace; + [self calculatePointsToDraw:drawPointFlags numberOfPoints:dataCount forPlotSpace:thePlotSpace]; [self calculateViewPoints:viewPoints withDrawPointFlags:drawPointFlags numberOfPoints:dataCount]; if ( self.alignsPointsToPixels ) { @@ -1181,6 +1183,7 @@ -(NSUInteger)dataIndexFromInteractionPoint:(CGPoint)point [self calculateViewPoints:viewPoints withDrawPointFlags:drawPointFlags numberOfPoints:dataCount]; NSInteger result = [self extremeDrawnPointIndexForFlags:drawPointFlags numberOfPoints:dataCount extremeNumIsLowerBound:YES]; + if ( result != NSNotFound ) { CGPointError lastViewPoint; CGFloat minimumDistanceSquared = CPTNAN; @@ -1252,6 +1255,7 @@ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint) } id theDelegate = (id)self.delegate; + if ( [theDelegate respondsToSelector:@selector(rangePlot:rangeTouchDownAtRecordIndex:)] || [theDelegate respondsToSelector:@selector(rangePlot:rangeTouchDownAtRecordIndex:withEvent:)] || [theDelegate respondsToSelector:@selector(rangePlot:rangeWasSelectedAtRecordIndex:)] || @@ -1321,6 +1325,7 @@ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)in } id theDelegate = (id)self.delegate; + if ( [theDelegate respondsToSelector:@selector(rangePlot:rangeTouchUpAtRecordIndex:)] || [theDelegate respondsToSelector:@selector(rangePlot:rangeTouchUpAtRecordIndex:withEvent:)] || [theDelegate respondsToSelector:@selector(rangePlot:rangeWasSelectedAtRecordIndex:)] || diff --git a/framework/Source/CPTScatterPlot.m b/framework/Source/CPTScatterPlot.m index 28aa97f65..fd69294b9 100644 --- a/framework/Source/CPTScatterPlot.m +++ b/framework/Source/CPTScatterPlot.m @@ -725,6 +725,7 @@ -(NSUInteger)indexOfVisiblePointClosestToPlotAreaPoint:(CGPoint)viewPoint [self calculateViewPoints:viewPoints withDrawPointFlags:drawPointFlags numberOfPoints:dataCount]; NSInteger result = [self extremeDrawnPointIndexForFlags:drawPointFlags numberOfPoints:dataCount extremeNumIsLowerBound:YES]; + if ( result != NSNotFound ) { CGFloat minimumDistanceSquared = CPTNAN; for ( NSUInteger i = (NSUInteger)result; i < dataCount; ++i ) { @@ -791,6 +792,7 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context return; } NSUInteger dataCount = self.cachedDataCount; + if ( dataCount == 0 ) { return; } @@ -808,10 +810,12 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context BOOL *drawPointFlags = calloc(dataCount, sizeof(BOOL)); CPTXYPlotSpace *thePlotSpace = (CPTXYPlotSpace *)self.plotSpace; + [self calculatePointsToDraw:drawPointFlags forPlotSpace:thePlotSpace includeVisiblePointsOnly:NO numberOfPoints:dataCount]; [self calculateViewPoints:viewPoints withDrawPointFlags:drawPointFlags numberOfPoints:dataCount]; BOOL pixelAlign = self.alignsPointsToPixels; + if ( pixelAlign ) { [self alignViewPointsToUserSpace:viewPoints withContext:context drawPointFlags:drawPointFlags numberOfPoints:dataCount]; } @@ -1631,6 +1635,7 @@ -(nonnull CGPathRef)newDataLinePath [self reloadDataIfNeeded]; NSUInteger dataCount = self.cachedDataCount; + if ( dataCount == 0 ) { return CGPathCreateMutable(); } diff --git a/framework/Source/CPTScatterPlotTests.m b/framework/Source/CPTScatterPlotTests.m index 5cecafe5b..d1931bf9f 100644 --- a/framework/Source/CPTScatterPlotTests.m +++ b/framework/Source/CPTScatterPlotTests.m @@ -27,6 +27,7 @@ -(void)setUp CPTPlotRange *xPlotRange = [CPTPlotRange plotRangeWithLocation:@0.0 length:@1.0]; CPTPlotRange *yPlotRange = [CPTPlotRange plotRangeWithLocation:@0.0 length:@1.0]; + self.plotSpace = [[CPTXYPlotSpace alloc] init]; self.plotSpace.xRange = xPlotRange; self.plotSpace.yRange = yPlotRange; diff --git a/framework/Source/CPTTestCase.m b/framework/Source/CPTTestCase.m index effe3adec..1cc9808ec 100644 --- a/framework/Source/CPTTestCase.m +++ b/framework/Source/CPTTestCase.m @@ -21,6 +21,7 @@ -(nullable id)archiveRoundTrip:(nonnull id)object toClass:(nonnull Class)archive [archiver finishEncoding]; NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:archiveData]; + unarchiver.requiresSecureCoding = secure; return [unarchiver decodeObjectOfClass:archiveClass forKey:@"test"]; diff --git a/framework/Source/CPTTextLayer.m b/framework/Source/CPTTextLayer.m index 45a208f31..9de96deb5 100644 --- a/framework/Source/CPTTextLayer.m +++ b/framework/Source/CPTTextLayer.m @@ -375,6 +375,7 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context } NSString *myText = self.text; + if ( myText.length > 0 ) { [super renderAsVectorInContext:context]; diff --git a/framework/Source/CPTTheme.m b/framework/Source/CPTTheme.m index 9d17a6e00..c272a452a 100644 --- a/framework/Source/CPTTheme.m +++ b/framework/Source/CPTTheme.m @@ -58,6 +58,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder [coder encodeObject:[[self class] name] forKey:@"CPTTheme.name"]; Class theGraphClass = self.graphClass; + if ( theGraphClass ) { [coder encodeObject:NSStringFromClass(theGraphClass) forKey:@"CPTTheme.graphClass"]; } @@ -186,11 +187,13 @@ -(void)applyThemeToGraph:(nonnull CPTGraph *)graph [self applyThemeToBackground:graph]; CPTPlotAreaFrame *plotAreaFrame = graph.plotAreaFrame; + if ( plotAreaFrame ) { [self applyThemeToPlotArea:plotAreaFrame]; } CPTAxisSet *axisSet = graph.axisSet; + if ( axisSet ) { [self applyThemeToAxisSet:axisSet]; } diff --git a/framework/Source/CPTTimeFormatterTests.m b/framework/Source/CPTTimeFormatterTests.m index 52d5fcfc1..903a44949 100644 --- a/framework/Source/CPTTimeFormatterTests.m +++ b/framework/Source/CPTTimeFormatterTests.m @@ -16,6 +16,7 @@ -(void)testKeyedArchivingRoundTrip dateFormatter.dateStyle = NSDateFormatterShortStyle; CPTTimeFormatter *timeFormatter = [[CPTTimeFormatter alloc] initWithDateFormatter:dateFormatter]; + timeFormatter.referenceDate = refDate; CPTTimeFormatter *newTimeFormatter = [self archiveRoundTrip:timeFormatter]; diff --git a/framework/Source/CPTTradingRangePlot.m b/framework/Source/CPTTradingRangePlot.m index 3589b2870..f1592552d 100644 --- a/framework/Source/CPTTradingRangePlot.m +++ b/framework/Source/CPTTradingRangePlot.m @@ -620,6 +620,7 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context CPTMutableNumericData *closes = [self cachedNumbersForField:CPTTradingRangePlotFieldClose]; NSUInteger sampleCount = locations.numberOfSamples; + if ( sampleCount == 0 ) { return; } @@ -869,6 +870,7 @@ -(void)drawCandleStickInContext:(nonnull CGContextRef)context CPTAlignPointFunction alignmentFunction = CPTAlignPointToUserSpace; BOOL hasLineStyle = [theBorderLineStyle isKindOfClass:[CPTLineStyle class]]; + if ( hasLineStyle ) { [theBorderLineStyle setLineStyleInContext:context]; @@ -1303,6 +1305,7 @@ -(void)positionLabelAnnotation:(nonnull CPTPlotSpaceAnnotation *)label forIndex: highValue, lowValue]; CPTNumberArray *yValuesSorted = [yValues sortedArrayUsingSelector:@selector(compare:)]; + if ( positiveDirection ) { yValue = yValuesSorted.lastObject; } @@ -1595,6 +1598,7 @@ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint) } id theDelegate = (id)self.delegate; + if ( [theDelegate respondsToSelector:@selector(tradingRangePlot:barTouchDownAtRecordIndex:)] || [theDelegate respondsToSelector:@selector(tradingRangePlot:barTouchDownAtRecordIndex:withEvent:)] || [theDelegate respondsToSelector:@selector(tradingRangePlot:barWasSelectedAtRecordIndex:)] || @@ -1664,6 +1668,7 @@ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)in } id theDelegate = (id)self.delegate; + if ( [theDelegate respondsToSelector:@selector(tradingRangePlot:barTouchUpAtRecordIndex:)] || [theDelegate respondsToSelector:@selector(tradingRangePlot:barTouchUpAtRecordIndex:withEvent:)] || [theDelegate respondsToSelector:@selector(tradingRangePlot:barWasSelectedAtRecordIndex:)] || diff --git a/framework/Source/CPTXYAxis.m b/framework/Source/CPTXYAxis.m index 9b0c117a4..d103f5a8a 100644 --- a/framework/Source/CPTXYAxis.m +++ b/framework/Source/CPTXYAxis.m @@ -237,6 +237,7 @@ -(void)drawTicksInContext:(nonnull CGContextRef)context atLocations:(nullable CP CGFloat lineWidth = lineStyle.lineWidth; CPTAlignPointFunction alignmentFunction = NULL; + if ((self.contentsScale > CPTFloat(1.0)) && (round(lineWidth) == lineWidth)) { alignmentFunction = CPTAlignIntegralPointToUserSpace; } @@ -313,6 +314,7 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context CPTPlotRange *thePlotRange = [self.plotSpace plotRangeForCoordinate:self.coordinate]; CPTMutablePlotRange *range = [thePlotRange mutableCopy]; CPTPlotRange *theVisibleRange = self.visibleRange; + if ( theVisibleRange ) { [range intersectionPlotRange:theVisibleRange]; } diff --git a/framework/Source/CPTXYAxisSet.m b/framework/Source/CPTXYAxisSet.m index 70c48c5bf..1013d786d 100644 --- a/framework/Source/CPTXYAxisSet.m +++ b/framework/Source/CPTXYAxisSet.m @@ -70,6 +70,7 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context } CPTLineStyle *theLineStyle = self.borderLineStyle; + if ( theLineStyle ) { [super renderAsVectorInContext:context]; diff --git a/framework/Source/CPTXYPlotSpace.m b/framework/Source/CPTXYPlotSpace.m index 3b2750488..513847177 100644 --- a/framework/Source/CPTXYPlotSpace.m +++ b/framework/Source/CPTXYPlotSpace.m @@ -773,6 +773,7 @@ -(void)scaleToFitPlots:(nullable CPTPlotArray *)plots // Determine union of ranges CPTMutablePlotRange *unionXRange = nil; CPTMutablePlotRange *unionYRange = nil; + for ( CPTPlot *plot in plots ) { CPTPlotRange *currentXRange = [plot plotRangeForCoordinate:CPTCoordinateX]; CPTPlotRange *currentYRange = [plot plotRangeForCoordinate:CPTCoordinateY]; @@ -788,6 +789,7 @@ -(void)scaleToFitPlots:(nullable CPTPlotArray *)plots // Set range NSDecimal zero = CPTDecimalFromInteger(0); + if ( unionXRange ) { if ( CPTDecimalEquals(unionXRange.lengthDecimal, zero)) { [unionXRange unionPlotRange:self.xRange]; @@ -811,6 +813,7 @@ -(void)scaleToFitEntirePlots:(nullable CPTPlotArray *)plots // Determine union of ranges CPTMutablePlotRange *unionXRange = nil; CPTMutablePlotRange *unionYRange = nil; + for ( CPTPlot *plot in plots ) { CPTPlotRange *currentXRange = [plot plotRangeEnclosingCoordinate:CPTCoordinateX]; CPTPlotRange *currentYRange = [plot plotRangeEnclosingCoordinate:CPTCoordinateY]; @@ -826,6 +829,7 @@ -(void)scaleToFitEntirePlots:(nullable CPTPlotArray *)plots // Set range NSDecimal zero = CPTDecimalFromInteger(0); + if ( unionXRange ) { if ( CPTDecimalEquals(unionXRange.lengthDecimal, zero)) { [unionXRange unionPlotRange:self.xRange]; @@ -891,6 +895,7 @@ -(CGFloat)viewCoordinateForViewLength:(NSDecimal)viewLength linearPlotRange:(non } NSDecimal factor = CPTDecimalDivide(CPTDecimalSubtract(plotCoord, range.locationDecimal), range.lengthDecimal); + if ( NSDecimalIsNotANumber(&factor)) { factor = CPTDecimalFromInteger(0); } @@ -920,6 +925,7 @@ -(NSDecimal)plotCoordinateForViewLength:(NSDecimal)viewLength linearPlotRange:(n NSDecimal length = range.lengthDecimal; NSDecimal coordinate; + NSDecimalDivide(&coordinate, &viewLength, &boundsLength, NSRoundPlain); NSDecimalMultiply(&coordinate, &coordinate, &length, NSRoundPlain); NSDecimalAdd(&coordinate, &coordinate, &location, NSRoundPlain); @@ -934,6 +940,7 @@ -(double)doublePrecisionPlotCoordinateForViewLength:(CGFloat)viewLength linearPl } double coordinate = (double)viewLength / (double)boundsLength; + coordinate *= range.lengthDouble; coordinate += range.locationDouble; @@ -1429,6 +1436,7 @@ -(void)scaleBy:(CGFloat)interactionScale aboutPoint:(CGPoint)plotAreaPoint id theDelegate = self.delegate; BOOL shouldScale = YES; + if ( [theDelegate respondsToSelector:@selector(plotSpace:shouldScaleBy:aboutPoint:)] ) { shouldScale = [theDelegate plotSpace:self shouldScaleBy:interactionScale aboutPoint:plotAreaPoint]; } @@ -1439,6 +1447,7 @@ -(void)scaleBy:(CGFloat)interactionScale aboutPoint:(CGPoint)plotAreaPoint // Determine point in plot coordinates NSDecimal const decimalScale = CPTDecimalFromCGFloat(interactionScale); NSDecimal plotInteractionPoint[2]; + [self plotPoint:plotInteractionPoint numberOfCoordinates:2 forPlotAreaViewPoint:plotAreaPoint]; // Cache old ranges @@ -1451,6 +1460,7 @@ -(void)scaleBy:(CGFloat)interactionScale aboutPoint:(CGPoint)plotAreaPoint // New locations NSDecimal newLocationX; + if ( CPTDecimalGreaterThanOrEqualTo(oldRangeX.lengthDecimal, CPTDecimalFromInteger(0))) { NSDecimal oldFirstLengthX = CPTDecimalSubtract(plotInteractionPoint[CPTCoordinateX], oldRangeX.minLimitDecimal); // x - minX NSDecimal newFirstLengthX = CPTDecimalDivide(oldFirstLengthX, decimalScale); // (x - minX) / scale @@ -1463,6 +1473,7 @@ -(void)scaleBy:(CGFloat)interactionScale aboutPoint:(CGPoint)plotAreaPoint } NSDecimal newLocationY; + if ( CPTDecimalGreaterThanOrEqualTo(oldRangeY.lengthDecimal, CPTDecimalFromInteger(0))) { NSDecimal oldFirstLengthY = CPTDecimalSubtract(plotInteractionPoint[CPTCoordinateY], oldRangeY.minLimitDecimal); // y - minY NSDecimal newFirstLengthY = CPTDecimalDivide(oldFirstLengthY, decimalScale); // (y - minY) / scale @@ -1479,6 +1490,7 @@ -(void)scaleBy:(CGFloat)interactionScale aboutPoint:(CGPoint)plotAreaPoint CPTPlotRange *newRangeY = [[CPTPlotRange alloc] initWithLocationDecimal:newLocationY lengthDecimal:newLengthY]; BOOL oldMomentum = self.allowsMomentumX; + self.allowsMomentumX = NO; self.xRange = newRangeX; self.allowsMomentumX = oldMomentum; @@ -1521,17 +1533,20 @@ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint) self.isDragging = NO; BOOL handledByDelegate = [super pointingDeviceDownEvent:event atPoint:interactionPoint]; + if ( handledByDelegate ) { return YES; } CPTGraph *theGraph = self.graph; CPTPlotArea *plotArea = theGraph.plotAreaFrame.plotArea; + if ( !self.allowsUserInteraction || !plotArea ) { return NO; } CGPoint pointInPlotArea = [theGraph convertPoint:interactionPoint toLayer:plotArea]; + if ( [plotArea containsPoint:pointInPlotArea] ) { // Handle event self.lastDragPoint = pointInPlotArea; @@ -1580,6 +1595,7 @@ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)in CPTGraph *theGraph = self.graph; CPTPlotArea *plotArea = theGraph.plotAreaFrame.plotArea; + if ( !self.allowsUserInteraction || !plotArea ) { return NO; } @@ -1678,6 +1694,7 @@ -(BOOL)pointingDeviceDraggedEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoi CPTGraph *theGraph = self.graph; CPTPlotArea *plotArea = theGraph.plotAreaFrame.plotArea; + if ( !self.allowsUserInteraction || !plotArea ) { return NO; } @@ -1803,6 +1820,7 @@ -(BOOL)scrollWheelEvent:(nonnull CPTNativeEvent *)event fromPoint:(CGPoint)fromP CPTGraph *theGraph = self.graph; CPTPlotArea *plotArea = theGraph.plotAreaFrame.plotArea; + if ( !self.allowsUserInteraction || !plotArea ) { return NO; } @@ -1821,6 +1839,7 @@ -(BOOL)scrollWheelEvent:(nonnull CPTNativeEvent *)event fromPoint:(CGPoint)fromP } NSDecimal lastPoint[2], newPoint[2]; + [self plotPoint:lastPoint numberOfCoordinates:2 forPlotAreaViewPoint:fromPointInPlotArea]; [self plotPoint:newPoint numberOfCoordinates:2 forPlotAreaViewPoint:pointToUse]; diff --git a/framework/Source/CPTXYPlotSpaceTests.m b/framework/Source/CPTXYPlotSpaceTests.m index 888b6045d..926097223 100644 --- a/framework/Source/CPTXYPlotSpaceTests.m +++ b/framework/Source/CPTXYPlotSpaceTests.m @@ -80,6 +80,7 @@ -(void)testViewPointForPlotPointLinear length:@10.0]; NSDecimal plotPoint[2]; + plotPoint[CPTCoordinateX] = CPTDecimalFromDouble(5.0); plotPoint[CPTCoordinateY] = CPTDecimalFromDouble(5.0); @@ -112,6 +113,7 @@ -(void)testViewPointForDoublePrecisionPlotPointLinear length:@10.0]; double plotPoint[2]; + plotPoint[CPTCoordinateX] = 5.0; plotPoint[CPTCoordinateY] = 5.0; @@ -177,6 +179,7 @@ -(void)testViewPointForPlotPointLog length:@9.0]; NSDecimal plotPoint[2]; + plotPoint[CPTCoordinateX] = CPTDecimalFromDouble(sqrt(10.0)); plotPoint[CPTCoordinateY] = CPTDecimalFromDouble(sqrt(10.0)); @@ -209,6 +212,7 @@ -(void)testViewPointForDoublePrecisionPlotPointLog length:@9.0]; double plotPoint[2]; + plotPoint[CPTCoordinateX] = sqrt(10.0); plotPoint[CPTCoordinateY] = sqrt(10.0); @@ -264,6 +268,7 @@ -(void)testViewPointForPlotPointLogModulus length:@200.0]; NSDecimal plotPoint[2]; + plotPoint[CPTCoordinateX] = CPTDecimalFromInteger(9); plotPoint[CPTCoordinateY] = CPTDecimalFromInteger(0); @@ -286,6 +291,7 @@ -(void)testViewPointForDoublePrecisionPlotPointLogModulus length:@200.0]; double plotPoint[2]; + plotPoint[CPTCoordinateX] = 9.0; plotPoint[CPTCoordinateY] = 0.0; @@ -618,6 +624,7 @@ -(void)testScaleByAboutPoint1 length:@(-20.0)]; NSString *errMessage = [NSString stringWithFormat:@"xRange was %@, expected %@", plotSpace.xRange, expectedRangeX]; + XCTAssertTrue([plotSpace.xRange isEqualToRange:expectedRangeX], @"%@", errMessage); errMessage = [NSString stringWithFormat:@"yRange was %@, expected %@", plotSpace.yRange, expectedRangeY]; @@ -645,6 +652,7 @@ -(void)testScaleByAboutPoint2 length:@(-5.0)]; NSString *errMessage = [NSString stringWithFormat:@"xRange was %@, expected %@", plotSpace.xRange, expectedRangeX]; + XCTAssertTrue([plotSpace.xRange isEqualToRange:expectedRangeX], @"%@", errMessage); errMessage = [NSString stringWithFormat:@"yRange was %@, expected %@", plotSpace.yRange, expectedRangeY]; @@ -666,6 +674,7 @@ -(void)testKeyedArchivingRoundTrip CPTXYPlotSpace *newPlotSpace = [self archiveRoundTrip:plotSpace]; NSString *errMessage = [NSString stringWithFormat:@"xRange was %@, expected %@", plotSpace.xRange, newPlotSpace.xRange]; + XCTAssertTrue([plotSpace.xRange isEqualToRange:newPlotSpace.xRange], @"%@", errMessage); errMessage = [NSString stringWithFormat:@"yRange was %@, expected %@", plotSpace.yRange, newPlotSpace.yRange]; diff --git a/framework/Source/NSCoderExtensions.m b/framework/Source/NSCoderExtensions.m index cfa40b7f7..8c86907eb 100644 --- a/framework/Source/NSCoderExtensions.m +++ b/framework/Source/NSCoderExtensions.m @@ -127,6 +127,7 @@ void CPTPathApplierFunc(void *__nullable info, const CGPathElement *__nonnull el } NSMutableArray *> *pathData = (__bridge NSMutableArray *> *)info; + [pathData addObject:elementData]; } @@ -146,6 +147,7 @@ -(void)encodeCGPath:(nullable CGPathRef)path forKey:(nonnull NSString *)key // encode data count NSUInteger dataCount = pathData.count; NSString *newKey = [[NSString alloc] initWithFormat:@"%@.count", key]; + [self encodeInteger:(NSInteger)dataCount forKey:newKey]; // encode data elements @@ -209,14 +211,17 @@ -(void)encodeCGImage:(nullable CGImageRef)image forKey:(nonnull NSString *)key newKey = [[NSString alloc] initWithFormat:@"%@.colorSpace", key]; CGColorSpaceRef colorSpace = CGImageGetColorSpace(image); + [self encodeCGColorSpace:colorSpace forKey:newKey]; newKey = [[NSString alloc] initWithFormat:@"%@.bitmapInfo", key]; const CGBitmapInfo info = CGImageGetBitmapInfo(image); + [self encodeBytes:(const void *)(&info) length:sizeof(CGBitmapInfo) forKey:newKey]; CGDataProviderRef provider = CGImageGetDataProvider(image); CFDataRef providerData = CGDataProviderCopyData(provider); + newKey = [[NSString alloc] initWithFormat:@"%@.provider", key]; [self encodeObject:(__bridge NSData *)providerData forKey:newKey]; if ( providerData ) { @@ -224,6 +229,7 @@ -(void)encodeCGImage:(nullable CGImageRef)image forKey:(nonnull NSString *)key } const CGFloat *decodeArray = CGImageGetDecode(image); + if ( decodeArray ) { size_t numberOfComponents = CGColorSpaceGetNumberOfComponents(colorSpace); newKey = [[NSString alloc] initWithFormat:@"%@.numberOfComponents", key]; @@ -478,6 +484,7 @@ -(nullable CGImageRef)newCGImageDecodeForKey:(nonnull NSString *)key size_t numberOfComponents = (size_t)[self decodeInt64ForKey:newKey]; CGFloat *decodeArray = NULL; + if ( numberOfComponents ) { decodeArray = calloc((numberOfComponents * 2), sizeof(CGFloat)); diff --git a/framework/Source/_CPTAnimationCGFloatPeriod.m b/framework/Source/_CPTAnimationCGFloatPeriod.m index 1bcf82cea..7ef51110f 100644 --- a/framework/Source/_CPTAnimationCGFloatPeriod.m +++ b/framework/Source/_CPTAnimationCGFloatPeriod.m @@ -24,6 +24,7 @@ CGFloat CPTCurrentFloatValue(id __nonnull boundObject, SEL __nonnull boundGetter [invocation invoke]; CGFloat value; + [invocation getReturnValue:&value]; return value; diff --git a/framework/Source/_CPTAnimationCGPointPeriod.m b/framework/Source/_CPTAnimationCGPointPeriod.m index bb6246379..31625f9cf 100644 --- a/framework/Source/_CPTAnimationCGPointPeriod.m +++ b/framework/Source/_CPTAnimationCGPointPeriod.m @@ -22,6 +22,7 @@ CGPoint CPTCurrentPointValue(id __nonnull boundObject, SEL __nonnull boundGetter [invocation invoke]; CGPoint value; + [invocation getReturnValue:&value]; return value; diff --git a/framework/Source/_CPTAnimationCGRectPeriod.m b/framework/Source/_CPTAnimationCGRectPeriod.m index 1e05bf9b8..c3fa299ad 100644 --- a/framework/Source/_CPTAnimationCGRectPeriod.m +++ b/framework/Source/_CPTAnimationCGRectPeriod.m @@ -22,6 +22,7 @@ CGRect CPTCurrentRectValue(id __nonnull boundObject, SEL __nonnull boundGetter) [invocation invoke]; CGRect value; + [invocation getReturnValue:&value]; return value; diff --git a/framework/Source/_CPTAnimationCGSizePeriod.m b/framework/Source/_CPTAnimationCGSizePeriod.m index e0b54f48e..f0775a13a 100644 --- a/framework/Source/_CPTAnimationCGSizePeriod.m +++ b/framework/Source/_CPTAnimationCGSizePeriod.m @@ -22,6 +22,7 @@ CGSize CPTCurrentSizeValue(id __nonnull boundObject, SEL __nonnull boundGetter) [invocation invoke]; CGSize value; + [invocation getReturnValue:&value]; return value; diff --git a/framework/Source/_CPTAnimationNSDecimalPeriod.m b/framework/Source/_CPTAnimationNSDecimalPeriod.m index bcf36e651..b61e7644c 100644 --- a/framework/Source/_CPTAnimationNSDecimalPeriod.m +++ b/framework/Source/_CPTAnimationNSDecimalPeriod.m @@ -24,6 +24,7 @@ NSDecimal CPTCurrentDecimalValue(id __nonnull boundObject, SEL __nonnull boundGe [invocation invoke]; NSDecimal value; + [invocation getReturnValue:&value]; return value; diff --git a/framework/Source/_CPTDarkGradientTheme.m b/framework/Source/_CPTDarkGradientTheme.m index e15eaf091..f737dfdaa 100644 --- a/framework/Source/_CPTDarkGradientTheme.m +++ b/framework/Source/_CPTDarkGradientTheme.m @@ -53,6 +53,7 @@ -(void)applyThemeToPlotArea:(nonnull CPTPlotAreaFrame *)plotAreaFrame plotAreaFrame.fill = [CPTFill fillWithGradient:gradient]; CPTMutableLineStyle *borderLineStyle = [CPTMutableLineStyle lineStyle]; + borderLineStyle.lineColor = [CPTColor colorWithGenericGray:CPTFloat(0.2)]; borderLineStyle.lineWidth = CPTFloat(4.0); @@ -69,15 +70,18 @@ -(void)applyThemeToAxisSet:(nonnull CPTAxisSet *)axisSet majorLineStyle.lineWidth = CPTFloat(2.0); CPTMutableLineStyle *minorLineStyle = [CPTMutableLineStyle lineStyle]; + minorLineStyle.lineCap = kCGLineCapSquare; minorLineStyle.lineColor = [CPTColor darkGrayColor]; minorLineStyle.lineWidth = CPTFloat(1.0); CPTMutableTextStyle *whiteTextStyle = [[CPTMutableTextStyle alloc] init]; + whiteTextStyle.color = [CPTColor whiteColor]; whiteTextStyle.fontSize = CPTFloat(14.0); CPTMutableTextStyle *whiteMinorTickTextStyle = [[CPTMutableTextStyle alloc] init]; + whiteMinorTickTextStyle.color = [CPTColor whiteColor]; whiteMinorTickTextStyle.fontSize = CPTFloat(12.0); diff --git a/framework/Source/_CPTFillImage.m b/framework/Source/_CPTFillImage.m index 48614de11..cd1b04297 100644 --- a/framework/Source/_CPTFillImage.m +++ b/framework/Source/_CPTFillImage.m @@ -58,6 +58,7 @@ -(void)fillPathInContext:(nonnull CGContextRef)context CGContextSaveGState(context); CGRect bounds = CGContextGetPathBoundingBox(context); + CGContextClip(context); [self.fillImage drawInRect:bounds inContext:context]; diff --git a/framework/Source/_CPTPlainBlackTheme.m b/framework/Source/_CPTPlainBlackTheme.m index 05783b4f1..ae38761d0 100644 --- a/framework/Source/_CPTPlainBlackTheme.m +++ b/framework/Source/_CPTPlainBlackTheme.m @@ -40,6 +40,7 @@ -(void)applyThemeToPlotArea:(nonnull CPTPlotAreaFrame *)plotAreaFrame plotAreaFrame.fill = [CPTFill fillWithColor:[CPTColor blackColor]]; CPTMutableLineStyle *borderLineStyle = [CPTMutableLineStyle lineStyle]; + borderLineStyle.lineColor = [CPTColor whiteColor]; borderLineStyle.lineWidth = CPTFloat(1.0); @@ -56,14 +57,17 @@ -(void)applyThemeToAxisSet:(nonnull CPTAxisSet *)axisSet majorLineStyle.lineWidth = CPTFloat(3.0); CPTMutableLineStyle *minorLineStyle = [CPTMutableLineStyle lineStyle]; + minorLineStyle.lineColor = [CPTColor whiteColor]; minorLineStyle.lineWidth = CPTFloat(3.0); CPTMutableTextStyle *whiteTextStyle = [[CPTMutableTextStyle alloc] init]; + whiteTextStyle.color = [CPTColor whiteColor]; whiteTextStyle.fontSize = CPTFloat(14.0); CPTMutableTextStyle *minorTickWhiteTextStyle = [[CPTMutableTextStyle alloc] init]; + minorTickWhiteTextStyle.color = [CPTColor whiteColor]; minorTickWhiteTextStyle.fontSize = CPTFloat(12.0); diff --git a/framework/Source/_CPTPlainWhiteTheme.m b/framework/Source/_CPTPlainWhiteTheme.m index 5a8ed24f2..d90f88428 100644 --- a/framework/Source/_CPTPlainWhiteTheme.m +++ b/framework/Source/_CPTPlainWhiteTheme.m @@ -40,6 +40,7 @@ -(void)applyThemeToPlotArea:(nonnull CPTPlotAreaFrame *)plotAreaFrame plotAreaFrame.fill = [CPTFill fillWithColor:[CPTColor whiteColor]]; CPTMutableLineStyle *borderLineStyle = [CPTMutableLineStyle lineStyle]; + borderLineStyle.lineColor = [CPTColor blackColor]; borderLineStyle.lineWidth = CPTFloat(1.0); @@ -56,15 +57,18 @@ -(void)applyThemeToAxisSet:(nonnull CPTAxisSet *)axisSet majorLineStyle.lineWidth = CPTFloat(1.0); CPTMutableLineStyle *minorLineStyle = [CPTMutableLineStyle lineStyle]; + minorLineStyle.lineCap = kCGLineCapButt; minorLineStyle.lineColor = [CPTColor blackColor]; minorLineStyle.lineWidth = CPTFloat(1.0); CPTMutableTextStyle *blackTextStyle = [[CPTMutableTextStyle alloc] init]; + blackTextStyle.color = [CPTColor blackColor]; blackTextStyle.fontSize = CPTFloat(14.0); CPTMutableTextStyle *minorTickBlackTextStyle = [[CPTMutableTextStyle alloc] init]; + minorTickBlackTextStyle.color = [CPTColor blackColor]; minorTickBlackTextStyle.fontSize = CPTFloat(12.0); diff --git a/framework/Source/_CPTSlateTheme.m b/framework/Source/_CPTSlateTheme.m index c357e48a9..3f8807ad0 100644 --- a/framework/Source/_CPTSlateTheme.m +++ b/framework/Source/_CPTSlateTheme.m @@ -52,6 +52,7 @@ -(void)applyThemeToPlotArea:(nonnull CPTPlotAreaFrame *)plotAreaFrame plotAreaFrame.fill = [CPTFill fillWithGradient:gradient]; CPTMutableLineStyle *borderLineStyle = [CPTMutableLineStyle lineStyle]; + borderLineStyle.lineColor = [CPTColor colorWithGenericGray:CPTFloat(0.2)]; borderLineStyle.lineWidth = CPTFloat(1.0); @@ -68,15 +69,18 @@ -(void)applyThemeToAxisSet:(nonnull CPTAxisSet *)axisSet majorLineStyle.lineWidth = CPTFloat(2.0); CPTMutableLineStyle *minorLineStyle = [CPTMutableLineStyle lineStyle]; + minorLineStyle.lineCap = kCGLineCapSquare; minorLineStyle.lineColor = [CPTColor blackColor]; minorLineStyle.lineWidth = CPTFloat(1.0); CPTMutableTextStyle *blackTextStyle = [[CPTMutableTextStyle alloc] init]; + blackTextStyle.color = [CPTColor blackColor]; blackTextStyle.fontSize = CPTFloat(14.0); CPTMutableTextStyle *minorTickBlackTextStyle = [[CPTMutableTextStyle alloc] init]; + minorTickBlackTextStyle.color = [CPTColor blackColor]; minorTickBlackTextStyle.fontSize = CPTFloat(12.0); diff --git a/framework/Source/_CPTStocksTheme.m b/framework/Source/_CPTStocksTheme.m index 4e3dcf0bc..208cf9db8 100644 --- a/framework/Source/_CPTStocksTheme.m +++ b/framework/Source/_CPTStocksTheme.m @@ -53,6 +53,7 @@ -(void)applyThemeToPlotArea:(nonnull CPTPlotAreaFrame *)plotAreaFrame plotAreaFrame.fill = [CPTFill fillWithGradient:stocksBackgroundGradient]; CPTMutableLineStyle *borderLineStyle = [CPTMutableLineStyle lineStyle]; + borderLineStyle.lineColor = [CPTColor colorWithGenericGray:CPTFloat(0.2)]; borderLineStyle.lineWidth = CPTFloat(0.0); @@ -69,14 +70,17 @@ -(void)applyThemeToAxisSet:(nonnull CPTAxisSet *)axisSet majorLineStyle.lineWidth = CPTFloat(3.0); CPTMutableLineStyle *minorLineStyle = [CPTMutableLineStyle lineStyle]; + minorLineStyle.lineColor = [CPTColor whiteColor]; minorLineStyle.lineWidth = CPTFloat(3.0); CPTMutableTextStyle *whiteTextStyle = [[CPTMutableTextStyle alloc] init]; + whiteTextStyle.color = [CPTColor whiteColor]; whiteTextStyle.fontSize = CPTFloat(14.0); CPTMutableTextStyle *minorTickWhiteTextStyle = [[CPTMutableTextStyle alloc] init]; + minorTickWhiteTextStyle.color = [CPTColor whiteColor]; minorTickWhiteTextStyle.fontSize = CPTFloat(12.0); diff --git a/framework/Source/_CPTXYTheme.m b/framework/Source/_CPTXYTheme.m index 129d137aa..5c2276d71 100644 --- a/framework/Source/_CPTXYTheme.m +++ b/framework/Source/_CPTXYTheme.m @@ -39,6 +39,7 @@ -(nullable id)newGraph graph.paddingBottom = CPTFloat(60.0); CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)graph.defaultPlotSpace; + plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@(-1.0) length:@1.0]; plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@(-1.0) length:@1.0]; diff --git a/framework/iPhoneOnly/CPTGraphHostingView.m b/framework/iPhoneOnly/CPTGraphHostingView.m index 0c9866702..7f401e031 100644 --- a/framework/iPhoneOnly/CPTGraphHostingView.m +++ b/framework/iPhoneOnly/CPTGraphHostingView.m @@ -385,6 +385,7 @@ -(void)setHostedGraph:(nullable CPTGraph *)newLayer // Screen scaling UIScreen *screen = self.window.screen; + if ( !screen ) { screen = [UIScreen mainScreen]; } @@ -447,6 +448,7 @@ -(void)setFrame:(CGRect)newFrame super.frame = newFrame; CPTGraph *theHostedGraph = self.hostedGraph; + [theHostedGraph setNeedsLayout]; if ( self.collapsesLayers ) { @@ -462,6 +464,7 @@ -(void)setBounds:(CGRect)newBounds super.bounds = newBounds; CPTGraph *theHostedGraph = self.hostedGraph; + [theHostedGraph setNeedsLayout]; if ( self.collapsesLayers ) { diff --git a/framework/iPhoneOnly/CPTPlatformSpecificCategories.m b/framework/iPhoneOnly/CPTPlatformSpecificCategories.m index cad04a6f3..b8f5454c6 100644 --- a/framework/iPhoneOnly/CPTPlatformSpecificCategories.m +++ b/framework/iPhoneOnly/CPTPlatformSpecificCategories.m @@ -17,6 +17,7 @@ -(nullable CPTNativeImage *)imageOfLayer UIGraphicsBeginImageContextWithOptions(boundsSize, self.opaque, CPTFloat(0.0)); CGContextRef context = UIGraphicsGetCurrentContext(); + CGContextSaveGState(context); CGContextSetAllowsAntialiasing(context, true); @@ -25,6 +26,7 @@ -(nullable CPTNativeImage *)imageOfLayer [self layoutAndRenderInContext:context]; CPTNativeImage *layerImage = UIGraphicsGetImageFromCurrentImageContext(); + CGContextSetAllowsAntialiasing(context, false); CGContextRestoreGState(context); diff --git a/framework/iPhoneOnly/CPTPlatformSpecificFunctions.m b/framework/iPhoneOnly/CPTPlatformSpecificFunctions.m index 737d400f5..cd256a499 100644 --- a/framework/iPhoneOnly/CPTPlatformSpecificFunctions.m +++ b/framework/iPhoneOnly/CPTPlatformSpecificFunctions.m @@ -32,6 +32,7 @@ void CPTPopCGContext(void) renderBlock(context, 1.0, rect); UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); return image; diff --git a/framework/iPhoneOnly/CPTTextStylePlatformSpecific.m b/framework/iPhoneOnly/CPTTextStylePlatformSpecific.m index c2602bbc6..9c6e34d7e 100644 --- a/framework/iPhoneOnly/CPTTextStylePlatformSpecific.m +++ b/framework/iPhoneOnly/CPTTextStylePlatformSpecific.m @@ -49,12 +49,14 @@ +(nonnull instancetype)textStyleWithAttributes:(nullable CPTDictionary *)attribu // Color UIColor *styleColor = attributes[NSForegroundColorAttributeName]; + if ( styleColor ) { newStyle.color = [CPTColor colorWithCGColor:styleColor.CGColor]; } // Text alignment and line break mode NSParagraphStyle *paragraphStyle = attributes[NSParagraphStyleAttributeName]; + if ( paragraphStyle ) { newStyle.textAlignment = (CPTTextAlignment)paragraphStyle.alignment; newStyle.lineBreakMode = paragraphStyle.lineBreakMode; @@ -95,6 +97,7 @@ -(nonnull CPTDictionary *)attributes // Text alignment and line break mode NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; + paragraphStyle.alignment = (NSTextAlignment)self.textAlignment; paragraphStyle.lineBreakMode = self.lineBreakMode; diff --git a/scripts/uncrustify.cfg b/scripts/uncrustify.cfg index adf13c0dd..55f9b6673 100644 --- a/scripts/uncrustify.cfg +++ b/scripts/uncrustify.cfg @@ -1,4 +1,4 @@ -# Uncrustify_d-0.70.1 +# Uncrustify_d-0.71.0 newlines = auto input_tab_size = 4 output_tab_size = 4 @@ -6,6 +6,7 @@ string_escape_char = 92 string_escape_char2 = 0 string_replace_tab_chars = false tok_split_gte = false +disable_processing_nl_cont = false disable_processing_cmt = "" enable_processing_cmt = "" enable_digraphs = false @@ -159,6 +160,7 @@ sp_throw_paren = force sp_after_throw = force sp_catch_paren = force sp_oc_catch_paren = force +sp_before_oc_proto_list = remove sp_oc_classname_paren = force sp_version_paren = ignore sp_scope_paren = ignore @@ -177,7 +179,7 @@ sp_finally_brace = force sp_brace_finally = force sp_try_brace = force sp_getset_brace = force -sp_word_brace = add +sp_word_brace_init_lst = add sp_word_brace_ns = add sp_before_dc = remove sp_after_dc = remove @@ -284,6 +286,7 @@ indent_macro_brace = true indent_member = 1 indent_member_single = false indent_sing_line_comments = 0 +indent_sparen_extra = 0 indent_relative_single_line_comments = true indent_switch_case = 4 indent_switch_break_with_case = false @@ -308,7 +311,9 @@ indent_first_for_expr = false indent_square_nl = false indent_preserve_sql = true indent_align_assign = true +indent_off_after_assign = false indent_align_paren = true +indent_oc_inside_msg_sel = false indent_oc_block = true indent_oc_block_msg = 0 indent_oc_msg_colon = 0 @@ -322,8 +327,11 @@ indent_min_vbrace_open = 0 indent_vbrace_open_on_tabstop = false indent_token_after_brace = true indent_cpp_lambda_body = false +indent_compound_literal_return = true indent_using_block = true indent_ternary_operator = 0 +indent_inside_ternary_operator = false +indent_off_after_return = false indent_off_after_return_new = false indent_single_after_return = false indent_ignore_asm_block = false @@ -367,6 +375,7 @@ nl_brace_else = force nl_elseif_brace = remove nl_else_brace = remove nl_else_if = remove +nl_before_opening_brace_func_class_def = ignore nl_before_if_closing_paren = ignore nl_brace_finally = force nl_finally_brace = remove @@ -433,6 +442,7 @@ nl_func_decl_start_multi_line = false nl_func_def_start_multi_line = false nl_func_decl_args = ignore nl_func_def_args = ignore +nl_func_call_args = ignore nl_func_decl_args_multi_line = false nl_func_def_args_multi_line = false nl_func_decl_end = remove @@ -445,9 +455,11 @@ nl_func_decl_empty = remove nl_func_def_empty = remove nl_func_call_empty = ignore nl_func_call_start = ignore +nl_func_call_end = ignore nl_func_call_start_multi_line = false nl_func_call_args_multi_line = false nl_func_call_end_multi_line = false +nl_func_call_args_multi_line_ignore_closures = false nl_template_start = false nl_template_args = false nl_template_end = false @@ -545,6 +557,10 @@ eat_blanks_before_close_brace = true nl_remove_extra_newlines = 0 nl_after_annotation = ignore nl_between_annotation = ignore +nl_before_whole_file_ifdef = 1 +nl_after_whole_file_ifdef = 0 +nl_before_whole_file_endif = 0 +nl_after_whole_file_endif = 1 pos_arith = trail pos_assign = trail pos_bool = trail @@ -625,6 +641,7 @@ align_asm_colon = false align_oc_msg_colon_span = 16 align_oc_msg_colon_first = false align_oc_decl_colon = true +align_oc_msg_colon_xcode_like = false cmt_width = 0 cmt_reflow_mode = 0 cmt_convert_tab_to_spaces = true @@ -673,6 +690,11 @@ mod_sort_case_sensitive = false mod_sort_import = true mod_sort_using = false mod_sort_include = true +mod_sort_incl_import_prioritize_filename = false +mod_sort_incl_import_prioritize_extensionless = false +mod_sort_incl_import_prioritize_angle_over_quotes = false +mod_sort_incl_import_ignore_extension = false +mod_sort_incl_import_grouping_enabled = false mod_move_case_break = false mod_case_brace = remove mod_remove_empty_return = true @@ -708,6 +730,9 @@ use_indent_continue_only_once = false indent_cpp_lambda_only_once = false use_sp_after_angle_always = false use_options_overriding_for_qt_macros = true +use_form_feed_no_more_as_whitespace_character = false warn_level_tabs_found_in_verbatim_string_literals = 2 +debug_max_number_of_loops = 0 +debug_line_number_to_protocol = 0 # option(s) with 'not default' value: 332 # From fd119aab28b95c0e750e4df0c1cda41560c8b678 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 16 May 2020 10:27:47 -0400 Subject: [PATCH 013/245] Fixed compile errors with old versions of Xcode where the iOS 13 SDK is not available. Fixed issue #411. --- framework/Source/CPTGraph.m | 4 ++++ framework/Source/CPTLayer.m | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/framework/Source/CPTGraph.m b/framework/Source/CPTGraph.m index 3daabad65..bce00e34e 100644 --- a/framework/Source/CPTGraph.m +++ b/framework/Source/CPTGraph.m @@ -395,6 +395,7 @@ -(void)layoutAndRenderInContext:(nonnull CGContextRef)context [super layoutAndRenderInContext:context]; } #else +#ifdef __IPHONE_13_0 if ( @available(iOS 13, *)) { if ( [UITraitCollection instancesRespondToSelector:@selector(performAsCurrentTraitCollection:)] ) { UITraitCollection *traitCollection = ((UIView *)self.hostingView).traitCollection; @@ -414,6 +415,9 @@ -(void)layoutAndRenderInContext:(nonnull CGContextRef)context else { [super layoutAndRenderInContext:context]; } +#else + [super layoutAndRenderInContext:context]; +#endif #endif #pragma clang diagnostic pop } diff --git a/framework/Source/CPTLayer.m b/framework/Source/CPTLayer.m index d1eca51db..ef317bd8a 100644 --- a/framework/Source/CPTLayer.m +++ b/framework/Source/CPTLayer.m @@ -338,6 +338,7 @@ -(void)display [super display]; } #else +#ifdef __IPHONE_13_0 if ( @available(iOS 13, *)) { if ( [UITraitCollection instancesRespondToSelector:@selector(performAsCurrentTraitCollection:)] ) { UITraitCollection *traitCollection = ((UIView *)self.graph.hostingView).traitCollection; @@ -357,6 +358,9 @@ -(void)display else { [super display]; } +#else + [super display]; +#endif #endif #pragma clang diagnostic pop } From b41b96529f98cf2c2da3e1cb18e512bfd589f3a4 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 27 Jun 2020 09:27:00 -0400 Subject: [PATCH 014/245] Fixed new type conversion warnings in Xcode 12 in the example apps. --- examples/CPTTestApp/Source/Controller.m | 6 +++--- examples/CorePlotGallery/src/plots/CandlestickPlot.m | 2 +- examples/CorePlotGallery/src/plots/DatePlot.m | 2 +- examples/CorePlotGallery/src/plots/OHLCPlot.m | 2 +- examples/CorePlotGallery/src/plots/RangePlot.m | 2 +- examples/MinorTickLabels/Controller.m | 4 ++-- examples/RangePlot/Controller.m | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/examples/CPTTestApp/Source/Controller.m b/examples/CPTTestApp/Source/Controller.m index 692793df6..3bc5662eb 100644 --- a/examples/CPTTestApp/Source/Controller.m +++ b/examples/CPTTestApp/Source/Controller.m @@ -111,7 +111,7 @@ -(void)setupGraph [graphTitle addAttribute:NSForegroundColorAttributeName value:[NSColor secondaryLabelColor] range:NSMakeRange(lineOne.length + 1, lineTwo.length)]; NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; - paragraphStyle.alignment = CPTTextAlignmentCenter; + paragraphStyle.alignment = NSTextAlignmentCenter; [graphTitle addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, graphTitle.length)]; NSFont *titleFont = [NSFont fontWithName:@"Helvetica-Bold" size:18.0]; @@ -187,7 +187,7 @@ -(void)setupAxes [xTitle addAttribute:NSForegroundColorAttributeName value:[NSColor tertiaryLabelColor] range:NSMakeRange(7, 6)]; NSMutableParagraphStyle *xParagraphStyle = [[NSMutableParagraphStyle alloc] init]; - xParagraphStyle.alignment = CPTTextAlignmentCenter; + xParagraphStyle.alignment = NSTextAlignmentCenter; [xTitle addAttribute:NSParagraphStyleAttributeName value:xParagraphStyle range:NSMakeRange(0, xTitle.length)]; x.attributedTitle = xTitle; @@ -216,7 +216,7 @@ -(void)setupAxes [yTitle addAttribute:NSForegroundColorAttributeName value:[NSColor tertiaryLabelColor] range:NSMakeRange(7, 6)]; NSMutableParagraphStyle *yParagraphStyle = [[NSMutableParagraphStyle alloc] init]; - yParagraphStyle.alignment = CPTTextAlignmentCenter; + yParagraphStyle.alignment = NSTextAlignmentCenter; [yTitle addAttribute:NSParagraphStyleAttributeName value:yParagraphStyle range:NSMakeRange(0, yTitle.length)]; y.attributedTitle = yTitle; diff --git a/examples/CorePlotGallery/src/plots/CandlestickPlot.m b/examples/CorePlotGallery/src/plots/CandlestickPlot.m index 961ddc972..c60f344d2 100644 --- a/examples/CorePlotGallery/src/plots/CandlestickPlot.m +++ b/examples/CorePlotGallery/src/plots/CandlestickPlot.m @@ -97,7 +97,7 @@ -(void)renderInGraphHostingView:(nonnull CPTGraphHostingView *)hostingView withT xAxis.majorIntervalLength = @(oneDay); xAxis.minorTicksPerInterval = 0; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; - dateFormatter.dateStyle = kCFDateFormatterShortStyle; + dateFormatter.dateStyle = NSDateFormatterShortStyle; CPTTimeFormatter *timeFormatter = [[CPTTimeFormatter alloc] initWithDateFormatter:dateFormatter]; timeFormatter.referenceDate = refDate; xAxis.labelFormatter = timeFormatter; diff --git a/examples/CorePlotGallery/src/plots/DatePlot.m b/examples/CorePlotGallery/src/plots/DatePlot.m index 3bc85e487..ea3d76b28 100644 --- a/examples/CorePlotGallery/src/plots/DatePlot.m +++ b/examples/CorePlotGallery/src/plots/DatePlot.m @@ -113,7 +113,7 @@ -(void)renderInGraphHostingView:(nonnull CPTGraphHostingView *)hostingView withT x.orthogonalPosition = @2.0; x.minorTicksPerInterval = 0; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; - dateFormatter.dateStyle = kCFDateFormatterShortStyle; + dateFormatter.dateStyle = NSDateFormatterShortStyle; CPTTimeFormatter *timeFormatter = [[CPTTimeFormatter alloc] initWithDateFormatter:dateFormatter]; timeFormatter.referenceDate = refDate; x.labelFormatter = timeFormatter; diff --git a/examples/CorePlotGallery/src/plots/OHLCPlot.m b/examples/CorePlotGallery/src/plots/OHLCPlot.m index 7761c4069..7c1d99788 100644 --- a/examples/CorePlotGallery/src/plots/OHLCPlot.m +++ b/examples/CorePlotGallery/src/plots/OHLCPlot.m @@ -97,7 +97,7 @@ -(void)renderInGraphHostingView:(nonnull CPTGraphHostingView *)hostingView withT xAxis.majorIntervalLength = @(oneDay); xAxis.minorTicksPerInterval = 0; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; - dateFormatter.dateStyle = kCFDateFormatterShortStyle; + dateFormatter.dateStyle = NSDateFormatterShortStyle; CPTTimeFormatter *timeFormatter = [[CPTTimeFormatter alloc] initWithDateFormatter:dateFormatter]; timeFormatter.referenceDate = refDate; xAxis.labelFormatter = timeFormatter; diff --git a/examples/CorePlotGallery/src/plots/RangePlot.m b/examples/CorePlotGallery/src/plots/RangePlot.m index 779a94ee0..b29a39d1a 100644 --- a/examples/CorePlotGallery/src/plots/RangePlot.m +++ b/examples/CorePlotGallery/src/plots/RangePlot.m @@ -137,7 +137,7 @@ -(void)renderInGraphHostingView:(nonnull CPTGraphHostingView *)hostingView withT x.orthogonalPosition = @2.0; x.minorTicksPerInterval = 0; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; - dateFormatter.dateStyle = kCFDateFormatterShortStyle; + dateFormatter.dateStyle = NSDateFormatterShortStyle; CPTTimeFormatter *timeFormatter = [[CPTTimeFormatter alloc] initWithDateFormatter:dateFormatter]; timeFormatter.referenceDate = refDate; x.labelFormatter = timeFormatter; diff --git a/examples/MinorTickLabels/Controller.m b/examples/MinorTickLabels/Controller.m index 0ea576ea3..03209a454 100644 --- a/examples/MinorTickLabels/Controller.m +++ b/examples/MinorTickLabels/Controller.m @@ -55,7 +55,7 @@ -(void)awakeFromNib NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; - dateFormatter.dateStyle = kCFDateFormatterShortStyle; + dateFormatter.dateStyle = NSDateFormatterShortStyle; CPTTimeFormatter *myDateFormatter = [[CPTTimeFormatter alloc] initWithDateFormatter:dateFormatter]; myDateFormatter.referenceDate = refDate; @@ -63,7 +63,7 @@ -(void)awakeFromNib NSDateFormatter *timeFormatter = [[NSDateFormatter alloc] init]; - timeFormatter.timeStyle = kCFDateFormatterShortStyle; + timeFormatter.timeStyle = NSDateFormatterShortStyle; CPTTimeFormatter *myTimeFormatter = [[CPTTimeFormatter alloc] initWithDateFormatter:timeFormatter]; myTimeFormatter.referenceDate = refDate; diff --git a/examples/RangePlot/Controller.m b/examples/RangePlot/Controller.m index c40f6586e..27e238bbd 100644 --- a/examples/RangePlot/Controller.m +++ b/examples/RangePlot/Controller.m @@ -68,7 +68,7 @@ -(void)awakeFromNib x.minorTicksPerInterval = 0; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; - dateFormatter.dateStyle = kCFDateFormatterShortStyle; + dateFormatter.dateStyle = NSDateFormatterShortStyle; CPTTimeFormatter *timeFormatter = [[CPTTimeFormatter alloc] initWithDateFormatter:dateFormatter]; timeFormatter.referenceDate = refDate; From ae284846a686cf82b3dcf311fa9b5667df09ff05 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 27 Jun 2020 09:28:32 -0400 Subject: [PATCH 015/245] Updated the Mac deployment target to 10.9 and the iOS deployment target to 9.0 in all projects for Xcode 12 compatibility. --- CorePlot-latest.podspec | 4 ++-- CorePlot.podspec | 4 ++-- .../CorePlotQCPlugin.xcodeproj/project.pbxproj | 4 ++-- documentation/changelog.markdown | 14 ++++++++++++++ .../CPTTestApp-iPad.xcodeproj/project.pbxproj | 4 ++-- .../CPTTestApp-iPhone.xcodeproj/project.pbxproj | 4 ++-- .../CPTTestApp.xcodeproj/project.pbxproj | 5 ++--- .../Plot_Gallery.xcodeproj/project.pbxproj | 4 ++-- .../DatePlot/DatePlot.xcodeproj/project.pbxproj | 1 - .../DropPlot/DropPlot.xcodeproj/project.pbxproj | 4 ++-- .../minorTickFormatter.xcodeproj/project.pbxproj | 5 ++--- .../RangePlot/RangePlot.xcodeproj/project.pbxproj | 5 ++--- framework/xcconfig/CorePlot.xcconfig | 4 ++-- 13 files changed, 36 insertions(+), 26 deletions(-) diff --git a/CorePlot-latest.podspec b/CorePlot-latest.podspec index 597cdda8f..cb124e8f4 100644 --- a/CorePlot-latest.podspec +++ b/CorePlot-latest.podspec @@ -18,8 +18,8 @@ Pod::Spec.new do |s| 'of data, and is tightly integrated with Apple technologies like Core Animation, ' \ 'Core Data, and Cocoa Bindings.' - s.ios.deployment_target = '8.0' - s.osx.deployment_target = '10.8' + s.ios.deployment_target = '9.0' + s.osx.deployment_target = '10.9' s.tvos.deployment_target = '9.0' s.ios.header_dir = 'ios' diff --git a/CorePlot.podspec b/CorePlot.podspec index b02e100c9..565326e88 100644 --- a/CorePlot.podspec +++ b/CorePlot.podspec @@ -18,8 +18,8 @@ Pod::Spec.new do |s| 'of data, and is tightly integrated with Apple technologies like Core Animation, ' \ 'Core Data, and Cocoa Bindings.' - s.ios.deployment_target = '8.0' - s.osx.deployment_target = '10.8' + s.ios.deployment_target = '9.0' + s.osx.deployment_target = '10.9' s.tvos.deployment_target = '9.0' s.ios.header_dir = 'ios' diff --git a/QCPlugin/CorePlotQCPlugin.xcodeproj/project.pbxproj b/QCPlugin/CorePlotQCPlugin.xcodeproj/project.pbxproj index e07788d06..f4c12cc78 100644 --- a/QCPlugin/CorePlotQCPlugin.xcodeproj/project.pbxproj +++ b/QCPlugin/CorePlotQCPlugin.xcodeproj/project.pbxproj @@ -482,7 +482,7 @@ GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_WARN_ABOUT_RETURN_TYPE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.8; + MACOSX_DEPLOYMENT_TARGET = 10.9; ONLY_ACTIVE_ARCH = YES; SYMROOT = "$(PROJECT_DIR)/../build"; }; @@ -498,7 +498,7 @@ GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = s; GCC_WARN_ABOUT_RETURN_TYPE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.8; + MACOSX_DEPLOYMENT_TARGET = 10.9; OTHER_LDFLAGS = ""; SYMROOT = "$(PROJECT_DIR)/../build"; }; diff --git a/documentation/changelog.markdown b/documentation/changelog.markdown index ed231ffeb..d14a45c15 100644 --- a/documentation/changelog.markdown +++ b/documentation/changelog.markdown @@ -1,3 +1,17 @@ +# Release 2.4 (TBD) + +## Release Notes + +This release updates Core Plot to be compatible with Xcode 12. + +The Mac deployment target is now macOS 10.9. The iOS deployment target is now iOS 9.0 for both the framework and the static library. The tvOS deployment target remains tvOS 9.0. + +## Details +- **New**: TBD +- **Changed**: Updated the deployment targets for all supported operating systems for the minimums required by Xcode 12. The Mac deployment target is now macOS 10.9. The iOS deployment target is now iOS 12.0 for both the framework and the static library. The tvOS deployment target is now tvOS 12.0. + + + # Release 2.3 (January 10, 2020) ## Release Notes diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj index afd032e09..2bef93439 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj @@ -446,7 +446,7 @@ GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; HEADER_SEARCH_PATHS = ""; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = ( "-ObjC", @@ -469,7 +469,7 @@ GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = s; HEADER_SEARCH_PATHS = ""; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; OTHER_LDFLAGS = ( "-ObjC", diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj index 672347980..239d3bb38 100644 --- a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj @@ -495,7 +495,7 @@ GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; HEADER_SEARCH_PATHS = ""; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/Frameworks"; ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = "-ObjC"; @@ -521,7 +521,7 @@ GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = s; HEADER_SEARCH_PATHS = ""; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/Frameworks"; ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = "-ObjC"; diff --git a/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj b/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj index a844a7791..12eeff3eb 100644 --- a/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj @@ -296,7 +296,6 @@ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { - BuildIndependentTargetsInParallel = NO; LastUpgradeCheck = 1100; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "CPTTestApp" */; @@ -542,7 +541,7 @@ GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.8; + MACOSX_DEPLOYMENT_TARGET = 10.9; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; SYMROOT = "$(PROJECT_DIR)/../../build"; @@ -559,7 +558,7 @@ GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = s; GCC_PREPROCESSOR_DEFINITIONS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.8; + MACOSX_DEPLOYMENT_TARGET = 10.9; SDKROOT = macosx; SYMROOT = "$(PROJECT_DIR)/../../build"; }; diff --git a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj index 5fc2950c5..b39984a31 100644 --- a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj +++ b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj @@ -1203,7 +1203,7 @@ "$(inherited)", ); INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Plot_Gallery_iOS-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.Plot-Gallery-iOS"; @@ -1227,7 +1227,7 @@ ENABLE_NS_ASSERTIONS = NO; GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Plot_Gallery_iOS-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.Plot-Gallery-iOS"; diff --git a/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj b/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj index 21d005158..c980f9c3a 100644 --- a/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj +++ b/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj @@ -257,7 +257,6 @@ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { - BuildIndependentTargetsInParallel = NO; LastSwiftUpdateCheck = 0700; LastUpgradeCheck = 1100; TargetAttributes = { diff --git a/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj b/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj index 43c984131..377d49b52 100644 --- a/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj +++ b/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj @@ -489,7 +489,7 @@ GCC_C_LANGUAGE_STANDARD = c99; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; - MACOSX_DEPLOYMENT_TARGET = 10.8; + MACOSX_DEPLOYMENT_TARGET = 10.9; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; SYMROOT = "$(SRCROOT)/../../build"; @@ -504,7 +504,7 @@ GCC_C_LANGUAGE_STANDARD = c99; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = s; - MACOSX_DEPLOYMENT_TARGET = 10.8; + MACOSX_DEPLOYMENT_TARGET = 10.9; SDKROOT = macosx; SYMROOT = "$(SRCROOT)/../../build"; }; diff --git a/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj b/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj index d0e672ef8..719720ddd 100644 --- a/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj +++ b/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj @@ -261,7 +261,6 @@ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { - BuildIndependentTargetsInParallel = NO; LastUpgradeCheck = 1100; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "minorTickFormatter" */; @@ -466,7 +465,7 @@ GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.8; + MACOSX_DEPLOYMENT_TARGET = 10.9; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; SYMROOT = "$(SRCROOT)/../../build"; @@ -482,7 +481,7 @@ GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = s; GCC_PREPROCESSOR_DEFINITIONS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.8; + MACOSX_DEPLOYMENT_TARGET = 10.9; SDKROOT = macosx; SYMROOT = "$(SRCROOT)/../../build"; }; diff --git a/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj b/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj index 53802d311..dd63b3be9 100644 --- a/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj +++ b/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj @@ -261,7 +261,6 @@ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { - BuildIndependentTargetsInParallel = NO; LastUpgradeCheck = 1100; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "RangePlot" */; @@ -466,7 +465,7 @@ GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.8; + MACOSX_DEPLOYMENT_TARGET = 10.9; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; SYMROOT = "$(SRCROOT)/../../build"; @@ -482,7 +481,7 @@ GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = s; GCC_PREPROCESSOR_DEFINITIONS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.8; + MACOSX_DEPLOYMENT_TARGET = 10.9; SDKROOT = macosx; SYMROOT = "$(SRCROOT)/../../build"; }; diff --git a/framework/xcconfig/CorePlot.xcconfig b/framework/xcconfig/CorePlot.xcconfig index 5d4e435bd..ab0edafa6 100644 --- a/framework/xcconfig/CorePlot.xcconfig +++ b/framework/xcconfig/CorePlot.xcconfig @@ -7,8 +7,8 @@ VALID_ARCHS[sdk=macosx*] = i386 x86_64 VALID_ARCHS[sdk=appletvos*] = arm64 VALID_ARCHS[sdk=appletvsimulator*] = i386 x86_64 -IPHONEOS_DEPLOYMENT_TARGET = 8.0 -MACOSX_DEPLOYMENT_TARGET = 10.8 +IPHONEOS_DEPLOYMENT_TARGET = 9.0 +MACOSX_DEPLOYMENT_TARGET = 10.9 TVOS_DEPLOYMENT_TARGET = 9.0 SYMROOT = $(PROJECT_DIR)/../build From 6f5f5d9f0e7479d5eacbc2a6a6925db2b0a53b1e Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 28 Jun 2020 08:29:34 -0400 Subject: [PATCH 016/245] Use angle brackets instead of quotes around #import for TargetConditionals.h and tgmath.h. --- framework/CocoaPods/CorePlot.h | 2 +- framework/CorePlot.h | 2 +- framework/Source/CPTFunctionDataSource.m | 2 +- framework/Source/CPTRangePlot.m | 2 +- framework/Source/CPTTradingRangePlot.m | 2 +- framework/iPhoneOnly/CPTPlatformSpecificCategories.m | 2 +- framework/iPhoneOnly/CPTTextStylePlatformSpecific.m | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/framework/CocoaPods/CorePlot.h b/framework/CocoaPods/CorePlot.h index c3660a97e..7cd52b097 100644 --- a/framework/CocoaPods/CorePlot.h +++ b/framework/CocoaPods/CorePlot.h @@ -1,4 +1,4 @@ -#import "TargetConditionals.h" +#import #if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE #import diff --git a/framework/CorePlot.h b/framework/CorePlot.h index fbf2740c2..b7399c981 100644 --- a/framework/CorePlot.h +++ b/framework/CorePlot.h @@ -1,4 +1,4 @@ -#import "TargetConditionals.h" +#import #if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE diff --git a/framework/Source/CPTFunctionDataSource.m b/framework/Source/CPTFunctionDataSource.m index 0e038673a..783f3008b 100644 --- a/framework/Source/CPTFunctionDataSource.m +++ b/framework/Source/CPTFunctionDataSource.m @@ -6,7 +6,7 @@ #import "CPTScatterPlot.h" #import "CPTUtilities.h" #import "CPTXYPlotSpace.h" -#import "tgmath.h" +#import /// @cond diff --git a/framework/Source/CPTRangePlot.m b/framework/Source/CPTRangePlot.m index 4fcff4c7b..b06d57969 100644 --- a/framework/Source/CPTRangePlot.m +++ b/framework/Source/CPTRangePlot.m @@ -14,7 +14,7 @@ #import "CPTXYPlotSpace.h" #import "NSCoderExtensions.h" #import "NSNumberExtensions.h" -#import "tgmath.h" +#import /** @defgroup plotAnimationRangePlot Range Plot * @brief Range plot properties that can be animated using Core Animation. diff --git a/framework/Source/CPTTradingRangePlot.m b/framework/Source/CPTTradingRangePlot.m index f1592552d..83266dfc3 100644 --- a/framework/Source/CPTTradingRangePlot.m +++ b/framework/Source/CPTTradingRangePlot.m @@ -13,7 +13,7 @@ #import "CPTXYPlotSpace.h" #import "NSCoderExtensions.h" #import "NSNumberExtensions.h" -#import "tgmath.h" +#import /** @defgroup plotAnimationTradingRangePlot Trading Range Plot * @brief Trading range plot properties that can be animated using Core Animation. diff --git a/framework/iPhoneOnly/CPTPlatformSpecificCategories.m b/framework/iPhoneOnly/CPTPlatformSpecificCategories.m index b8f5454c6..0c2a969de 100644 --- a/framework/iPhoneOnly/CPTPlatformSpecificCategories.m +++ b/framework/iPhoneOnly/CPTPlatformSpecificCategories.m @@ -1,7 +1,7 @@ #import "CPTPlatformSpecificCategories.h" #import "CPTPlatformSpecificFunctions.h" -#import "tgmath.h" +#import #pragma mark - CPTLayer diff --git a/framework/iPhoneOnly/CPTTextStylePlatformSpecific.m b/framework/iPhoneOnly/CPTTextStylePlatformSpecific.m index 9c6e34d7e..d6e5d03f8 100644 --- a/framework/iPhoneOnly/CPTTextStylePlatformSpecific.m +++ b/framework/iPhoneOnly/CPTTextStylePlatformSpecific.m @@ -4,7 +4,7 @@ #import "CPTMutableTextStyle.h" #import "CPTPlatformSpecificCategories.h" #import "CPTPlatformSpecificFunctions.h" -#import "tgmath.h" +#import @implementation CPTTextStyle(CPTPlatformSpecificTextStyleExtensions) From 22d18442cb1b7919085ce202650d285f7fbedc87 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 28 Jun 2020 08:33:19 -0400 Subject: [PATCH 017/245] Updated the deployment target for the iPhone version of CPTTestApp to iOS 12.0. --- .../CPTTestApp-iPhone.xcodeproj/project.pbxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj index 239d3bb38..339d4898e 100644 --- a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj @@ -495,7 +495,7 @@ GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; HEADER_SEARCH_PATHS = ""; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/Frameworks"; ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = "-ObjC"; @@ -521,7 +521,7 @@ GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = s; HEADER_SEARCH_PATHS = ""; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/Frameworks"; ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = "-ObjC"; From fea4386bb2c383d3b85c34e483ccc27166d26458 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 28 Jun 2020 10:43:44 -0400 Subject: [PATCH 018/245] Fixed documentation errors. --- framework/Source/CPTDefinitions.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/Source/CPTDefinitions.h b/framework/Source/CPTDefinitions.h index ff6f39eb7..5c43d41eb 100644 --- a/framework/Source/CPTDefinitions.h +++ b/framework/Source/CPTDefinitions.h @@ -271,12 +271,12 @@ typedef NSArray CPTValueArray; typedef NSMutableArray CPTMutableValueArray; /** - * @brief An array of strings. + * @brief A dictionary with string keys and object values. **/ typedef NSDictionary CPTDictionary; /** - * @brief A mutable array of strings. + * @brief A mutable dictionary with string keys and object values. **/ typedef NSMutableDictionary CPTMutableDictionary; From 416093f120ee30ba90b506754df80c1774d9e52c Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 5 Jul 2020 08:13:16 -0400 Subject: [PATCH 019/245] Removed the Accelerate framework from the pre-compiled header--no longer used. --- framework/CorePlot_Prefix.pch | 2 -- 1 file changed, 2 deletions(-) diff --git a/framework/CorePlot_Prefix.pch b/framework/CorePlot_Prefix.pch index 650702d34..41eb18dec 100644 --- a/framework/CorePlot_Prefix.pch +++ b/framework/CorePlot_Prefix.pch @@ -5,8 +5,6 @@ #ifdef __OBJC__ #import - #import - #if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_TV #import #import From 135f9d4bb06f0a2c0ab9ce560964a905b034ce90 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 5 Jul 2020 09:01:05 -0400 Subject: [PATCH 020/245] Fixed path references in the Core Plot project for the info.plist files. --- framework/CorePlot.xcodeproj/project.pbxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 9336f841f..b26dc1f6d 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -3236,7 +3236,7 @@ C3490DF320E028D30089F309 /* Base */, ); name = "CorePlot-CocoaTouch-Info.plist"; - path = Info/Base.lproj; + path = Info; sourceTree = ""; }; C3490DF620E028D80089F309 /* CorePlot-iOS-Info.plist */ = { @@ -3245,7 +3245,7 @@ C3490DF520E028D80089F309 /* Base */, ); name = "CorePlot-iOS-Info.plist"; - path = Info/Base.lproj; + path = Info; sourceTree = ""; }; C3490DF820E028DC0089F309 /* CorePlot-tvOS-Info.plist */ = { @@ -3254,8 +3254,8 @@ C3490DF720E028DC0089F309 /* Base */, ); name = "CorePlot-tvOS-Info.plist"; - path = "/Users/eskroch/Projects/Core Plot/framework/Info/Base.lproj"; - sourceTree = ""; + path = Info; + sourceTree = ""; }; C37A406420E02B9D00C4FF48 /* CorePlot-tvOSTests-Info.plist */ = { isa = PBXVariantGroup; From 10808dbb3d93ee0f3596e38dd16fa75c77d47982 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 1 Aug 2020 11:35:46 -0400 Subject: [PATCH 021/245] Updated the Doxygen configuration files for Doxygen 1.8.18. --- documentation/doxygen/doxygen touch.config | 31 +++++++++++++--------- documentation/doxygen/doxygen.config | 31 +++++++++++++--------- 2 files changed, 36 insertions(+), 26 deletions(-) diff --git a/documentation/doxygen/doxygen touch.config b/documentation/doxygen/doxygen touch.config index 5c120be8d..edd3b412d 100644 --- a/documentation/doxygen/doxygen touch.config +++ b/documentation/doxygen/doxygen touch.config @@ -1,4 +1,4 @@ -# Doxyfile 1.8.17 +# Doxyfile 1.8.18 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -272,12 +272,6 @@ ALIASES = "YES=@ref YES" \ "par{1}=\1" \ "quote{1}=“\1”" -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding "class=itcl::class" -# will allow you to use the command class in the itcl::class meaning. - -TCL_SUBST = - # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For # instance, some of the names that are used will be different. The list of all @@ -319,13 +313,13 @@ OPTIMIZE_OUTPUT_SLICE = NO # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, JavaScript, -# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, +# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL, # Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: # FortranFree, unknown formatted Fortran: Fortran. In the later case the parser # tries to guess whether the code is fixed or free formatted code, this is the -# default for Fortran type files), VHDL, tcl. For instance to make doxygen treat -# .inc files as Fortran files (default is PHP), and .f files as C (default is -# Fortran), use: inc=Fortran f=C. +# default for Fortran type files). For instance to make doxygen treat .inc files +# as Fortran files (default is PHP), and .f files as C (default is Fortran), +# use: inc=Fortran f=C. # # Note: For files without extension you can use no_extension as a placeholder. # @@ -864,7 +858,7 @@ INPUT_ENCODING = UTF-8 # *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, # *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment), # *.doc (to be provided as doxygen C comment), *.txt (to be provided as doxygen -# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f, *.for, *.tcl, *.vhd, +# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, # *.vhdl, *.ucf, *.qsf and *.ice. FILE_PATTERNS = @@ -1539,6 +1533,17 @@ TREEVIEW_WIDTH = 250 EXT_LINKS_IN_WINDOW = NO +# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg +# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see +# https://inkscape.org) to generate formulas as SVG images instead of PNGs for +# the HTML output. These images will generally look nicer at scaled resolutions. +# Possible values are: png The default and svg Looks nicer but requires the +# pdf2svg tool. +# The default value is: png. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FORMULA_FORMAT = png + # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful # doxygen run you need to manually remove any form_*.png images from the HTML @@ -1594,7 +1599,7 @@ MATHJAX_FORMAT = HTML-CSS # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of # MathJax from https://www.mathjax.org before deployment. -# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/. +# The default value is: https://cdn.jsdelivr.net/npm/mathjax@2. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://www.mathjax.org/mathjax diff --git a/documentation/doxygen/doxygen.config b/documentation/doxygen/doxygen.config index d36aa5f81..ce790056f 100644 --- a/documentation/doxygen/doxygen.config +++ b/documentation/doxygen/doxygen.config @@ -1,4 +1,4 @@ -# Doxyfile 1.8.17 +# Doxyfile 1.8.18 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -272,12 +272,6 @@ ALIASES = "YES=@ref YES" \ "par{1}=\1" \ "quote{1}=“\1”" -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding "class=itcl::class" -# will allow you to use the command class in the itcl::class meaning. - -TCL_SUBST = - # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For # instance, some of the names that are used will be different. The list of all @@ -319,13 +313,13 @@ OPTIMIZE_OUTPUT_SLICE = NO # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, JavaScript, -# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, +# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL, # Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: # FortranFree, unknown formatted Fortran: Fortran. In the later case the parser # tries to guess whether the code is fixed or free formatted code, this is the -# default for Fortran type files), VHDL, tcl. For instance to make doxygen treat -# .inc files as Fortran files (default is PHP), and .f files as C (default is -# Fortran), use: inc=Fortran f=C. +# default for Fortran type files). For instance to make doxygen treat .inc files +# as Fortran files (default is PHP), and .f files as C (default is Fortran), +# use: inc=Fortran f=C. # # Note: For files without extension you can use no_extension as a placeholder. # @@ -864,7 +858,7 @@ INPUT_ENCODING = UTF-8 # *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, # *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment), # *.doc (to be provided as doxygen C comment), *.txt (to be provided as doxygen -# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f, *.for, *.tcl, *.vhd, +# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, # *.vhdl, *.ucf, *.qsf and *.ice. FILE_PATTERNS = @@ -1539,6 +1533,17 @@ TREEVIEW_WIDTH = 250 EXT_LINKS_IN_WINDOW = NO +# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg +# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see +# https://inkscape.org) to generate formulas as SVG images instead of PNGs for +# the HTML output. These images will generally look nicer at scaled resolutions. +# Possible values are: png The default and svg Looks nicer but requires the +# pdf2svg tool. +# The default value is: png. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FORMULA_FORMAT = png + # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful # doxygen run you need to manually remove any form_*.png images from the HTML @@ -1594,7 +1599,7 @@ MATHJAX_FORMAT = HTML-CSS # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of # MathJax from https://www.mathjax.org before deployment. -# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/. +# The default value is: https://cdn.jsdelivr.net/npm/mathjax@2. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://www.mathjax.org/mathjax From 6538cc899b34da87aaf33a040236feab1c6e0788 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 9 Aug 2020 09:19:54 -0400 Subject: [PATCH 022/245] Removed leading underscores from all filenames for GitHub Pages compatibility. --- framework/CorePlot.xcodeproj/project.pbxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index b26dc1f6d..7cef332f2 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -2584,7 +2584,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# Build the doxygen documentation for the project and load the docset into Xcode.\n\n# Use the following to adjust the value of the $DOXYGEN_PATH User-Defined Setting:\n# Binary install location: /Applications/Doxygen.app/Contents/Resources/doxygen\n# Source build install location: /usr/local/bin/doxygen\n\n# Graphical class diagrams require Graphviz.\n# Graphviz.app is available free online\n# http://www.graphviz.org/Download_macos.php\n\n# If the config file doesn't exist, run 'doxygen -g \"${SOURCE_ROOT}/../documentation/doxygen/doxygen.config\"' to \n# a get default file.\n\nDOXYGEN_FOLDER=\"${SOURCE_ROOT}/../documentation/doxygen\"\n\nif ! [ -f \"${DOXYGEN_FOLDER}/doxygen.config\" ] \nthen \n echo doxygen config file does not exist\n ${DOXYGEN_PATH} -g \"${DOXYGEN_FOLDER}/doxygen.config\"\nfi\n\n# Run doxygen on the updated config file.\n# Note: doxygen creates a Makefile that does most of the heavy lifting.\n${DOXYGEN_PATH} \"${DOXYGEN_FOLDER}/doxygen.config\"\n\n# make a copy of the html docs\nDOCS_FOLDER=\"${SOURCE_ROOT}/../documentation/html/MacOS\"\nmkdir -p \"${DOCS_FOLDER}\"\ncp -R \"${SOURCE_ROOT}/CorePlotDocs.docset/html/\" \"${DOCS_FOLDER}\"\nrm -Rf \"${SOURCE_ROOT}/CorePlotDocs.docset\"\nrm -f \"${DOCS_FOLDER}/Info.plist\"\nrm -f \"${DOCS_FOLDER}/Makefile\"\nrm -f \"${DOCS_FOLDER}/Nodes.xml\"\nrm -f \"${DOCS_FOLDER}/Tokens.xml\"\n\nexit 0"; + shellScript = "# Build the doxygen documentation for the project and load the docset into Xcode.\n\n# Use the following to adjust the value of the $DOXYGEN_PATH User-Defined Setting:\n# Binary install location: /Applications/Doxygen.app/Contents/Resources/doxygen\n# Source build install location: /usr/local/bin/doxygen\n\n# Graphical class diagrams require Graphviz.\n# Graphviz.app is available free online\n# http://www.graphviz.org/Download_macos.php\n\n# If the config file doesn't exist, run 'doxygen -g \"${SOURCE_ROOT}/../documentation/doxygen/doxygen.config\"' to \n# a get default file.\n\nDOXYGEN_FOLDER=\"${SOURCE_ROOT}/../documentation/doxygen\"\n\nif ! [ -f \"${DOXYGEN_FOLDER}/doxygen.config\" ] \nthen \n echo doxygen config file does not exist\n ${DOXYGEN_PATH} -g \"${DOXYGEN_FOLDER}/doxygen.config\"\nfi\n\n# Run doxygen on the updated config file.\n# Note: doxygen creates a Makefile that does most of the heavy lifting.\n${DOXYGEN_PATH} \"${DOXYGEN_FOLDER}/doxygen.config\"\n\n# make a copy of the html docs\nDOCS_FOLDER=\"${SOURCE_ROOT}/../documentation/html/MacOS\"\nmkdir -p \"${DOCS_FOLDER}\"\ncp -R \"${SOURCE_ROOT}/CorePlotDocs.docset/html/\" \"${DOCS_FOLDER}\"\nrm -Rf \"${SOURCE_ROOT}/CorePlotDocs.docset\"\nrm -f \"${DOCS_FOLDER}/Info.plist\"\nrm -f \"${DOCS_FOLDER}/Makefile\"\nrm -f \"${DOCS_FOLDER}/Nodes.xml\"\nrm -f \"${DOCS_FOLDER}/Tokens.xml\"\n\n# Fix capitalization for GitHub pages\ncd \"${DOCS_FOLDER}\"\nls _*.* | while read a; do n=$(echo $a | sed -e 's/^_//'); mv \"$a\" \"$n\"; done\nls *.html | xargs sed -i '' 's/\\\"_/\\\"/g'\nls *.js | xargs sed -i '' 's/\\\"_/\\\"/g'\nls *.map | xargs sed -i '' 's/\\\"$_/\\\"$/g'\n\nexit 0\n"; }; C37EA5C51BC83E900091C8F7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; @@ -2610,7 +2610,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# Build the doxygen documentation for the project and load the docset into Xcode.\n\n# Use the following to adjust the value of the $DOXYGEN_PATH User-Defined Setting:\n# Binary install location: /Applications/Doxygen.app/Contents/Resources/doxygen\n# Source build install location: /usr/local/bin/doxygen\n\n# Graphical class diagrams require Graphviz.\n# Graphviz.app is available free online\n# http://www.graphviz.org/Download_macos.php\n\n# If the config file doesn't exist, run 'doxygen -g \"${SOURCE_ROOT}/../documentation/doxygen/doxygen touch.config\"' to\n# a get default file.\n\nDOXYGEN_FOLDER=\"${SOURCE_ROOT}/../documentation/doxygen\"\n\nif ! [ -f \"${DOXYGEN_FOLDER}/doxygen.config\" ]\nthen\necho doxygen config file does not exist\n${DOXYGEN_PATH} -g \"${DOXYGEN_FOLDER}/doxygen.config\"\nfi\n\n# Run doxygen on the updated config file.\n# Note: doxygen creates a Makefile that does most of the heavy lifting.\n${DOXYGEN_PATH} \"${SOURCE_ROOT}/../documentation/doxygen/doxygen touch.config\"\n\n# make a copy of the html docs\nDOCS_FOLDER=\"${SOURCE_ROOT}/../documentation/html/iOS\"\nmkdir -p \"${DOCS_FOLDER}\"\ncp -R \"${SOURCE_ROOT}/CorePlotTouchDocs.docset/html/\" \"${DOCS_FOLDER}\"\nrm -Rf \"${SOURCE_ROOT}/CorePlotTouchDocs.docset\"\nrm -f \"${DOCS_FOLDER}/Info.plist\"\nrm -f \"${DOCS_FOLDER}/Makefile\"\nrm -f \"${DOCS_FOLDER}/Nodes.xml\"\nrm -f \"${DOCS_FOLDER}/Tokens.xml\"\n\nexit 0"; + shellScript = "# Build the doxygen documentation for the project and load the docset into Xcode.\n\n# Use the following to adjust the value of the $DOXYGEN_PATH User-Defined Setting:\n# Binary install location: /Applications/Doxygen.app/Contents/Resources/doxygen\n# Source build install location: /usr/local/bin/doxygen\n\n# Graphical class diagrams require Graphviz.\n# Graphviz.app is available free online\n# http://www.graphviz.org/Download_macos.php\n\n# If the config file doesn't exist, run 'doxygen -g \"${SOURCE_ROOT}/../documentation/doxygen/doxygen touch.config\"' to\n# a get default file.\n\nDOXYGEN_FOLDER=\"${SOURCE_ROOT}/../documentation/doxygen\"\n\nif ! [ -f \"${DOXYGEN_FOLDER}/doxygen.config\" ]\nthen\necho doxygen config file does not exist\n${DOXYGEN_PATH} -g \"${DOXYGEN_FOLDER}/doxygen.config\"\nfi\n\n# Run doxygen on the updated config file.\n# Note: doxygen creates a Makefile that does most of the heavy lifting.\n${DOXYGEN_PATH} \"${SOURCE_ROOT}/../documentation/doxygen/doxygen touch.config\"\n\n# make a copy of the html docs\nDOCS_FOLDER=\"${SOURCE_ROOT}/../documentation/html/iOS\"\nmkdir -p \"${DOCS_FOLDER}\"\ncp -R \"${SOURCE_ROOT}/CorePlotTouchDocs.docset/html/\" \"${DOCS_FOLDER}\"\nrm -Rf \"${SOURCE_ROOT}/CorePlotTouchDocs.docset\"\nrm -f \"${DOCS_FOLDER}/Info.plist\"\nrm -f \"${DOCS_FOLDER}/Makefile\"\nrm -f \"${DOCS_FOLDER}/Nodes.xml\"\nrm -f \"${DOCS_FOLDER}/Tokens.xml\"\n\n# Fix capitalization for GitHub pages\ncd \"${DOCS_FOLDER}\"\nls _*.* | while read a; do n=$(echo $a | sed -e 's/^_//'); mv \"$a\" \"$n\"; done\nls *.html | xargs sed -i '' 's/\\\"_/\\\"/g'\nls *.js | xargs sed -i '' 's/\\\"_/\\\"/g'\nls *.map | xargs sed -i '' 's/\\\"$_/\\\"$/g'\n\nexit 0\n"; }; C38A09971A46193F00D45436 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; From 92c96c8dedb7251b9468ebf3abea3807e2760a44 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 9 Aug 2020 15:35:02 -0400 Subject: [PATCH 023/245] Marked various methods with the objc_requires_super attribute and fixed resulting compilation errors. --- framework/Source/CPTAxisLabelGroup.m | 5 ++++- framework/Source/CPTDefinitions.h | 10 +++++++++ framework/Source/CPTGridLineGroup.m | 2 ++ framework/Source/CPTGridLines.m | 2 ++ framework/Source/CPTLayer.h | 12 +++++------ framework/Source/CPTPlot.h | 32 ++++++++++++++-------------- framework/Source/CPTPlotGroup.h | 6 +++--- framework/Source/CPTPlotGroup.m | 5 ++++- framework/Source/CPTTextLayer.h | 5 +---- framework/Source/CPTTextLayer.m | 24 +++++++++++++-------- framework/Source/CPTXYGraph.h | 5 +---- framework/Source/CPTXYGraph.m | 10 +++++---- 12 files changed, 70 insertions(+), 48 deletions(-) diff --git a/framework/Source/CPTAxisLabelGroup.m b/framework/Source/CPTAxisLabelGroup.m index 1693c7a78..6fd976d72 100644 --- a/framework/Source/CPTAxisLabelGroup.m +++ b/framework/Source/CPTAxisLabelGroup.m @@ -15,9 +15,12 @@ -(void)display // nothing to draw } --(void)renderAsVectorInContext:(nonnull CGContextRef __unused)context +-(void)renderAsVectorInContext:(nonnull CGContextRef)context { // nothing to draw + if ( /* DISABLES CODE */ (NO)) { + [super renderAsVectorInContext:context]; + } } /// @endcond diff --git a/framework/Source/CPTDefinitions.h b/framework/Source/CPTDefinitions.h index 5c43d41eb..65ae281bf 100644 --- a/framework/Source/CPTDefinitions.h +++ b/framework/Source/CPTDefinitions.h @@ -42,6 +42,16 @@ #define cpt_deprecated __attribute__((deprecated)) +// Requires super method attribute + +/** + * @def cpt_requires_super + * @hideinitializer + * @brief Marks a method as requiring a call to the superclass. + **/ + +#define cpt_requires_super __attribute__((objc_requires_super)) + // Unused parameter attribute (DEBUG only) /** diff --git a/framework/Source/CPTGridLineGroup.m b/framework/Source/CPTGridLineGroup.m index 0cdc8cc49..4d19e3f3c 100644 --- a/framework/Source/CPTGridLineGroup.m +++ b/framework/Source/CPTGridLineGroup.m @@ -114,6 +114,8 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context return; } + [super renderAsVectorInContext:context]; + CPTPlotArea *thePlotArea = self.plotArea; for ( CPTAxis *axis in thePlotArea.axisSet.axes ) { diff --git a/framework/Source/CPTGridLines.m b/framework/Source/CPTGridLines.m index 83d74add8..0989ef8e0 100644 --- a/framework/Source/CPTGridLines.m +++ b/framework/Source/CPTGridLines.m @@ -109,6 +109,8 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context return; } + [super renderAsVectorInContext:context]; + CPTAxis *theAxis = self.axis; [theAxis drawGridLinesInContext:context isMajor:self.major]; diff --git a/framework/Source/CPTLayer.h b/framework/Source/CPTLayer.h index 4cca2d8b4..47ebe8e3d 100644 --- a/framework/Source/CPTLayer.h +++ b/framework/Source/CPTLayer.h @@ -124,15 +124,15 @@ typedef NSMutableSet CPTMutableSublayerSet; /// @name Initialization /// @{ --(nonnull instancetype)initWithFrame:(CGRect)newFrame NS_DESIGNATED_INITIALIZER; --(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder NS_DESIGNATED_INITIALIZER; --(nonnull instancetype)initWithLayer:(nonnull id)layer NS_DESIGNATED_INITIALIZER; +-(nonnull instancetype)initWithFrame:(CGRect)newFrame NS_DESIGNATED_INITIALIZER cpt_requires_super; +-(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder NS_DESIGNATED_INITIALIZER cpt_requires_super; +-(nonnull instancetype)initWithLayer:(nonnull id)layer NS_DESIGNATED_INITIALIZER cpt_requires_super; /// @} /// @name Drawing /// @{ -(void)setNeedsDisplayAllLayers; --(void)renderAsVectorInContext:(nonnull CGContextRef)context; +-(void)renderAsVectorInContext:(nonnull CGContextRef)context cpt_requires_super; -(void)recursivelyRenderInContext:(nonnull CGContextRef)context; -(void)layoutAndRenderInContext:(nonnull CGContextRef)context; -(nonnull NSData *)dataForPDFRepresentationOfLayer; @@ -140,8 +140,8 @@ typedef NSMutableSet CPTMutableSublayerSet; /// @name Masking /// @{ --(void)applySublayerMaskToContext:(nonnull CGContextRef)context forSublayer:(nonnull CPTLayer *)sublayer withOffset:(CGPoint)offset; --(void)applyMaskToContext:(nonnull CGContextRef)context; +-(void)applySublayerMaskToContext:(nonnull CGContextRef)context forSublayer:(nonnull CPTLayer *)sublayer withOffset:(CGPoint)offset cpt_requires_super; +-(void)applyMaskToContext:(nonnull CGContextRef)context cpt_requires_super; /// @} /// @name Layout diff --git a/framework/Source/CPTPlot.h b/framework/Source/CPTPlot.h index d9dd3d976..e24a2fa34 100644 --- a/framework/Source/CPTPlot.h +++ b/framework/Source/CPTPlot.h @@ -318,31 +318,31 @@ typedef NSMutableArray<__kindof CPTPlot *> CPTMutablePlotArray; /// @{ -(void)setNeedsRelabel; -(void)relabel; --(void)relabelIndexRange:(NSRange)indexRange; +-(void)relabelIndexRange:(NSRange)indexRange cpt_requires_super; -(void)repositionAllLabelAnnotations; -(void)reloadDataLabels; --(void)reloadDataLabelsInIndexRange:(NSRange)indexRange; +-(void)reloadDataLabelsInIndexRange:(NSRange)indexRange cpt_requires_super; /// @} /// @name Data Loading /// @{ -(void)setDataNeedsReloading; --(void)reloadData; --(void)reloadDataIfNeeded; --(void)reloadDataInIndexRange:(NSRange)indexRange; --(void)insertDataAtIndex:(NSUInteger)idx numberOfRecords:(NSUInteger)numberOfRecords; --(void)deleteDataInIndexRange:(NSRange)indexRange; --(void) reloadPlotData NS_SWIFT_NAME(CPTPlot.reloadPlotData()); +-(void)reloadData cpt_requires_super; +-(void)reloadDataIfNeeded cpt_requires_super; +-(void)reloadDataInIndexRange:(NSRange)indexRange cpt_requires_super; +-(void)insertDataAtIndex:(NSUInteger)idx numberOfRecords:(NSUInteger)numberOfRecords cpt_requires_super; +-(void)deleteDataInIndexRange:(NSRange)indexRange cpt_requires_super; +-(void) reloadPlotData NS_SWIFT_NAME(CPTPlot.reloadPlotData()) cpt_requires_super; --(void)reloadPlotDataInIndexRange:(NSRange) indexRange NS_SWIFT_NAME(CPTPlot.reloadPlotData(inIndexRange:)); +-(void)reloadPlotDataInIndexRange:(NSRange) indexRange NS_SWIFT_NAME(CPTPlot.reloadPlotData(inIndexRange:)) cpt_requires_super; /// @} /// @name Plot Data /// @{ +(nonnull id)nilData; --(nullable id)numbersFromDataSourceForField:(NSUInteger)fieldEnum recordIndexRange:(NSRange)indexRange; --(BOOL)loadNumbersForAllFieldsFromDataSourceInRecordIndexRange:(NSRange)indexRange; +-(nullable id)numbersFromDataSourceForField:(NSUInteger)fieldEnum recordIndexRange:(NSRange)indexRange cpt_requires_super; +-(BOOL)loadNumbersForAllFieldsFromDataSourceInRecordIndexRange:(NSRange)indexRange cpt_requires_super; /// @} /// @name Data Cache @@ -354,10 +354,10 @@ typedef NSMutableArray<__kindof CPTPlot *> CPTMutablePlotArray; -(nullable NSArray *)cachedArrayForKey:(nonnull NSString *)key; -(nullable id)cachedValueForKey:(nonnull NSString *)key recordIndex:(NSUInteger)idx; --(void)cacheNumbers:(nullable id)numbers forField:(NSUInteger)fieldEnum; --(void)cacheNumbers:(nullable id)numbers forField:(NSUInteger)fieldEnum atRecordIndex:(NSUInteger)idx; --(void)cacheArray:(nullable NSArray *)array forKey:(nonnull NSString *)key; --(void)cacheArray:(nullable NSArray *)array forKey:(nonnull NSString *)key atRecordIndex:(NSUInteger)idx; +-(void)cacheNumbers:(nullable id)numbers forField:(NSUInteger)fieldEnum cpt_requires_super; +-(void)cacheNumbers:(nullable id)numbers forField:(NSUInteger)fieldEnum atRecordIndex:(NSUInteger)idx cpt_requires_super; +-(void)cacheArray:(nullable NSArray *)array forKey:(nonnull NSString *)key cpt_requires_super; +-(void)cacheArray:(nullable NSArray *)array forKey:(nonnull NSString *)key atRecordIndex:(NSUInteger)idx cpt_requires_super; /// @} /// @name Plot Data Ranges @@ -373,7 +373,7 @@ typedef NSMutableArray<__kindof CPTPlot *> CPTMutablePlotArray; -(NSUInteger)numberOfLegendEntries; -(nullable NSString *)titleForLegendEntryAtIndex:(NSUInteger)idx; -(nullable NSAttributedString *)attributedTitleForLegendEntryAtIndex:(NSUInteger)idx; --(void)drawSwatchForLegend:(nonnull CPTLegend *)legend atIndex:(NSUInteger)idx inRect:(CGRect)rect inContext:(nonnull CGContextRef)context; +-(void)drawSwatchForLegend:(nonnull CPTLegend *)legend atIndex:(NSUInteger)idx inRect:(CGRect)rect inContext:(nonnull CGContextRef)context cpt_requires_super; /// @} @end diff --git a/framework/Source/CPTPlotGroup.h b/framework/Source/CPTPlotGroup.h index 77d451dec..3332f3ce1 100644 --- a/framework/Source/CPTPlotGroup.h +++ b/framework/Source/CPTPlotGroup.h @@ -6,9 +6,9 @@ /// @name Adding and Removing Plots /// @{ --(void)addPlot:(nonnull CPTPlot *)plot; --(void)removePlot:(nullable CPTPlot *)plot; --(void)insertPlot:(nonnull CPTPlot *)plot atIndex:(NSUInteger)idx; +-(void)addPlot:(nonnull CPTPlot *)plot cpt_requires_super; +-(void)removePlot:(nullable CPTPlot *)plot cpt_requires_super; +-(void)insertPlot:(nonnull CPTPlot *)plot atIndex:(NSUInteger)idx cpt_requires_super; /// @} @end diff --git a/framework/Source/CPTPlotGroup.m b/framework/Source/CPTPlotGroup.m index 4a224e691..7dad71c7d 100644 --- a/framework/Source/CPTPlotGroup.m +++ b/framework/Source/CPTPlotGroup.m @@ -83,9 +83,12 @@ -(void)display // nothing to draw } --(void)renderAsVectorInContext:(nonnull CGContextRef __unused)context +-(void)renderAsVectorInContext:(nonnull CGContextRef)context { // nothing to draw + if ( /* DISABLES CODE */ (NO)) { + [super renderAsVectorInContext:context]; + } } /// @endcond diff --git a/framework/Source/CPTTextLayer.h b/framework/Source/CPTTextLayer.h index 9f3c6773b..9d9c85956 100644 --- a/framework/Source/CPTTextLayer.h +++ b/framework/Source/CPTTextLayer.h @@ -15,11 +15,8 @@ extern const CGFloat kCPTTextLayerMarginWidth; ///< Margin width around the text /// @name Initialization /// @{ -(nonnull instancetype)initWithText:(nullable NSString *)newText; --(nonnull instancetype)initWithText:(nullable NSString *)newText style:(nullable CPTTextStyle *)newStyle NS_DESIGNATED_INITIALIZER; +-(nonnull instancetype)initWithText:(nullable NSString *)newText style:(nullable CPTTextStyle *)newStyle; -(nonnull instancetype)initWithAttributedText:(nullable NSAttributedString *)newText; - --(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder NS_DESIGNATED_INITIALIZER; --(nonnull instancetype)initWithLayer:(nonnull id)layer NS_DESIGNATED_INITIALIZER; /// @} /// @name Layout diff --git a/framework/Source/CPTTextLayer.m b/framework/Source/CPTTextLayer.m index 9de96deb5..476e4f699 100644 --- a/framework/Source/CPTTextLayer.m +++ b/framework/Source/CPTTextLayer.m @@ -64,21 +64,17 @@ @implementation CPTTextLayer #pragma mark - #pragma mark Init/Dealloc -/** @brief Initializes a newly allocated CPTTextLayer object with the provided text and style. This is the designated initializer. +/** @brief Initializes a newly allocated CPTTextLayer object with the provided text and style. * @param newText The text to display. * @param newStyle The text style used to draw the text. * @return The initialized CPTTextLayer object. **/ -(nonnull instancetype)initWithText:(nullable NSString *)newText style:(nullable CPTTextStyle *)newStyle { - if ((self = [super initWithFrame:CGRectZero])) { - textStyle = newStyle; - text = [newText copy]; - attributedText = nil; - maximumSize = CGSizeZero; - inTextUpdate = NO; + if ((self = [self initWithFrame:CGRectZero])) { + textStyle = newStyle; + text = [newText copy]; - self.needsDisplayOnBoundsChange = NO; [self sizeToFit]; } @@ -143,7 +139,17 @@ -(nonnull instancetype)initWithLayer:(nonnull id)layer **/ -(nonnull instancetype)initWithFrame:(CGRect __unused)newFrame { - return [self initWithText:nil style:nil]; + if ((self = [super initWithFrame:CGRectZero])) { + text = nil; + textStyle = nil; + attributedText = nil; + maximumSize = CGSizeZero; + inTextUpdate = NO; + + self.needsDisplayOnBoundsChange = NO; + } + + return self; } /// @} diff --git a/framework/Source/CPTXYGraph.h b/framework/Source/CPTXYGraph.h index a761dbd88..90bca7639 100644 --- a/framework/Source/CPTXYGraph.h +++ b/framework/Source/CPTXYGraph.h @@ -5,10 +5,7 @@ /// @name Initialization /// @{ --(nonnull instancetype)initWithFrame:(CGRect)newFrame xScaleType:(CPTScaleType)newXScaleType yScaleType:(CPTScaleType)newYScaleType NS_DESIGNATED_INITIALIZER; - --(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder NS_DESIGNATED_INITIALIZER; --(nonnull instancetype)initWithLayer:(nonnull id)layer NS_DESIGNATED_INITIALIZER; +-(nonnull instancetype)initWithFrame:(CGRect)newFrame xScaleType:(CPTScaleType)newXScaleType yScaleType:(CPTScaleType)newYScaleType; /// @} @end diff --git a/framework/Source/CPTXYGraph.m b/framework/Source/CPTXYGraph.m index 480c28bb6..f0fc66c9f 100644 --- a/framework/Source/CPTXYGraph.m +++ b/framework/Source/CPTXYGraph.m @@ -37,8 +37,6 @@ @implementation CPTXYGraph #pragma mark Init/Dealloc /** @brief Initializes a newly allocated CPTXYGraph object with the provided frame rectangle and scale types. - * - * This is the designated initializer. * * @param newFrame The frame rectangle. * @param newXScaleType The scale type for the x-axis. @@ -47,7 +45,7 @@ @implementation CPTXYGraph **/ -(nonnull instancetype)initWithFrame:(CGRect)newFrame xScaleType:(CPTScaleType)newXScaleType yScaleType:(CPTScaleType)newYScaleType { - if ((self = [super initWithFrame:newFrame])) { + if ((self = [self initWithFrame:newFrame])) { xScaleType = newXScaleType; yScaleType = newYScaleType; } @@ -69,7 +67,11 @@ -(nonnull instancetype)initWithFrame:(CGRect)newFrame xScaleType:(CPTScaleType)n **/ -(nonnull instancetype)initWithFrame:(CGRect)newFrame { - return [self initWithFrame:newFrame xScaleType:CPTScaleTypeLinear yScaleType:CPTScaleTypeLinear]; + if ((self = [super initWithFrame:newFrame])) { + xScaleType = CPTScaleTypeLinear; + yScaleType = CPTScaleTypeLinear; + } + return self; } /// @} From b6c0a9b9957ba766a1f493c3bd2afbc3b6c398b1 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Tue, 11 Aug 2020 20:44:34 -0400 Subject: [PATCH 024/245] Removed the VALID_ARCHS build setting that is deprecated by Xcode 12. --- framework/xcconfig/CorePlot.xcconfig | 5 ----- 1 file changed, 5 deletions(-) diff --git a/framework/xcconfig/CorePlot.xcconfig b/framework/xcconfig/CorePlot.xcconfig index ab0edafa6..bd7cc871f 100644 --- a/framework/xcconfig/CorePlot.xcconfig +++ b/framework/xcconfig/CorePlot.xcconfig @@ -1,11 +1,6 @@ #include "CorePlotWarnings.xcconfig" ARCHS = $(ARCHS_STANDARD) -VALID_ARCHS[sdk=iphoneos*] = arm64 arm64e armv7 armv7s -VALID_ARCHS[sdk=iphonesimulator*] = i386 x86_64 -VALID_ARCHS[sdk=macosx*] = i386 x86_64 -VALID_ARCHS[sdk=appletvos*] = arm64 -VALID_ARCHS[sdk=appletvsimulator*] = i386 x86_64 IPHONEOS_DEPLOYMENT_TARGET = 9.0 MACOSX_DEPLOYMENT_TARGET = 10.9 From 7e479af8d1e4cbc52f6812778c1d66e918655588 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 30 Aug 2020 16:24:10 -0400 Subject: [PATCH 025/245] Updated the build architecture settings to always use the platform defaults. Xcode 12 deprecated support for the explicit architecture (VALID_ARCHS) build setting. --- examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj | 2 -- 1 file changed, 2 deletions(-) diff --git a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj index b39984a31..25846c5d9 100644 --- a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj +++ b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj @@ -1062,7 +1062,6 @@ PRODUCT_NAME = "Plot Gallery"; RUN_CLANG_STATIC_ANALYZER = YES; SDKROOT = macosx; - VALID_ARCHS = "i386 x86_64"; }; name = Debug; }; @@ -1088,7 +1087,6 @@ PRODUCT_NAME = "Plot Gallery"; RUN_CLANG_STATIC_ANALYZER = YES; SDKROOT = macosx; - VALID_ARCHS = "i386 x86_64"; }; name = Release; }; From 9439b0cb164b4dd90e2aef47a3352b46b79475da Mon Sep 17 00:00:00 2001 From: 3a4oT Date: Fri, 11 Dec 2020 17:16:12 +0200 Subject: [PATCH 026/245] spm generator script --- .gitignore | 4 ++ Package.swift | 32 +++++++++ scripts/generate_spm_sources_layout.sh | 93 ++++++++++++++++++++++++++ 3 files changed, 129 insertions(+) create mode 100644 Package.swift create mode 100755 scripts/generate_spm_sources_layout.sh diff --git a/.gitignore b/.gitignore index 000599f11..151bf7def 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,7 @@ build/* # Doxygen tagfile output **/core-plot-tags.xml **/core-plot-touch-tags.xml + +# SwiftPM +.build +.swiftpm diff --git a/Package.swift b/Package.swift new file mode 100644 index 000000000..9d6758ff3 --- /dev/null +++ b/Package.swift @@ -0,0 +1,32 @@ +// swift-tools-version:5.3 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "core-plot", + platforms: [ + .macOS(.v10_15), + .iOS(.v10), + .tvOS(.v10) + ], + products: [ + // Products define the executables and libraries a package produces, and make them visible to other packages. + .library( + name: "core-plot", + targets: ["core-plot"]), + ], + dependencies: [ + // Dependencies declare other packages that this package depends on. + // .package(url: /* package url */, from: "1.0.0"), + ], + targets: [ + // Targets are the basic building blocks of a package. A target can define a module or a test suite. + // Targets can depend on other targets in this package, and on products in packages this package depends on. + .target( + name: "core-plot", + dependencies: [], + path: "spm/Sources", + publicHeadersPath: "include"), + ] +) diff --git a/scripts/generate_spm_sources_layout.sh b/scripts/generate_spm_sources_layout.sh new file mode 100755 index 000000000..7d489f8e3 --- /dev/null +++ b/scripts/generate_spm_sources_layout.sh @@ -0,0 +1,93 @@ +#!/bin/sh + +set -e + +SPM_PUBLIC_HEADERS_PATH="spm/Sources/core-plot/include" +SPM_SOURCES_PATH="spm/Sources/core-plot" + +# Delete all symbolik links from `spm` folder +function cleanup() { + rm -rf $SPM_PUBLIC_HEADERS_PATH/*.[hm] + rm -rf $SPM_SOURCES_PATH/*.[hm] +} + +function generate_spm_public_headers() { + echo "Generate symbolic links for all public heders. *.h" + echo "Generated under ./spm/Sources/core-plot/include" + + public_headers_list=$(find "framework" -name "*.[h]" \ + \! -name "*Test*.[hm]" \ + \! -name "_*.[hm]" \ + \! -name "CorePlot-CocoaTouch.h" \ + -type f -not -path "*/MacOnly/*" \ + -not -path "framework/CorePlot.h" | sed "s| \([^/]\)|:\1|g") + + SRC_ROOT=$(pwd) + cd $SPM_PUBLIC_HEADERS_PATH + for public_file in $public_headers_list; do + file_to_link=$(echo $public_file | sed "s|:| |g") + ln -s ../../../../$file_to_link + + done + + cd $SRC_ROOT + echo " Done" + echo "" +} + +function generate_spm_private_sources() { + echo "Generate symbolic links for all private heders/implementations. _*.h && _*.m" + echo "Generated under ./spm/Sources/core-plot" + + private_sources_list=$(find "framework" \ + -name "_*.[mh]" \ + -type f | sed "s| \([^/]\)|:\1|g") + + SRC_ROOT=$(pwd) + cd $SPM_SOURCES_PATH + for private_file in $private_sources_list; do + file_to_link=$(echo $private_file | sed "s|:| |g") + + ln -s ../../../$file_to_link + + done + + cd $SRC_ROOT + + echo " Done" + echo "" +} + +function generate_spm_public_sources() { + echo "Generate symbolic links for all public implementtions. *.m" + echo "Generated under ./spm/Sources/core-plot" + + public_sources_list=$(find "framework" -name "*.[m]" \ + \! -name "*Test*.[hm]" \ + \! -name "_*.[hm]" \ + -type f -not -path "*/MacOnly/*" | sed "s| \([^/]\)|:\1|g") + + SRC_ROOT=$(pwd) + cd $SPM_SOURCES_PATH + + for public_file in $public_sources_list; do + file_to_link=$(echo $public_file | sed "s|:| |g") + ln -s ../../../$file_to_link + + done + + cd $SRC_ROOT + + echo " Done" + echo "" +} + +########## SPM generator pipeline ############# +#1 +cleanup +#2 +generate_spm_public_headers +#3 +generate_spm_private_sources +#4 +generate_spm_public_sources \ No newline at end of file From 95a43f45cc4eb41ccd1a9e1619f2ffc6bfca4e40 Mon Sep 17 00:00:00 2001 From: 3a4oT Date: Fri, 11 Dec 2020 19:54:49 +0200 Subject: [PATCH 027/245] tweaked imports so we can build for iOS and macCatalyst --- Package.swift | 3 +-- framework/CocoaPods/CorePlot.h | 2 +- framework/Source/CPTAnimation.h | 2 +- framework/Source/CPTBarPlot.m | 2 +- framework/Source/CPTCalendarFormatter.h | 2 ++ framework/Source/CPTColor.h | 6 ++--- framework/Source/CPTColor.m | 26 +++++++++---------- framework/Source/CPTColorSpace.h | 3 +++ framework/Source/CPTColorSpace.m | 4 +-- framework/Source/CPTConstraints.h | 3 +++ framework/Source/CPTDefinitions.h | 6 +++++ framework/Source/CPTFill.h | 3 +++ framework/Source/CPTFillTests.m | 2 +- framework/Source/CPTGradient.m | 4 +-- framework/Source/CPTGraph.m | 2 +- framework/Source/CPTImage.m | 4 +-- framework/Source/CPTImageTests.m | 2 +- framework/Source/CPTLayer.h | 2 +- framework/Source/CPTLayer.m | 2 +- framework/Source/CPTLegendEntry.m | 4 +-- framework/Source/CPTLimitBand.h | 2 ++ framework/Source/CPTLineCap.h | 3 +++ framework/Source/CPTNumericDataType.h | 2 ++ framework/Source/CPTPathExtensions.h | 1 + framework/Source/CPTPieChart.m | 2 +- framework/Source/CPTPlot.m | 4 +-- framework/Source/CPTPlotSpace.h | 2 +- framework/Source/CPTPlotSpace.m | 2 +- framework/Source/CPTPlotSymbol.h | 3 +++ framework/Source/CPTRangePlot.m | 2 +- framework/Source/CPTResponder.h | 2 +- framework/Source/CPTScatterPlot.m | 2 +- framework/Source/CPTShadow.h | 3 +++ framework/Source/CPTTextLayer.m | 6 ++--- framework/Source/CPTTextStyle.m | 4 +-- framework/Source/CPTTimeFormatter.h | 2 ++ framework/Source/CPTTradingRangePlot.m | 2 +- framework/Source/CPTUtilitiesTests.m | 2 +- framework/Source/CPTXYPlotSpace.m | 4 +-- framework/Source/NSCoderExtensions.h | 3 +++ framework/Source/NSCoderExtensions.m | 8 +++--- framework/Source/NSDecimalNumberExtensions.h | 2 ++ framework/Source/NSNumberExtensions.h | 3 +++ .../Source/_CPTAnimationTimingFunctions.h | 2 ++ framework/iPhoneOnly/CPTGraphHostingView.m | 6 ++--- .../iPhoneOnly/CPTPlatformSpecificDefines.h | 2 ++ .../iPhoneOnly/CPTTextStylePlatformSpecific.h | 2 ++ 47 files changed, 104 insertions(+), 58 deletions(-) diff --git a/Package.swift b/Package.swift index 9d6758ff3..e252db70c 100644 --- a/Package.swift +++ b/Package.swift @@ -26,7 +26,6 @@ let package = Package( .target( name: "core-plot", dependencies: [], - path: "spm/Sources", - publicHeadersPath: "include"), + path: "spm/Sources/core-plot"), ] ) diff --git a/framework/CocoaPods/CorePlot.h b/framework/CocoaPods/CorePlot.h index 7cd52b097..ad03528a3 100644 --- a/framework/CocoaPods/CorePlot.h +++ b/framework/CocoaPods/CorePlot.h @@ -1,6 +1,6 @@ #import -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST #import #import #else diff --git a/framework/Source/CPTAnimation.h b/framework/Source/CPTAnimation.h index 93f0e48ba..77a3ac2a0 100644 --- a/framework/Source/CPTAnimation.h +++ b/framework/Source/CPTAnimation.h @@ -46,7 +46,7 @@ typedef NS_ENUM (NSInteger, CPTAnimationCurve) { /** * @brief Animation delegate. **/ -#if ((TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_TV) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= 100000)) \ +#if ((TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_TV || TARGET_OS_MACCATALYST) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= 100000)) \ || (TARGET_OS_MAC && (MAC_OS_X_VERSION_MAX_ALLOWED >= 101200)) // CAAnimationDelegate is defined by Core Animation in iOS 10.0+, macOS 10.12+, and tvOS 10.0+ @protocol CPTAnimationDelegate diff --git a/framework/Source/CPTBarPlot.m b/framework/Source/CPTBarPlot.m index f26f32392..d50a0de6d 100644 --- a/framework/Source/CPTBarPlot.m +++ b/framework/Source/CPTBarPlot.m @@ -200,7 +200,7 @@ +(nonnull instancetype)tubularBarPlotWithColor:(nonnull CPTColor *)color horizon /// @cond -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST #else +(void)initialize { diff --git a/framework/Source/CPTCalendarFormatter.h b/framework/Source/CPTCalendarFormatter.h index 89dc656ea..85df1cc6e 100644 --- a/framework/Source/CPTCalendarFormatter.h +++ b/framework/Source/CPTCalendarFormatter.h @@ -1,3 +1,5 @@ +#import + @interface CPTCalendarFormatter : NSNumberFormatter @property (nonatomic, readwrite, strong, nullable) NSDateFormatter *dateFormatter; diff --git a/framework/Source/CPTColor.h b/framework/Source/CPTColor.h index 8ae9a7611..c0601ebdb 100644 --- a/framework/Source/CPTColor.h +++ b/framework/Source/CPTColor.h @@ -7,7 +7,7 @@ #if TARGET_OS_OSX @property (nonatomic, readonly, nonnull) NSColor *nsColor; -#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST @property (nonatomic, readonly, nonnull) UIColor *uiColor; #endif @property (nonatomic, readonly, nonnull) CPTNativeColor *nativeColor; @@ -39,7 +39,7 @@ #if TARGET_OS_OSX +(nonnull instancetype)colorWithNSColor:(nonnull NSColor *)newNSColor; -#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST +(nonnull instancetype)colorWithUIColor:(nonnull UIColor *)newUIColor; #endif +(nonnull instancetype)colorWithNativeColor:(nonnull CPTNativeColor *)newColor; @@ -54,7 +54,7 @@ #if TARGET_OS_OSX -(nonnull instancetype)initWithNSColor:(nonnull NSColor *)newNSColor NS_DESIGNATED_INITIALIZER; -#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST -(nonnull instancetype)initWithUIColor:(nonnull UIColor *)newUIColor NS_DESIGNATED_INITIALIZER; #endif -(nonnull instancetype)initWithNativeColor:(nonnull CPTNativeColor *)newColor; diff --git a/framework/Source/CPTColor.m b/framework/Source/CPTColor.m index f173b86bd..596a2db98 100644 --- a/framework/Source/CPTColor.m +++ b/framework/Source/CPTColor.m @@ -11,7 +11,7 @@ @interface CPTColor() #if TARGET_OS_OSX @property (nonatomic, readonly, nullable) NSColor *nsColorCache; -#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST @property (nonatomic, readonly, nullable) UIColor *uiColorCache; #endif @@ -55,7 +55,7 @@ -(NSColor *)nsColor } } -#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST /** @internal * @property nullable UIColor *uiColorCache @@ -91,7 +91,7 @@ -(CPTNativeColor *)nativeColor { #if TARGET_OS_OSX return self.nsColor; -#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST return self.uiColor; #endif } @@ -108,7 +108,7 @@ -(CGColorRef)cgColor if ( theNSColor ) { return theNSColor.CGColor; } -#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST UIColor *theUIColor = self.uiColorCache; if ( theUIColor ) { return theUIColor.CGColor; @@ -433,7 +433,7 @@ +(nonnull instancetype)colorWithNSColor:(nonnull NSColor *)newNSColor return [[self alloc] initWithNSColor:newNSColor]; } -#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST /** @brief Creates and returns a new CPTColor instance initialized with the provided UIColor. * @@ -460,7 +460,7 @@ +(nonnull instancetype)colorWithNativeColor:(nonnull CPTNativeColor *)newColor { #if TARGET_OS_OSX return [[self alloc] initWithNSColor:newColor]; -#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST return [[self alloc] initWithUIColor:newColor]; #endif } @@ -522,7 +522,7 @@ -(nonnull instancetype)initWithNSColor:(nonnull NSColor *)newNSColor return self; } -#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST /** @brief Initializes a newly allocated CPTColor object with the provided UIColor. * @@ -552,7 +552,7 @@ -(nonnull instancetype)initWithNativeColor:(nonnull CPTNativeColor *)newColor { #if TARGET_OS_OSX return [self initWithNSColor:newColor]; -#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST return [self initWithUIColor:newColor]; #endif } @@ -587,7 +587,7 @@ -(nonnull instancetype)colorWithAlphaComponent:(CGFloat)alpha NSColor *newNSColor = [theNSColor colorWithAlphaComponent:alpha]; return [[self class] colorWithNSColor:newNSColor]; } -#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST UIColor *theUIColor = self.uiColorCache; if ( theUIColor ) { UIColor *newUIColor = [theUIColor colorWithAlphaComponent:alpha]; @@ -622,7 +622,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder { #if TARGET_OS_OSX [coder encodeConditionalObject:self.nsColorCache forKey:@"CPTColor.nsColorCache"]; -#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST [coder encodeConditionalObject:self.uiColorCache forKey:@"CPTColor.uiColorCache"]; #endif @@ -656,7 +656,7 @@ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder if ( decodedNSColor ) { nsColorCache = decodedNSColor; } -#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST UIColor *decodedUIColor = [coder decodeObjectOfClass:[UIColor class] forKey:@"CPTColor.uiColorCache"]; if ( decodedUIColor ) { @@ -708,7 +708,7 @@ -(nonnull id)copyWithZone:(nullable NSZone *)zone CPTColor *colorCopy = [[[self class] allocWithZone:zone] initWithNSColor:nsColorCopy]; return colorCopy; } -#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST UIColor *uiColorCopy = [self.uiColorCache copyWithZone:zone]; if ( uiColorCopy ) { CPTColor *colorCopy = [[[self class] allocWithZone:zone] initWithUIColor:uiColorCopy]; @@ -787,7 +787,7 @@ -(NSUInteger)hash -(nullable id)debugQuickLookObject { -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST return self.uiColor; #else return self.nsColor; diff --git a/framework/Source/CPTColorSpace.h b/framework/Source/CPTColorSpace.h index bb38bb379..a4998cd5d 100644 --- a/framework/Source/CPTColorSpace.h +++ b/framework/Source/CPTColorSpace.h @@ -1,3 +1,6 @@ +#import +#import + @interface CPTColorSpace : NSObject @property (nonatomic, readonly, nonnull) CGColorSpaceRef cgColorSpace; diff --git a/framework/Source/CPTColorSpace.m b/framework/Source/CPTColorSpace.m index 6086f09ef..68e765d01 100644 --- a/framework/Source/CPTColorSpace.m +++ b/framework/Source/CPTColorSpace.m @@ -32,7 +32,7 @@ +(nonnull instancetype)genericRGBSpace dispatch_once(&onceToken, ^{ CGColorSpaceRef cgSpace = NULL; -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST cgSpace = CGColorSpaceCreateDeviceRGB(); #else cgSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); @@ -68,7 +68,7 @@ -(nonnull instancetype)init { CGColorSpaceRef cgSpace = NULL; -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST cgSpace = CGColorSpaceCreateDeviceRGB(); #else cgSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); diff --git a/framework/Source/CPTConstraints.h b/framework/Source/CPTConstraints.h index d6bf75bd3..c5ccc9a05 100644 --- a/framework/Source/CPTConstraints.h +++ b/framework/Source/CPTConstraints.h @@ -1,3 +1,6 @@ +#import +#import + @interface CPTConstraints : NSObject /// @name Factory Methods diff --git a/framework/Source/CPTDefinitions.h b/framework/Source/CPTDefinitions.h index 65ae281bf..8b35198ef 100644 --- a/framework/Source/CPTDefinitions.h +++ b/framework/Source/CPTDefinitions.h @@ -1,6 +1,12 @@ #import #import +#if __has_include() +#import +#else +#import +#endif + /// @file /** diff --git a/framework/Source/CPTFill.h b/framework/Source/CPTFill.h index a011c8feb..525ff0475 100644 --- a/framework/Source/CPTFill.h +++ b/framework/Source/CPTFill.h @@ -1,3 +1,6 @@ +#import +#import + /// @file @class CPTGradient; diff --git a/framework/Source/CPTFillTests.m b/framework/Source/CPTFillTests.m index 8029b0a73..242569550 100644 --- a/framework/Source/CPTFillTests.m +++ b/framework/Source/CPTFillTests.m @@ -62,7 +62,7 @@ -(void)testKeyedArchivingRoundTripImage size_t bytesPerRow = (4 * width + 15) & ~15ul; -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); #else CGColorSpaceRef colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); diff --git a/framework/Source/CPTGradient.m b/framework/Source/CPTGradient.m index c6ee1c6d1..3e2856e68 100644 --- a/framework/Source/CPTGradient.m +++ b/framework/Source/CPTGradient.m @@ -790,7 +790,7 @@ -(CGColorRef)newColorStopAtIndex:(NSUInteger)idx CPTGradientElement *element = [self elementAtIndex:idx]; if ( element != NULL ) { -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST CGFloat colorComponents[4] = { element->color.red, element->color.green, element->color.blue, element->color.alpha }; return CGColorCreate(self.colorspace.cgColorSpace, colorComponents); #else @@ -826,7 +826,7 @@ -(CGColorRef)newColorAtPosition:(CGFloat)position break; } -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST CGFloat colorComponents[4] = { components[0], components[1], components[2], components[3] }; gradientColor = CGColorCreate(self.colorspace.cgColorSpace, colorComponents); #else diff --git a/framework/Source/CPTGraph.m b/framework/Source/CPTGraph.m index bce00e34e..19110c455 100644 --- a/framework/Source/CPTGraph.m +++ b/framework/Source/CPTGraph.m @@ -1306,7 +1306,7 @@ -(BOOL)pointingDeviceCancelledEvent:(nonnull CPTNativeEvent *)event } } -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST #else /** diff --git a/framework/Source/CPTImage.m b/framework/Source/CPTImage.m index 2d1b97b3a..ecfbcfd37 100644 --- a/framework/Source/CPTImage.m +++ b/framework/Source/CPTImage.m @@ -524,7 +524,7 @@ -(nullable CPTNativeImage *)nativeImage if ( !nativeImage ) { CGImageRef imageRef = self.image; -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST CGFloat theScale = self.scale; if ( imageRef && (theScale > CPTFloat(0.0))) { @@ -746,7 +746,7 @@ -(void)drawInRect:(CGRect)rect inContext:(nonnull CGContextRef)context CPTNativeImage *theNativeImage = self.nativeImage; if ( theNativeImage ) { -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST theImage = theNativeImage.CGImage; self.scale = theNativeImage.scale; #else diff --git a/framework/Source/CPTImageTests.m b/framework/Source/CPTImageTests.m index b106c54f2..036a37cf8 100644 --- a/framework/Source/CPTImageTests.m +++ b/framework/Source/CPTImageTests.m @@ -14,7 +14,7 @@ -(void)testKeyedArchivingRoundTrip size_t bytesPerRow = (4 * width + 15) & ~15ul; -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); #else CGColorSpaceRef colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); diff --git a/framework/Source/CPTLayer.h b/framework/Source/CPTLayer.h index 47ebe8e3d..37c525c4b 100644 --- a/framework/Source/CPTLayer.h +++ b/framework/Source/CPTLayer.h @@ -68,7 +68,7 @@ typedef NSMutableSet CPTMutableSublayerSet; /** * @brief Layer delegate. **/ -#if ((TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_TV) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= 100000)) \ +#if ((TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_TV || TARGET_OS_MACCATALYST) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= 100000)) \ || (TARGET_OS_MAC && (MAC_OS_X_VERSION_MAX_ALLOWED >= 101200)) // CALayerDelegate is defined by Core Animation in iOS 10.0+, macOS 10.12+, and tvOS 10.0+ @protocol CPTLayerDelegate diff --git a/framework/Source/CPTLayer.m b/framework/Source/CPTLayer.m index ef317bd8a..3dad0e600 100644 --- a/framework/Source/CPTLayer.m +++ b/framework/Source/CPTLayer.m @@ -550,7 +550,7 @@ -(BOOL)pointingDeviceCancelledEvent:(nonnull CPTNativeEvent *__unused)event return NO; } -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST #else -(BOOL)scrollWheelEvent:(nonnull CPTNativeEvent *__unused)event fromPoint:(CGPoint __unused)fromPoint toPoint:(CGPoint __unused)toPoint { diff --git a/framework/Source/CPTLegendEntry.m b/framework/Source/CPTLegendEntry.m index 02f5bc365..38b054a5d 100644 --- a/framework/Source/CPTLegendEntry.m +++ b/framework/Source/CPTLegendEntry.m @@ -150,7 +150,7 @@ +(BOOL)supportsSecureCoding **/ -(void)drawTitleInRect:(CGRect)rect inContext:(nonnull CGContextRef)context scale:(CGFloat)scale { -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST CGContextSaveGState(context); CGContextTranslateCTM(context, CPTFloat(0.0), rect.origin.y); CGContextScaleCTM(context, CPTFloat(1.0), CPTFloat(-1.0)); @@ -189,7 +189,7 @@ -(void)drawTitleInRect:(CGRect)rect inContext:(nonnull CGContextRef)context scal inContext:context]; } -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST CGContextRestoreGState(context); #endif } diff --git a/framework/Source/CPTLimitBand.h b/framework/Source/CPTLimitBand.h index e4c7700a3..e7cf493b6 100644 --- a/framework/Source/CPTLimitBand.h +++ b/framework/Source/CPTLimitBand.h @@ -1,3 +1,5 @@ +#import + /// @file @class CPTFill; diff --git a/framework/Source/CPTLineCap.h b/framework/Source/CPTLineCap.h index e6c0605ac..fa8a8059f 100644 --- a/framework/Source/CPTLineCap.h +++ b/framework/Source/CPTLineCap.h @@ -1,3 +1,6 @@ +#import +#import + /// @file @class CPTLineStyle; diff --git a/framework/Source/CPTNumericDataType.h b/framework/Source/CPTNumericDataType.h index e982851b3..a8577fb34 100644 --- a/framework/Source/CPTNumericDataType.h +++ b/framework/Source/CPTNumericDataType.h @@ -1,3 +1,5 @@ +#import + /// @file /** diff --git a/framework/Source/CPTPathExtensions.h b/framework/Source/CPTPathExtensions.h index c47bfcf5a..0c02527d9 100644 --- a/framework/Source/CPTPathExtensions.h +++ b/framework/Source/CPTPathExtensions.h @@ -1,3 +1,4 @@ +#import /// @file #if __cplusplus diff --git a/framework/Source/CPTPieChart.m b/framework/Source/CPTPieChart.m index 3182e20a4..6d7592637 100644 --- a/framework/Source/CPTPieChart.m +++ b/framework/Source/CPTPieChart.m @@ -179,7 +179,7 @@ +(nonnull CPTColor *)defaultPieSliceColorForIndex:(NSUInteger)pieSliceIndex /// @cond -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST #else +(void)initialize { diff --git a/framework/Source/CPTPlot.m b/framework/Source/CPTPlot.m index f15d59c1a..404bda994 100644 --- a/framework/Source/CPTPlot.m +++ b/framework/Source/CPTPlot.m @@ -247,7 +247,7 @@ @implementation CPTPlot /// @cond -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST #else +(void)initialize { @@ -469,7 +469,7 @@ +(BOOL)supportsSecureCoding #pragma mark - #pragma mark Bindings -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST #else /// @cond diff --git a/framework/Source/CPTPlotSpace.h b/framework/Source/CPTPlotSpace.h index 902817b73..be8f4e9c3 100644 --- a/framework/Source/CPTPlotSpace.h +++ b/framework/Source/CPTPlotSpace.h @@ -145,7 +145,7 @@ extern CPTPlotSpaceInfoKey __nonnull const CPTPlotSpaceDisplacementKey; **/ -(BOOL)plotSpace:(nonnull CPTPlotSpace *)space shouldHandlePointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)point; -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST #else /** @brief @optional Notifies that plot space intercepted a scroll wheel event. diff --git a/framework/Source/CPTPlotSpace.m b/framework/Source/CPTPlotSpace.m index fde216738..c08c67b96 100644 --- a/framework/Source/CPTPlotSpace.m +++ b/framework/Source/CPTPlotSpace.m @@ -453,7 +453,7 @@ -(BOOL)pointingDeviceCancelledEvent:(nonnull CPTNativeEvent *)event return handledByDelegate; } -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST #else /** diff --git a/framework/Source/CPTPlotSymbol.h b/framework/Source/CPTPlotSymbol.h index 36ca6d399..46b0d17ed 100644 --- a/framework/Source/CPTPlotSymbol.h +++ b/framework/Source/CPTPlotSymbol.h @@ -1,3 +1,6 @@ +#import +#import + /// @file @class CPTLineStyle; diff --git a/framework/Source/CPTRangePlot.m b/framework/Source/CPTRangePlot.m index b06d57969..10c2326a6 100644 --- a/framework/Source/CPTRangePlot.m +++ b/framework/Source/CPTRangePlot.m @@ -149,7 +149,7 @@ @implementation CPTRangePlot /// @cond -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST #else +(void)initialize { diff --git a/framework/Source/CPTResponder.h b/framework/Source/CPTResponder.h index 6b56832ff..39f171bd5 100644 --- a/framework/Source/CPTResponder.h +++ b/framework/Source/CPTResponder.h @@ -48,7 +48,7 @@ **/ -(BOOL)pointingDeviceCancelledEvent:(nonnull CPTNativeEvent *)event; -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST #else /** diff --git a/framework/Source/CPTScatterPlot.m b/framework/Source/CPTScatterPlot.m index fd69294b9..fa411dd7a 100644 --- a/framework/Source/CPTScatterPlot.m +++ b/framework/Source/CPTScatterPlot.m @@ -196,7 +196,7 @@ @implementation CPTScatterPlot /// @cond -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST #else +(void)initialize { diff --git a/framework/Source/CPTShadow.h b/framework/Source/CPTShadow.h index 758ba528a..b677d7c1a 100644 --- a/framework/Source/CPTShadow.h +++ b/framework/Source/CPTShadow.h @@ -1,3 +1,6 @@ +#import +#import + @class CPTColor; @interface CPTShadow : NSObject diff --git a/framework/Source/CPTTextLayer.m b/framework/Source/CPTTextLayer.m index 476e4f699..d18613a7a 100644 --- a/framework/Source/CPTTextLayer.m +++ b/framework/Source/CPTTextLayer.m @@ -385,7 +385,7 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context if ( myText.length > 0 ) { [super renderAsVectorInContext:context]; -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST CGContextSaveGState(context); CGContextTranslateCTM(context, CPTFloat(0.0), self.bounds.size.height); CGContextScaleCTM(context, CPTFloat(1.0), CPTFloat(-1.0)); @@ -393,7 +393,7 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context CGRect newBounds = CGRectInset(self.bounds, kCPTTextLayerMarginWidth, kCPTTextLayerMarginWidth); newBounds.origin.x += self.paddingLeft; -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST newBounds.origin.y += self.paddingTop; #else newBounds.origin.y += self.paddingBottom; @@ -412,7 +412,7 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context inContext:context]; } -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST CGContextRestoreGState(context); #endif } diff --git a/framework/Source/CPTTextStyle.m b/framework/Source/CPTTextStyle.m index f1c5c4628..8c802621e 100644 --- a/framework/Source/CPTTextStyle.m +++ b/framework/Source/CPTTextStyle.m @@ -132,7 +132,7 @@ -(nonnull instancetype)init -(void)encodeWithCoder:(nonnull NSCoder *)coder { -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_TV +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_TV || TARGET_OS_MACCATALYST if ( self.font ) { // UIFont does not support NSCoding :( [coder encodeObject:[self.font fontDescriptor] forKey:@"CPTTextStyle.font+descriptor"]; @@ -152,7 +152,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { if ((self = [super init])) { -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_TV +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_TV || TARGET_OS_MACCATALYST // UIFont does not support NSCoding :( UIFontDescriptor *fontDescriptor = [coder decodeObjectOfClass:[UIFontDescriptor class] forKey:@"CPTTextStyle.font+descriptor"]; diff --git a/framework/Source/CPTTimeFormatter.h b/framework/Source/CPTTimeFormatter.h index 9a5de1b9d..40b0cf1a2 100644 --- a/framework/Source/CPTTimeFormatter.h +++ b/framework/Source/CPTTimeFormatter.h @@ -1,3 +1,5 @@ +#import + @interface CPTTimeFormatter : NSNumberFormatter @property (nonatomic, readwrite, strong, nullable) NSDateFormatter *dateFormatter; diff --git a/framework/Source/CPTTradingRangePlot.m b/framework/Source/CPTTradingRangePlot.m index 83266dfc3..15fb36bc7 100644 --- a/framework/Source/CPTTradingRangePlot.m +++ b/framework/Source/CPTTradingRangePlot.m @@ -165,7 +165,7 @@ @implementation CPTTradingRangePlot /// @cond -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST #else +(void)initialize { diff --git a/framework/Source/CPTUtilitiesTests.m b/framework/Source/CPTUtilitiesTests.m index c8335a100..760949b21 100644 --- a/framework/Source/CPTUtilitiesTests.m +++ b/framework/Source/CPTUtilitiesTests.m @@ -15,7 +15,7 @@ -(void)setUp const size_t height = 50; const size_t bitsPerComponent = 8; -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); #else CGColorSpaceRef colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); diff --git a/framework/Source/CPTXYPlotSpace.m b/framework/Source/CPTXYPlotSpace.m index 513847177..16802ab51 100644 --- a/framework/Source/CPTXYPlotSpace.m +++ b/framework/Source/CPTXYPlotSpace.m @@ -1379,7 +1379,7 @@ -(CGPoint)plotAreaViewPointForEvent:(nonnull CPTNativeEvent *)event CPTPlotArea *thePlotArea = theGraph.plotAreaFrame.plotArea; if ( theHostingView && thePlotArea ) { -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST CGPoint interactionPoint = [[[event touchesForView:theHostingView] anyObject] locationInView:theHostingView]; if ( theHostingView.collapsesLayers ) { interactionPoint.y = theHostingView.frame.size.height - interactionPoint.y; @@ -1792,7 +1792,7 @@ -(nullable CPTPlotRange *)shiftRange:(nonnull CPTPlotRange *)oldRange by:(NSDeci /// @endcond -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST #else /** diff --git a/framework/Source/NSCoderExtensions.h b/framework/Source/NSCoderExtensions.h index 896d3c0c9..7558a8e6e 100644 --- a/framework/Source/NSCoderExtensions.h +++ b/framework/Source/NSCoderExtensions.h @@ -1,3 +1,6 @@ +#import +#import + /** @category NSCoder(CPTExtensions) * @brief Core Plot extensions to NSCoder. **/ diff --git a/framework/Source/NSCoderExtensions.m b/framework/Source/NSCoderExtensions.m index 8c86907eb..22ee74d2e 100644 --- a/framework/Source/NSCoderExtensions.m +++ b/framework/Source/NSCoderExtensions.m @@ -72,13 +72,13 @@ -(void)encodeCPTRect:(CGRect)rect forKey:(nonnull NSString *)key * @param key The key to associate with the color space. * @note The current implementation only works with named color spaces. **/ -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunused-parameter" #endif -(void)encodeCGColorSpace:(nullable CGColorSpaceRef)colorSpace forKey:(nonnull NSString *)key { -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST NSLog(@"Color space encoding is not supported on iOS. Decoding will return a generic RGB color space."); #pragma clang diagnostic pop #else @@ -345,7 +345,7 @@ -(CGRect)decodeCPTRectForKey:(nonnull NSString *)key * @return The new path. * @note The current implementation only works with named color spaces. **/ -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunused-parameter" #endif @@ -353,7 +353,7 @@ -(nullable CGColorSpaceRef)newCGColorSpaceDecodeForKey:(nonnull NSString *)key { CGColorSpaceRef colorSpace = NULL; -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST NSLog(@"Color space decoding is not supported on iOS. Using generic RGB color space."); colorSpace = CGColorSpaceCreateDeviceRGB(); #pragma clang diagnostic pop diff --git a/framework/Source/NSDecimalNumberExtensions.h b/framework/Source/NSDecimalNumberExtensions.h index 1d41a0eb5..ed9e8f4b1 100644 --- a/framework/Source/NSDecimalNumberExtensions.h +++ b/framework/Source/NSDecimalNumberExtensions.h @@ -1,3 +1,5 @@ +#import + /** @category NSDecimalNumber(CPTExtensions) * @brief Core Plot extensions to NSDecimalNumber. **/ diff --git a/framework/Source/NSNumberExtensions.h b/framework/Source/NSNumberExtensions.h index 06d0bb9e4..a905bc0ec 100644 --- a/framework/Source/NSNumberExtensions.h +++ b/framework/Source/NSNumberExtensions.h @@ -1,3 +1,6 @@ +#import +#import + /** @category NSNumber(CPTExtensions) * @brief Core Plot extensions to NSNumber. **/ diff --git a/framework/Source/_CPTAnimationTimingFunctions.h b/framework/Source/_CPTAnimationTimingFunctions.h index a173ae528..508e90c32 100644 --- a/framework/Source/_CPTAnimationTimingFunctions.h +++ b/framework/Source/_CPTAnimationTimingFunctions.h @@ -1,3 +1,5 @@ +#import + /// @file typedef CGFloat (*CPTAnimationTimingFunction)(CGFloat, CGFloat); diff --git a/framework/iPhoneOnly/CPTGraphHostingView.m b/framework/iPhoneOnly/CPTGraphHostingView.m index 7f401e031..18e88da6d 100644 --- a/framework/iPhoneOnly/CPTGraphHostingView.m +++ b/framework/iPhoneOnly/CPTGraphHostingView.m @@ -9,7 +9,7 @@ /// @cond @interface CPTGraphHostingView() -#if (TARGET_OS_SIMULATOR || TARGET_OS_IPHONE) && !TARGET_OS_TV +#if (TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST) && !TARGET_OS_TV @property (nonatomic, readwrite, nullable, cpt_weak_property) UIPinchGestureRecognizer *pinchGestureRecognizer; -(void)handlePinchGesture:(nonnull UIPinchGestureRecognizer *)aPinchGestureRecognizer; @@ -47,7 +47,7 @@ @implementation CPTGraphHostingView /// @cond -#if (TARGET_OS_SIMULATOR || TARGET_OS_IPHONE) && !TARGET_OS_TV +#if (TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST) && !TARGET_OS_TV /** @internal * @property nullable UIPinchGestureRecognizer *pinchGestureRecognizer @@ -258,7 +258,7 @@ -(void)touchesCancelled:(nonnull NSSet *)touches withEvent:(nullable /// @cond -#if (TARGET_OS_SIMULATOR || TARGET_OS_IPHONE) && !TARGET_OS_TV +#if (TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST) && !TARGET_OS_TV -(void)setAllowPinchScaling:(BOOL)allowScaling { if ( allowPinchScaling != allowScaling ) { diff --git a/framework/iPhoneOnly/CPTPlatformSpecificDefines.h b/framework/iPhoneOnly/CPTPlatformSpecificDefines.h index 471ca99d5..0ebbc19e6 100644 --- a/framework/iPhoneOnly/CPTPlatformSpecificDefines.h +++ b/framework/iPhoneOnly/CPTPlatformSpecificDefines.h @@ -1,3 +1,5 @@ +#import + /// @file typedef UIColor CPTNativeColor; ///< Platform-native color. diff --git a/framework/iPhoneOnly/CPTTextStylePlatformSpecific.h b/framework/iPhoneOnly/CPTTextStylePlatformSpecific.h index b1e699720..11b070ce8 100644 --- a/framework/iPhoneOnly/CPTTextStylePlatformSpecific.h +++ b/framework/iPhoneOnly/CPTTextStylePlatformSpecific.h @@ -1,3 +1,5 @@ +#import + /// @file /** From 33bbaf8758e08d3b855672f80d0e0f5906d6330d Mon Sep 17 00:00:00 2001 From: 3a4oT Date: Fri, 11 Dec 2020 20:24:59 +0200 Subject: [PATCH 028/245] try to merge into platform specific files. --- framework/iPhoneOnly/CPTGraphHostingView.h | 36 + framework/iPhoneOnly/CPTGraphHostingView.m | 693 ++++++++++++++++++ .../CPTPlatformSpecificCategories.h | 44 ++ .../CPTPlatformSpecificCategories.m | 125 ++++ .../iPhoneOnly/CPTPlatformSpecificDefines.h | 16 +- .../iPhoneOnly/CPTPlatformSpecificFunctions.h | 40 + .../iPhoneOnly/CPTPlatformSpecificFunctions.m | 150 ++++ 7 files changed, 1103 insertions(+), 1 deletion(-) diff --git a/framework/iPhoneOnly/CPTGraphHostingView.h b/framework/iPhoneOnly/CPTGraphHostingView.h index 17f7ec128..b066bb218 100644 --- a/framework/iPhoneOnly/CPTGraphHostingView.h +++ b/framework/iPhoneOnly/CPTGraphHostingView.h @@ -1,3 +1,37 @@ +#if TARGET_OS_OSX + +#import + +@class CPTGraph; + +@interface CPTGraphHostingView : NSView + +/// @name Hosted graph +/// @{ +@property (nonatomic, readwrite, strong, nullable) CPTGraph *hostedGraph; +/// @} + +/// @name Printing +/// @{ +@property (nonatomic, readwrite, assign) NSRect printRect; +/// @} + +/// @name Cursors +/// @{ +@property (nonatomic, readwrite, strong, nullable) NSCursor *closedHandCursor; +@property (nonatomic, readwrite, strong, nullable) NSCursor *openHandCursor; +/// @} + +/// @name User Interaction +/// @{ +@property (nonatomic, readwrite, assign) BOOL allowPinchScaling; +/// @} + +@end + + +#else + #import "CPTDefinitions.h" @class CPTGraph; @@ -9,3 +43,5 @@ @property (nonatomic, readwrite, assign) BOOL allowPinchScaling; @end + +#endif diff --git a/framework/iPhoneOnly/CPTGraphHostingView.m b/framework/iPhoneOnly/CPTGraphHostingView.m index 18e88da6d..1da7addfc 100644 --- a/framework/iPhoneOnly/CPTGraphHostingView.m +++ b/framework/iPhoneOnly/CPTGraphHostingView.m @@ -1,3 +1,694 @@ +#if TARGET_OS_OSX + +#import "CPTGraphHostingView.h" + +#import "CPTGraph.h" +#import "CPTPlotArea.h" +#import "CPTPlotAreaFrame.h" +#import "CPTPlotSpace.h" + +/// @cond + +static void *CPTGraphHostingViewKVOContext = (void *)&CPTGraphHostingViewKVOContext; + +@interface CPTGraphHostingView() + +@property (nonatomic, readwrite) NSPoint locationInWindow; +@property (nonatomic, readwrite) CGPoint scrollOffset; + +-(void)plotSpaceAdded:(nonnull NSNotification *)notification; +-(void)plotSpaceRemoved:(nonnull NSNotification *)notification; +-(void)plotAreaBoundsChanged; + +@end + +/// @endcond + +#pragma mark - + +/** + * @brief A container view for displaying a CPTGraph. + **/ +@implementation CPTGraphHostingView + +/** @property nullable CPTGraph *hostedGraph + * @brief The CPTGraph hosted inside this view. + **/ +@synthesize hostedGraph; + +/** @property NSRect printRect + * @brief The bounding rectangle used when printing this view. Default is NSZeroRect. + * + * If NSZeroRect (the default), the frame rectangle of the view is used instead. + **/ +@synthesize printRect; + +/** @property nullable NSCursor *closedHandCursor + * @brief The cursor displayed when the user is actively dragging any plot space. + **/ +@synthesize closedHandCursor; + +/** @property nullable NSCursor *openHandCursor + * @brief The cursor displayed when the mouse pointer is over a plot area mapped to a plot space that allows user interaction, but not actively being dragged. + **/ +@synthesize openHandCursor; + +/** @property BOOL allowPinchScaling + * @brief Whether a pinch gesture will trigger plot space scaling. Default is @YES. + **/ +@synthesize allowPinchScaling; + +@synthesize locationInWindow; +@synthesize scrollOffset; + +/// @cond + +-(void)commonInit +{ + self.hostedGraph = nil; + self.printRect = NSZeroRect; + + self.closedHandCursor = [NSCursor closedHandCursor]; + self.openHandCursor = [NSCursor openHandCursor]; + self.allowPinchScaling = YES; + + self.locationInWindow = NSZeroPoint; + self.scrollOffset = CGPointZero; + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wundeclared-selector" + if ( [[self class] instancesRespondToSelector:@selector(effectiveAppearance)] ) { + [self addObserver:self + forKeyPath:@"effectiveAppearance" + options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld | NSKeyValueObservingOptionInitial + context:CPTGraphHostingViewKVOContext]; + } +#pragma clang diagnostic pop + + if ( !self.superview.wantsLayer ) { + self.layer = [self makeBackingLayer]; + } +} + +-(nonnull instancetype)initWithFrame:(NSRect)frame +{ + if ((self = [super initWithFrame:frame])) { + [self commonInit]; + } + return self; +} + +-(nonnull CALayer *)makeBackingLayer +{ + return [[CPTLayer alloc] initWithFrame:NSRectToCGRect(self.bounds)]; +} + +-(void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + [hostedGraph removeObserver:self forKeyPath:@"plotAreaFrame" context:CPTGraphHostingViewKVOContext]; + [hostedGraph.plotAreaFrame removeObserver:self forKeyPath:@"plotArea" context:CPTGraphHostingViewKVOContext]; + + for ( CPTPlotSpace *space in hostedGraph.allPlotSpaces ) { + [space removeObserver:self forKeyPath:@"isDragging" context:CPTGraphHostingViewKVOContext]; + } + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wundeclared-selector" + if ( [[self class] instancesRespondToSelector:@selector(effectiveAppearance)] ) { + [self removeObserver:self forKeyPath:@"effectiveAppearance" context:CPTGraphHostingViewKVOContext]; + } +#pragma clang diagnostic pop + + [hostedGraph removeFromSuperlayer]; +} + +/// @endcond + +#pragma mark - +#pragma mark NSCoding Methods + +/// @cond + +-(void)encodeWithCoder:(nonnull NSCoder *)coder +{ + [super encodeWithCoder:coder]; + + [coder encodeObject:self.hostedGraph forKey:@"CPTLayerHostingView.hostedGraph"]; + [coder encodeRect:self.printRect forKey:@"CPTLayerHostingView.printRect"]; + [coder encodeObject:self.closedHandCursor forKey:@"CPTLayerHostingView.closedHandCursor"]; + [coder encodeObject:self.openHandCursor forKey:@"CPTLayerHostingView.openHandCursor"]; + [coder encodeBool:self.allowPinchScaling forKey:@"CPTLayerHostingView.allowPinchScaling"]; + + // No need to archive these properties: + // locationInWindow + // scrollOffset +} + +-(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder +{ + if ((self = [super initWithCoder:coder])) { + [self commonInit]; + + self.hostedGraph = [coder decodeObjectOfClass:[CPTGraph class] + forKey:@"CPTLayerHostingView.hostedGraph"]; // setup layers + self.printRect = [coder decodeRectForKey:@"CPTLayerHostingView.printRect"]; + self.closedHandCursor = [coder decodeObjectOfClass:[NSCursor class] + forKey:@"CPTLayerHostingView.closedHandCursor"]; + self.openHandCursor = [coder decodeObjectOfClass:[NSCursor class] + forKey:@"CPTLayerHostingView.openHandCursor"]; + + if ( [coder containsValueForKey:@"CPTLayerHostingView.allowPinchScaling"] ) { + self.allowPinchScaling = [coder decodeBoolForKey:@"CPTLayerHostingView.allowPinchScaling"]; + } + } + return self; +} + +/// @endcond + +#pragma mark - +#pragma mark NSSecureCoding Methods + +/// @cond + ++(BOOL)supportsSecureCoding +{ + return YES; +} + +/// @endcond + +#pragma mark - +#pragma mark Drawing + +/// @cond + +-(void)drawRect:(NSRect __unused)dirtyRect +{ + if ( self.hostedGraph ) { + if ( ![NSGraphicsContext currentContextDrawingToScreen] ) { + [self viewDidChangeBackingProperties]; + + NSGraphicsContext *graphicsContext = [NSGraphicsContext currentContext]; + + [graphicsContext saveGraphicsState]; + + CGRect sourceRect = NSRectToCGRect(self.frame); + CGRect destinationRect = NSRectToCGRect(self.printRect); + if ( CGRectEqualToRect(destinationRect, CGRectZero)) { + destinationRect = sourceRect; + } + + // scale the view isotropically so that it fits on the printed page + CGFloat widthScale = (sourceRect.size.width != CPTFloat(0.0)) ? destinationRect.size.width / sourceRect.size.width : CPTFloat(1.0); + CGFloat heightScale = (sourceRect.size.height != CPTFloat(0.0)) ? destinationRect.size.height / sourceRect.size.height : CPTFloat(1.0); + CGFloat scale = MIN(widthScale, heightScale); + + // position the view so that its centered on the printed page + CGPoint offset = destinationRect.origin; + offset.x += ((destinationRect.size.width - (sourceRect.size.width * scale)) / CPTFloat(2.0)); + offset.y += ((destinationRect.size.height - (sourceRect.size.height * scale)) / CPTFloat(2.0)); + + NSAffineTransform *transform = [NSAffineTransform transform]; + [transform translateXBy:offset.x yBy:offset.y]; + [transform scaleBy:scale]; + [transform concat]; + + // render CPTLayers recursively into the graphics context used for printing + // (thanks to Brad for the tip: https://stackoverflow.com/a/2791305/132867 ) + CGContextRef context = graphicsContext.graphicsPort; + [self.hostedGraph recursivelyRenderInContext:context]; + + [graphicsContext restoreGraphicsState]; + } + } +} + +/// @endcond + +#pragma mark - +#pragma mark Printing + +/// @cond + +-(BOOL)knowsPageRange:(nonnull NSRangePointer)rangePointer +{ + rangePointer->location = 1; + rangePointer->length = 1; + + return YES; +} + +-(NSRect)rectForPage:(NSInteger __unused)pageNumber +{ + return self.printRect; +} + +/// @endcond + +#pragma mark - +#pragma mark Mouse handling + +/// @cond + +-(BOOL)acceptsFirstMouse:(nullable NSEvent *__unused)theEvent +{ + return YES; +} + +-(void)mouseDown:(nonnull NSEvent *)theEvent +{ + [super mouseDown:theEvent]; + + CPTGraph *theGraph = self.hostedGraph; + BOOL handled = NO; + + if ( theGraph ) { + CGPoint pointOfMouseDown = NSPointToCGPoint([self convertPoint:theEvent.locationInWindow fromView:nil]); + CGPoint pointInHostedGraph = [self.layer convertPoint:pointOfMouseDown toLayer:theGraph]; + handled = [theGraph pointingDeviceDownEvent:theEvent atPoint:pointInHostedGraph]; + } + + if ( !handled ) { + [self.nextResponder mouseDown:theEvent]; + } +} + +-(void)mouseDragged:(nonnull NSEvent *)theEvent +{ + CPTGraph *theGraph = self.hostedGraph; + BOOL handled = NO; + + if ( theGraph ) { + CGPoint pointOfMouseDrag = NSPointToCGPoint([self convertPoint:theEvent.locationInWindow fromView:nil]); + CGPoint pointInHostedGraph = [self.layer convertPoint:pointOfMouseDrag toLayer:theGraph]; + handled = [theGraph pointingDeviceDraggedEvent:theEvent atPoint:pointInHostedGraph]; + } + + if ( !handled ) { + [self.nextResponder mouseDragged:theEvent]; + } +} + +-(void)mouseUp:(nonnull NSEvent *)theEvent +{ + CPTGraph *theGraph = self.hostedGraph; + BOOL handled = NO; + + if ( theGraph ) { + CGPoint pointOfMouseUp = NSPointToCGPoint([self convertPoint:theEvent.locationInWindow fromView:nil]); + CGPoint pointInHostedGraph = [self.layer convertPoint:pointOfMouseUp toLayer:theGraph]; + handled = [theGraph pointingDeviceUpEvent:theEvent atPoint:pointInHostedGraph]; + } + + if ( !handled ) { + [self.nextResponder mouseUp:theEvent]; + } +} + +/// @endcond + +#pragma mark - +#pragma mark Trackpad handling + +/// @cond + +-(void)magnifyWithEvent:(nonnull NSEvent *)event +{ + CPTGraph *theGraph = self.hostedGraph; + BOOL handled = NO; + + if ( theGraph && self.allowPinchScaling ) { + CGPoint pointOfMagnification = NSPointToCGPoint([self convertPoint:event.locationInWindow fromView:nil]); + CGPoint pointInHostedGraph = [self.layer convertPoint:pointOfMagnification toLayer:theGraph]; + CGPoint pointInPlotArea = [theGraph convertPoint:pointInHostedGraph toLayer:theGraph.plotAreaFrame.plotArea]; + + CGFloat scale = event.magnification + CPTFloat(1.0); + + for ( CPTPlotSpace *space in theGraph.allPlotSpaces ) { + if ( space.allowsUserInteraction ) { + [space scaleBy:scale aboutPoint:pointInPlotArea]; + handled = YES; + } + } + } + + if ( !handled ) { + [self.nextResponder magnifyWithEvent:event]; + } +} + +-(void)scrollWheel:(nonnull NSEvent *)theEvent +{ + CPTGraph *theGraph = self.hostedGraph; + BOOL handled = NO; + + if ( theGraph ) { + switch ( theEvent.phase ) { + case NSEventPhaseBegan: // Trackpad with no momentum scrolling. Fingers moved on trackpad. + { + self.locationInWindow = theEvent.locationInWindow; + self.scrollOffset = CGPointZero; + + CGPoint pointOfMouseDown = NSPointToCGPoint([self convertPoint:self.locationInWindow fromView:nil]); + CGPoint pointInHostedGraph = [self.layer convertPoint:pointOfMouseDown toLayer:theGraph]; + handled = [theGraph pointingDeviceDownEvent:theEvent atPoint:pointInHostedGraph]; + } + // Fall through + + case NSEventPhaseChanged: + { + CGPoint offset = self.scrollOffset; + offset.x += theEvent.scrollingDeltaX; + offset.y -= theEvent.scrollingDeltaY; + self.scrollOffset = offset; + + NSPoint scrolledPointOfMouse = self.locationInWindow; + scrolledPointOfMouse.x += offset.x; + scrolledPointOfMouse.y += offset.y; + + CGPoint pointOfMouseDrag = NSPointToCGPoint([self convertPoint:scrolledPointOfMouse fromView:nil]); + CGPoint pointInHostedGraph = [self.layer convertPoint:pointOfMouseDrag toLayer:theGraph]; + handled = handled || [theGraph pointingDeviceDraggedEvent:theEvent atPoint:pointInHostedGraph]; + } + break; + + case NSEventPhaseEnded: + { + CGPoint offset = self.scrollOffset; + + NSPoint scrolledPointOfMouse = self.locationInWindow; + scrolledPointOfMouse.x += offset.x; + scrolledPointOfMouse.y += offset.y; + + CGPoint pointOfMouseUp = NSPointToCGPoint([self convertPoint:scrolledPointOfMouse fromView:nil]); + CGPoint pointInHostedGraph = [self.layer convertPoint:pointOfMouseUp toLayer:theGraph]; + handled = [theGraph pointingDeviceUpEvent:theEvent atPoint:pointInHostedGraph]; + } + break; + + case NSEventPhaseNone: + if ( theEvent.momentumPhase == NSEventPhaseNone ) { + // Mouse wheel + CGPoint startLocation = theEvent.locationInWindow; + CGPoint pointOfMouse = NSPointToCGPoint([self convertPoint:startLocation fromView:nil]); + CGPoint pointInHostedGraph = [self.layer convertPoint:pointOfMouse toLayer:theGraph]; + + CGPoint scrolledLocationInWindow = startLocation; + if ( theEvent.hasPreciseScrollingDeltas ) { + scrolledLocationInWindow.x += theEvent.scrollingDeltaX; + scrolledLocationInWindow.y -= theEvent.scrollingDeltaY; + } + else { + scrolledLocationInWindow.x += theEvent.scrollingDeltaX * CPTFloat(10.0); + scrolledLocationInWindow.y -= theEvent.scrollingDeltaY * CPTFloat(10.0); + } + CGPoint scrolledPointOfMouse = NSPointToCGPoint([self convertPoint:scrolledLocationInWindow fromView:nil]); + CGPoint scrolledPointInHostedGraph = [self.layer convertPoint:scrolledPointOfMouse toLayer:theGraph]; + + handled = [theGraph scrollWheelEvent:theEvent fromPoint:pointInHostedGraph toPoint:scrolledPointInHostedGraph]; + } + break; + + default: + break; + } + } + + if ( !handled ) { + [self.nextResponder scrollWheel:theEvent]; + } +} + +/// @endcond + +#pragma mark - +#pragma mark HiDPI display support + +/// @cond + +-(void)viewDidChangeBackingProperties +{ + [super viewDidChangeBackingProperties]; + + NSWindow *myWindow = self.window; + + if ( myWindow ) { + self.layer.contentsScale = myWindow.backingScaleFactor; + } + else { + self.layer.contentsScale = CPTFloat(1.0); + } +} + +/// @endcond + +#pragma mark - +#pragma mark Cursor management + +/// @cond + +-(void)resetCursorRects +{ + [super resetCursorRects]; + + CPTGraph *theGraph = self.hostedGraph; + CPTPlotArea *plotArea = theGraph.plotAreaFrame.plotArea; + + NSCursor *closedCursor = self.closedHandCursor; + NSCursor *openCursor = self.openHandCursor; + + if ( plotArea && (closedCursor || openCursor)) { + BOOL allowsInteraction = NO; + BOOL isDragging = NO; + + for ( CPTPlotSpace *space in theGraph.allPlotSpaces ) { + allowsInteraction = allowsInteraction || space.allowsUserInteraction; + isDragging = isDragging || space.isDragging; + } + + if ( allowsInteraction ) { + NSCursor *cursor = isDragging ? closedCursor : openCursor; + + if ( cursor ) { + CGRect plotAreaBounds = [self.layer convertRect:plotArea.bounds fromLayer:plotArea]; + + [self addCursorRect:NSRectFromCGRect(plotAreaBounds) + cursor:cursor]; + } + } + } +} + +/// @endcond + +#pragma mark - +#pragma mark Notifications + +/// @cond + +/** @internal + * @brief Adds a KVO observer to a new plot space added to the hosted graph. + **/ +-(void)plotSpaceAdded:(nonnull NSNotification *)notification +{ + CPTDictionary *userInfo = notification.userInfo; + CPTPlotSpace *space = userInfo[CPTGraphPlotSpaceNotificationKey]; + + [space addObserver:self + forKeyPath:@"isDragging" + options:NSKeyValueObservingOptionNew + context:CPTGraphHostingViewKVOContext]; +} + +/** @internal + * @brief Removes the KVO observer from a plot space removed from the hosted graph. + **/ +-(void)plotSpaceRemoved:(nonnull NSNotification *)notification +{ + CPTDictionary *userInfo = notification.userInfo; + CPTPlotSpace *space = userInfo[CPTGraphPlotSpaceNotificationKey]; + + [space removeObserver:self forKeyPath:@"isDragging" context:CPTGraphHostingViewKVOContext]; + [self.window invalidateCursorRectsForView:self]; +} + +/** @internal + * @brief Updates the cursor rect when the plot area is resized. + **/ +-(void)plotAreaBoundsChanged +{ + [self.window invalidateCursorRectsForView:self]; +} + +-(void)viewWillMoveToSuperview:(nullable NSView *)newSuperview +{ + if ( self.superview.wantsLayer != newSuperview.wantsLayer ) { + self.wantsLayer = NO; + self.layer = nil; + + if ( newSuperview.wantsLayer ) { + self.wantsLayer = YES; + } + else { + self.layer = [self makeBackingLayer]; + self.wantsLayer = YES; + } + + CPTGraph *theGraph = self.hostedGraph; + if ( theGraph ) { + [self.layer addSublayer:theGraph]; + } + } +} + +/// @endcond + +#pragma mark - +#pragma mark KVO Methods + +/// @cond + +-(void)observeValueForKeyPath:(nullable NSString *)keyPath ofObject:(nullable id)object change:(nullable CPTDictionary *)change context:(nullable void *)context +{ + if ( context == CPTGraphHostingViewKVOContext ) { + CPTGraph *theGraph = self.hostedGraph; + + if ( [keyPath isEqualToString:@"isDragging"] && [object isKindOfClass:[CPTPlotSpace class]] ) { + [self.window invalidateCursorRectsForView:self]; + } + else if ( [keyPath isEqualToString:@"plotAreaFrame"] && (object == theGraph)) { + CPTPlotAreaFrame *oldPlotAreaFrame = change[NSKeyValueChangeOldKey]; + CPTPlotAreaFrame *newPlotAreaFrame = change[NSKeyValueChangeNewKey]; + + if ( oldPlotAreaFrame ) { + [oldPlotAreaFrame removeObserver:self forKeyPath:@"plotArea" context:CPTGraphHostingViewKVOContext]; + } + + if ( newPlotAreaFrame ) { + [newPlotAreaFrame addObserver:self + forKeyPath:@"plotArea" + options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld | NSKeyValueObservingOptionInitial + context:CPTGraphHostingViewKVOContext]; + } + } + else if ( [keyPath isEqualToString:@"plotArea"] && (object == theGraph.plotAreaFrame)) { + CPTPlotArea *oldPlotArea = change[NSKeyValueChangeOldKey]; + CPTPlotArea *newPlotArea = change[NSKeyValueChangeNewKey]; + + if ( oldPlotArea ) { + [[NSNotificationCenter defaultCenter] removeObserver:self + name:CPTLayerBoundsDidChangeNotification + object:oldPlotArea]; + } + + if ( newPlotArea ) { + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(plotAreaBoundsChanged) + name:CPTLayerBoundsDidChangeNotification + object:newPlotArea]; + } + } + else if ( [keyPath isEqualToString:@"effectiveAppearance"] && (object == self)) { + [self.hostedGraph setNeedsDisplayAllLayers]; + } + } + else { + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; + } +} + +/// @endcond + +#pragma mark - +#pragma mark Accessors + +/// @cond + +-(void)setHostedGraph:(nullable CPTGraph *)newGraph +{ + NSParameterAssert((newGraph == nil) || [newGraph isKindOfClass:[CPTGraph class]]); + + if ( newGraph != hostedGraph ) { + self.wantsLayer = YES; + + if ( hostedGraph ) { + [hostedGraph removeFromSuperlayer]; + hostedGraph.hostingView = nil; + + [[NSNotificationCenter defaultCenter] removeObserver:self name:CPTGraphDidAddPlotSpaceNotification object:hostedGraph]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:CPTGraphDidRemovePlotSpaceNotification object:hostedGraph]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:CPTLayerBoundsDidChangeNotification object:hostedGraph.plotAreaFrame.plotArea]; + + [hostedGraph removeObserver:self forKeyPath:@"plotAreaFrame" context:CPTGraphHostingViewKVOContext]; + [hostedGraph.plotAreaFrame removeObserver:self forKeyPath:@"plotArea" context:CPTGraphHostingViewKVOContext]; + + for ( CPTPlotSpace *space in hostedGraph.allPlotSpaces ) { + [space removeObserver:self forKeyPath:@"isDragging" context:CPTGraphHostingViewKVOContext]; + } + } + + hostedGraph = newGraph; + + if ( newGraph ) { + CPTGraph *theGraph = newGraph; + + newGraph.hostingView = self; + + [self viewDidChangeBackingProperties]; + [self.layer addSublayer:theGraph]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(plotSpaceAdded:) + name:CPTGraphDidAddPlotSpaceNotification + object:theGraph]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(plotSpaceRemoved:) + name:CPTGraphDidRemovePlotSpaceNotification + object:theGraph]; + + [theGraph addObserver:self + forKeyPath:@"plotAreaFrame" + options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld | NSKeyValueObservingOptionInitial + context:CPTGraphHostingViewKVOContext]; + + for ( CPTPlotSpace *space in newGraph.allPlotSpaces ) { + [space addObserver:self + forKeyPath:@"isDragging" + options:NSKeyValueObservingOptionNew + context:CPTGraphHostingViewKVOContext]; + } + } + } +} + +-(void)setClosedHandCursor:(nullable NSCursor *)newCursor +{ + if ( newCursor != closedHandCursor ) { + closedHandCursor = newCursor; + + [self.window invalidateCursorRectsForView:self]; + } +} + +-(void)setOpenHandCursor:(nullable NSCursor *)newCursor +{ + if ( newCursor != openHandCursor ) { + openHandCursor = newCursor; + + [self.window invalidateCursorRectsForView:self]; + } +} + +/// @endcond + +@end + + +#else + #import "CPTGraphHostingView.h" #import "CPTGraph.h" @@ -478,3 +1169,5 @@ -(void)setBounds:(CGRect)newBounds /// @endcond @end + +#endif diff --git a/framework/iPhoneOnly/CPTPlatformSpecificCategories.h b/framework/iPhoneOnly/CPTPlatformSpecificCategories.h index efa9ffffc..5350e8bca 100644 --- a/framework/iPhoneOnly/CPTPlatformSpecificCategories.h +++ b/framework/iPhoneOnly/CPTPlatformSpecificCategories.h @@ -1,3 +1,45 @@ +#if TARGET_OS_OSX + +#import "CPTColor.h" +#import "CPTLayer.h" +#import "CPTPlatformSpecificDefines.h" + +#pragma mark CPTLayer + +/** @category CPTLayer(CPTPlatformSpecificLayerExtensions) + * @brief Platform-specific extensions to CPTLayer. + **/ +@interface CPTLayer(CPTPlatformSpecificLayerExtensions) + +/// @name Images +/// @{ +-(nonnull CPTNativeImage *)imageOfLayer; +/// @} + +@end + +#pragma mark - NSAttributedString + +/** @category NSAttributedString(CPTPlatformSpecificAttributedStringExtensions) + * @brief NSAttributedString extensions for drawing styled text. + **/ +@interface NSAttributedString(CPTPlatformSpecificAttributedStringExtensions) + +/// @name Drawing +/// @{ +-(void)drawInRect:(CGRect)rect inContext:(nonnull CGContextRef)context; +/// @} + +/// @name Measurement +/// @{ +-(CGSize)sizeAsDrawn; +/// @} + +@end + + +#else + #import "CPTColor.h" #import "CPTLayer.h" #import "CPTPlatformSpecificDefines.h" @@ -48,3 +90,5 @@ /// @} @end + +#endif diff --git a/framework/iPhoneOnly/CPTPlatformSpecificCategories.m b/framework/iPhoneOnly/CPTPlatformSpecificCategories.m index 0c2a969de..819d5c918 100644 --- a/framework/iPhoneOnly/CPTPlatformSpecificCategories.m +++ b/framework/iPhoneOnly/CPTPlatformSpecificCategories.m @@ -1,3 +1,126 @@ +#if TARGET_OS_OSX + +#import "CPTPlatformSpecificCategories.h" + +#import "CPTGraph.h" +#import "CPTGraphHostingView.h" +#import "CPTPlatformSpecificFunctions.h" + +#pragma mark CPTLayer + +@implementation CPTLayer(CPTPlatformSpecificLayerExtensions) + +/** @brief Gets an image of the layer contents. + * @return A native image representation of the layer content. + **/ +-(nonnull CPTNativeImage *)imageOfLayer +{ + CGSize boundsSize = self.bounds.size; + + // Figure out the scale of pixels to points + CGFloat scale = 0.0; + + if ( [self respondsToSelector:@selector(hostingView)] ) { + scale = ((CPTGraph *)self).hostingView.window.backingScaleFactor; + } + if ((scale == 0.0) && [CALayer instancesRespondToSelector:@selector(contentsScale)] ) { + scale = self.contentsScale; + } + if ( scale == 0.0 ) { + NSWindow *myWindow = self.graph.hostingView.window; + + if ( myWindow ) { + scale = myWindow.backingScaleFactor; + } + else { + scale = [NSScreen mainScreen].backingScaleFactor; + } + } + scale = MAX(scale, CPTFloat(1.0)); + + NSBitmapImageRep *layerImage = [[NSBitmapImageRep alloc] + initWithBitmapDataPlanes:NULL + pixelsWide:(NSInteger)(boundsSize.width * scale) + pixelsHigh:(NSInteger)(boundsSize.height * scale) + bitsPerSample:8 + samplesPerPixel:4 + hasAlpha:YES + isPlanar:NO + colorSpaceName:NSCalibratedRGBColorSpace + bitmapFormat:NSAlphaFirstBitmapFormat + bytesPerRow:0 + bitsPerPixel:0 + ]; + + // Setting the size communicates the dpi; enables proper scaling for Retina screens + layerImage.size = NSSizeFromCGSize(boundsSize); + + NSGraphicsContext *bitmapContext = [NSGraphicsContext graphicsContextWithBitmapImageRep:layerImage]; + CGContextRef context = (CGContextRef)bitmapContext.graphicsPort; + + CGContextClearRect(context, CPTRectMake(0.0, 0.0, boundsSize.width, boundsSize.height)); + CGContextSetAllowsAntialiasing(context, true); + CGContextSetShouldSmoothFonts(context, false); + [self layoutAndRenderInContext:context]; + CGContextFlush(context); + + NSImage *image = [[NSImage alloc] initWithSize:NSSizeFromCGSize(boundsSize)]; + + [image addRepresentation:layerImage]; + + return image; +} + +@end + +#pragma mark - NSAttributedString + +@implementation NSAttributedString(CPTPlatformSpecificAttributedStringExtensions) + +/** @brief Draws the styled text into the given graphics context. + * @param rect The bounding rectangle in which to draw the text. + * @param context The graphics context to draw into. + **/ +-(void)drawInRect:(CGRect)rect inContext:(nonnull CGContextRef)context +{ + CPTPushCGContext(context); + + [self drawWithRect:NSRectFromCGRect(rect) + options:CPTStringDrawingOptions]; + + CPTPopCGContext(); +} + +/** + * @brief Computes the size of the styled text when drawn rounded up to the nearest whole number in each dimension. + **/ +-(CGSize)sizeAsDrawn +{ + CGRect rect = CGRectZero; + + if ( [self respondsToSelector:@selector(boundingRectWithSize:options:context:)] ) { + rect = [self boundingRectWithSize:CPTSizeMake(10000.0, 10000.0) + options:CPTStringDrawingOptions + context:nil]; + } + else { + rect = [self boundingRectWithSize:CPTSizeMake(10000.0, 10000.0) + options:CPTStringDrawingOptions]; + } + + CGSize textSize = rect.size; + + textSize.width = ceil(textSize.width); + textSize.height = ceil(textSize.height); + + return textSize; +} + +@end + + +#else + #import "CPTPlatformSpecificCategories.h" #import "CPTPlatformSpecificFunctions.h" @@ -119,3 +242,5 @@ -(CGSize)sizeAsDrawn } @end + +#endif diff --git a/framework/iPhoneOnly/CPTPlatformSpecificDefines.h b/framework/iPhoneOnly/CPTPlatformSpecificDefines.h index 0ebbc19e6..03c04e857 100644 --- a/framework/iPhoneOnly/CPTPlatformSpecificDefines.h +++ b/framework/iPhoneOnly/CPTPlatformSpecificDefines.h @@ -1,8 +1,22 @@ +/// @file + +#if TARGET_OS_OSX + +#import + +typedef NSColor CPTNativeColor; ///< Platform-native color. +typedef NSImage CPTNativeImage; ///< Platform-native image format. +typedef NSEvent CPTNativeEvent; ///< Platform-native OS event. +typedef NSFont CPTNativeFont; ///< Platform-native font. + +#else + #import -/// @file typedef UIColor CPTNativeColor; ///< Platform-native color. typedef UIImage CPTNativeImage; ///< Platform-native image format. typedef UIEvent CPTNativeEvent; ///< Platform-native OS event. typedef UIFont CPTNativeFont; ///< Platform-native font. + +#endif diff --git a/framework/iPhoneOnly/CPTPlatformSpecificFunctions.h b/framework/iPhoneOnly/CPTPlatformSpecificFunctions.h index 178bba70c..433689934 100644 --- a/framework/iPhoneOnly/CPTPlatformSpecificFunctions.h +++ b/framework/iPhoneOnly/CPTPlatformSpecificFunctions.h @@ -1,3 +1,5 @@ +#if TARGET_OS_OSX + #import "CPTDefinitions.h" #import "CPTPlatformSpecificDefines.h" @@ -14,6 +16,13 @@ void CPTPopCGContext(void); /// @} +/// @name Color Conversion +/// @{ +__nonnull CGColorRef CPTCreateCGColorFromNSColor(NSColor *__nonnull nsColor) CF_RETURNS_RETAINED; +CPTRGBAColor CPTRGBAColorFromNSColor(NSColor *__nonnull nsColor); + +/// @} + /// @name Debugging /// @{ CPTNativeImage *__nonnull CPTQuickLookImage(CGRect rect, __nonnull CPTQuickLookImageBlock renderBlock); @@ -23,3 +32,34 @@ CPTNativeImage *__nonnull CPTQuickLookImage(CGRect rect, __nonnull CPTQuickLookI #if __cplusplus } #endif + + +#else + +#import "CPTDefinitions.h" +#import "CPTPlatformSpecificDefines.h" + +/// @file + +#if __cplusplus +extern "C" { +#endif + +/// @name Graphics Context Save Stack +/// @{ +void CPTPushCGContext(__nonnull CGContextRef context); +void CPTPopCGContext(void); + +/// @} + +/// @name Debugging +/// @{ +CPTNativeImage *__nonnull CPTQuickLookImage(CGRect rect, __nonnull CPTQuickLookImageBlock renderBlock); + +/// @} + +#if __cplusplus +} +#endif + +#endif diff --git a/framework/iPhoneOnly/CPTPlatformSpecificFunctions.m b/framework/iPhoneOnly/CPTPlatformSpecificFunctions.m index cd256a499..c72e3e0fa 100644 --- a/framework/iPhoneOnly/CPTPlatformSpecificFunctions.m +++ b/framework/iPhoneOnly/CPTPlatformSpecificFunctions.m @@ -1,3 +1,151 @@ +#if TARGET_OS_OSX + +#import "CPTPlatformSpecificFunctions.h" + +#pragma mark Graphics Context + +// linked list to store saved contexts +static NSMutableArray *pushedContexts = nil; +static dispatch_once_t contextOnceToken = 0; + +static dispatch_queue_t contextQueue = NULL; +static dispatch_once_t queueOnceToken = 0; + +/** @brief Pushes the current AppKit graphics context onto a stack and replaces it with the given Core Graphics context. + * @param newContext The graphics context. + **/ +void CPTPushCGContext(__nonnull CGContextRef newContext) +{ + dispatch_once(&contextOnceToken, ^{ + pushedContexts = [[NSMutableArray alloc] init]; + }); + dispatch_once(&queueOnceToken, ^{ + contextQueue = dispatch_queue_create("CorePlot.contextQueue", NULL); + }); + + dispatch_sync(contextQueue, ^{ + NSGraphicsContext *currentContext = [NSGraphicsContext currentContext]; + + if ( currentContext ) { + [pushedContexts addObject:currentContext]; + } + else { + [pushedContexts addObject:(NSGraphicsContext *)[NSNull null]]; + } + + if ( newContext ) { + [NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithGraphicsPort:newContext flipped:NO]]; + } + }); +} + +/** + * @brief Pops the top context off the stack and restores it to the AppKit graphics context. + **/ +void CPTPopCGContext(void) +{ + dispatch_once(&contextOnceToken, ^{ + pushedContexts = [[NSMutableArray alloc] init]; + }); + dispatch_once(&queueOnceToken, ^{ + contextQueue = dispatch_queue_create("CorePlot.contextQueue", NULL); + }); + + dispatch_sync(contextQueue, ^{ + if ( pushedContexts.count > 0 ) { + NSGraphicsContext *lastContext = pushedContexts.lastObject; + + if ( [lastContext isKindOfClass:[NSGraphicsContext class]] ) { + [NSGraphicsContext setCurrentContext:lastContext]; + } + else { + [NSGraphicsContext setCurrentContext:nil]; + } + + [pushedContexts removeLastObject]; + } + }); +} + +#pragma mark - +#pragma mark Colors + +/** @brief Creates a @ref CGColorRef from an NSColor. + * + * The caller must release the returned @ref CGColorRef. Pattern colors are not supported. + * + * @param nsColor The NSColor. + * @return The @ref CGColorRef. + **/ +__nonnull CGColorRef CPTCreateCGColorFromNSColor(NSColor *__nonnull nsColor) +{ + NSColor *rgbColor = [nsColor colorUsingColorSpace:[NSColorSpace genericRGBColorSpace]]; + CGFloat r, g, b, a; + + [rgbColor getRed:&r green:&g blue:&b alpha:&a]; + return CGColorCreateGenericRGB(r, g, b, a); +} + +/** @brief Creates a CPTRGBAColor from an NSColor. + * + * Pattern colors are not supported. + * + * @param nsColor The NSColor. + * @return The CPTRGBAColor. + **/ +CPTRGBAColor CPTRGBAColorFromNSColor(NSColor *__nonnull nsColor) +{ + CGFloat red, green, blue, alpha; + + [[nsColor colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&red green:&green blue:&blue alpha:&alpha]; + + CPTRGBAColor rgbColor; + + rgbColor.red = red; + rgbColor.green = green; + rgbColor.blue = blue; + rgbColor.alpha = alpha; + + return rgbColor; +} + +#pragma mark - +#pragma mark Debugging + +CPTNativeImage *__nonnull CPTQuickLookImage(CGRect rect, __nonnull CPTQuickLookImageBlock renderBlock) +{ + NSBitmapImageRep *layerImage = [[NSBitmapImageRep alloc] + initWithBitmapDataPlanes:NULL + pixelsWide:(NSInteger)rect.size.width + pixelsHigh:(NSInteger)rect.size.height + bitsPerSample:8 + samplesPerPixel:4 + hasAlpha:YES + isPlanar:NO + colorSpaceName:NSCalibratedRGBColorSpace + bytesPerRow:(NSInteger)rect.size.width * 4 + bitsPerPixel:32]; + + NSGraphicsContext *bitmapContext = [NSGraphicsContext graphicsContextWithBitmapImageRep:layerImage]; + + CGContextRef context = (CGContextRef)bitmapContext.graphicsPort; + + CGContextClearRect(context, rect); + + renderBlock(context, 1.0, rect); + + CGContextFlush(context); + + NSImage *image = [[NSImage alloc] initWithSize:NSSizeFromCGSize(rect.size)]; + + [image addRepresentation:layerImage]; + + return image; +} + + +#else + #import "CPTPlatformSpecificFunctions.h" #import "CPTExceptions.h" @@ -37,3 +185,5 @@ void CPTPopCGContext(void) return image; } + +#endif From 250b6fb8b73b66fc974fe61970d16309c0c268f8 Mon Sep 17 00:00:00 2001 From: 3a4oT Date: Fri, 11 Dec 2020 20:57:13 +0200 Subject: [PATCH 029/245] macOS support for SPM --- Package.swift | 2 +- framework/iPhoneOnly/CPTGraphHostingView.h | 2 + framework/iPhoneOnly/CPTGraphHostingView.m | 6 +- .../iPhoneOnly/CPTImagePlatformSpecific.m | 76 +++++ .../CPTPlatformSpecificCategories.h | 2 + .../CPTPlatformSpecificCategories.m | 6 +- .../iPhoneOnly/CPTPlatformSpecificDefines.h | 2 + .../iPhoneOnly/CPTPlatformSpecificFunctions.h | 2 + .../iPhoneOnly/CPTPlatformSpecificFunctions.m | 6 +- .../iPhoneOnly/CPTTextStylePlatformSpecific.h | 32 ++ .../iPhoneOnly/CPTTextStylePlatformSpecific.m | 283 ++++++++++++++++++ 11 files changed, 406 insertions(+), 13 deletions(-) diff --git a/Package.swift b/Package.swift index e252db70c..52db8d693 100644 --- a/Package.swift +++ b/Package.swift @@ -6,7 +6,7 @@ import PackageDescription let package = Package( name: "core-plot", platforms: [ - .macOS(.v10_15), + .macOS(.v10_12), .iOS(.v10), .tvOS(.v10) ], diff --git a/framework/iPhoneOnly/CPTGraphHostingView.h b/framework/iPhoneOnly/CPTGraphHostingView.h index b066bb218..884dfabe2 100644 --- a/framework/iPhoneOnly/CPTGraphHostingView.h +++ b/framework/iPhoneOnly/CPTGraphHostingView.h @@ -1,3 +1,5 @@ +#import + #if TARGET_OS_OSX #import diff --git a/framework/iPhoneOnly/CPTGraphHostingView.m b/framework/iPhoneOnly/CPTGraphHostingView.m index 1da7addfc..a986837cf 100644 --- a/framework/iPhoneOnly/CPTGraphHostingView.m +++ b/framework/iPhoneOnly/CPTGraphHostingView.m @@ -1,7 +1,7 @@ -#if TARGET_OS_OSX - #import "CPTGraphHostingView.h" +#if TARGET_OS_OSX + #import "CPTGraph.h" #import "CPTPlotArea.h" #import "CPTPlotAreaFrame.h" @@ -689,8 +689,6 @@ -(void)setOpenHandCursor:(nullable NSCursor *)newCursor #else -#import "CPTGraphHostingView.h" - #import "CPTGraph.h" #import "CPTPlotArea.h" #import "CPTPlotAreaFrame.h" diff --git a/framework/iPhoneOnly/CPTImagePlatformSpecific.m b/framework/iPhoneOnly/CPTImagePlatformSpecific.m index 20c73f03d..e55ee4f5f 100644 --- a/framework/iPhoneOnly/CPTImagePlatformSpecific.m +++ b/framework/iPhoneOnly/CPTImagePlatformSpecific.m @@ -1,3 +1,77 @@ +#import + +#if TARGET_OS_OSX + +#import "CPTImage.h" + +@implementation CPTImage(CPTPlatformSpecificImageExtensions) + +#pragma mark - +#pragma mark Init/Dealloc + +/** @brief Initializes a CPTImage instance with the provided platform-native image. + * + * @param anImage The platform-native image. + * @return A CPTImage instance initialized with the provided image. + **/ +-(nonnull instancetype)initWithNativeImage:(nullable CPTNativeImage *)anImage +{ + if ((self = [self init])) { + self.nativeImage = anImage; + } + + return self; +} + +/** @brief Initializes a CPTImage instance with the contents of a PNG file. + * + * On systems that support hi-dpi or @quote{Retina} displays, this method will look for a + * double-resolution image with the given name followed by @quote{@2x}. If the @quote{@2x} image + * is not available, the named image file will be loaded. + * + * @param path The file system path of the file. + * @return A CPTImage instance initialized with the contents of the PNG file. + **/ +-(nonnull instancetype)initForPNGFile:(nonnull NSString *)path +{ + CGFloat imageScale = CPTFloat(1.0); + + // Try to load @2x file if the system supports hi-dpi display + NSImage *newNativeImage = [[NSImage alloc] init]; + NSImageRep *imageRep = nil; + + for ( NSScreen *screen in [NSScreen screens] ) { + imageScale = MAX(imageScale, screen.backingScaleFactor); + } + + while ( imageScale > CPTFloat(1.0)) { + NSMutableString *hiDpiPath = [path mutableCopy]; + NSUInteger replaceCount = [hiDpiPath replaceOccurrencesOfString:@".png" + withString:[NSString stringWithFormat:@"@%dx.png", (int)imageScale] + options:NSCaseInsensitiveSearch | NSBackwardsSearch | NSAnchoredSearch + range:NSMakeRange(hiDpiPath.length - 4, 4)]; + if ( replaceCount == 1 ) { + imageRep = [NSImageRep imageRepWithContentsOfFile:hiDpiPath]; + if ( imageRep ) { + [newNativeImage addRepresentation:imageRep]; + } + } + imageScale -= CPTFloat(1.0); + } + + imageRep = [NSImageRep imageRepWithContentsOfFile:path]; + if ( imageRep ) { + [newNativeImage addRepresentation:imageRep]; + } + + return [self initWithNativeImage:newNativeImage]; +} + +@end + + +#else + #import "CPTImage.h" #import "CPTUtilities.h" @@ -79,3 +153,5 @@ -(nonnull instancetype)initForPNGFile:(nonnull NSString *)path } @end + +#endif diff --git a/framework/iPhoneOnly/CPTPlatformSpecificCategories.h b/framework/iPhoneOnly/CPTPlatformSpecificCategories.h index 5350e8bca..294d4b7a9 100644 --- a/framework/iPhoneOnly/CPTPlatformSpecificCategories.h +++ b/framework/iPhoneOnly/CPTPlatformSpecificCategories.h @@ -1,3 +1,5 @@ +#import + #if TARGET_OS_OSX #import "CPTColor.h" diff --git a/framework/iPhoneOnly/CPTPlatformSpecificCategories.m b/framework/iPhoneOnly/CPTPlatformSpecificCategories.m index 819d5c918..a7f457670 100644 --- a/framework/iPhoneOnly/CPTPlatformSpecificCategories.m +++ b/framework/iPhoneOnly/CPTPlatformSpecificCategories.m @@ -1,7 +1,7 @@ -#if TARGET_OS_OSX - #import "CPTPlatformSpecificCategories.h" +#if TARGET_OS_OSX + #import "CPTGraph.h" #import "CPTGraphHostingView.h" #import "CPTPlatformSpecificFunctions.h" @@ -121,8 +121,6 @@ -(CGSize)sizeAsDrawn #else -#import "CPTPlatformSpecificCategories.h" - #import "CPTPlatformSpecificFunctions.h" #import diff --git a/framework/iPhoneOnly/CPTPlatformSpecificDefines.h b/framework/iPhoneOnly/CPTPlatformSpecificDefines.h index 03c04e857..e969face3 100644 --- a/framework/iPhoneOnly/CPTPlatformSpecificDefines.h +++ b/framework/iPhoneOnly/CPTPlatformSpecificDefines.h @@ -1,5 +1,7 @@ /// @file +#import + #if TARGET_OS_OSX #import diff --git a/framework/iPhoneOnly/CPTPlatformSpecificFunctions.h b/framework/iPhoneOnly/CPTPlatformSpecificFunctions.h index 433689934..4093315e7 100644 --- a/framework/iPhoneOnly/CPTPlatformSpecificFunctions.h +++ b/framework/iPhoneOnly/CPTPlatformSpecificFunctions.h @@ -1,3 +1,5 @@ +#import + #if TARGET_OS_OSX #import "CPTDefinitions.h" diff --git a/framework/iPhoneOnly/CPTPlatformSpecificFunctions.m b/framework/iPhoneOnly/CPTPlatformSpecificFunctions.m index c72e3e0fa..c8f968802 100644 --- a/framework/iPhoneOnly/CPTPlatformSpecificFunctions.m +++ b/framework/iPhoneOnly/CPTPlatformSpecificFunctions.m @@ -1,7 +1,7 @@ -#if TARGET_OS_OSX - #import "CPTPlatformSpecificFunctions.h" +#if TARGET_OS_OSX + #pragma mark Graphics Context // linked list to store saved contexts @@ -146,8 +146,6 @@ CPTRGBAColor CPTRGBAColorFromNSColor(NSColor *__nonnull nsColor) #else -#import "CPTPlatformSpecificFunctions.h" - #import "CPTExceptions.h" #pragma mark - diff --git a/framework/iPhoneOnly/CPTTextStylePlatformSpecific.h b/framework/iPhoneOnly/CPTTextStylePlatformSpecific.h index 11b070ce8..5e0199411 100644 --- a/framework/iPhoneOnly/CPTTextStylePlatformSpecific.h +++ b/framework/iPhoneOnly/CPTTextStylePlatformSpecific.h @@ -1,3 +1,33 @@ +/// @file + +#import + +#if TARGET_OS_OSX +#import + +/** + * @brief Enumeration of paragraph alignments. + **/ +#if (MAC_OS_X_VERSION_MAX_ALLOWED >= 101200) +typedef NS_ENUM (NSInteger, CPTTextAlignment) { + CPTTextAlignmentLeft = NSTextAlignmentLeft, ///< Left alignment. + CPTTextAlignmentCenter = NSTextAlignmentCenter, ///< Center alignment. + CPTTextAlignmentRight = NSTextAlignmentRight, ///< Right alignment. + CPTTextAlignmentJustified = NSTextAlignmentJustified, ///< Justified alignment. + CPTTextAlignmentNatural = NSTextAlignmentNatural ///< Natural alignment of the text's script. +}; +#else +typedef NS_ENUM (NSInteger, CPTTextAlignment) { + CPTTextAlignmentLeft = NSLeftTextAlignment, ///< Left alignment. + CPTTextAlignmentCenter = NSCenterTextAlignment, ///< Center alignment. + CPTTextAlignmentRight = NSRightTextAlignment, ///< Right alignment. + CPTTextAlignmentJustified = NSJustifiedTextAlignment, ///< Justified alignment. + CPTTextAlignmentNatural = NSNaturalTextAlignment ///< Natural alignment of the text's script. +}; +#endif + +#else + #import /// @file @@ -12,3 +42,5 @@ typedef NS_ENUM (NSInteger, CPTTextAlignment) { CPTTextAlignmentJustified = NSTextAlignmentJustified, ///< Justified alignment. CPTTextAlignmentNatural = NSTextAlignmentNatural ///< Natural alignment of the text's script. }; + +#endif diff --git a/framework/iPhoneOnly/CPTTextStylePlatformSpecific.m b/framework/iPhoneOnly/CPTTextStylePlatformSpecific.m index d6e5d03f8..2cade21d9 100644 --- a/framework/iPhoneOnly/CPTTextStylePlatformSpecific.m +++ b/framework/iPhoneOnly/CPTTextStylePlatformSpecific.m @@ -1,5 +1,286 @@ #import "CPTTextStylePlatformSpecific.h" +#if TARGET_OS_OSX + +#import "CPTMutableTextStyle.h" +#import "CPTPlatformSpecificCategories.h" +#import "CPTPlatformSpecificFunctions.h" + +@implementation CPTTextStyle(CPTPlatformSpecificTextStyleExtensions) + +/** @property nonnull CPTDictionary *attributes + * @brief A dictionary of standard text attributes suitable for formatting an NSAttributedString. + * + * The dictionary will contain values for the following keys that represent the receiver's text style: + * - #NSFontAttributeName: The font used to draw text. If missing, no font information was specified. + * - #NSForegroundColorAttributeName: The color used to draw text. If missing, no color information was specified. + * - #NSParagraphStyleAttributeName: The text alignment and line break mode used to draw multi-line text. + **/ +@dynamic attributes; + +#pragma mark - +#pragma mark Init/Dealloc + +/** @brief Creates and returns a new CPTTextStyle instance initialized from a dictionary of text attributes. + * + * The text style will be initalized with values associated with the following keys: + * - #NSFontAttributeName: Sets the @link CPTTextStyle::fontName fontName @endlink + * and @link CPTTextStyle::fontSize fontSize @endlink. + * - #NSForegroundColorAttributeName: Sets the @link CPTTextStyle::color color @endlink. + * - #NSParagraphStyleAttributeName: Sets the @link CPTTextStyle::textAlignment textAlignment @endlink and @link CPTTextStyle::lineBreakMode lineBreakMode @endlink. + * + * Properties associated with missing keys will be inialized to their default values. + * + * @param attributes A dictionary of standard text attributes. + * @return A new CPTTextStyle instance. + **/ ++(nonnull instancetype)textStyleWithAttributes:(nullable CPTDictionary *)attributes +{ + CPTMutableTextStyle *newStyle = [CPTMutableTextStyle textStyle]; + + // Font + NSFont *styleFont = attributes[NSFontAttributeName]; + + if ( styleFont ) { + newStyle.font = styleFont; + newStyle.fontName = styleFont.fontName; + newStyle.fontSize = styleFont.pointSize; + } + + // Color + NSColor *styleColor = attributes[NSForegroundColorAttributeName]; + + if ( styleColor ) { + // CGColor property is available in macOS 10.8 and later + if ( [styleColor respondsToSelector:@selector(CGColor)] ) { + newStyle.color = [CPTColor colorWithCGColor:styleColor.CGColor]; + } + else { + const NSInteger numberOfComponents = styleColor.numberOfComponents; + + CGFloat *components = calloc((size_t)numberOfComponents, sizeof(CGFloat)); + [styleColor getComponents:components]; + + CGColorSpaceRef colorSpace = styleColor.colorSpace.CGColorSpace; + CGColorRef styleCGColor = CGColorCreate(colorSpace, components); + + newStyle.color = [CPTColor colorWithCGColor:styleCGColor]; + + CGColorRelease(styleCGColor); + free(components); + } + } + + // Text alignment and line break mode + NSParagraphStyle *paragraphStyle = attributes[NSParagraphStyleAttributeName]; + + if ( paragraphStyle ) { + newStyle.textAlignment = (CPTTextAlignment)paragraphStyle.alignment; + newStyle.lineBreakMode = paragraphStyle.lineBreakMode; + } + + return [newStyle copy]; +} + +#pragma mark - +#pragma mark Accessors + +/// @cond + +-(nonnull CPTDictionary *)attributes +{ + CPTMutableDictionary *myAttributes = [NSMutableDictionary dictionary]; + + // Font + NSFont *styleFont = self.font; + NSString *fontName = self.fontName; + + if ((styleFont == nil) && fontName ) { + styleFont = [NSFont fontWithName:fontName size:self.fontSize]; + } + + if ( styleFont ) { + [myAttributes setValue:styleFont + forKey:NSFontAttributeName]; + } + + // Color + NSColor *styleColor = self.color.nsColor; + + if ( styleColor ) { + [myAttributes setValue:styleColor + forKey:NSForegroundColorAttributeName]; + } + + // Text alignment and line break mode + NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; + + paragraphStyle.alignment = (NSTextAlignment)self.textAlignment; + paragraphStyle.lineBreakMode = self.lineBreakMode; + + [myAttributes setValue:paragraphStyle + forKey:NSParagraphStyleAttributeName]; + + return [myAttributes copy]; +} + +/// @endcond + +@end + +#pragma mark - + +@implementation CPTMutableTextStyle(CPTPlatformSpecificMutableTextStyleExtensions) + +/** @brief Creates and returns a new CPTMutableTextStyle instance initialized from a dictionary of text attributes. + * + * The text style will be initalized with values associated with the following keys: + * - #NSFontAttributeName: Sets the @link CPTMutableTextStyle::fontName fontName @endlink + * and @link CPTMutableTextStyle::fontSize fontSize @endlink. + * - #NSForegroundColorAttributeName: Sets the @link CPTMutableTextStyle::color color @endlink. + * - #NSParagraphStyleAttributeName: Sets the @link CPTMutableTextStyle::textAlignment textAlignment @endlink and @link CPTMutableTextStyle::lineBreakMode lineBreakMode @endlink. + * + * Properties associated with missing keys will be inialized to their default values. + * + * @param attributes A dictionary of standard text attributes. + * @return A new CPTMutableTextStyle instance. + **/ ++(nonnull instancetype)textStyleWithAttributes:(nullable CPTDictionary *)attributes +{ + CPTMutableTextStyle *newStyle = [CPTMutableTextStyle textStyle]; + + // Font + NSFont *styleFont = attributes[NSFontAttributeName]; + + if ( styleFont ) { + newStyle.font = styleFont; + newStyle.fontName = styleFont.fontName; + newStyle.fontSize = styleFont.pointSize; + } + + // Color + NSColor *styleColor = attributes[NSForegroundColorAttributeName]; + + if ( styleColor ) { + // CGColor property is available in macOS 10.8 and later + if ( [styleColor respondsToSelector:@selector(CGColor)] ) { + newStyle.color = [CPTColor colorWithCGColor:styleColor.CGColor]; + } + else { + const NSInteger numberOfComponents = styleColor.numberOfComponents; + + CGFloat *components = calloc((size_t)numberOfComponents, sizeof(CGFloat)); + [styleColor getComponents:components]; + + CGColorSpaceRef colorSpace = styleColor.colorSpace.CGColorSpace; + CGColorRef styleCGColor = CGColorCreate(colorSpace, components); + + newStyle.color = [CPTColor colorWithCGColor:styleCGColor]; + + CGColorRelease(styleCGColor); + free(components); + } + } + + // Text alignment and line break mode + NSParagraphStyle *paragraphStyle = attributes[NSParagraphStyleAttributeName]; + + if ( paragraphStyle ) { + newStyle.textAlignment = (CPTTextAlignment)paragraphStyle.alignment; + newStyle.lineBreakMode = paragraphStyle.lineBreakMode; + } + + return newStyle; +} + +@end + +#pragma mark - + +@implementation NSString(CPTTextStyleExtensions) + +#pragma mark - +#pragma mark Layout + +/** @brief Determines the size of text drawn with the given style. + * @param style The text style. + * @return The size of the text when drawn with the given style. + **/ +-(CGSize)sizeWithTextStyle:(nullable CPTTextStyle *)style +{ + CGRect rect = CGRectZero; + + if ( [self respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)] ) { + rect = [self boundingRectWithSize:CPTSizeMake(10000.0, 10000.0) + options:CPTStringDrawingOptions + attributes:style.attributes + context:nil]; + } + else { + rect = [self boundingRectWithSize:CPTSizeMake(10000.0, 10000.0) + options:CPTStringDrawingOptions + attributes:style.attributes]; + } + + CGSize textSize = rect.size; + + textSize.width = ceil(textSize.width); + textSize.height = ceil(textSize.height); + + return textSize; +} + +#pragma mark - +#pragma mark Drawing + +/** @brief Draws the text into the given graphics context using the given style. + * @param rect The bounding rectangle in which to draw the text. + * @param style The text style. + * @param context The graphics context to draw into. + **/ +-(void)drawInRect:(CGRect)rect withTextStyle:(nullable CPTTextStyle *)style inContext:(nonnull CGContextRef)context +{ + if ( style.color == nil ) { + return; + } + + CGColorRef textColor = style.color.cgColor; + + CGContextSetStrokeColorWithColor(context, textColor); + CGContextSetFillColorWithColor(context, textColor); + + CPTPushCGContext(context); + + NSFont *theFont = style.font; + NSString *fontName = style.fontName; + + if ((theFont == nil) && fontName ) { + theFont = [NSFont fontWithName:fontName size:style.fontSize]; + } + + if ( theFont ) { + NSColor *foregroundColor = style.color.nsColor; + NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; + paragraphStyle.alignment = (NSTextAlignment)style.textAlignment; + paragraphStyle.lineBreakMode = style.lineBreakMode; + + CPTDictionary *attributes = @{ + NSFontAttributeName: theFont, + NSForegroundColorAttributeName: foregroundColor, + NSParagraphStyleAttributeName: paragraphStyle + }; + [self drawWithRect:NSRectFromCGRect(rect) + options:CPTStringDrawingOptions + attributes:attributes]; + } + CPTPopCGContext(); +} + +@end + + +#else + #import "CPTColor.h" #import "CPTMutableTextStyle.h" #import "CPTPlatformSpecificCategories.h" @@ -263,3 +544,5 @@ -(void)drawInRect:(CGRect)rect withTextStyle:(nullable CPTTextStyle *)style inCo } @end + +#endif From ecdb911575bda19aef559786dc4a66eb9a74d8bd Mon Sep 17 00:00:00 2001 From: 3a4oT Date: Sat, 12 Dec 2020 00:05:22 +0200 Subject: [PATCH 030/245] moved xcode project settings to PlatformSpecific layout. Xcode tests passed. --- framework/CorePlot.xcodeproj/project.pbxproj | 163 ++--- framework/MacOnly/CPTGraphHostingView.h | 28 - framework/MacOnly/CPTGraphHostingView.m | 685 ------------------ framework/MacOnly/CPTImagePlatformSpecific.m | 66 -- .../MacOnly/CPTPlatformSpecificCategories.h | 36 - .../MacOnly/CPTPlatformSpecificCategories.m | 117 --- .../MacOnly/CPTPlatformSpecificDefines.h | 6 - .../MacOnly/CPTPlatformSpecificFunctions.h | 32 - .../MacOnly/CPTPlatformSpecificFunctions.m | 142 ---- .../MacOnly/CPTTextStylePlatformSpecific.h | 22 - .../MacOnly/CPTTextStylePlatformSpecific.m | 277 ------- .../CPTGraphHostingView.h | 0 .../CPTGraphHostingView.m | 0 .../CPTImagePlatformSpecific.m | 0 .../CPTPlatformSpecificCategories.h | 0 .../CPTPlatformSpecificCategories.m | 0 .../CPTPlatformSpecificDefines.h | 0 .../CPTPlatformSpecificDefines.m | 0 .../CPTPlatformSpecificFunctions.h | 0 .../CPTPlatformSpecificFunctions.m | 0 .../CPTTextStylePlatformSpecific.h | 0 .../CPTTextStylePlatformSpecific.m | 0 .../iPhoneOnly/CPTPlatformSpecificDefines.m | 0 23 files changed, 58 insertions(+), 1516 deletions(-) delete mode 100644 framework/MacOnly/CPTGraphHostingView.h delete mode 100644 framework/MacOnly/CPTGraphHostingView.m delete mode 100644 framework/MacOnly/CPTImagePlatformSpecific.m delete mode 100644 framework/MacOnly/CPTPlatformSpecificCategories.h delete mode 100644 framework/MacOnly/CPTPlatformSpecificCategories.m delete mode 100644 framework/MacOnly/CPTPlatformSpecificDefines.h delete mode 100644 framework/MacOnly/CPTPlatformSpecificFunctions.h delete mode 100644 framework/MacOnly/CPTPlatformSpecificFunctions.m delete mode 100644 framework/MacOnly/CPTTextStylePlatformSpecific.h delete mode 100644 framework/MacOnly/CPTTextStylePlatformSpecific.m rename framework/{iPhoneOnly => PlatformSpecific}/CPTGraphHostingView.h (100%) rename framework/{iPhoneOnly => PlatformSpecific}/CPTGraphHostingView.m (100%) rename framework/{iPhoneOnly => PlatformSpecific}/CPTImagePlatformSpecific.m (100%) rename framework/{iPhoneOnly => PlatformSpecific}/CPTPlatformSpecificCategories.h (100%) rename framework/{iPhoneOnly => PlatformSpecific}/CPTPlatformSpecificCategories.m (100%) rename framework/{iPhoneOnly => PlatformSpecific}/CPTPlatformSpecificDefines.h (100%) rename framework/{MacOnly => PlatformSpecific}/CPTPlatformSpecificDefines.m (100%) rename framework/{iPhoneOnly => PlatformSpecific}/CPTPlatformSpecificFunctions.h (100%) rename framework/{iPhoneOnly => PlatformSpecific}/CPTPlatformSpecificFunctions.m (100%) rename framework/{iPhoneOnly => PlatformSpecific}/CPTTextStylePlatformSpecific.h (100%) rename framework/{iPhoneOnly => PlatformSpecific}/CPTTextStylePlatformSpecific.m (100%) delete mode 100644 framework/iPhoneOnly/CPTPlatformSpecificDefines.m diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 7cef332f2..0a9cea8ee 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -104,12 +104,6 @@ 0772C9300FE2F89000EC4C16 /* _CPTDarkGradientTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = 0772C92E0FE2F89000EC4C16 /* _CPTDarkGradientTheme.m */; }; 0783DD550FBF097E006C3696 /* CPTXYAxis.h in Headers */ = {isa = PBXBuildFile; fileRef = 0783DD530FBF097E006C3696 /* CPTXYAxis.h */; settings = {ATTRIBUTES = (Public, ); }; }; 0783DD560FBF097E006C3696 /* CPTXYAxis.m in Sources */ = {isa = PBXBuildFile; fileRef = 0783DD540FBF097E006C3696 /* CPTXYAxis.m */; }; - 0789EF370FB9E90700C0A613 /* CPTPlatformSpecificDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0789EF330FB9E90700C0A613 /* CPTPlatformSpecificDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0789EF380FB9E90700C0A613 /* CPTPlatformSpecificDefines.m in Sources */ = {isa = PBXBuildFile; fileRef = 0789EF340FB9E90700C0A613 /* CPTPlatformSpecificDefines.m */; }; - 0789EF4B0FB9EBD600C0A613 /* CPTPlatformSpecificCategories.h in Headers */ = {isa = PBXBuildFile; fileRef = 0789EF470FB9EBD600C0A613 /* CPTPlatformSpecificCategories.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0789EF4C0FB9EBD600C0A613 /* CPTPlatformSpecificCategories.m in Sources */ = {isa = PBXBuildFile; fileRef = 0789EF480FB9EBD600C0A613 /* CPTPlatformSpecificCategories.m */; }; - 0789EF8B0FB9EE4700C0A613 /* CPTPlatformSpecificFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 0789EF890FB9EE4700C0A613 /* CPTPlatformSpecificFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0789EF8C0FB9EE4700C0A613 /* CPTPlatformSpecificFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 0789EF8A0FB9EE4700C0A613 /* CPTPlatformSpecificFunctions.m */; }; 078F42DB0FACC075006E670B /* NSNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 078F42D90FACC075006E670B /* NSNumberExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; 078F42DC0FACC075006E670B /* NSNumberExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 078F42DA0FACC075006E670B /* NSNumberExtensions.m */; }; 07975C430F3B816600DE45DC /* CPTXYAxisSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 07975C410F3B816600DE45DC /* CPTXYAxisSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -148,8 +142,6 @@ 07BF0DF40F2B7BFB002FCEA7 /* CPTDefinitions.m in Sources */ = {isa = PBXBuildFile; fileRef = 07BF0DF20F2B7BFB002FCEA7 /* CPTDefinitions.m */; }; 07C4679B0FE1A24C00299939 /* CPTMutableTextStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 07C467990FE1A24C00299939 /* CPTMutableTextStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; 07C4679C0FE1A24C00299939 /* CPTMutableTextStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 07C4679A0FE1A24C00299939 /* CPTMutableTextStyle.m */; }; - 07C467B80FE1A96E00299939 /* CPTTextStylePlatformSpecific.h in Headers */ = {isa = PBXBuildFile; fileRef = 07C467B60FE1A96E00299939 /* CPTTextStylePlatformSpecific.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 07C467B90FE1A96E00299939 /* CPTTextStylePlatformSpecific.m in Sources */ = {isa = PBXBuildFile; fileRef = 07C467B70FE1A96E00299939 /* CPTTextStylePlatformSpecific.m */; }; 07CA112F0FAC8F85000861CE /* CPTGradient.h in Headers */ = {isa = PBXBuildFile; fileRef = 07CA112D0FAC8F85000861CE /* CPTGradient.h */; settings = {ATTRIBUTES = (Public, ); }; }; 07CA11300FAC8F85000861CE /* CPTGradient.m in Sources */ = {isa = PBXBuildFile; fileRef = 07CA112E0FAC8F85000861CE /* CPTGradient.m */; }; 07E10BB111D1016B000B8DAB /* CPTPlotSpaceAnnotation.h in Headers */ = {isa = PBXBuildFile; fileRef = 07E10BAF11D1016B000B8DAB /* CPTPlotSpaceAnnotation.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -197,8 +189,6 @@ BC55023710059F22005DF982 /* _CPTStocksTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = BC55023110059F22005DF982 /* _CPTStocksTheme.m */; }; BC74A33010FC402600E7E90D /* CPTPieChart.h in Headers */ = {isa = PBXBuildFile; fileRef = BC74A32E10FC402600E7E90D /* CPTPieChart.h */; settings = {ATTRIBUTES = (Public, ); }; }; BC74A33110FC402600E7E90D /* CPTPieChart.m in Sources */ = {isa = PBXBuildFile; fileRef = BC74A32F10FC402600E7E90D /* CPTPieChart.m */; }; - BC79F1360FD1CD6600510976 /* CPTGraphHostingView.h in Headers */ = {isa = PBXBuildFile; fileRef = BC79F1340FD1CD6600510976 /* CPTGraphHostingView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BC79F1370FD1CD6600510976 /* CPTGraphHostingView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC79F1350FD1CD6600510976 /* CPTGraphHostingView.m */; }; BCFC7C3710921FDB00DAECAA /* CPTAxisTitle.h in Headers */ = {isa = PBXBuildFile; fileRef = BCFC7C3510921FDB00DAECAA /* CPTAxisTitle.h */; settings = {ATTRIBUTES = (Public, ); }; }; BCFC7C3810921FDB00DAECAA /* CPTAxisTitle.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFC7C3610921FDB00DAECAA /* CPTAxisTitle.m */; }; C30550ED1399BE5400E0151F /* CPTLegendEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = C30550EB1399BE5400E0151F /* CPTLegendEntry.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -248,7 +238,6 @@ C377B3BC1C122AA600891DF8 /* CPTCalendarFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C377B3BA1C122AA600891DF8 /* CPTCalendarFormatterTests.m */; }; C377B3BD1C122AA600891DF8 /* CPTCalendarFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C377B3BA1C122AA600891DF8 /* CPTCalendarFormatterTests.m */; }; C377B3BE1C122AA600891DF8 /* CPTCalendarFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C377B3BA1C122AA600891DF8 /* CPTCalendarFormatterTests.m */; }; - C3791D09191D4C4C001EC514 /* CPTImagePlatformSpecific.m in Sources */ = {isa = PBXBuildFile; fileRef = C3791D07191D4C4C001EC514 /* CPTImagePlatformSpecific.m */; }; C37EA5CB1BC83F2A0091C8F7 /* CPTGraphHostingView.m in Sources */ = {isa = PBXBuildFile; fileRef = C38A0B281A46265300D45436 /* CPTGraphHostingView.m */; }; C37EA5CC1BC83F2A0091C8F7 /* CPTLayerAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 07E10BBA11D10183000B8DAB /* CPTLayerAnnotation.m */; }; C37EA5CD1BC83F2A0091C8F7 /* CPTLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7E7EB0F4B4F9600F9BCBB /* CPTLayer.m */; }; @@ -866,6 +855,17 @@ C3F97F1F17A9E07C00A52FF2 /* CPTFunctionDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F97F1D17A9E07B00A52FF2 /* CPTFunctionDataSource.m */; }; D0C0477D12D6560900DA8047 /* CPTRangePlot.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C0477B12D6560900DA8047 /* CPTRangePlot.m */; }; D0C0477E12D6560900DA8047 /* CPTRangePlot.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C0477C12D6560900DA8047 /* CPTRangePlot.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E04244CC25841F1200C61A67 /* CPTPlatformSpecificDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = C38A0B1A1A46264500D45436 /* CPTPlatformSpecificDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E04244E925841F1A00C61A67 /* CPTPlatformSpecificDefines.m in Sources */ = {isa = PBXBuildFile; fileRef = C38A0B1B1A46264500D45436 /* CPTPlatformSpecificDefines.m */; }; + E04244F825841F2800C61A67 /* CPTPlatformSpecificCategories.h in Headers */ = {isa = PBXBuildFile; fileRef = C38A0B181A46264500D45436 /* CPTPlatformSpecificCategories.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E042451525841F2E00C61A67 /* CPTPlatformSpecificCategories.m in Sources */ = {isa = PBXBuildFile; fileRef = C38A0B191A46264500D45436 /* CPTPlatformSpecificCategories.m */; }; + E042452425841F3100C61A67 /* CPTPlatformSpecificFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = C38A0B1C1A46264500D45436 /* CPTPlatformSpecificFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E042454125841F3800C61A67 /* CPTPlatformSpecificFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = C38A0B1D1A46264500D45436 /* CPTPlatformSpecificFunctions.m */; }; + E042455025841F3B00C61A67 /* CPTGraphHostingView.h in Headers */ = {isa = PBXBuildFile; fileRef = C38A0B271A46265300D45436 /* CPTGraphHostingView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E042456D25841F4200C61A67 /* CPTGraphHostingView.m in Sources */ = {isa = PBXBuildFile; fileRef = C38A0B281A46265300D45436 /* CPTGraphHostingView.m */; }; + E042459825841FCF00C61A67 /* CPTTextStylePlatformSpecific.m in Sources */ = {isa = PBXBuildFile; fileRef = C38A0A541A461F9700D45436 /* CPTTextStylePlatformSpecific.m */; }; + E04245A725841FD300C61A67 /* CPTTextStylePlatformSpecific.h in Headers */ = {isa = PBXBuildFile; fileRef = C38A0A531A461F9700D45436 /* CPTTextStylePlatformSpecific.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E04245E02584204500C61A67 /* CPTImagePlatformSpecific.m in Sources */ = {isa = PBXBuildFile; fileRef = C38A0A591A4620B800D45436 /* CPTImagePlatformSpecific.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -941,12 +941,6 @@ 0772C92E0FE2F89000EC4C16 /* _CPTDarkGradientTheme.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = _CPTDarkGradientTheme.m; sourceTree = ""; }; 0783DD530FBF097E006C3696 /* CPTXYAxis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTXYAxis.h; sourceTree = ""; }; 0783DD540FBF097E006C3696 /* CPTXYAxis.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTXYAxis.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 0789EF330FB9E90700C0A613 /* CPTPlatformSpecificDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTPlatformSpecificDefines.h; sourceTree = ""; }; - 0789EF340FB9E90700C0A613 /* CPTPlatformSpecificDefines.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTPlatformSpecificDefines.m; sourceTree = ""; }; - 0789EF470FB9EBD600C0A613 /* CPTPlatformSpecificCategories.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTPlatformSpecificCategories.h; sourceTree = ""; }; - 0789EF480FB9EBD600C0A613 /* CPTPlatformSpecificCategories.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlatformSpecificCategories.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 0789EF890FB9EE4700C0A613 /* CPTPlatformSpecificFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTPlatformSpecificFunctions.h; sourceTree = ""; }; - 0789EF8A0FB9EE4700C0A613 /* CPTPlatformSpecificFunctions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTPlatformSpecificFunctions.m; sourceTree = ""; }; 078F42D90FACC075006E670B /* NSNumberExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = NSNumberExtensions.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; 078F42DA0FACC075006E670B /* NSNumberExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = NSNumberExtensions.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; 07975C410F3B816600DE45DC /* CPTXYAxisSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTXYAxisSet.h; sourceTree = ""; }; @@ -986,8 +980,6 @@ 07BF0DF20F2B7BFB002FCEA7 /* CPTDefinitions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTDefinitions.m; sourceTree = ""; }; 07C467990FE1A24C00299939 /* CPTMutableTextStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTMutableTextStyle.h; sourceTree = ""; }; 07C4679A0FE1A24C00299939 /* CPTMutableTextStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTMutableTextStyle.m; sourceTree = ""; }; - 07C467B60FE1A96E00299939 /* CPTTextStylePlatformSpecific.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPTTextStylePlatformSpecific.h; path = MacOnly/CPTTextStylePlatformSpecific.h; sourceTree = SOURCE_ROOT; }; - 07C467B70FE1A96E00299939 /* CPTTextStylePlatformSpecific.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CPTTextStylePlatformSpecific.m; path = MacOnly/CPTTextStylePlatformSpecific.m; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; 07CA112D0FAC8F85000861CE /* CPTGradient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTGradient.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; 07CA112E0FAC8F85000861CE /* CPTGradient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTGradient.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; 07E10BAF11D1016B000B8DAB /* CPTPlotSpaceAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTPlotSpaceAnnotation.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; @@ -1053,8 +1045,6 @@ BC55023110059F22005DF982 /* _CPTStocksTheme.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = _CPTStocksTheme.m; sourceTree = ""; }; BC74A32E10FC402600E7E90D /* CPTPieChart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTPieChart.h; sourceTree = ""; }; BC74A32F10FC402600E7E90D /* CPTPieChart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPieChart.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - BC79F1340FD1CD6600510976 /* CPTGraphHostingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTGraphHostingView.h; sourceTree = ""; }; - BC79F1350FD1CD6600510976 /* CPTGraphHostingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTGraphHostingView.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; BCFC7C3510921FDB00DAECAA /* CPTAxisTitle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTAxisTitle.h; sourceTree = ""; }; BCFC7C3610921FDB00DAECAA /* CPTAxisTitle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAxisTitle.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; C30550EB1399BE5400E0151F /* CPTLegendEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLegendEntry.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; @@ -1107,7 +1097,6 @@ C36E89B911EE7F97003DE309 /* CPTPlotRangeTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTPlotRangeTests.m; sourceTree = ""; }; C377B3B91C122AA600891DF8 /* CPTCalendarFormatterTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTCalendarFormatterTests.h; sourceTree = ""; }; C377B3BA1C122AA600891DF8 /* CPTCalendarFormatterTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTCalendarFormatterTests.m; sourceTree = ""; }; - C3791D07191D4C4C001EC514 /* CPTImagePlatformSpecific.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CPTImagePlatformSpecific.m; path = MacOnly/CPTImagePlatformSpecific.m; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; C37A406320E02B9D00C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/CorePlot-tvOSTests-Info.plist"; sourceTree = ""; }; C37A406520E02BA100C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/CorePlot-CocoaTouchTests-Info.plist"; sourceTree = ""; }; C37A406720E02BA500C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/CorePlot-iOSTests-Info.plist"; sourceTree = ""; }; @@ -1118,17 +1107,17 @@ C38A09821A46185300D45436 /* UnitTests iOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "UnitTests iOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; C38A09BA1A4619A900D45436 /* libCorePlot-CocoaTouch.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libCorePlot-CocoaTouch.a"; sourceTree = BUILT_PRODUCTS_DIR; }; C38A09C41A4619A900D45436 /* CorePlot-CocoaTouchTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "CorePlot-CocoaTouchTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - C38A0A531A461F9700D45436 /* CPTTextStylePlatformSpecific.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPTTextStylePlatformSpecific.h; path = iPhoneOnly/CPTTextStylePlatformSpecific.h; sourceTree = SOURCE_ROOT; }; - C38A0A541A461F9700D45436 /* CPTTextStylePlatformSpecific.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CPTTextStylePlatformSpecific.m; path = iPhoneOnly/CPTTextStylePlatformSpecific.m; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - C38A0A591A4620B800D45436 /* CPTImagePlatformSpecific.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CPTImagePlatformSpecific.m; path = iPhoneOnly/CPTImagePlatformSpecific.m; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - C38A0B181A46264500D45436 /* CPTPlatformSpecificCategories.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPTPlatformSpecificCategories.h; path = iPhoneOnly/CPTPlatformSpecificCategories.h; sourceTree = SOURCE_ROOT; }; - C38A0B191A46264500D45436 /* CPTPlatformSpecificCategories.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CPTPlatformSpecificCategories.m; path = iPhoneOnly/CPTPlatformSpecificCategories.m; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - C38A0B1A1A46264500D45436 /* CPTPlatformSpecificDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPTPlatformSpecificDefines.h; path = iPhoneOnly/CPTPlatformSpecificDefines.h; sourceTree = SOURCE_ROOT; }; - C38A0B1B1A46264500D45436 /* CPTPlatformSpecificDefines.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CPTPlatformSpecificDefines.m; path = iPhoneOnly/CPTPlatformSpecificDefines.m; sourceTree = SOURCE_ROOT; }; - C38A0B1C1A46264500D45436 /* CPTPlatformSpecificFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPTPlatformSpecificFunctions.h; path = iPhoneOnly/CPTPlatformSpecificFunctions.h; sourceTree = SOURCE_ROOT; }; - C38A0B1D1A46264500D45436 /* CPTPlatformSpecificFunctions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CPTPlatformSpecificFunctions.m; path = iPhoneOnly/CPTPlatformSpecificFunctions.m; sourceTree = SOURCE_ROOT; }; - C38A0B271A46265300D45436 /* CPTGraphHostingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPTGraphHostingView.h; path = iPhoneOnly/CPTGraphHostingView.h; sourceTree = SOURCE_ROOT; }; - C38A0B281A46265300D45436 /* CPTGraphHostingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CPTGraphHostingView.m; path = iPhoneOnly/CPTGraphHostingView.m; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C38A0A531A461F9700D45436 /* CPTTextStylePlatformSpecific.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPTTextStylePlatformSpecific.h; path = PlatformSpecific/CPTTextStylePlatformSpecific.h; sourceTree = SOURCE_ROOT; }; + C38A0A541A461F9700D45436 /* CPTTextStylePlatformSpecific.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CPTTextStylePlatformSpecific.m; path = PlatformSpecific/CPTTextStylePlatformSpecific.m; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C38A0A591A4620B800D45436 /* CPTImagePlatformSpecific.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CPTImagePlatformSpecific.m; path = PlatformSpecific/CPTImagePlatformSpecific.m; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C38A0B181A46264500D45436 /* CPTPlatformSpecificCategories.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPTPlatformSpecificCategories.h; path = PlatformSpecific/CPTPlatformSpecificCategories.h; sourceTree = SOURCE_ROOT; }; + C38A0B191A46264500D45436 /* CPTPlatformSpecificCategories.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CPTPlatformSpecificCategories.m; path = PlatformSpecific/CPTPlatformSpecificCategories.m; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C38A0B1A1A46264500D45436 /* CPTPlatformSpecificDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPTPlatformSpecificDefines.h; path = PlatformSpecific/CPTPlatformSpecificDefines.h; sourceTree = SOURCE_ROOT; }; + C38A0B1B1A46264500D45436 /* CPTPlatformSpecificDefines.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CPTPlatformSpecificDefines.m; path = PlatformSpecific/CPTPlatformSpecificDefines.m; sourceTree = SOURCE_ROOT; }; + C38A0B1C1A46264500D45436 /* CPTPlatformSpecificFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPTPlatformSpecificFunctions.h; path = PlatformSpecific/CPTPlatformSpecificFunctions.h; sourceTree = SOURCE_ROOT; }; + C38A0B1D1A46264500D45436 /* CPTPlatformSpecificFunctions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CPTPlatformSpecificFunctions.m; path = PlatformSpecific/CPTPlatformSpecificFunctions.m; sourceTree = SOURCE_ROOT; }; + C38A0B271A46265300D45436 /* CPTGraphHostingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPTGraphHostingView.h; path = PlatformSpecific/CPTGraphHostingView.h; sourceTree = SOURCE_ROOT; }; + C38A0B281A46265300D45436 /* CPTGraphHostingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CPTGraphHostingView.m; path = PlatformSpecific/CPTGraphHostingView.m; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; C38DD49111A04B7A002A68E7 /* CPTGridLineGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTGridLineGroup.h; sourceTree = ""; }; C38DD49211A04B7A002A68E7 /* CPTGridLineGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTGridLineGroup.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; C3920AC21395B6500045F3BB /* CPTLegend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLegend.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; @@ -1356,8 +1345,7 @@ 07B69A5C12B6215000F4C16C /* CPTTextStyle.m */, 07C467990FE1A24C00299939 /* CPTMutableTextStyle.h */, 07C4679A0FE1A24C00299939 /* CPTMutableTextStyle.m */, - C3A959D210116FE100BF9739 /* Mac Specific */, - C38A0A521A461F5D00D45436 /* iOS Specific */, + C38A0A521A461F5D00D45436 /* Platform Specific */, 4CC9A36C0FD98AB200CFBE5E /* Tests */, ); name = Text; @@ -1443,22 +1431,6 @@ name = Formatters; sourceTree = ""; }; - 07BF0D5F0F2B6FE1002FCEA7 /* Mac Specific */ = { - isa = PBXGroup; - children = ( - 0789EF330FB9E90700C0A613 /* CPTPlatformSpecificDefines.h */, - 0789EF340FB9E90700C0A613 /* CPTPlatformSpecificDefines.m */, - 0789EF470FB9EBD600C0A613 /* CPTPlatformSpecificCategories.h */, - 0789EF480FB9EBD600C0A613 /* CPTPlatformSpecificCategories.m */, - 0789EF890FB9EE4700C0A613 /* CPTPlatformSpecificFunctions.h */, - 0789EF8A0FB9EE4700C0A613 /* CPTPlatformSpecificFunctions.m */, - BC79F1340FD1CD6600510976 /* CPTGraphHostingView.h */, - BC79F1350FD1CD6600510976 /* CPTGraphHostingView.m */, - ); - name = "Mac Specific"; - path = MacOnly; - sourceTree = ""; - }; 07BF0D600F2B6FE1002FCEA7 /* Source */ = { isa = PBXGroup; children = ( @@ -1601,8 +1573,7 @@ children = ( 4C99408D0F45F71100DC824F /* Testing */, 07BF0D600F2B6FE1002FCEA7 /* Source */, - 07BF0D5F0F2B6FE1002FCEA7 /* Mac Specific */, - C38A0AA61A4621BC00D45436 /* iOS Specific */, + C38A0AA61A4621BC00D45436 /* Platform Specific */, 9021E4920FC5C6DD00443472 /* Documentation */, C3B25EDE1AC23A7D0063CCD8 /* CocoaPods */, 32C88DFF0371C24200C91783 /* Other Sources */, @@ -1767,8 +1738,7 @@ C32EE1BF13EC4BE700038266 /* CPTMutableShadow.h */, C32EE1C013EC4BE700038266 /* CPTMutableShadow.m */, 0704A2100FB56B9400A09979 /* Fills */, - C32DDEE2191C672700E0FE84 /* Mac Specific */, - C38A0A581A4620A700D45436 /* iOS Specific */, + C38A0A581A4620A700D45436 /* Platform Specific */, C3D979A613D215AD00145DFF /* Tests */, ); name = Drawing; @@ -1816,14 +1786,6 @@ name = Layout; sourceTree = ""; }; - C32DDEE2191C672700E0FE84 /* Mac Specific */ = { - isa = PBXGroup; - children = ( - C3791D07191D4C4C001EC514 /* CPTImagePlatformSpecific.m */, - ); - name = "Mac Specific"; - sourceTree = ""; - }; C34AFE5711021CE20041675A /* Plot Symbols */ = { isa = PBXGroup; children = ( @@ -1833,24 +1795,24 @@ name = "Plot Symbols"; sourceTree = ""; }; - C38A0A521A461F5D00D45436 /* iOS Specific */ = { + C38A0A521A461F5D00D45436 /* Platform Specific */ = { isa = PBXGroup; children = ( C38A0A531A461F9700D45436 /* CPTTextStylePlatformSpecific.h */, C38A0A541A461F9700D45436 /* CPTTextStylePlatformSpecific.m */, ); - name = "iOS Specific"; + name = "Platform Specific"; sourceTree = ""; }; - C38A0A581A4620A700D45436 /* iOS Specific */ = { + C38A0A581A4620A700D45436 /* Platform Specific */ = { isa = PBXGroup; children = ( C38A0A591A4620B800D45436 /* CPTImagePlatformSpecific.m */, ); - name = "iOS Specific"; + name = "Platform Specific"; sourceTree = ""; }; - C38A0AA61A4621BC00D45436 /* iOS Specific */ = { + C38A0AA61A4621BC00D45436 /* Platform Specific */ = { isa = PBXGroup; children = ( C38A0B1A1A46264500D45436 /* CPTPlatformSpecificDefines.h */, @@ -1862,7 +1824,7 @@ C38A0B271A46265300D45436 /* CPTGraphHostingView.h */, C38A0B281A46265300D45436 /* CPTGraphHostingView.m */, ); - name = "iOS Specific"; + name = "Platform Specific"; path = Source; sourceTree = ""; }; @@ -1888,15 +1850,6 @@ name = iOS; sourceTree = ""; }; - C3A959D210116FE100BF9739 /* Mac Specific */ = { - isa = PBXGroup; - children = ( - 07C467B60FE1A96E00299939 /* CPTTextStylePlatformSpecific.h */, - 07C467B70FE1A96E00299939 /* CPTTextStylePlatformSpecific.m */, - ); - name = "Mac Specific"; - sourceTree = ""; - }; C3B25EDE1AC23A7D0063CCD8 /* CocoaPods */ = { isa = PBXGroup; children = ( @@ -2034,24 +1987,22 @@ C34260230FAE096D00072842 /* _CPTFillColor.h in Headers */, C34260260FAE096D00072842 /* _CPTFillGradient.h in Headers */, C34260270FAE096D00072842 /* CPTFill.h in Headers */, + E04245A725841FD300C61A67 /* CPTTextStylePlatformSpecific.h in Headers */, C3AFC9D10FB62969005DFFDC /* CPTImage.h in Headers */, 079FC0B50FB975500037E990 /* CPTColor.h in Headers */, 079FC0BE0FB9762B0037E990 /* CPTColorSpace.h in Headers */, - 0789EF370FB9E90700C0A613 /* CPTPlatformSpecificDefines.h in Headers */, - 0789EF4B0FB9EBD600C0A613 /* CPTPlatformSpecificCategories.h in Headers */, - 0789EF8B0FB9EE4700C0A613 /* CPTPlatformSpecificFunctions.h in Headers */, 0783DD550FBF097E006C3696 /* CPTXYAxis.h in Headers */, 073FB0300FC991A3007A728E /* CPTAxisLabel.h in Headers */, BCFC7C3710921FDB00DAECAA /* CPTAxisTitle.h in Headers */, - BC79F1360FD1CD6600510976 /* CPTGraphHostingView.h in Headers */, + E04244F825841F2800C61A67 /* CPTPlatformSpecificCategories.h in Headers */, 070622320FDF1B250066A6C4 /* CPTPathExtensions.h in Headers */, 0706223C0FDF215C0066A6C4 /* CPTBorderedLayer.h in Headers */, 07C4679B0FE1A24C00299939 /* CPTMutableTextStyle.h in Headers */, C3BB93191B729BD200004527 /* CPTDebugQuickLook.h in Headers */, - 07C467B80FE1A96E00299939 /* CPTTextStylePlatformSpecific.h in Headers */, 0772C9270FE2F71600EC4C16 /* CPTTheme.h in Headers */, 0772C92F0FE2F89000EC4C16 /* _CPTDarkGradientTheme.h in Headers */, BC55023210059F22005DF982 /* _CPTPlainBlackTheme.h in Headers */, + E04244CC25841F1200C61A67 /* CPTPlatformSpecificDefines.h in Headers */, BC55023410059F22005DF982 /* _CPTPlainWhiteTheme.h in Headers */, BC55023610059F22005DF982 /* _CPTStocksTheme.h in Headers */, C3BB3C8E1C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.h in Headers */, @@ -2063,6 +2014,7 @@ C3F31DEA1045EB470058520A /* CPTPlotGroup.h in Headers */, C3DA34CD107AD7710051DA02 /* _CPTXYTheme.h in Headers */, 07AEF24910BBED050012BEFF /* CPTResponder.h in Headers */, + E042452425841F3100C61A67 /* CPTPlatformSpecificFunctions.h in Headers */, 0772B43A10E24D5C009CD04C /* CPTTradingRangePlot.h in Headers */, 070064E9111F2BAA003DE087 /* CPTConstraints.h in Headers */, 07FCF2C6115B54AE00E46606 /* _CPTSlateTheme.h in Headers */, @@ -2080,6 +2032,7 @@ C3CCA03D13E8D85900CE6DB1 /* _CPTConstraintsFixed.h in Headers */, C3CCA03F13E8D85900CE6DB1 /* _CPTConstraintsRelative.h in Headers */, 07B69A5D12B6215000F4C16C /* CPTTextStyle.h in Headers */, + E042455025841F3B00C61A67 /* CPTGraphHostingView.h in Headers */, 07B69B1712B62ABB00F4C16C /* CPTMutableLineStyle.h in Headers */, D0C0477E12D6560900DA8047 /* CPTRangePlot.h in Headers */, C3920AC41395B6500045F3BB /* CPTLegend.h in Headers */, @@ -2718,17 +2671,13 @@ C34260250FAE096D00072842 /* _CPTFillImage.m in Sources */, 079FC0B60FB975500037E990 /* CPTColor.m in Sources */, 079FC0BF0FB9762B0037E990 /* CPTColorSpace.m in Sources */, - 0789EF380FB9E90700C0A613 /* CPTPlatformSpecificDefines.m in Sources */, - 0789EF4C0FB9EBD600C0A613 /* CPTPlatformSpecificCategories.m in Sources */, - 0789EF8C0FB9EE4700C0A613 /* CPTPlatformSpecificFunctions.m in Sources */, 0783DD560FBF097E006C3696 /* CPTXYAxis.m in Sources */, 073FB0310FC991A3007A728E /* CPTAxisLabel.m in Sources */, - BC79F1370FD1CD6600510976 /* CPTGraphHostingView.m in Sources */, 074E46F10FD6BF2900B18E16 /* CPTImage.m in Sources */, 070622330FDF1B250066A6C4 /* CPTPathExtensions.m in Sources */, 0706223D0FDF215C0066A6C4 /* CPTBorderedLayer.m in Sources */, + E042459825841FCF00C61A67 /* CPTTextStylePlatformSpecific.m in Sources */, 07C4679C0FE1A24C00299939 /* CPTMutableTextStyle.m in Sources */, - 07C467B90FE1A96E00299939 /* CPTTextStylePlatformSpecific.m in Sources */, 0772C9280FE2F71600EC4C16 /* CPTTheme.m in Sources */, 0772C9300FE2F89000EC4C16 /* _CPTDarkGradientTheme.m in Sources */, BC55023310059F22005DF982 /* _CPTPlainBlackTheme.m in Sources */, @@ -2742,17 +2691,18 @@ C3DA34CC107AD7710051DA02 /* _CPTXYTheme.m in Sources */, BCFC7C3810921FDB00DAECAA /* CPTAxisTitle.m in Sources */, 0772B43B10E24D5C009CD04C /* CPTTradingRangePlot.m in Sources */, + E042456D25841F4200C61A67 /* CPTGraphHostingView.m in Sources */, BC74A33110FC402600E7E90D /* CPTPieChart.m in Sources */, 070064EA111F2BAA003DE087 /* CPTConstraints.m in Sources */, 07FCF2C7115B54AE00E46606 /* _CPTSlateTheme.m in Sources */, C34AFE5311021C100041675A /* CPTGridLines.m in Sources */, C34AFE5511021C470041675A /* CPTPlotArea.m in Sources */, C34AFE6C11021D010041675A /* CPTPlotSymbol.m in Sources */, + E042451525841F2E00C61A67 /* CPTPlatformSpecificCategories.m in Sources */, C34AFE7111021D880041675A /* CPTAxisLabelGroup.m in Sources */, C38DD49411A04B7A002A68E7 /* CPTGridLineGroup.m in Sources */, 07E10BB211D1016B000B8DAB /* CPTPlotSpaceAnnotation.m in Sources */, 07E10BB711D10177000B8DAB /* CPTAnnotation.m in Sources */, - C3791D09191D4C4C001EC514 /* CPTImagePlatformSpecific.m in Sources */, 07E10BBC11D10183000B8DAB /* CPTLayerAnnotation.m in Sources */, 072161EC11D1F6BD009CC871 /* CPTAnnotationHostLayer.m in Sources */, C318F4AE11EA188700595FF9 /* CPTLimitBand.m in Sources */, @@ -2761,9 +2711,12 @@ 07B69A5E12B6215000F4C16C /* CPTTextStyle.m in Sources */, 07B69B1812B62ABB00F4C16C /* CPTMutableLineStyle.m in Sources */, D0C0477D12D6560900DA8047 /* CPTRangePlot.m in Sources */, + E04244E925841F1A00C61A67 /* CPTPlatformSpecificDefines.m in Sources */, C3920AC51395B6500045F3BB /* CPTLegend.m in Sources */, + E042454125841F3800C61A67 /* CPTPlatformSpecificFunctions.m in Sources */, C30550EE1399BE5400E0151F /* CPTLegendEntry.m in Sources */, C3978E0713CE653C00A420D9 /* NSCoderExtensions.m in Sources */, + E04245E02584204500C61A67 /* CPTImagePlatformSpecific.m in Sources */, C3BB3C911C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.m in Sources */, C3D3AD2E13DF8DCE0004EA73 /* CPTLineCap.m in Sources */, C3CCA03E13E8D85900CE6DB1 /* _CPTConstraintsFixed.m in Sources */, @@ -3304,7 +3257,7 @@ INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles"; PRODUCT_NAME = UnitTests; SDKROOT = macosx; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/MacOnly"; + USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/MacOnly $(SRCROOT)/PlatformSpecific"; }; name = Debug; }; @@ -3316,7 +3269,7 @@ INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles"; PRODUCT_NAME = UnitTests; SDKROOT = macosx; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/MacOnly"; + USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/MacOnly $(SRCROOT)/PlatformSpecific"; }; name = Release; }; @@ -3333,7 +3286,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; SDKROOT = macosx; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/MacOnly"; + USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/MacOnly $(SRCROOT)/PlatformSpecific"; WRAPPER_EXTENSION = framework; }; name = Debug; @@ -3351,7 +3304,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; SDKROOT = macosx; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/MacOnly"; + USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/MacOnly $(SRCROOT)/PlatformSpecific"; WRAPPER_EXTENSION = framework; }; name = Release; @@ -3449,7 +3402,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; SDKROOT = appletvos; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/iPhoneOnly"; + USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; }; name = Debug; }; @@ -3470,7 +3423,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; SDKROOT = appletvos; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/iPhoneOnly"; + USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; }; name = Release; }; @@ -3485,7 +3438,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/iPhoneOnly"; + USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; }; name = Debug; }; @@ -3500,7 +3453,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/iPhoneOnly"; + USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; }; name = Release; }; @@ -3522,7 +3475,7 @@ PRODUCT_NAME = CorePlot; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/iPhoneOnly"; + USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; }; name = Debug; }; @@ -3544,7 +3497,7 @@ PRODUCT_NAME = CorePlot; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/iPhoneOnly"; + USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; }; name = Release; }; @@ -3560,7 +3513,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/iPhoneOnly"; + USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; }; name = Debug; }; @@ -3576,7 +3529,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/iPhoneOnly"; + USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; }; name = Release; }; @@ -3645,7 +3598,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/iPhoneOnly"; + USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; }; name = Debug; }; @@ -3660,7 +3613,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/iPhoneOnly"; + USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; }; name = Release; }; @@ -3676,7 +3629,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/iPhoneOnly"; + USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; }; name = Debug; }; @@ -3692,7 +3645,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/iPhoneOnly"; + USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; }; name = Release; }; diff --git a/framework/MacOnly/CPTGraphHostingView.h b/framework/MacOnly/CPTGraphHostingView.h deleted file mode 100644 index bf185e21a..000000000 --- a/framework/MacOnly/CPTGraphHostingView.h +++ /dev/null @@ -1,28 +0,0 @@ -#import - -@class CPTGraph; - -@interface CPTGraphHostingView : NSView - -/// @name Hosted graph -/// @{ -@property (nonatomic, readwrite, strong, nullable) CPTGraph *hostedGraph; -/// @} - -/// @name Printing -/// @{ -@property (nonatomic, readwrite, assign) NSRect printRect; -/// @} - -/// @name Cursors -/// @{ -@property (nonatomic, readwrite, strong, nullable) NSCursor *closedHandCursor; -@property (nonatomic, readwrite, strong, nullable) NSCursor *openHandCursor; -/// @} - -/// @name User Interaction -/// @{ -@property (nonatomic, readwrite, assign) BOOL allowPinchScaling; -/// @} - -@end diff --git a/framework/MacOnly/CPTGraphHostingView.m b/framework/MacOnly/CPTGraphHostingView.m deleted file mode 100644 index 8c93b2357..000000000 --- a/framework/MacOnly/CPTGraphHostingView.m +++ /dev/null @@ -1,685 +0,0 @@ -#import "CPTGraphHostingView.h" - -#import "CPTGraph.h" -#import "CPTPlotArea.h" -#import "CPTPlotAreaFrame.h" -#import "CPTPlotSpace.h" - -/// @cond - -static void *CPTGraphHostingViewKVOContext = (void *)&CPTGraphHostingViewKVOContext; - -@interface CPTGraphHostingView() - -@property (nonatomic, readwrite) NSPoint locationInWindow; -@property (nonatomic, readwrite) CGPoint scrollOffset; - --(void)plotSpaceAdded:(nonnull NSNotification *)notification; --(void)plotSpaceRemoved:(nonnull NSNotification *)notification; --(void)plotAreaBoundsChanged; - -@end - -/// @endcond - -#pragma mark - - -/** - * @brief A container view for displaying a CPTGraph. - **/ -@implementation CPTGraphHostingView - -/** @property nullable CPTGraph *hostedGraph - * @brief The CPTGraph hosted inside this view. - **/ -@synthesize hostedGraph; - -/** @property NSRect printRect - * @brief The bounding rectangle used when printing this view. Default is NSZeroRect. - * - * If NSZeroRect (the default), the frame rectangle of the view is used instead. - **/ -@synthesize printRect; - -/** @property nullable NSCursor *closedHandCursor - * @brief The cursor displayed when the user is actively dragging any plot space. - **/ -@synthesize closedHandCursor; - -/** @property nullable NSCursor *openHandCursor - * @brief The cursor displayed when the mouse pointer is over a plot area mapped to a plot space that allows user interaction, but not actively being dragged. - **/ -@synthesize openHandCursor; - -/** @property BOOL allowPinchScaling - * @brief Whether a pinch gesture will trigger plot space scaling. Default is @YES. - **/ -@synthesize allowPinchScaling; - -@synthesize locationInWindow; -@synthesize scrollOffset; - -/// @cond - --(void)commonInit -{ - self.hostedGraph = nil; - self.printRect = NSZeroRect; - - self.closedHandCursor = [NSCursor closedHandCursor]; - self.openHandCursor = [NSCursor openHandCursor]; - self.allowPinchScaling = YES; - - self.locationInWindow = NSZeroPoint; - self.scrollOffset = CGPointZero; - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wundeclared-selector" - if ( [[self class] instancesRespondToSelector:@selector(effectiveAppearance)] ) { - [self addObserver:self - forKeyPath:@"effectiveAppearance" - options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld | NSKeyValueObservingOptionInitial - context:CPTGraphHostingViewKVOContext]; - } -#pragma clang diagnostic pop - - if ( !self.superview.wantsLayer ) { - self.layer = [self makeBackingLayer]; - } -} - --(nonnull instancetype)initWithFrame:(NSRect)frame -{ - if ((self = [super initWithFrame:frame])) { - [self commonInit]; - } - return self; -} - --(nonnull CALayer *)makeBackingLayer -{ - return [[CPTLayer alloc] initWithFrame:NSRectToCGRect(self.bounds)]; -} - --(void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; - - [hostedGraph removeObserver:self forKeyPath:@"plotAreaFrame" context:CPTGraphHostingViewKVOContext]; - [hostedGraph.plotAreaFrame removeObserver:self forKeyPath:@"plotArea" context:CPTGraphHostingViewKVOContext]; - - for ( CPTPlotSpace *space in hostedGraph.allPlotSpaces ) { - [space removeObserver:self forKeyPath:@"isDragging" context:CPTGraphHostingViewKVOContext]; - } - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wundeclared-selector" - if ( [[self class] instancesRespondToSelector:@selector(effectiveAppearance)] ) { - [self removeObserver:self forKeyPath:@"effectiveAppearance" context:CPTGraphHostingViewKVOContext]; - } -#pragma clang diagnostic pop - - [hostedGraph removeFromSuperlayer]; -} - -/// @endcond - -#pragma mark - -#pragma mark NSCoding Methods - -/// @cond - --(void)encodeWithCoder:(nonnull NSCoder *)coder -{ - [super encodeWithCoder:coder]; - - [coder encodeObject:self.hostedGraph forKey:@"CPTLayerHostingView.hostedGraph"]; - [coder encodeRect:self.printRect forKey:@"CPTLayerHostingView.printRect"]; - [coder encodeObject:self.closedHandCursor forKey:@"CPTLayerHostingView.closedHandCursor"]; - [coder encodeObject:self.openHandCursor forKey:@"CPTLayerHostingView.openHandCursor"]; - [coder encodeBool:self.allowPinchScaling forKey:@"CPTLayerHostingView.allowPinchScaling"]; - - // No need to archive these properties: - // locationInWindow - // scrollOffset -} - --(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder -{ - if ((self = [super initWithCoder:coder])) { - [self commonInit]; - - self.hostedGraph = [coder decodeObjectOfClass:[CPTGraph class] - forKey:@"CPTLayerHostingView.hostedGraph"]; // setup layers - self.printRect = [coder decodeRectForKey:@"CPTLayerHostingView.printRect"]; - self.closedHandCursor = [coder decodeObjectOfClass:[NSCursor class] - forKey:@"CPTLayerHostingView.closedHandCursor"]; - self.openHandCursor = [coder decodeObjectOfClass:[NSCursor class] - forKey:@"CPTLayerHostingView.openHandCursor"]; - - if ( [coder containsValueForKey:@"CPTLayerHostingView.allowPinchScaling"] ) { - self.allowPinchScaling = [coder decodeBoolForKey:@"CPTLayerHostingView.allowPinchScaling"]; - } - } - return self; -} - -/// @endcond - -#pragma mark - -#pragma mark NSSecureCoding Methods - -/// @cond - -+(BOOL)supportsSecureCoding -{ - return YES; -} - -/// @endcond - -#pragma mark - -#pragma mark Drawing - -/// @cond - --(void)drawRect:(NSRect __unused)dirtyRect -{ - if ( self.hostedGraph ) { - if ( ![NSGraphicsContext currentContextDrawingToScreen] ) { - [self viewDidChangeBackingProperties]; - - NSGraphicsContext *graphicsContext = [NSGraphicsContext currentContext]; - - [graphicsContext saveGraphicsState]; - - CGRect sourceRect = NSRectToCGRect(self.frame); - CGRect destinationRect = NSRectToCGRect(self.printRect); - if ( CGRectEqualToRect(destinationRect, CGRectZero)) { - destinationRect = sourceRect; - } - - // scale the view isotropically so that it fits on the printed page - CGFloat widthScale = (sourceRect.size.width != CPTFloat(0.0)) ? destinationRect.size.width / sourceRect.size.width : CPTFloat(1.0); - CGFloat heightScale = (sourceRect.size.height != CPTFloat(0.0)) ? destinationRect.size.height / sourceRect.size.height : CPTFloat(1.0); - CGFloat scale = MIN(widthScale, heightScale); - - // position the view so that its centered on the printed page - CGPoint offset = destinationRect.origin; - offset.x += ((destinationRect.size.width - (sourceRect.size.width * scale)) / CPTFloat(2.0)); - offset.y += ((destinationRect.size.height - (sourceRect.size.height * scale)) / CPTFloat(2.0)); - - NSAffineTransform *transform = [NSAffineTransform transform]; - [transform translateXBy:offset.x yBy:offset.y]; - [transform scaleBy:scale]; - [transform concat]; - - // render CPTLayers recursively into the graphics context used for printing - // (thanks to Brad for the tip: https://stackoverflow.com/a/2791305/132867 ) - CGContextRef context = graphicsContext.graphicsPort; - [self.hostedGraph recursivelyRenderInContext:context]; - - [graphicsContext restoreGraphicsState]; - } - } -} - -/// @endcond - -#pragma mark - -#pragma mark Printing - -/// @cond - --(BOOL)knowsPageRange:(nonnull NSRangePointer)rangePointer -{ - rangePointer->location = 1; - rangePointer->length = 1; - - return YES; -} - --(NSRect)rectForPage:(NSInteger __unused)pageNumber -{ - return self.printRect; -} - -/// @endcond - -#pragma mark - -#pragma mark Mouse handling - -/// @cond - --(BOOL)acceptsFirstMouse:(nullable NSEvent *__unused)theEvent -{ - return YES; -} - --(void)mouseDown:(nonnull NSEvent *)theEvent -{ - [super mouseDown:theEvent]; - - CPTGraph *theGraph = self.hostedGraph; - BOOL handled = NO; - - if ( theGraph ) { - CGPoint pointOfMouseDown = NSPointToCGPoint([self convertPoint:theEvent.locationInWindow fromView:nil]); - CGPoint pointInHostedGraph = [self.layer convertPoint:pointOfMouseDown toLayer:theGraph]; - handled = [theGraph pointingDeviceDownEvent:theEvent atPoint:pointInHostedGraph]; - } - - if ( !handled ) { - [self.nextResponder mouseDown:theEvent]; - } -} - --(void)mouseDragged:(nonnull NSEvent *)theEvent -{ - CPTGraph *theGraph = self.hostedGraph; - BOOL handled = NO; - - if ( theGraph ) { - CGPoint pointOfMouseDrag = NSPointToCGPoint([self convertPoint:theEvent.locationInWindow fromView:nil]); - CGPoint pointInHostedGraph = [self.layer convertPoint:pointOfMouseDrag toLayer:theGraph]; - handled = [theGraph pointingDeviceDraggedEvent:theEvent atPoint:pointInHostedGraph]; - } - - if ( !handled ) { - [self.nextResponder mouseDragged:theEvent]; - } -} - --(void)mouseUp:(nonnull NSEvent *)theEvent -{ - CPTGraph *theGraph = self.hostedGraph; - BOOL handled = NO; - - if ( theGraph ) { - CGPoint pointOfMouseUp = NSPointToCGPoint([self convertPoint:theEvent.locationInWindow fromView:nil]); - CGPoint pointInHostedGraph = [self.layer convertPoint:pointOfMouseUp toLayer:theGraph]; - handled = [theGraph pointingDeviceUpEvent:theEvent atPoint:pointInHostedGraph]; - } - - if ( !handled ) { - [self.nextResponder mouseUp:theEvent]; - } -} - -/// @endcond - -#pragma mark - -#pragma mark Trackpad handling - -/// @cond - --(void)magnifyWithEvent:(nonnull NSEvent *)event -{ - CPTGraph *theGraph = self.hostedGraph; - BOOL handled = NO; - - if ( theGraph && self.allowPinchScaling ) { - CGPoint pointOfMagnification = NSPointToCGPoint([self convertPoint:event.locationInWindow fromView:nil]); - CGPoint pointInHostedGraph = [self.layer convertPoint:pointOfMagnification toLayer:theGraph]; - CGPoint pointInPlotArea = [theGraph convertPoint:pointInHostedGraph toLayer:theGraph.plotAreaFrame.plotArea]; - - CGFloat scale = event.magnification + CPTFloat(1.0); - - for ( CPTPlotSpace *space in theGraph.allPlotSpaces ) { - if ( space.allowsUserInteraction ) { - [space scaleBy:scale aboutPoint:pointInPlotArea]; - handled = YES; - } - } - } - - if ( !handled ) { - [self.nextResponder magnifyWithEvent:event]; - } -} - --(void)scrollWheel:(nonnull NSEvent *)theEvent -{ - CPTGraph *theGraph = self.hostedGraph; - BOOL handled = NO; - - if ( theGraph ) { - switch ( theEvent.phase ) { - case NSEventPhaseBegan: // Trackpad with no momentum scrolling. Fingers moved on trackpad. - { - self.locationInWindow = theEvent.locationInWindow; - self.scrollOffset = CGPointZero; - - CGPoint pointOfMouseDown = NSPointToCGPoint([self convertPoint:self.locationInWindow fromView:nil]); - CGPoint pointInHostedGraph = [self.layer convertPoint:pointOfMouseDown toLayer:theGraph]; - handled = [theGraph pointingDeviceDownEvent:theEvent atPoint:pointInHostedGraph]; - } - // Fall through - - case NSEventPhaseChanged: - { - CGPoint offset = self.scrollOffset; - offset.x += theEvent.scrollingDeltaX; - offset.y -= theEvent.scrollingDeltaY; - self.scrollOffset = offset; - - NSPoint scrolledPointOfMouse = self.locationInWindow; - scrolledPointOfMouse.x += offset.x; - scrolledPointOfMouse.y += offset.y; - - CGPoint pointOfMouseDrag = NSPointToCGPoint([self convertPoint:scrolledPointOfMouse fromView:nil]); - CGPoint pointInHostedGraph = [self.layer convertPoint:pointOfMouseDrag toLayer:theGraph]; - handled = handled || [theGraph pointingDeviceDraggedEvent:theEvent atPoint:pointInHostedGraph]; - } - break; - - case NSEventPhaseEnded: - { - CGPoint offset = self.scrollOffset; - - NSPoint scrolledPointOfMouse = self.locationInWindow; - scrolledPointOfMouse.x += offset.x; - scrolledPointOfMouse.y += offset.y; - - CGPoint pointOfMouseUp = NSPointToCGPoint([self convertPoint:scrolledPointOfMouse fromView:nil]); - CGPoint pointInHostedGraph = [self.layer convertPoint:pointOfMouseUp toLayer:theGraph]; - handled = [theGraph pointingDeviceUpEvent:theEvent atPoint:pointInHostedGraph]; - } - break; - - case NSEventPhaseNone: - if ( theEvent.momentumPhase == NSEventPhaseNone ) { - // Mouse wheel - CGPoint startLocation = theEvent.locationInWindow; - CGPoint pointOfMouse = NSPointToCGPoint([self convertPoint:startLocation fromView:nil]); - CGPoint pointInHostedGraph = [self.layer convertPoint:pointOfMouse toLayer:theGraph]; - - CGPoint scrolledLocationInWindow = startLocation; - if ( theEvent.hasPreciseScrollingDeltas ) { - scrolledLocationInWindow.x += theEvent.scrollingDeltaX; - scrolledLocationInWindow.y -= theEvent.scrollingDeltaY; - } - else { - scrolledLocationInWindow.x += theEvent.scrollingDeltaX * CPTFloat(10.0); - scrolledLocationInWindow.y -= theEvent.scrollingDeltaY * CPTFloat(10.0); - } - CGPoint scrolledPointOfMouse = NSPointToCGPoint([self convertPoint:scrolledLocationInWindow fromView:nil]); - CGPoint scrolledPointInHostedGraph = [self.layer convertPoint:scrolledPointOfMouse toLayer:theGraph]; - - handled = [theGraph scrollWheelEvent:theEvent fromPoint:pointInHostedGraph toPoint:scrolledPointInHostedGraph]; - } - break; - - default: - break; - } - } - - if ( !handled ) { - [self.nextResponder scrollWheel:theEvent]; - } -} - -/// @endcond - -#pragma mark - -#pragma mark HiDPI display support - -/// @cond - --(void)viewDidChangeBackingProperties -{ - [super viewDidChangeBackingProperties]; - - NSWindow *myWindow = self.window; - - if ( myWindow ) { - self.layer.contentsScale = myWindow.backingScaleFactor; - } - else { - self.layer.contentsScale = CPTFloat(1.0); - } -} - -/// @endcond - -#pragma mark - -#pragma mark Cursor management - -/// @cond - --(void)resetCursorRects -{ - [super resetCursorRects]; - - CPTGraph *theGraph = self.hostedGraph; - CPTPlotArea *plotArea = theGraph.plotAreaFrame.plotArea; - - NSCursor *closedCursor = self.closedHandCursor; - NSCursor *openCursor = self.openHandCursor; - - if ( plotArea && (closedCursor || openCursor)) { - BOOL allowsInteraction = NO; - BOOL isDragging = NO; - - for ( CPTPlotSpace *space in theGraph.allPlotSpaces ) { - allowsInteraction = allowsInteraction || space.allowsUserInteraction; - isDragging = isDragging || space.isDragging; - } - - if ( allowsInteraction ) { - NSCursor *cursor = isDragging ? closedCursor : openCursor; - - if ( cursor ) { - CGRect plotAreaBounds = [self.layer convertRect:plotArea.bounds fromLayer:plotArea]; - - [self addCursorRect:NSRectFromCGRect(plotAreaBounds) - cursor:cursor]; - } - } - } -} - -/// @endcond - -#pragma mark - -#pragma mark Notifications - -/// @cond - -/** @internal - * @brief Adds a KVO observer to a new plot space added to the hosted graph. - **/ --(void)plotSpaceAdded:(nonnull NSNotification *)notification -{ - CPTDictionary *userInfo = notification.userInfo; - CPTPlotSpace *space = userInfo[CPTGraphPlotSpaceNotificationKey]; - - [space addObserver:self - forKeyPath:@"isDragging" - options:NSKeyValueObservingOptionNew - context:CPTGraphHostingViewKVOContext]; -} - -/** @internal - * @brief Removes the KVO observer from a plot space removed from the hosted graph. - **/ --(void)plotSpaceRemoved:(nonnull NSNotification *)notification -{ - CPTDictionary *userInfo = notification.userInfo; - CPTPlotSpace *space = userInfo[CPTGraphPlotSpaceNotificationKey]; - - [space removeObserver:self forKeyPath:@"isDragging" context:CPTGraphHostingViewKVOContext]; - [self.window invalidateCursorRectsForView:self]; -} - -/** @internal - * @brief Updates the cursor rect when the plot area is resized. - **/ --(void)plotAreaBoundsChanged -{ - [self.window invalidateCursorRectsForView:self]; -} - --(void)viewWillMoveToSuperview:(nullable NSView *)newSuperview -{ - if ( self.superview.wantsLayer != newSuperview.wantsLayer ) { - self.wantsLayer = NO; - self.layer = nil; - - if ( newSuperview.wantsLayer ) { - self.wantsLayer = YES; - } - else { - self.layer = [self makeBackingLayer]; - self.wantsLayer = YES; - } - - CPTGraph *theGraph = self.hostedGraph; - if ( theGraph ) { - [self.layer addSublayer:theGraph]; - } - } -} - -/// @endcond - -#pragma mark - -#pragma mark KVO Methods - -/// @cond - --(void)observeValueForKeyPath:(nullable NSString *)keyPath ofObject:(nullable id)object change:(nullable CPTDictionary *)change context:(nullable void *)context -{ - if ( context == CPTGraphHostingViewKVOContext ) { - CPTGraph *theGraph = self.hostedGraph; - - if ( [keyPath isEqualToString:@"isDragging"] && [object isKindOfClass:[CPTPlotSpace class]] ) { - [self.window invalidateCursorRectsForView:self]; - } - else if ( [keyPath isEqualToString:@"plotAreaFrame"] && (object == theGraph)) { - CPTPlotAreaFrame *oldPlotAreaFrame = change[NSKeyValueChangeOldKey]; - CPTPlotAreaFrame *newPlotAreaFrame = change[NSKeyValueChangeNewKey]; - - if ( oldPlotAreaFrame ) { - [oldPlotAreaFrame removeObserver:self forKeyPath:@"plotArea" context:CPTGraphHostingViewKVOContext]; - } - - if ( newPlotAreaFrame ) { - [newPlotAreaFrame addObserver:self - forKeyPath:@"plotArea" - options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld | NSKeyValueObservingOptionInitial - context:CPTGraphHostingViewKVOContext]; - } - } - else if ( [keyPath isEqualToString:@"plotArea"] && (object == theGraph.plotAreaFrame)) { - CPTPlotArea *oldPlotArea = change[NSKeyValueChangeOldKey]; - CPTPlotArea *newPlotArea = change[NSKeyValueChangeNewKey]; - - if ( oldPlotArea ) { - [[NSNotificationCenter defaultCenter] removeObserver:self - name:CPTLayerBoundsDidChangeNotification - object:oldPlotArea]; - } - - if ( newPlotArea ) { - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(plotAreaBoundsChanged) - name:CPTLayerBoundsDidChangeNotification - object:newPlotArea]; - } - } - else if ( [keyPath isEqualToString:@"effectiveAppearance"] && (object == self)) { - [self.hostedGraph setNeedsDisplayAllLayers]; - } - } - else { - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; - } -} - -/// @endcond - -#pragma mark - -#pragma mark Accessors - -/// @cond - --(void)setHostedGraph:(nullable CPTGraph *)newGraph -{ - NSParameterAssert((newGraph == nil) || [newGraph isKindOfClass:[CPTGraph class]]); - - if ( newGraph != hostedGraph ) { - self.wantsLayer = YES; - - if ( hostedGraph ) { - [hostedGraph removeFromSuperlayer]; - hostedGraph.hostingView = nil; - - [[NSNotificationCenter defaultCenter] removeObserver:self name:CPTGraphDidAddPlotSpaceNotification object:hostedGraph]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:CPTGraphDidRemovePlotSpaceNotification object:hostedGraph]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:CPTLayerBoundsDidChangeNotification object:hostedGraph.plotAreaFrame.plotArea]; - - [hostedGraph removeObserver:self forKeyPath:@"plotAreaFrame" context:CPTGraphHostingViewKVOContext]; - [hostedGraph.plotAreaFrame removeObserver:self forKeyPath:@"plotArea" context:CPTGraphHostingViewKVOContext]; - - for ( CPTPlotSpace *space in hostedGraph.allPlotSpaces ) { - [space removeObserver:self forKeyPath:@"isDragging" context:CPTGraphHostingViewKVOContext]; - } - } - - hostedGraph = newGraph; - - if ( newGraph ) { - CPTGraph *theGraph = newGraph; - - newGraph.hostingView = self; - - [self viewDidChangeBackingProperties]; - [self.layer addSublayer:theGraph]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(plotSpaceAdded:) - name:CPTGraphDidAddPlotSpaceNotification - object:theGraph]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(plotSpaceRemoved:) - name:CPTGraphDidRemovePlotSpaceNotification - object:theGraph]; - - [theGraph addObserver:self - forKeyPath:@"plotAreaFrame" - options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld | NSKeyValueObservingOptionInitial - context:CPTGraphHostingViewKVOContext]; - - for ( CPTPlotSpace *space in newGraph.allPlotSpaces ) { - [space addObserver:self - forKeyPath:@"isDragging" - options:NSKeyValueObservingOptionNew - context:CPTGraphHostingViewKVOContext]; - } - } - } -} - --(void)setClosedHandCursor:(nullable NSCursor *)newCursor -{ - if ( newCursor != closedHandCursor ) { - closedHandCursor = newCursor; - - [self.window invalidateCursorRectsForView:self]; - } -} - --(void)setOpenHandCursor:(nullable NSCursor *)newCursor -{ - if ( newCursor != openHandCursor ) { - openHandCursor = newCursor; - - [self.window invalidateCursorRectsForView:self]; - } -} - -/// @endcond - -@end diff --git a/framework/MacOnly/CPTImagePlatformSpecific.m b/framework/MacOnly/CPTImagePlatformSpecific.m deleted file mode 100644 index 4b845f2ba..000000000 --- a/framework/MacOnly/CPTImagePlatformSpecific.m +++ /dev/null @@ -1,66 +0,0 @@ -#import "CPTImage.h" - -@implementation CPTImage(CPTPlatformSpecificImageExtensions) - -#pragma mark - -#pragma mark Init/Dealloc - -/** @brief Initializes a CPTImage instance with the provided platform-native image. - * - * @param anImage The platform-native image. - * @return A CPTImage instance initialized with the provided image. - **/ --(nonnull instancetype)initWithNativeImage:(nullable CPTNativeImage *)anImage -{ - if ((self = [self init])) { - self.nativeImage = anImage; - } - - return self; -} - -/** @brief Initializes a CPTImage instance with the contents of a PNG file. - * - * On systems that support hi-dpi or @quote{Retina} displays, this method will look for a - * double-resolution image with the given name followed by @quote{@2x}. If the @quote{@2x} image - * is not available, the named image file will be loaded. - * - * @param path The file system path of the file. - * @return A CPTImage instance initialized with the contents of the PNG file. - **/ --(nonnull instancetype)initForPNGFile:(nonnull NSString *)path -{ - CGFloat imageScale = CPTFloat(1.0); - - // Try to load @2x file if the system supports hi-dpi display - NSImage *newNativeImage = [[NSImage alloc] init]; - NSImageRep *imageRep = nil; - - for ( NSScreen *screen in [NSScreen screens] ) { - imageScale = MAX(imageScale, screen.backingScaleFactor); - } - - while ( imageScale > CPTFloat(1.0)) { - NSMutableString *hiDpiPath = [path mutableCopy]; - NSUInteger replaceCount = [hiDpiPath replaceOccurrencesOfString:@".png" - withString:[NSString stringWithFormat:@"@%dx.png", (int)imageScale] - options:NSCaseInsensitiveSearch | NSBackwardsSearch | NSAnchoredSearch - range:NSMakeRange(hiDpiPath.length - 4, 4)]; - if ( replaceCount == 1 ) { - imageRep = [NSImageRep imageRepWithContentsOfFile:hiDpiPath]; - if ( imageRep ) { - [newNativeImage addRepresentation:imageRep]; - } - } - imageScale -= CPTFloat(1.0); - } - - imageRep = [NSImageRep imageRepWithContentsOfFile:path]; - if ( imageRep ) { - [newNativeImage addRepresentation:imageRep]; - } - - return [self initWithNativeImage:newNativeImage]; -} - -@end diff --git a/framework/MacOnly/CPTPlatformSpecificCategories.h b/framework/MacOnly/CPTPlatformSpecificCategories.h deleted file mode 100644 index 2102bc1bf..000000000 --- a/framework/MacOnly/CPTPlatformSpecificCategories.h +++ /dev/null @@ -1,36 +0,0 @@ -#import "CPTColor.h" -#import "CPTLayer.h" -#import "CPTPlatformSpecificDefines.h" - -#pragma mark CPTLayer - -/** @category CPTLayer(CPTPlatformSpecificLayerExtensions) - * @brief Platform-specific extensions to CPTLayer. - **/ -@interface CPTLayer(CPTPlatformSpecificLayerExtensions) - -/// @name Images -/// @{ --(nonnull CPTNativeImage *)imageOfLayer; -/// @} - -@end - -#pragma mark - NSAttributedString - -/** @category NSAttributedString(CPTPlatformSpecificAttributedStringExtensions) - * @brief NSAttributedString extensions for drawing styled text. - **/ -@interface NSAttributedString(CPTPlatformSpecificAttributedStringExtensions) - -/// @name Drawing -/// @{ --(void)drawInRect:(CGRect)rect inContext:(nonnull CGContextRef)context; -/// @} - -/// @name Measurement -/// @{ --(CGSize)sizeAsDrawn; -/// @} - -@end diff --git a/framework/MacOnly/CPTPlatformSpecificCategories.m b/framework/MacOnly/CPTPlatformSpecificCategories.m deleted file mode 100644 index 9c46a5f07..000000000 --- a/framework/MacOnly/CPTPlatformSpecificCategories.m +++ /dev/null @@ -1,117 +0,0 @@ -#import "CPTPlatformSpecificCategories.h" - -#import "CPTGraph.h" -#import "CPTGraphHostingView.h" -#import "CPTPlatformSpecificFunctions.h" - -#pragma mark CPTLayer - -@implementation CPTLayer(CPTPlatformSpecificLayerExtensions) - -/** @brief Gets an image of the layer contents. - * @return A native image representation of the layer content. - **/ --(nonnull CPTNativeImage *)imageOfLayer -{ - CGSize boundsSize = self.bounds.size; - - // Figure out the scale of pixels to points - CGFloat scale = 0.0; - - if ( [self respondsToSelector:@selector(hostingView)] ) { - scale = ((CPTGraph *)self).hostingView.window.backingScaleFactor; - } - if ((scale == 0.0) && [CALayer instancesRespondToSelector:@selector(contentsScale)] ) { - scale = self.contentsScale; - } - if ( scale == 0.0 ) { - NSWindow *myWindow = self.graph.hostingView.window; - - if ( myWindow ) { - scale = myWindow.backingScaleFactor; - } - else { - scale = [NSScreen mainScreen].backingScaleFactor; - } - } - scale = MAX(scale, CPTFloat(1.0)); - - NSBitmapImageRep *layerImage = [[NSBitmapImageRep alloc] - initWithBitmapDataPlanes:NULL - pixelsWide:(NSInteger)(boundsSize.width * scale) - pixelsHigh:(NSInteger)(boundsSize.height * scale) - bitsPerSample:8 - samplesPerPixel:4 - hasAlpha:YES - isPlanar:NO - colorSpaceName:NSCalibratedRGBColorSpace - bitmapFormat:NSAlphaFirstBitmapFormat - bytesPerRow:0 - bitsPerPixel:0 - ]; - - // Setting the size communicates the dpi; enables proper scaling for Retina screens - layerImage.size = NSSizeFromCGSize(boundsSize); - - NSGraphicsContext *bitmapContext = [NSGraphicsContext graphicsContextWithBitmapImageRep:layerImage]; - CGContextRef context = (CGContextRef)bitmapContext.graphicsPort; - - CGContextClearRect(context, CPTRectMake(0.0, 0.0, boundsSize.width, boundsSize.height)); - CGContextSetAllowsAntialiasing(context, true); - CGContextSetShouldSmoothFonts(context, false); - [self layoutAndRenderInContext:context]; - CGContextFlush(context); - - NSImage *image = [[NSImage alloc] initWithSize:NSSizeFromCGSize(boundsSize)]; - - [image addRepresentation:layerImage]; - - return image; -} - -@end - -#pragma mark - NSAttributedString - -@implementation NSAttributedString(CPTPlatformSpecificAttributedStringExtensions) - -/** @brief Draws the styled text into the given graphics context. - * @param rect The bounding rectangle in which to draw the text. - * @param context The graphics context to draw into. - **/ --(void)drawInRect:(CGRect)rect inContext:(nonnull CGContextRef)context -{ - CPTPushCGContext(context); - - [self drawWithRect:NSRectFromCGRect(rect) - options:CPTStringDrawingOptions]; - - CPTPopCGContext(); -} - -/** - * @brief Computes the size of the styled text when drawn rounded up to the nearest whole number in each dimension. - **/ --(CGSize)sizeAsDrawn -{ - CGRect rect = CGRectZero; - - if ( [self respondsToSelector:@selector(boundingRectWithSize:options:context:)] ) { - rect = [self boundingRectWithSize:CPTSizeMake(10000.0, 10000.0) - options:CPTStringDrawingOptions - context:nil]; - } - else { - rect = [self boundingRectWithSize:CPTSizeMake(10000.0, 10000.0) - options:CPTStringDrawingOptions]; - } - - CGSize textSize = rect.size; - - textSize.width = ceil(textSize.width); - textSize.height = ceil(textSize.height); - - return textSize; -} - -@end diff --git a/framework/MacOnly/CPTPlatformSpecificDefines.h b/framework/MacOnly/CPTPlatformSpecificDefines.h deleted file mode 100644 index 24d77c3c6..000000000 --- a/framework/MacOnly/CPTPlatformSpecificDefines.h +++ /dev/null @@ -1,6 +0,0 @@ -/// @file - -typedef NSColor CPTNativeColor; ///< Platform-native color. -typedef NSImage CPTNativeImage; ///< Platform-native image format. -typedef NSEvent CPTNativeEvent; ///< Platform-native OS event. -typedef NSFont CPTNativeFont; ///< Platform-native font. diff --git a/framework/MacOnly/CPTPlatformSpecificFunctions.h b/framework/MacOnly/CPTPlatformSpecificFunctions.h deleted file mode 100644 index 66fc3580a..000000000 --- a/framework/MacOnly/CPTPlatformSpecificFunctions.h +++ /dev/null @@ -1,32 +0,0 @@ -#import "CPTDefinitions.h" -#import "CPTPlatformSpecificDefines.h" - -/// @file - -#if __cplusplus -extern "C" { -#endif - -/// @name Graphics Context Save Stack -/// @{ -void CPTPushCGContext(__nonnull CGContextRef context); -void CPTPopCGContext(void); - -/// @} - -/// @name Color Conversion -/// @{ -__nonnull CGColorRef CPTCreateCGColorFromNSColor(NSColor *__nonnull nsColor) CF_RETURNS_RETAINED; -CPTRGBAColor CPTRGBAColorFromNSColor(NSColor *__nonnull nsColor); - -/// @} - -/// @name Debugging -/// @{ -CPTNativeImage *__nonnull CPTQuickLookImage(CGRect rect, __nonnull CPTQuickLookImageBlock renderBlock); - -/// @} - -#if __cplusplus -} -#endif diff --git a/framework/MacOnly/CPTPlatformSpecificFunctions.m b/framework/MacOnly/CPTPlatformSpecificFunctions.m deleted file mode 100644 index a474cc482..000000000 --- a/framework/MacOnly/CPTPlatformSpecificFunctions.m +++ /dev/null @@ -1,142 +0,0 @@ -#import "CPTPlatformSpecificFunctions.h" - -#pragma mark Graphics Context - -// linked list to store saved contexts -static NSMutableArray *pushedContexts = nil; -static dispatch_once_t contextOnceToken = 0; - -static dispatch_queue_t contextQueue = NULL; -static dispatch_once_t queueOnceToken = 0; - -/** @brief Pushes the current AppKit graphics context onto a stack and replaces it with the given Core Graphics context. - * @param newContext The graphics context. - **/ -void CPTPushCGContext(__nonnull CGContextRef newContext) -{ - dispatch_once(&contextOnceToken, ^{ - pushedContexts = [[NSMutableArray alloc] init]; - }); - dispatch_once(&queueOnceToken, ^{ - contextQueue = dispatch_queue_create("CorePlot.contextQueue", NULL); - }); - - dispatch_sync(contextQueue, ^{ - NSGraphicsContext *currentContext = [NSGraphicsContext currentContext]; - - if ( currentContext ) { - [pushedContexts addObject:currentContext]; - } - else { - [pushedContexts addObject:(NSGraphicsContext *)[NSNull null]]; - } - - if ( newContext ) { - [NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithGraphicsPort:newContext flipped:NO]]; - } - }); -} - -/** - * @brief Pops the top context off the stack and restores it to the AppKit graphics context. - **/ -void CPTPopCGContext(void) -{ - dispatch_once(&contextOnceToken, ^{ - pushedContexts = [[NSMutableArray alloc] init]; - }); - dispatch_once(&queueOnceToken, ^{ - contextQueue = dispatch_queue_create("CorePlot.contextQueue", NULL); - }); - - dispatch_sync(contextQueue, ^{ - if ( pushedContexts.count > 0 ) { - NSGraphicsContext *lastContext = pushedContexts.lastObject; - - if ( [lastContext isKindOfClass:[NSGraphicsContext class]] ) { - [NSGraphicsContext setCurrentContext:lastContext]; - } - else { - [NSGraphicsContext setCurrentContext:nil]; - } - - [pushedContexts removeLastObject]; - } - }); -} - -#pragma mark - -#pragma mark Colors - -/** @brief Creates a @ref CGColorRef from an NSColor. - * - * The caller must release the returned @ref CGColorRef. Pattern colors are not supported. - * - * @param nsColor The NSColor. - * @return The @ref CGColorRef. - **/ -__nonnull CGColorRef CPTCreateCGColorFromNSColor(NSColor *__nonnull nsColor) -{ - NSColor *rgbColor = [nsColor colorUsingColorSpace:[NSColorSpace genericRGBColorSpace]]; - CGFloat r, g, b, a; - - [rgbColor getRed:&r green:&g blue:&b alpha:&a]; - return CGColorCreateGenericRGB(r, g, b, a); -} - -/** @brief Creates a CPTRGBAColor from an NSColor. - * - * Pattern colors are not supported. - * - * @param nsColor The NSColor. - * @return The CPTRGBAColor. - **/ -CPTRGBAColor CPTRGBAColorFromNSColor(NSColor *__nonnull nsColor) -{ - CGFloat red, green, blue, alpha; - - [[nsColor colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&red green:&green blue:&blue alpha:&alpha]; - - CPTRGBAColor rgbColor; - - rgbColor.red = red; - rgbColor.green = green; - rgbColor.blue = blue; - rgbColor.alpha = alpha; - - return rgbColor; -} - -#pragma mark - -#pragma mark Debugging - -CPTNativeImage *__nonnull CPTQuickLookImage(CGRect rect, __nonnull CPTQuickLookImageBlock renderBlock) -{ - NSBitmapImageRep *layerImage = [[NSBitmapImageRep alloc] - initWithBitmapDataPlanes:NULL - pixelsWide:(NSInteger)rect.size.width - pixelsHigh:(NSInteger)rect.size.height - bitsPerSample:8 - samplesPerPixel:4 - hasAlpha:YES - isPlanar:NO - colorSpaceName:NSCalibratedRGBColorSpace - bytesPerRow:(NSInteger)rect.size.width * 4 - bitsPerPixel:32]; - - NSGraphicsContext *bitmapContext = [NSGraphicsContext graphicsContextWithBitmapImageRep:layerImage]; - - CGContextRef context = (CGContextRef)bitmapContext.graphicsPort; - - CGContextClearRect(context, rect); - - renderBlock(context, 1.0, rect); - - CGContextFlush(context); - - NSImage *image = [[NSImage alloc] initWithSize:NSSizeFromCGSize(rect.size)]; - - [image addRepresentation:layerImage]; - - return image; -} diff --git a/framework/MacOnly/CPTTextStylePlatformSpecific.h b/framework/MacOnly/CPTTextStylePlatformSpecific.h deleted file mode 100644 index 3dbcb7fc9..000000000 --- a/framework/MacOnly/CPTTextStylePlatformSpecific.h +++ /dev/null @@ -1,22 +0,0 @@ -/// @file - -/** - * @brief Enumeration of paragraph alignments. - **/ -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= 101200) -typedef NS_ENUM (NSInteger, CPTTextAlignment) { - CPTTextAlignmentLeft = NSTextAlignmentLeft, ///< Left alignment. - CPTTextAlignmentCenter = NSTextAlignmentCenter, ///< Center alignment. - CPTTextAlignmentRight = NSTextAlignmentRight, ///< Right alignment. - CPTTextAlignmentJustified = NSTextAlignmentJustified, ///< Justified alignment. - CPTTextAlignmentNatural = NSTextAlignmentNatural ///< Natural alignment of the text's script. -}; -#else -typedef NS_ENUM (NSInteger, CPTTextAlignment) { - CPTTextAlignmentLeft = NSLeftTextAlignment, ///< Left alignment. - CPTTextAlignmentCenter = NSCenterTextAlignment, ///< Center alignment. - CPTTextAlignmentRight = NSRightTextAlignment, ///< Right alignment. - CPTTextAlignmentJustified = NSJustifiedTextAlignment, ///< Justified alignment. - CPTTextAlignmentNatural = NSNaturalTextAlignment ///< Natural alignment of the text's script. -}; -#endif diff --git a/framework/MacOnly/CPTTextStylePlatformSpecific.m b/framework/MacOnly/CPTTextStylePlatformSpecific.m deleted file mode 100644 index a4df91cac..000000000 --- a/framework/MacOnly/CPTTextStylePlatformSpecific.m +++ /dev/null @@ -1,277 +0,0 @@ -#import "CPTTextStylePlatformSpecific.h" - -#import "CPTMutableTextStyle.h" -#import "CPTPlatformSpecificCategories.h" -#import "CPTPlatformSpecificFunctions.h" - -@implementation CPTTextStyle(CPTPlatformSpecificTextStyleExtensions) - -/** @property nonnull CPTDictionary *attributes - * @brief A dictionary of standard text attributes suitable for formatting an NSAttributedString. - * - * The dictionary will contain values for the following keys that represent the receiver's text style: - * - #NSFontAttributeName: The font used to draw text. If missing, no font information was specified. - * - #NSForegroundColorAttributeName: The color used to draw text. If missing, no color information was specified. - * - #NSParagraphStyleAttributeName: The text alignment and line break mode used to draw multi-line text. - **/ -@dynamic attributes; - -#pragma mark - -#pragma mark Init/Dealloc - -/** @brief Creates and returns a new CPTTextStyle instance initialized from a dictionary of text attributes. - * - * The text style will be initalized with values associated with the following keys: - * - #NSFontAttributeName: Sets the @link CPTTextStyle::fontName fontName @endlink - * and @link CPTTextStyle::fontSize fontSize @endlink. - * - #NSForegroundColorAttributeName: Sets the @link CPTTextStyle::color color @endlink. - * - #NSParagraphStyleAttributeName: Sets the @link CPTTextStyle::textAlignment textAlignment @endlink and @link CPTTextStyle::lineBreakMode lineBreakMode @endlink. - * - * Properties associated with missing keys will be inialized to their default values. - * - * @param attributes A dictionary of standard text attributes. - * @return A new CPTTextStyle instance. - **/ -+(nonnull instancetype)textStyleWithAttributes:(nullable CPTDictionary *)attributes -{ - CPTMutableTextStyle *newStyle = [CPTMutableTextStyle textStyle]; - - // Font - NSFont *styleFont = attributes[NSFontAttributeName]; - - if ( styleFont ) { - newStyle.font = styleFont; - newStyle.fontName = styleFont.fontName; - newStyle.fontSize = styleFont.pointSize; - } - - // Color - NSColor *styleColor = attributes[NSForegroundColorAttributeName]; - - if ( styleColor ) { - // CGColor property is available in macOS 10.8 and later - if ( [styleColor respondsToSelector:@selector(CGColor)] ) { - newStyle.color = [CPTColor colorWithCGColor:styleColor.CGColor]; - } - else { - const NSInteger numberOfComponents = styleColor.numberOfComponents; - - CGFloat *components = calloc((size_t)numberOfComponents, sizeof(CGFloat)); - [styleColor getComponents:components]; - - CGColorSpaceRef colorSpace = styleColor.colorSpace.CGColorSpace; - CGColorRef styleCGColor = CGColorCreate(colorSpace, components); - - newStyle.color = [CPTColor colorWithCGColor:styleCGColor]; - - CGColorRelease(styleCGColor); - free(components); - } - } - - // Text alignment and line break mode - NSParagraphStyle *paragraphStyle = attributes[NSParagraphStyleAttributeName]; - - if ( paragraphStyle ) { - newStyle.textAlignment = (CPTTextAlignment)paragraphStyle.alignment; - newStyle.lineBreakMode = paragraphStyle.lineBreakMode; - } - - return [newStyle copy]; -} - -#pragma mark - -#pragma mark Accessors - -/// @cond - --(nonnull CPTDictionary *)attributes -{ - CPTMutableDictionary *myAttributes = [NSMutableDictionary dictionary]; - - // Font - NSFont *styleFont = self.font; - NSString *fontName = self.fontName; - - if ((styleFont == nil) && fontName ) { - styleFont = [NSFont fontWithName:fontName size:self.fontSize]; - } - - if ( styleFont ) { - [myAttributes setValue:styleFont - forKey:NSFontAttributeName]; - } - - // Color - NSColor *styleColor = self.color.nsColor; - - if ( styleColor ) { - [myAttributes setValue:styleColor - forKey:NSForegroundColorAttributeName]; - } - - // Text alignment and line break mode - NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; - - paragraphStyle.alignment = (NSTextAlignment)self.textAlignment; - paragraphStyle.lineBreakMode = self.lineBreakMode; - - [myAttributes setValue:paragraphStyle - forKey:NSParagraphStyleAttributeName]; - - return [myAttributes copy]; -} - -/// @endcond - -@end - -#pragma mark - - -@implementation CPTMutableTextStyle(CPTPlatformSpecificMutableTextStyleExtensions) - -/** @brief Creates and returns a new CPTMutableTextStyle instance initialized from a dictionary of text attributes. - * - * The text style will be initalized with values associated with the following keys: - * - #NSFontAttributeName: Sets the @link CPTMutableTextStyle::fontName fontName @endlink - * and @link CPTMutableTextStyle::fontSize fontSize @endlink. - * - #NSForegroundColorAttributeName: Sets the @link CPTMutableTextStyle::color color @endlink. - * - #NSParagraphStyleAttributeName: Sets the @link CPTMutableTextStyle::textAlignment textAlignment @endlink and @link CPTMutableTextStyle::lineBreakMode lineBreakMode @endlink. - * - * Properties associated with missing keys will be inialized to their default values. - * - * @param attributes A dictionary of standard text attributes. - * @return A new CPTMutableTextStyle instance. - **/ -+(nonnull instancetype)textStyleWithAttributes:(nullable CPTDictionary *)attributes -{ - CPTMutableTextStyle *newStyle = [CPTMutableTextStyle textStyle]; - - // Font - NSFont *styleFont = attributes[NSFontAttributeName]; - - if ( styleFont ) { - newStyle.font = styleFont; - newStyle.fontName = styleFont.fontName; - newStyle.fontSize = styleFont.pointSize; - } - - // Color - NSColor *styleColor = attributes[NSForegroundColorAttributeName]; - - if ( styleColor ) { - // CGColor property is available in macOS 10.8 and later - if ( [styleColor respondsToSelector:@selector(CGColor)] ) { - newStyle.color = [CPTColor colorWithCGColor:styleColor.CGColor]; - } - else { - const NSInteger numberOfComponents = styleColor.numberOfComponents; - - CGFloat *components = calloc((size_t)numberOfComponents, sizeof(CGFloat)); - [styleColor getComponents:components]; - - CGColorSpaceRef colorSpace = styleColor.colorSpace.CGColorSpace; - CGColorRef styleCGColor = CGColorCreate(colorSpace, components); - - newStyle.color = [CPTColor colorWithCGColor:styleCGColor]; - - CGColorRelease(styleCGColor); - free(components); - } - } - - // Text alignment and line break mode - NSParagraphStyle *paragraphStyle = attributes[NSParagraphStyleAttributeName]; - - if ( paragraphStyle ) { - newStyle.textAlignment = (CPTTextAlignment)paragraphStyle.alignment; - newStyle.lineBreakMode = paragraphStyle.lineBreakMode; - } - - return newStyle; -} - -@end - -#pragma mark - - -@implementation NSString(CPTTextStyleExtensions) - -#pragma mark - -#pragma mark Layout - -/** @brief Determines the size of text drawn with the given style. - * @param style The text style. - * @return The size of the text when drawn with the given style. - **/ --(CGSize)sizeWithTextStyle:(nullable CPTTextStyle *)style -{ - CGRect rect = CGRectZero; - - if ( [self respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)] ) { - rect = [self boundingRectWithSize:CPTSizeMake(10000.0, 10000.0) - options:CPTStringDrawingOptions - attributes:style.attributes - context:nil]; - } - else { - rect = [self boundingRectWithSize:CPTSizeMake(10000.0, 10000.0) - options:CPTStringDrawingOptions - attributes:style.attributes]; - } - - CGSize textSize = rect.size; - - textSize.width = ceil(textSize.width); - textSize.height = ceil(textSize.height); - - return textSize; -} - -#pragma mark - -#pragma mark Drawing - -/** @brief Draws the text into the given graphics context using the given style. - * @param rect The bounding rectangle in which to draw the text. - * @param style The text style. - * @param context The graphics context to draw into. - **/ --(void)drawInRect:(CGRect)rect withTextStyle:(nullable CPTTextStyle *)style inContext:(nonnull CGContextRef)context -{ - if ( style.color == nil ) { - return; - } - - CGColorRef textColor = style.color.cgColor; - - CGContextSetStrokeColorWithColor(context, textColor); - CGContextSetFillColorWithColor(context, textColor); - - CPTPushCGContext(context); - - NSFont *theFont = style.font; - NSString *fontName = style.fontName; - - if ((theFont == nil) && fontName ) { - theFont = [NSFont fontWithName:fontName size:style.fontSize]; - } - - if ( theFont ) { - NSColor *foregroundColor = style.color.nsColor; - NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; - paragraphStyle.alignment = (NSTextAlignment)style.textAlignment; - paragraphStyle.lineBreakMode = style.lineBreakMode; - - CPTDictionary *attributes = @{ - NSFontAttributeName: theFont, - NSForegroundColorAttributeName: foregroundColor, - NSParagraphStyleAttributeName: paragraphStyle - }; - [self drawWithRect:NSRectFromCGRect(rect) - options:CPTStringDrawingOptions - attributes:attributes]; - } - CPTPopCGContext(); -} - -@end diff --git a/framework/iPhoneOnly/CPTGraphHostingView.h b/framework/PlatformSpecific/CPTGraphHostingView.h similarity index 100% rename from framework/iPhoneOnly/CPTGraphHostingView.h rename to framework/PlatformSpecific/CPTGraphHostingView.h diff --git a/framework/iPhoneOnly/CPTGraphHostingView.m b/framework/PlatformSpecific/CPTGraphHostingView.m similarity index 100% rename from framework/iPhoneOnly/CPTGraphHostingView.m rename to framework/PlatformSpecific/CPTGraphHostingView.m diff --git a/framework/iPhoneOnly/CPTImagePlatformSpecific.m b/framework/PlatformSpecific/CPTImagePlatformSpecific.m similarity index 100% rename from framework/iPhoneOnly/CPTImagePlatformSpecific.m rename to framework/PlatformSpecific/CPTImagePlatformSpecific.m diff --git a/framework/iPhoneOnly/CPTPlatformSpecificCategories.h b/framework/PlatformSpecific/CPTPlatformSpecificCategories.h similarity index 100% rename from framework/iPhoneOnly/CPTPlatformSpecificCategories.h rename to framework/PlatformSpecific/CPTPlatformSpecificCategories.h diff --git a/framework/iPhoneOnly/CPTPlatformSpecificCategories.m b/framework/PlatformSpecific/CPTPlatformSpecificCategories.m similarity index 100% rename from framework/iPhoneOnly/CPTPlatformSpecificCategories.m rename to framework/PlatformSpecific/CPTPlatformSpecificCategories.m diff --git a/framework/iPhoneOnly/CPTPlatformSpecificDefines.h b/framework/PlatformSpecific/CPTPlatformSpecificDefines.h similarity index 100% rename from framework/iPhoneOnly/CPTPlatformSpecificDefines.h rename to framework/PlatformSpecific/CPTPlatformSpecificDefines.h diff --git a/framework/MacOnly/CPTPlatformSpecificDefines.m b/framework/PlatformSpecific/CPTPlatformSpecificDefines.m similarity index 100% rename from framework/MacOnly/CPTPlatformSpecificDefines.m rename to framework/PlatformSpecific/CPTPlatformSpecificDefines.m diff --git a/framework/iPhoneOnly/CPTPlatformSpecificFunctions.h b/framework/PlatformSpecific/CPTPlatformSpecificFunctions.h similarity index 100% rename from framework/iPhoneOnly/CPTPlatformSpecificFunctions.h rename to framework/PlatformSpecific/CPTPlatformSpecificFunctions.h diff --git a/framework/iPhoneOnly/CPTPlatformSpecificFunctions.m b/framework/PlatformSpecific/CPTPlatformSpecificFunctions.m similarity index 100% rename from framework/iPhoneOnly/CPTPlatformSpecificFunctions.m rename to framework/PlatformSpecific/CPTPlatformSpecificFunctions.m diff --git a/framework/iPhoneOnly/CPTTextStylePlatformSpecific.h b/framework/PlatformSpecific/CPTTextStylePlatformSpecific.h similarity index 100% rename from framework/iPhoneOnly/CPTTextStylePlatformSpecific.h rename to framework/PlatformSpecific/CPTTextStylePlatformSpecific.h diff --git a/framework/iPhoneOnly/CPTTextStylePlatformSpecific.m b/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m similarity index 100% rename from framework/iPhoneOnly/CPTTextStylePlatformSpecific.m rename to framework/PlatformSpecific/CPTTextStylePlatformSpecific.m diff --git a/framework/iPhoneOnly/CPTPlatformSpecificDefines.m b/framework/iPhoneOnly/CPTPlatformSpecificDefines.m deleted file mode 100644 index e69de29bb..000000000 From 2b64ca2cd56ad2b18bfa231dbb17b79110ee6813 Mon Sep 17 00:00:00 2001 From: 3a4oT Date: Sat, 12 Dec 2020 00:25:04 +0200 Subject: [PATCH 031/245] pospecs adjustments --- CorePlot-latest.podspec | 6 +++--- CorePlot.podspec | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CorePlot-latest.podspec b/CorePlot-latest.podspec index cb124e8f4..e7dd63299 100644 --- a/CorePlot-latest.podspec +++ b/CorePlot-latest.podspec @@ -28,9 +28,9 @@ Pod::Spec.new do |s| s.source_files = 'framework/Source/*.{h,m}', 'framework/CocoaPods/*.h' s.exclude_files = '**/*{TestCase,Tests}.{h,m}', '**/mainpage.h' - s.ios.source_files = 'framework/CorePlot-CocoaTouch.h', 'framework/iPhoneOnly/*.{h,m}' - s.tvos.source_files = 'framework/iPhoneOnly/*.{h,m}' - s.osx.source_files = 'framework/MacOnly/*.{h,m}' + s.ios.source_files = 'framework/CorePlot-CocoaTouch.h', 'framework/PlatformSpecific/*.{h,m}' + s.tvos.source_files = 'framework/PlatformSpecific/*.{h,m}' + s.osx.source_files = 'framework/MacOnly/*.{h,m}', 'framework/PlatformSpecific/*.{h,m}' s.private_header_files = '**/_*.h' s.requires_arc = true diff --git a/CorePlot.podspec b/CorePlot.podspec index 565326e88..544d67aed 100644 --- a/CorePlot.podspec +++ b/CorePlot.podspec @@ -28,9 +28,9 @@ Pod::Spec.new do |s| s.source_files = 'framework/Source/*.{h,m}', 'framework/CocoaPods/*.h' s.exclude_files = '**/*{TestCase,Tests}.{h,m}', '**/mainpage.h' - s.ios.source_files = 'framework/CorePlot-CocoaTouch.h', 'framework/iPhoneOnly/*.{h,m}' - s.tvos.source_files = 'framework/iPhoneOnly/*.{h,m}' - s.osx.source_files = 'framework/MacOnly/*.{h,m}' + s.ios.source_files = 'framework/CorePlot-CocoaTouch.h', 'framework/PlatformSpecific/*.{h,m}' + s.tvos.source_files = 'framework/PlatformSpecific/*.{h,m}' + s.osx.source_files = 'framework/MacOnly/*.{h,m}', 'framework/PlatformSpecific/*.{h,m}' s.private_header_files = '**/_*.h' s.requires_arc = true From 8459bc4323eee4292a38fd7edfeea2f99ce3fb05 Mon Sep 17 00:00:00 2001 From: 3a4oT Date: Sat, 12 Dec 2020 00:28:11 +0200 Subject: [PATCH 032/245] run code format script --- framework/PlatformSpecific/CPTGraphHostingView.h | 1 - framework/PlatformSpecific/CPTGraphHostingView.m | 1 - framework/PlatformSpecific/CPTImagePlatformSpecific.m | 1 - framework/PlatformSpecific/CPTPlatformSpecificCategories.h | 1 - framework/PlatformSpecific/CPTPlatformSpecificCategories.m | 1 - framework/PlatformSpecific/CPTPlatformSpecificDefines.h | 1 - framework/PlatformSpecific/CPTPlatformSpecificFunctions.h | 1 - framework/PlatformSpecific/CPTPlatformSpecificFunctions.m | 1 - framework/PlatformSpecific/CPTTextStylePlatformSpecific.m | 1 - framework/Source/CPTColorSpace.h | 2 +- framework/Source/CPTConstraints.h | 2 +- framework/Source/CPTFill.h | 2 +- framework/Source/CPTLineCap.h | 2 +- framework/Source/CPTPlotSymbol.h | 2 +- framework/Source/CPTShadow.h | 2 +- framework/Source/NSCoderExtensions.h | 2 +- framework/Source/NSNumberExtensions.h | 2 +- 17 files changed, 8 insertions(+), 17 deletions(-) diff --git a/framework/PlatformSpecific/CPTGraphHostingView.h b/framework/PlatformSpecific/CPTGraphHostingView.h index 884dfabe2..ee3fc909c 100644 --- a/framework/PlatformSpecific/CPTGraphHostingView.h +++ b/framework/PlatformSpecific/CPTGraphHostingView.h @@ -31,7 +31,6 @@ @end - #else #import "CPTDefinitions.h" diff --git a/framework/PlatformSpecific/CPTGraphHostingView.m b/framework/PlatformSpecific/CPTGraphHostingView.m index a986837cf..f9605dccb 100644 --- a/framework/PlatformSpecific/CPTGraphHostingView.m +++ b/framework/PlatformSpecific/CPTGraphHostingView.m @@ -686,7 +686,6 @@ -(void)setOpenHandCursor:(nullable NSCursor *)newCursor @end - #else #import "CPTGraph.h" diff --git a/framework/PlatformSpecific/CPTImagePlatformSpecific.m b/framework/PlatformSpecific/CPTImagePlatformSpecific.m index e55ee4f5f..9afa84451 100644 --- a/framework/PlatformSpecific/CPTImagePlatformSpecific.m +++ b/framework/PlatformSpecific/CPTImagePlatformSpecific.m @@ -69,7 +69,6 @@ -(nonnull instancetype)initForPNGFile:(nonnull NSString *)path @end - #else #import "CPTImage.h" diff --git a/framework/PlatformSpecific/CPTPlatformSpecificCategories.h b/framework/PlatformSpecific/CPTPlatformSpecificCategories.h index 294d4b7a9..732706178 100644 --- a/framework/PlatformSpecific/CPTPlatformSpecificCategories.h +++ b/framework/PlatformSpecific/CPTPlatformSpecificCategories.h @@ -39,7 +39,6 @@ @end - #else #import "CPTColor.h" diff --git a/framework/PlatformSpecific/CPTPlatformSpecificCategories.m b/framework/PlatformSpecific/CPTPlatformSpecificCategories.m index a7f457670..100d4ec74 100644 --- a/framework/PlatformSpecific/CPTPlatformSpecificCategories.m +++ b/framework/PlatformSpecific/CPTPlatformSpecificCategories.m @@ -118,7 +118,6 @@ -(CGSize)sizeAsDrawn @end - #else #import "CPTPlatformSpecificFunctions.h" diff --git a/framework/PlatformSpecific/CPTPlatformSpecificDefines.h b/framework/PlatformSpecific/CPTPlatformSpecificDefines.h index e969face3..9d3a9d53b 100644 --- a/framework/PlatformSpecific/CPTPlatformSpecificDefines.h +++ b/framework/PlatformSpecific/CPTPlatformSpecificDefines.h @@ -15,7 +15,6 @@ typedef NSFont CPTNativeFont; ///< Platform-native font. #import - typedef UIColor CPTNativeColor; ///< Platform-native color. typedef UIImage CPTNativeImage; ///< Platform-native image format. typedef UIEvent CPTNativeEvent; ///< Platform-native OS event. diff --git a/framework/PlatformSpecific/CPTPlatformSpecificFunctions.h b/framework/PlatformSpecific/CPTPlatformSpecificFunctions.h index 4093315e7..40d55e05c 100644 --- a/framework/PlatformSpecific/CPTPlatformSpecificFunctions.h +++ b/framework/PlatformSpecific/CPTPlatformSpecificFunctions.h @@ -35,7 +35,6 @@ CPTNativeImage *__nonnull CPTQuickLookImage(CGRect rect, __nonnull CPTQuickLookI } #endif - #else #import "CPTDefinitions.h" diff --git a/framework/PlatformSpecific/CPTPlatformSpecificFunctions.m b/framework/PlatformSpecific/CPTPlatformSpecificFunctions.m index c8f968802..e46dbda11 100644 --- a/framework/PlatformSpecific/CPTPlatformSpecificFunctions.m +++ b/framework/PlatformSpecific/CPTPlatformSpecificFunctions.m @@ -143,7 +143,6 @@ CPTRGBAColor CPTRGBAColorFromNSColor(NSColor *__nonnull nsColor) return image; } - #else #import "CPTExceptions.h" diff --git a/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m b/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m index 2cade21d9..25cd7771b 100644 --- a/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m +++ b/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m @@ -278,7 +278,6 @@ -(void)drawInRect:(CGRect)rect withTextStyle:(nullable CPTTextStyle *)style inCo @end - #else #import "CPTColor.h" diff --git a/framework/Source/CPTColorSpace.h b/framework/Source/CPTColorSpace.h index a4998cd5d..806f0593a 100644 --- a/framework/Source/CPTColorSpace.h +++ b/framework/Source/CPTColorSpace.h @@ -1,5 +1,5 @@ -#import #import +#import @interface CPTColorSpace : NSObject diff --git a/framework/Source/CPTConstraints.h b/framework/Source/CPTConstraints.h index c5ccc9a05..7d86877e9 100644 --- a/framework/Source/CPTConstraints.h +++ b/framework/Source/CPTConstraints.h @@ -1,5 +1,5 @@ -#import #import +#import @interface CPTConstraints : NSObject diff --git a/framework/Source/CPTFill.h b/framework/Source/CPTFill.h index 525ff0475..e60b61e1c 100644 --- a/framework/Source/CPTFill.h +++ b/framework/Source/CPTFill.h @@ -1,5 +1,5 @@ -#import #import +#import /// @file diff --git a/framework/Source/CPTLineCap.h b/framework/Source/CPTLineCap.h index fa8a8059f..21b3b5ddf 100644 --- a/framework/Source/CPTLineCap.h +++ b/framework/Source/CPTLineCap.h @@ -1,5 +1,5 @@ -#import #import +#import /// @file diff --git a/framework/Source/CPTPlotSymbol.h b/framework/Source/CPTPlotSymbol.h index 46b0d17ed..876e5830b 100644 --- a/framework/Source/CPTPlotSymbol.h +++ b/framework/Source/CPTPlotSymbol.h @@ -1,5 +1,5 @@ -#import #import +#import /// @file diff --git a/framework/Source/CPTShadow.h b/framework/Source/CPTShadow.h index b677d7c1a..61c81cfb3 100644 --- a/framework/Source/CPTShadow.h +++ b/framework/Source/CPTShadow.h @@ -1,5 +1,5 @@ -#import #import +#import @class CPTColor; diff --git a/framework/Source/NSCoderExtensions.h b/framework/Source/NSCoderExtensions.h index 7558a8e6e..f2dfea4b1 100644 --- a/framework/Source/NSCoderExtensions.h +++ b/framework/Source/NSCoderExtensions.h @@ -1,5 +1,5 @@ -#import #import +#import /** @category NSCoder(CPTExtensions) * @brief Core Plot extensions to NSCoder. diff --git a/framework/Source/NSNumberExtensions.h b/framework/Source/NSNumberExtensions.h index a905bc0ec..3db301018 100644 --- a/framework/Source/NSNumberExtensions.h +++ b/framework/Source/NSNumberExtensions.h @@ -1,5 +1,5 @@ -#import #import +#import /** @category NSNumber(CPTExtensions) * @brief Core Plot extensions to NSNumber. From 2e91912fa072058b99638e4b092a9ebdeefc8d54 Mon Sep 17 00:00:00 2001 From: 3a4oT Date: Sat, 12 Dec 2020 00:32:03 +0200 Subject: [PATCH 033/245] updated changelog --- documentation/changelog.markdown | 73 +++++++++++--------------------- 1 file changed, 24 insertions(+), 49 deletions(-) diff --git a/documentation/changelog.markdown b/documentation/changelog.markdown index d14a45c15..9d239b92c 100644 --- a/documentation/changelog.markdown +++ b/documentation/changelog.markdown @@ -7,10 +7,9 @@ This release updates Core Plot to be compatible with Xcode 12. The Mac deployment target is now macOS 10.9. The iOS deployment target is now iOS 9.0 for both the framework and the static library. The tvOS deployment target remains tvOS 9.0. ## Details -- **New**: TBD -- **Changed**: Updated the deployment targets for all supported operating systems for the minimums required by Xcode 12. The Mac deployment target is now macOS 10.9. The iOS deployment target is now iOS 12.0 for both the framework and the static library. The tvOS deployment target is now tvOS 12.0. - +- **New**: Swift Package Manager support +- **Changed**: Updated the deployment targets for all supported operating systems for the minimums required by Xcode 12. The Mac deployment target is now macOS 10.9. The iOS deployment target is now iOS 12.0 for both the framework and the static library. The tvOS deployment target is now tvOS 12.0. # Release 2.3 (January 10, 2020) @@ -21,6 +20,7 @@ This release updates Core Plot to be compatible with Xcode 11 and Swift 5. It ad The Mac deployment target remains OS X 10.8. The iOS deployment target remains iOS 8.0 for both the framework and the static library. The tvOS deployment target remains tvOS 9.0. ## Details + - **New**: Added support for platform native fonts (`NSFont` and `UIFont`). - **New**: Added support for platform native colors (`NSColor` and `UIColor`), including dynamic system colors. - **New**: Added support for variable bar widths in bar, range, and trading range plots. @@ -33,8 +33,6 @@ The Mac deployment target remains OS X 10.8. The iOS deployment target remains i - **Removed**: Removed docset generation. Docsets are no longer supported under Xcode 9.3. - **Removed**: Removed the AAPLot and StockPlot example apps because the Yahoo finance API that both relied for data is no longer available. - - # Release 2.2 (September 18, 2016) ## Release Notes @@ -44,25 +42,25 @@ This release updates Core Plot to be compatible with Xcode 8 and Swift 3. The Mac deployment target remains OS X 10.8. The iOS deployment target has changed to iOS 8.0 for both the framework and the static library. The tvOS deployment target remains tvOS 9.0. Core Plot no longer requires the Accelerate framework. ## Details + - **New**: Increased the iOS deployment target to iOS 8. - **Changed**: Added Swift name mappings for all string constants. - **Changed**: Updated all Swift example apps to Swift 3. - **Changed**: Miscellaneous bug fixes and cleanup. - **Removed**: Removed the dependency on the Accelerate framework. - - # Release 2.1 (April 16, 2016) ## Release Notes -This release adds a tvOS framework and removes the deprecated `CorePlot-CocoaTouch.xcodeproj` project file. All Core Plot build targets for Mac, iOS, tvOS, and the documentation are in the `CorePlot.xcodeproj` project file. Annotated type definitions (e.g., `CPTNumberArray`) were changed to exclude the pointer star ("*") so they can be used interchangeably with class names. +This release adds a tvOS framework and removes the deprecated `CorePlot-CocoaTouch.xcodeproj` project file. All Core Plot build targets for Mac, iOS, tvOS, and the documentation are in the `CorePlot.xcodeproj` project file. Annotated type definitions (e.g., `CPTNumberArray`) were changed to exclude the pointer star ("\*") so they can be used interchangeably with class names. Curved scatter plots received several improvements. This release adds options to use Catmull-Rom and Hermite cubic splines to draw curved scatter plot lines. When a Hermite spline is used to draw a monotonic data series, the curved line will be monotonic as well. Plot spaces have new methods to scale the plot space to fit entire plots. The Mac deployment target has increased to OS X 10.8. The iOS deployment target remains iOS 6.0 for the static library and iOS 8.0 for the framework. The tvOS deployment target is tvOS 9.0. ## Details + - **New**: Increased the Mac deployment target to OS X 10.8. - **New**: Added a tvOS framework. - **New**: Added an option to anchor alternating band fills to a specific starting value. @@ -71,12 +69,10 @@ The Mac deployment target has increased to OS X 10.8. The iOS deployment target - **New**: Added an option to draw legend swatches to the left or right side of the title. - **New**: Added options to use Catmull-Rom and Hermite cubic splines to draw curved scatter plot lines. - **New**: Added a method to automatically scale the plot space to fit the entire plot. -- **Changed**: Changed the annotated type definitions to exclude the pointer star ("*"). +- **Changed**: Changed the annotated type definitions to exclude the pointer star ("\*"). - **Changed**: Miscellaneous bug fixes and cleanup. - **Removed**: Removed the deprecated `CorePlot-CocoaTouch.xcodeproj` project file. - - # Release 2.0 (October 4, 2015) ## Release Notes @@ -89,6 +85,7 @@ The Mac and iOS projects have been combined into one project file. The `CorePlot The deployment target has increased to iOS 6.0 for the static library and iOS 8.0 for the framework. The Mac deployment target remains OS X 10.7. ## Details + - **New**: Combined the Mac and iOS projects and added an iOS framework target. The `CorePlot-CocoaTouch.xcodeproj` project file is deprecated. - **New**: Added histogram style options to `CPTScatterPlot`. - **New**: Added iOS unit tests. @@ -103,8 +100,6 @@ The deployment target has increased to iOS 6.0 for the static library and iOS 8. - **Changed**: Renamed the `CPTXYAxis.orthogonalCoordinateDecimal` property to `CPTXYAxis.orthogonalPosition`. - **Changed**: Miscellaneous bug fixes and cleanup. - - # Release 1.6 (May 9, 2015) ## Release Notes @@ -112,20 +107,21 @@ The deployment target has increased to iOS 6.0 for the static library and iOS 8. This release adds support for @3x and stretchable images, plot area fill bands, new axis and plot delegate methods, and trackpad and scroll wheel gestures on the Mac. The behavior of all axis and plot xxxWasSelected delegate methods changed to require both a down and up event on the same element instead of only the down event. The deployment target has increased to iOS 5.0 and Mac OS X 10.7 and all iOS clients must now link against the Accelerate framework. ## Details + - **New**: Added hand cursors to the Mac hosting view to indicate when user interaction is enabled and when dragging is in progress. -- **New**: Added two additional initialization methods to `CPTImage`. +- **New**: Added two additional initialization methods to `CPTImage`. - **New**: Added a dependency on the Accelerate framework. All iOS clients must now link against this framework. - **New**: Added a shared header file for apps using Core Plot with CocoaPods. - **New**: Added support for pinch zoom gestures on the Mac. - **New**: Added support for trackpad and mouse wheel scrolling gestures on the Mac. - **New**: Added a scroll wheel event to ``. - **New**: Added axis and plot delegate methods for touch down and up events on labels. -- **New**: Added scatter plot data line selection delegate methods. +- **New**: Added scatter plot data line selection delegate methods. - **New**: Added scatter plot area fill bands. - **New**: Added new methods to all plots to allow labels, styles, and plot symbols to be updated independent of the plot data. - **New**: Added support for stretchable images. - **New**: Added support for @3x images. -- **New**: Added support for using an Objective-C block to calculate plot values in the function datasource class. +- **New**: Added support for using an Objective-C block to calculate plot values in the function datasource class. - **New**: Added support for categorical plot data. - **New**: Added `showBarBorder` property to `CPTTradingRangePlot`. - **Changed**: Increased the deployment target to iOS 5.0 and Mac OS X 10.7. @@ -136,8 +132,6 @@ This release adds support for @3x and stretchable images, plot area fill bands, - **Changed**: Miscellaneous bug fixes and cleanup. - **Removed**: Removed the deprecated plot space methods. - - # Release 1.5.1 (March 16, 2014) ## Release Notes @@ -145,11 +139,10 @@ This release adds support for @3x and stretchable images, plot area fill bands, This release updates release 1.5 to work with Xcode 5.1. ## Details + - **Removed**: Removed the `-all_load` linker flag from the iOS project. - **Removed**: Removed support for garbage collection. - - # Release 1.5 (March 15, 2014) ## Release Notes @@ -159,6 +152,7 @@ and new customization options for legends, range plots, and axis titles. It also plot space properties to permit more fine-grained control of momentum scrolling. ## Details + - **New**: Updated `CPTAnimation` to allow animations to start at the current value of the animated property instead of a fixed value. - **New**: Animations can now start when the value of the animated property enters the animated range. - **New**: Added an identifier and user info dictionary to animation operations. @@ -175,14 +169,12 @@ plot space properties to permit more fine-grained control of momentum scrolling. - **Changed**: Miscellaneous bug fixes and cleanup. - **Removed**: Removed the elastic global range properties from `CPTXYPlotSpace`. Turning on momentum scrolling now automatically allows elastic ranges, too. - - # Release 1.4 (September 28, 2013) ## Release Notes This release adds a helper class that makes it easy to create a datasource to plot a mathematical function. -The function datasource can plot any c-style function that returns the value of *y* = *f*(*x*). +The function datasource can plot any c-style function that returns the value of _y_ = _f_(_x_). The release also adds new delegate methods for legends and axis labels, a new line drawing style, new axis and data label positioning options, and support for label formatters that return styled text. @@ -191,6 +183,7 @@ They have been replaced with equivalent methods that add an additional parameter the size of the array and will be removed in a future release. ## Details + - **New**: Added properties to allow axis labels to be positioned independent of the tick direction. - **New**: Added legend delegate methods to notify the delegate when a legend entry is selected. - **New**: Added support for lines drawn with a gradient following the stroked path. @@ -202,28 +195,25 @@ the size of the array and will be removed in a future release. - **Changed**: Updated all projects to support Xcode 5. - **Changed**: Miscellaneous bug fixes and cleanup. - - # Release 1.3 (June 30, 2013) ## Release Notes This release adds support for styled text (via `NSAttributedString`) in all titles, labels, and text layers. It adds support for momentum scrolling and "rubber band" snap-back when scrolling beyond -the global *x*- and *y*-ranges. +the global _x_- and _y_-ranges. ## Details + - **New**: Added support for styled text in all titles, labels, and text layers. - **New**: Added a minor tick label shadow property to `CPTAxis`. - **New**: Added a property to hide plot data labels. - **New**: Added support for momentum scrolling. -- **New**: Added support for "rubber band" snap-back when scrolling reaches the global *x*- and *y*-ranges. +- **New**: Added support for "rubber band" snap-back when scrolling reaches the global _x_- and _y_-ranges. - **New**: Added line break mode support to `CPTTextStyle`. - **New**: Added a maximum layer size to `CPTTextLayer`. - **Changed**: Miscellaneous bug fixes and cleanup. - - # Release 1.2 (April 6, 2013) ## Release Notes @@ -232,14 +222,13 @@ This release adds animation support for plot ranges, decimal values, and other p It also updates some of the example apps to use ARC. ## Details + - **New**: Added animation support for plot ranges, decimal values, and other properties. - **New**: Added starting and ending anchor point properties for radial gradients. - **Changed**: Changed the type of all axis and plot label formatters from `NSNumberFormatter` to `NSFormatter`. -- **Changed**: Updated all *CPTTestApp* example apps for Mac and iOS to use ARC. +- **Changed**: Updated all _CPTTestApp_ example apps for Mac and iOS to use ARC. - **Changed**: Miscellaneous bug fixes and cleanup. - - # Release 1.1 (November 11, 2012) ## Release Notes @@ -247,6 +236,7 @@ It also updates some of the example apps to use ARC. This release adds many new plot properties, delegate methods, and data bindings. ## Details + - **New**: Added Bezier curve interpolation option to `CPTScatterPlot`. - **New**: Added printing support to the OS X hosting view. - **New**: Added a plot data label selection delegate method. @@ -269,8 +259,6 @@ This release adds many new plot properties, delegate methods, and data bindings. - **Changed**: Significant updates to the API documentation for organization and clarity. - **Changed**: Miscellaneous bug fixes and cleanup. - - # Release 1.0 (February 20, 2012) ## Release Notes @@ -290,6 +278,7 @@ compatibility with older systems, Core Plot itself does not use ARC but its head and binaries can be used in applications that do. ## Details + - **New**: Added a script to automatically format the code following the coding standards using uncrustify. - **New**: Added support for automatic reference counting (ARC). - **New**: Added the HTML docs built with Doxygen to the source code repository so that they can be viewed online with a web browser. @@ -307,8 +296,6 @@ and binaries can be used in applications that do. - **Removed**: Removed unused `NSException` extensions. - **Removed**: Removed unused methods from `CPTLayer` and `CPTTextLayer`. - - # Release 0.9 Beta (September 25, 2011) ## Release Notes @@ -345,8 +332,6 @@ and other line caps on axis lines, and animation support for many plot propertie - **Removed**: Removed deprecated properties and methods. - **Removed**: Removed the unused default z-position from all layers. - - # Release 0.4 Alpha (July 7, 2011) ## Release Notes @@ -355,7 +340,7 @@ This release contains several changes that will break apps built against earlier versions. The class prefix for all Core Plot classes and public symbols changed from "CP" to "CPT". Also, the iOS SDK is no longer supported. iOS projects that were built against the SDK must be updated to include the Core Plot project file or link against the -new universal static library instead. +new universal static library instead. ## Details @@ -372,8 +357,6 @@ new universal static library instead. - **Changed**: Miscellaneous bug fixes and cleanup. - **Removed**: Removed the iOS SDK build and installer packaging scripts. - - # Release 0.3 Alpha (May 4, 2011) ## Release Notes @@ -400,8 +383,6 @@ updated to use the mutable versions. - **Changed**: Updated Doxygen configuration files and comments for Doxygen 1.7.3. - **Changed**: Miscellaneous bug fixes and cleanup. - - # Release 0.2.2 Alpha (November 10, 2010) ## Release Notes @@ -417,8 +398,6 @@ It also adds support for missing data in all plot types. - **Changed**: Updated the release packaging scripts. - **Changed**: Miscellaneous bug fixes and cleanup. - - # Release 0.2.1 Alpha (October 20, 2010) ## Release Notes @@ -436,8 +415,6 @@ data cache that changed. It also adds support for Xcode 3.2.4 and the iOS 4.1 SD - **Changed**: Miscellaneous bug fixes and cleanup. - **Removed**: Removed the Core Plot animation classes. - - # Release 0.2 Alpha (September 10, 2010) ## Release Notes @@ -460,8 +437,6 @@ performance and simplifies the process of linking Core Plot into other projects. - **Changed**: Miscellaneous bug fixes and cleanup. - **Removed**: Removed all C++ code. - - # Release 0.1 Alpha (June 20, 2010) ## Release Notes From 5b124daa3f80cb34a8c931ed752ac94cbce4584d Mon Sep 17 00:00:00 2001 From: 3a4oT Date: Sat, 12 Dec 2020 00:58:30 +0200 Subject: [PATCH 034/245] added README for 'generate_spm_sources_layout.sh' --- ...utomatic Swift Package Manager layout generator.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 scripts/README Automatic Swift Package Manager layout generator.md diff --git a/scripts/README Automatic Swift Package Manager layout generator.md b/scripts/README Automatic Swift Package Manager layout generator.md new file mode 100644 index 000000000..dabed58a9 --- /dev/null +++ b/scripts/README Automatic Swift Package Manager layout generator.md @@ -0,0 +1,11 @@ +Swift Package Manager [has some strict requirements] (https://github.com/apple/swift-package-manager/blob/main/Documentation/Usage.md#creating-c-language-targets) to source files layout. We can gain SPM support with minimal project structure changes by applying an autogenerated layout based on symbolic links technics. SPM related files located under `spm` folder at project's root. You should **NEVER** modify it manually nor inlude to Xcode's project. + +### Generate SPM layout for core-plot + +1. From **project's root** run: + + `bash scripts/generate_spm_sources_layout.sh` + +2. Commit Changes + +Repeate those steps each time you modify/add project's files. **Make sure** to have this CI step which will check that `generate_spm_sources_layout.sh` is not broken. From 639e7d554b27a0cd40dfc3f93fa84b4765a31daf Mon Sep 17 00:00:00 2001 From: 3a4oT Date: Sat, 12 Dec 2020 01:15:39 +0200 Subject: [PATCH 035/245] added autogenerated SPM support --- scripts/generate_spm_sources_layout.sh | 17 ++++++++++------- spm/Sources/core-plot/CPTAnimation.m | 1 + spm/Sources/core-plot/CPTAnimationOperation.m | 1 + spm/Sources/core-plot/CPTAnimationPeriod.m | 1 + spm/Sources/core-plot/CPTAnnotation.m | 1 + spm/Sources/core-plot/CPTAnnotationHostLayer.m | 1 + spm/Sources/core-plot/CPTAxis.m | 1 + spm/Sources/core-plot/CPTAxisLabel.m | 1 + spm/Sources/core-plot/CPTAxisLabelGroup.m | 1 + spm/Sources/core-plot/CPTAxisSet.m | 1 + spm/Sources/core-plot/CPTAxisTitle.m | 1 + spm/Sources/core-plot/CPTBarPlot.m | 1 + spm/Sources/core-plot/CPTBorderedLayer.m | 1 + spm/Sources/core-plot/CPTCalendarFormatter.m | 1 + spm/Sources/core-plot/CPTColor.m | 1 + spm/Sources/core-plot/CPTColorSpace.m | 1 + spm/Sources/core-plot/CPTConstraints.m | 1 + spm/Sources/core-plot/CPTDefinitions.m | 1 + spm/Sources/core-plot/CPTDerivedXYGraph.m | 1 + spm/Sources/core-plot/CPTExceptions.m | 1 + spm/Sources/core-plot/CPTFill.m | 1 + spm/Sources/core-plot/CPTFunctionDataSource.m | 1 + spm/Sources/core-plot/CPTGradient.m | 1 + spm/Sources/core-plot/CPTGraph.m | 1 + spm/Sources/core-plot/CPTGraphHostingView.m | 1 + spm/Sources/core-plot/CPTGridLineGroup.m | 1 + spm/Sources/core-plot/CPTGridLines.m | 1 + spm/Sources/core-plot/CPTImage.m | 1 + .../core-plot/CPTImagePlatformSpecific.m | 1 + spm/Sources/core-plot/CPTLayer.m | 1 + spm/Sources/core-plot/CPTLayerAnnotation.m | 1 + spm/Sources/core-plot/CPTLegend.m | 1 + spm/Sources/core-plot/CPTLegendEntry.m | 1 + spm/Sources/core-plot/CPTLimitBand.m | 1 + spm/Sources/core-plot/CPTLineCap.m | 1 + spm/Sources/core-plot/CPTLineStyle.m | 1 + spm/Sources/core-plot/CPTMutableLineStyle.m | 1 + .../CPTMutableNumericData+TypeConversion.m | 1 + spm/Sources/core-plot/CPTMutableNumericData.m | 1 + spm/Sources/core-plot/CPTMutablePlotRange.m | 1 + spm/Sources/core-plot/CPTMutableShadow.m | 1 + spm/Sources/core-plot/CPTMutableTextStyle.m | 1 + .../core-plot/CPTNumericData+TypeConversion.m | 1 + spm/Sources/core-plot/CPTNumericData.m | 1 + spm/Sources/core-plot/CPTNumericDataType.m | 1 + spm/Sources/core-plot/CPTPathExtensions.m | 1 + spm/Sources/core-plot/CPTPieChart.m | 1 + .../core-plot/CPTPlatformSpecificCategories.m | 1 + .../core-plot/CPTPlatformSpecificDefines.m | 1 + .../core-plot/CPTPlatformSpecificFunctions.m | 1 + spm/Sources/core-plot/CPTPlot.m | 1 + spm/Sources/core-plot/CPTPlotArea.m | 1 + spm/Sources/core-plot/CPTPlotAreaFrame.m | 1 + spm/Sources/core-plot/CPTPlotGroup.m | 1 + spm/Sources/core-plot/CPTPlotRange.m | 1 + spm/Sources/core-plot/CPTPlotSpace.m | 1 + spm/Sources/core-plot/CPTPlotSpaceAnnotation.m | 1 + spm/Sources/core-plot/CPTPlotSymbol.m | 1 + spm/Sources/core-plot/CPTRangePlot.m | 1 + spm/Sources/core-plot/CPTScatterPlot.m | 1 + spm/Sources/core-plot/CPTShadow.m | 1 + spm/Sources/core-plot/CPTTextLayer.m | 1 + spm/Sources/core-plot/CPTTextStyle.m | 1 + .../core-plot/CPTTextStylePlatformSpecific.m | 1 + spm/Sources/core-plot/CPTTheme.m | 1 + spm/Sources/core-plot/CPTTimeFormatter.m | 1 + spm/Sources/core-plot/CPTTradingRangePlot.m | 1 + spm/Sources/core-plot/CPTUtilities.m | 1 + spm/Sources/core-plot/CPTXYAxis.m | 1 + spm/Sources/core-plot/CPTXYAxisSet.m | 1 + spm/Sources/core-plot/CPTXYGraph.m | 1 + spm/Sources/core-plot/CPTXYPlotSpace.m | 1 + spm/Sources/core-plot/NSCoderExtensions.m | 1 + .../core-plot/NSDecimalNumberExtensions.m | 1 + spm/Sources/core-plot/NSNumberExtensions.m | 1 + .../core-plot/_CPTAnimationCGFloatPeriod.h | 1 + .../core-plot/_CPTAnimationCGFloatPeriod.m | 1 + .../core-plot/_CPTAnimationCGPointPeriod.h | 1 + .../core-plot/_CPTAnimationCGPointPeriod.m | 1 + .../core-plot/_CPTAnimationCGRectPeriod.h | 1 + .../core-plot/_CPTAnimationCGRectPeriod.m | 1 + .../core-plot/_CPTAnimationCGSizePeriod.h | 1 + .../core-plot/_CPTAnimationCGSizePeriod.m | 1 + .../core-plot/_CPTAnimationNSDecimalPeriod.h | 1 + .../core-plot/_CPTAnimationNSDecimalPeriod.m | 1 + .../core-plot/_CPTAnimationNSNumberPeriod.h | 1 + .../core-plot/_CPTAnimationNSNumberPeriod.m | 1 + .../core-plot/_CPTAnimationPlotRangePeriod.h | 1 + .../core-plot/_CPTAnimationPlotRangePeriod.m | 1 + .../core-plot/_CPTAnimationTimingFunctions.h | 1 + .../core-plot/_CPTAnimationTimingFunctions.m | 1 + spm/Sources/core-plot/_CPTBorderLayer.h | 1 + spm/Sources/core-plot/_CPTBorderLayer.m | 1 + spm/Sources/core-plot/_CPTConstraintsFixed.h | 1 + spm/Sources/core-plot/_CPTConstraintsFixed.m | 1 + spm/Sources/core-plot/_CPTConstraintsRelative.h | 1 + spm/Sources/core-plot/_CPTConstraintsRelative.m | 1 + spm/Sources/core-plot/_CPTDarkGradientTheme.h | 1 + spm/Sources/core-plot/_CPTDarkGradientTheme.m | 1 + spm/Sources/core-plot/_CPTFillColor.h | 1 + spm/Sources/core-plot/_CPTFillColor.m | 1 + spm/Sources/core-plot/_CPTFillGradient.h | 1 + spm/Sources/core-plot/_CPTFillGradient.m | 1 + spm/Sources/core-plot/_CPTFillImage.h | 1 + spm/Sources/core-plot/_CPTFillImage.m | 1 + spm/Sources/core-plot/_CPTMaskLayer.h | 1 + spm/Sources/core-plot/_CPTMaskLayer.m | 1 + spm/Sources/core-plot/_CPTPlainBlackTheme.h | 1 + spm/Sources/core-plot/_CPTPlainBlackTheme.m | 1 + spm/Sources/core-plot/_CPTPlainWhiteTheme.h | 1 + spm/Sources/core-plot/_CPTPlainWhiteTheme.m | 1 + spm/Sources/core-plot/_CPTSlateTheme.h | 1 + spm/Sources/core-plot/_CPTSlateTheme.m | 1 + spm/Sources/core-plot/_CPTStocksTheme.h | 1 + spm/Sources/core-plot/_CPTStocksTheme.m | 1 + spm/Sources/core-plot/_CPTXYTheme.h | 1 + spm/Sources/core-plot/_CPTXYTheme.m | 1 + spm/Sources/core-plot/include/CPTAnimation.h | 1 + .../core-plot/include/CPTAnimationOperation.h | 1 + .../core-plot/include/CPTAnimationPeriod.h | 1 + spm/Sources/core-plot/include/CPTAnnotation.h | 1 + .../core-plot/include/CPTAnnotationHostLayer.h | 1 + spm/Sources/core-plot/include/CPTAxis.h | 1 + spm/Sources/core-plot/include/CPTAxisLabel.h | 1 + .../core-plot/include/CPTAxisLabelGroup.h | 1 + spm/Sources/core-plot/include/CPTAxisSet.h | 1 + spm/Sources/core-plot/include/CPTAxisTitle.h | 1 + spm/Sources/core-plot/include/CPTBarPlot.h | 1 + .../core-plot/include/CPTBorderedLayer.h | 1 + .../core-plot/include/CPTCalendarFormatter.h | 1 + spm/Sources/core-plot/include/CPTColor.h | 1 + spm/Sources/core-plot/include/CPTColorSpace.h | 1 + spm/Sources/core-plot/include/CPTConstraints.h | 1 + .../core-plot/include/CPTDebugQuickLook.h | 1 + spm/Sources/core-plot/include/CPTDefinitions.h | 1 + .../core-plot/include/CPTDerivedXYGraph.h | 1 + spm/Sources/core-plot/include/CPTExceptions.h | 1 + spm/Sources/core-plot/include/CPTFill.h | 1 + .../core-plot/include/CPTFunctionDataSource.h | 1 + spm/Sources/core-plot/include/CPTGradient.h | 1 + spm/Sources/core-plot/include/CPTGraph.h | 1 + .../core-plot/include/CPTGraphHostingView.h | 1 + .../core-plot/include/CPTGridLineGroup.h | 1 + spm/Sources/core-plot/include/CPTGridLines.h | 1 + spm/Sources/core-plot/include/CPTImage.h | 1 + spm/Sources/core-plot/include/CPTLayer.h | 1 + .../core-plot/include/CPTLayerAnnotation.h | 1 + spm/Sources/core-plot/include/CPTLegend.h | 1 + spm/Sources/core-plot/include/CPTLegendEntry.h | 1 + spm/Sources/core-plot/include/CPTLimitBand.h | 1 + spm/Sources/core-plot/include/CPTLineCap.h | 1 + spm/Sources/core-plot/include/CPTLineStyle.h | 1 + .../core-plot/include/CPTMutableLineStyle.h | 1 + .../CPTMutableNumericData+TypeConversion.h | 1 + .../core-plot/include/CPTMutableNumericData.h | 1 + .../core-plot/include/CPTMutablePlotRange.h | 1 + .../core-plot/include/CPTMutableShadow.h | 1 + .../core-plot/include/CPTMutableTextStyle.h | 1 + .../include/CPTNumericData+TypeConversion.h | 1 + spm/Sources/core-plot/include/CPTNumericData.h | 1 + .../core-plot/include/CPTNumericDataType.h | 1 + .../core-plot/include/CPTPathExtensions.h | 1 + spm/Sources/core-plot/include/CPTPieChart.h | 1 + .../include/CPTPlatformSpecificCategories.h | 1 + .../include/CPTPlatformSpecificDefines.h | 1 + .../include/CPTPlatformSpecificFunctions.h | 1 + spm/Sources/core-plot/include/CPTPlot.h | 1 + spm/Sources/core-plot/include/CPTPlotArea.h | 1 + .../core-plot/include/CPTPlotAreaFrame.h | 1 + spm/Sources/core-plot/include/CPTPlotGroup.h | 1 + spm/Sources/core-plot/include/CPTPlotRange.h | 1 + spm/Sources/core-plot/include/CPTPlotSpace.h | 1 + .../core-plot/include/CPTPlotSpaceAnnotation.h | 1 + spm/Sources/core-plot/include/CPTPlotSymbol.h | 1 + spm/Sources/core-plot/include/CPTRangePlot.h | 1 + spm/Sources/core-plot/include/CPTResponder.h | 1 + spm/Sources/core-plot/include/CPTScatterPlot.h | 1 + spm/Sources/core-plot/include/CPTShadow.h | 1 + spm/Sources/core-plot/include/CPTTextLayer.h | 1 + spm/Sources/core-plot/include/CPTTextStyle.h | 1 + .../include/CPTTextStylePlatformSpecific.h | 1 + spm/Sources/core-plot/include/CPTTheme.h | 1 + .../core-plot/include/CPTTimeFormatter.h | 1 + .../core-plot/include/CPTTradingRangePlot.h | 1 + spm/Sources/core-plot/include/CPTUtilities.h | 1 + spm/Sources/core-plot/include/CPTXYAxis.h | 1 + spm/Sources/core-plot/include/CPTXYAxisSet.h | 1 + spm/Sources/core-plot/include/CPTXYGraph.h | 1 + spm/Sources/core-plot/include/CPTXYPlotSpace.h | 1 + spm/Sources/core-plot/include/CorePlot.h | 1 + .../core-plot/include/NSCoderExtensions.h | 1 + .../include/NSDecimalNumberExtensions.h | 1 + .../core-plot/include/NSNumberExtensions.h | 1 + 193 files changed, 202 insertions(+), 7 deletions(-) create mode 120000 spm/Sources/core-plot/CPTAnimation.m create mode 120000 spm/Sources/core-plot/CPTAnimationOperation.m create mode 120000 spm/Sources/core-plot/CPTAnimationPeriod.m create mode 120000 spm/Sources/core-plot/CPTAnnotation.m create mode 120000 spm/Sources/core-plot/CPTAnnotationHostLayer.m create mode 120000 spm/Sources/core-plot/CPTAxis.m create mode 120000 spm/Sources/core-plot/CPTAxisLabel.m create mode 120000 spm/Sources/core-plot/CPTAxisLabelGroup.m create mode 120000 spm/Sources/core-plot/CPTAxisSet.m create mode 120000 spm/Sources/core-plot/CPTAxisTitle.m create mode 120000 spm/Sources/core-plot/CPTBarPlot.m create mode 120000 spm/Sources/core-plot/CPTBorderedLayer.m create mode 120000 spm/Sources/core-plot/CPTCalendarFormatter.m create mode 120000 spm/Sources/core-plot/CPTColor.m create mode 120000 spm/Sources/core-plot/CPTColorSpace.m create mode 120000 spm/Sources/core-plot/CPTConstraints.m create mode 120000 spm/Sources/core-plot/CPTDefinitions.m create mode 120000 spm/Sources/core-plot/CPTDerivedXYGraph.m create mode 120000 spm/Sources/core-plot/CPTExceptions.m create mode 120000 spm/Sources/core-plot/CPTFill.m create mode 120000 spm/Sources/core-plot/CPTFunctionDataSource.m create mode 120000 spm/Sources/core-plot/CPTGradient.m create mode 120000 spm/Sources/core-plot/CPTGraph.m create mode 120000 spm/Sources/core-plot/CPTGraphHostingView.m create mode 120000 spm/Sources/core-plot/CPTGridLineGroup.m create mode 120000 spm/Sources/core-plot/CPTGridLines.m create mode 120000 spm/Sources/core-plot/CPTImage.m create mode 120000 spm/Sources/core-plot/CPTImagePlatformSpecific.m create mode 120000 spm/Sources/core-plot/CPTLayer.m create mode 120000 spm/Sources/core-plot/CPTLayerAnnotation.m create mode 120000 spm/Sources/core-plot/CPTLegend.m create mode 120000 spm/Sources/core-plot/CPTLegendEntry.m create mode 120000 spm/Sources/core-plot/CPTLimitBand.m create mode 120000 spm/Sources/core-plot/CPTLineCap.m create mode 120000 spm/Sources/core-plot/CPTLineStyle.m create mode 120000 spm/Sources/core-plot/CPTMutableLineStyle.m create mode 120000 spm/Sources/core-plot/CPTMutableNumericData+TypeConversion.m create mode 120000 spm/Sources/core-plot/CPTMutableNumericData.m create mode 120000 spm/Sources/core-plot/CPTMutablePlotRange.m create mode 120000 spm/Sources/core-plot/CPTMutableShadow.m create mode 120000 spm/Sources/core-plot/CPTMutableTextStyle.m create mode 120000 spm/Sources/core-plot/CPTNumericData+TypeConversion.m create mode 120000 spm/Sources/core-plot/CPTNumericData.m create mode 120000 spm/Sources/core-plot/CPTNumericDataType.m create mode 120000 spm/Sources/core-plot/CPTPathExtensions.m create mode 120000 spm/Sources/core-plot/CPTPieChart.m create mode 120000 spm/Sources/core-plot/CPTPlatformSpecificCategories.m create mode 120000 spm/Sources/core-plot/CPTPlatformSpecificDefines.m create mode 120000 spm/Sources/core-plot/CPTPlatformSpecificFunctions.m create mode 120000 spm/Sources/core-plot/CPTPlot.m create mode 120000 spm/Sources/core-plot/CPTPlotArea.m create mode 120000 spm/Sources/core-plot/CPTPlotAreaFrame.m create mode 120000 spm/Sources/core-plot/CPTPlotGroup.m create mode 120000 spm/Sources/core-plot/CPTPlotRange.m create mode 120000 spm/Sources/core-plot/CPTPlotSpace.m create mode 120000 spm/Sources/core-plot/CPTPlotSpaceAnnotation.m create mode 120000 spm/Sources/core-plot/CPTPlotSymbol.m create mode 120000 spm/Sources/core-plot/CPTRangePlot.m create mode 120000 spm/Sources/core-plot/CPTScatterPlot.m create mode 120000 spm/Sources/core-plot/CPTShadow.m create mode 120000 spm/Sources/core-plot/CPTTextLayer.m create mode 120000 spm/Sources/core-plot/CPTTextStyle.m create mode 120000 spm/Sources/core-plot/CPTTextStylePlatformSpecific.m create mode 120000 spm/Sources/core-plot/CPTTheme.m create mode 120000 spm/Sources/core-plot/CPTTimeFormatter.m create mode 120000 spm/Sources/core-plot/CPTTradingRangePlot.m create mode 120000 spm/Sources/core-plot/CPTUtilities.m create mode 120000 spm/Sources/core-plot/CPTXYAxis.m create mode 120000 spm/Sources/core-plot/CPTXYAxisSet.m create mode 120000 spm/Sources/core-plot/CPTXYGraph.m create mode 120000 spm/Sources/core-plot/CPTXYPlotSpace.m create mode 120000 spm/Sources/core-plot/NSCoderExtensions.m create mode 120000 spm/Sources/core-plot/NSDecimalNumberExtensions.m create mode 120000 spm/Sources/core-plot/NSNumberExtensions.m create mode 120000 spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.h create mode 120000 spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.m create mode 120000 spm/Sources/core-plot/_CPTAnimationCGPointPeriod.h create mode 120000 spm/Sources/core-plot/_CPTAnimationCGPointPeriod.m create mode 120000 spm/Sources/core-plot/_CPTAnimationCGRectPeriod.h create mode 120000 spm/Sources/core-plot/_CPTAnimationCGRectPeriod.m create mode 120000 spm/Sources/core-plot/_CPTAnimationCGSizePeriod.h create mode 120000 spm/Sources/core-plot/_CPTAnimationCGSizePeriod.m create mode 120000 spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.h create mode 120000 spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.m create mode 120000 spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.h create mode 120000 spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.m create mode 120000 spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.h create mode 120000 spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.m create mode 120000 spm/Sources/core-plot/_CPTAnimationTimingFunctions.h create mode 120000 spm/Sources/core-plot/_CPTAnimationTimingFunctions.m create mode 120000 spm/Sources/core-plot/_CPTBorderLayer.h create mode 120000 spm/Sources/core-plot/_CPTBorderLayer.m create mode 120000 spm/Sources/core-plot/_CPTConstraintsFixed.h create mode 120000 spm/Sources/core-plot/_CPTConstraintsFixed.m create mode 120000 spm/Sources/core-plot/_CPTConstraintsRelative.h create mode 120000 spm/Sources/core-plot/_CPTConstraintsRelative.m create mode 120000 spm/Sources/core-plot/_CPTDarkGradientTheme.h create mode 120000 spm/Sources/core-plot/_CPTDarkGradientTheme.m create mode 120000 spm/Sources/core-plot/_CPTFillColor.h create mode 120000 spm/Sources/core-plot/_CPTFillColor.m create mode 120000 spm/Sources/core-plot/_CPTFillGradient.h create mode 120000 spm/Sources/core-plot/_CPTFillGradient.m create mode 120000 spm/Sources/core-plot/_CPTFillImage.h create mode 120000 spm/Sources/core-plot/_CPTFillImage.m create mode 120000 spm/Sources/core-plot/_CPTMaskLayer.h create mode 120000 spm/Sources/core-plot/_CPTMaskLayer.m create mode 120000 spm/Sources/core-plot/_CPTPlainBlackTheme.h create mode 120000 spm/Sources/core-plot/_CPTPlainBlackTheme.m create mode 120000 spm/Sources/core-plot/_CPTPlainWhiteTheme.h create mode 120000 spm/Sources/core-plot/_CPTPlainWhiteTheme.m create mode 120000 spm/Sources/core-plot/_CPTSlateTheme.h create mode 120000 spm/Sources/core-plot/_CPTSlateTheme.m create mode 120000 spm/Sources/core-plot/_CPTStocksTheme.h create mode 120000 spm/Sources/core-plot/_CPTStocksTheme.m create mode 120000 spm/Sources/core-plot/_CPTXYTheme.h create mode 120000 spm/Sources/core-plot/_CPTXYTheme.m create mode 120000 spm/Sources/core-plot/include/CPTAnimation.h create mode 120000 spm/Sources/core-plot/include/CPTAnimationOperation.h create mode 120000 spm/Sources/core-plot/include/CPTAnimationPeriod.h create mode 120000 spm/Sources/core-plot/include/CPTAnnotation.h create mode 120000 spm/Sources/core-plot/include/CPTAnnotationHostLayer.h create mode 120000 spm/Sources/core-plot/include/CPTAxis.h create mode 120000 spm/Sources/core-plot/include/CPTAxisLabel.h create mode 120000 spm/Sources/core-plot/include/CPTAxisLabelGroup.h create mode 120000 spm/Sources/core-plot/include/CPTAxisSet.h create mode 120000 spm/Sources/core-plot/include/CPTAxisTitle.h create mode 120000 spm/Sources/core-plot/include/CPTBarPlot.h create mode 120000 spm/Sources/core-plot/include/CPTBorderedLayer.h create mode 120000 spm/Sources/core-plot/include/CPTCalendarFormatter.h create mode 120000 spm/Sources/core-plot/include/CPTColor.h create mode 120000 spm/Sources/core-plot/include/CPTColorSpace.h create mode 120000 spm/Sources/core-plot/include/CPTConstraints.h create mode 120000 spm/Sources/core-plot/include/CPTDebugQuickLook.h create mode 120000 spm/Sources/core-plot/include/CPTDefinitions.h create mode 120000 spm/Sources/core-plot/include/CPTDerivedXYGraph.h create mode 120000 spm/Sources/core-plot/include/CPTExceptions.h create mode 120000 spm/Sources/core-plot/include/CPTFill.h create mode 120000 spm/Sources/core-plot/include/CPTFunctionDataSource.h create mode 120000 spm/Sources/core-plot/include/CPTGradient.h create mode 120000 spm/Sources/core-plot/include/CPTGraph.h create mode 120000 spm/Sources/core-plot/include/CPTGraphHostingView.h create mode 120000 spm/Sources/core-plot/include/CPTGridLineGroup.h create mode 120000 spm/Sources/core-plot/include/CPTGridLines.h create mode 120000 spm/Sources/core-plot/include/CPTImage.h create mode 120000 spm/Sources/core-plot/include/CPTLayer.h create mode 120000 spm/Sources/core-plot/include/CPTLayerAnnotation.h create mode 120000 spm/Sources/core-plot/include/CPTLegend.h create mode 120000 spm/Sources/core-plot/include/CPTLegendEntry.h create mode 120000 spm/Sources/core-plot/include/CPTLimitBand.h create mode 120000 spm/Sources/core-plot/include/CPTLineCap.h create mode 120000 spm/Sources/core-plot/include/CPTLineStyle.h create mode 120000 spm/Sources/core-plot/include/CPTMutableLineStyle.h create mode 120000 spm/Sources/core-plot/include/CPTMutableNumericData+TypeConversion.h create mode 120000 spm/Sources/core-plot/include/CPTMutableNumericData.h create mode 120000 spm/Sources/core-plot/include/CPTMutablePlotRange.h create mode 120000 spm/Sources/core-plot/include/CPTMutableShadow.h create mode 120000 spm/Sources/core-plot/include/CPTMutableTextStyle.h create mode 120000 spm/Sources/core-plot/include/CPTNumericData+TypeConversion.h create mode 120000 spm/Sources/core-plot/include/CPTNumericData.h create mode 120000 spm/Sources/core-plot/include/CPTNumericDataType.h create mode 120000 spm/Sources/core-plot/include/CPTPathExtensions.h create mode 120000 spm/Sources/core-plot/include/CPTPieChart.h create mode 120000 spm/Sources/core-plot/include/CPTPlatformSpecificCategories.h create mode 120000 spm/Sources/core-plot/include/CPTPlatformSpecificDefines.h create mode 120000 spm/Sources/core-plot/include/CPTPlatformSpecificFunctions.h create mode 120000 spm/Sources/core-plot/include/CPTPlot.h create mode 120000 spm/Sources/core-plot/include/CPTPlotArea.h create mode 120000 spm/Sources/core-plot/include/CPTPlotAreaFrame.h create mode 120000 spm/Sources/core-plot/include/CPTPlotGroup.h create mode 120000 spm/Sources/core-plot/include/CPTPlotRange.h create mode 120000 spm/Sources/core-plot/include/CPTPlotSpace.h create mode 120000 spm/Sources/core-plot/include/CPTPlotSpaceAnnotation.h create mode 120000 spm/Sources/core-plot/include/CPTPlotSymbol.h create mode 120000 spm/Sources/core-plot/include/CPTRangePlot.h create mode 120000 spm/Sources/core-plot/include/CPTResponder.h create mode 120000 spm/Sources/core-plot/include/CPTScatterPlot.h create mode 120000 spm/Sources/core-plot/include/CPTShadow.h create mode 120000 spm/Sources/core-plot/include/CPTTextLayer.h create mode 120000 spm/Sources/core-plot/include/CPTTextStyle.h create mode 120000 spm/Sources/core-plot/include/CPTTextStylePlatformSpecific.h create mode 120000 spm/Sources/core-plot/include/CPTTheme.h create mode 120000 spm/Sources/core-plot/include/CPTTimeFormatter.h create mode 120000 spm/Sources/core-plot/include/CPTTradingRangePlot.h create mode 120000 spm/Sources/core-plot/include/CPTUtilities.h create mode 120000 spm/Sources/core-plot/include/CPTXYAxis.h create mode 120000 spm/Sources/core-plot/include/CPTXYAxisSet.h create mode 120000 spm/Sources/core-plot/include/CPTXYGraph.h create mode 120000 spm/Sources/core-plot/include/CPTXYPlotSpace.h create mode 120000 spm/Sources/core-plot/include/CorePlot.h create mode 120000 spm/Sources/core-plot/include/NSCoderExtensions.h create mode 120000 spm/Sources/core-plot/include/NSDecimalNumberExtensions.h create mode 120000 spm/Sources/core-plot/include/NSNumberExtensions.h diff --git a/scripts/generate_spm_sources_layout.sh b/scripts/generate_spm_sources_layout.sh index 7d489f8e3..e2d1c9b81 100755 --- a/scripts/generate_spm_sources_layout.sh +++ b/scripts/generate_spm_sources_layout.sh @@ -15,12 +15,15 @@ function generate_spm_public_headers() { echo "Generate symbolic links for all public heders. *.h" echo "Generated under ./spm/Sources/core-plot/include" - public_headers_list=$(find "framework" -name "*.[h]" \ - \! -name "*Test*.[hm]" \ - \! -name "_*.[hm]" \ - \! -name "CorePlot-CocoaTouch.h" \ - -type f -not -path "*/MacOnly/*" \ - -not -path "framework/CorePlot.h" | sed "s| \([^/]\)|:\1|g") + public_headers_list=$( + find "framework" -name "*.[h]" \ + \! -name "*Test*.[hm]" \ + \! -name "_*.[hm]" \ + \! -name "CorePlot-CocoaTouch.h" \ + \! -name "mainpage.h" \ + -type f -not -path "*/MacOnly/*" \ + -not -path "framework/CorePlot.h" | sed "s| \([^/]\)|:\1|g" + ) SRC_ROOT=$(pwd) cd $SPM_PUBLIC_HEADERS_PATH @@ -90,4 +93,4 @@ generate_spm_public_headers #3 generate_spm_private_sources #4 -generate_spm_public_sources \ No newline at end of file +generate_spm_public_sources diff --git a/spm/Sources/core-plot/CPTAnimation.m b/spm/Sources/core-plot/CPTAnimation.m new file mode 120000 index 000000000..337918f89 --- /dev/null +++ b/spm/Sources/core-plot/CPTAnimation.m @@ -0,0 +1 @@ +../../../framework/Source/CPTAnimation.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAnimationOperation.m b/spm/Sources/core-plot/CPTAnimationOperation.m new file mode 120000 index 000000000..fc2132df0 --- /dev/null +++ b/spm/Sources/core-plot/CPTAnimationOperation.m @@ -0,0 +1 @@ +../../../framework/Source/CPTAnimationOperation.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAnimationPeriod.m b/spm/Sources/core-plot/CPTAnimationPeriod.m new file mode 120000 index 000000000..ada3019bc --- /dev/null +++ b/spm/Sources/core-plot/CPTAnimationPeriod.m @@ -0,0 +1 @@ +../../../framework/Source/CPTAnimationPeriod.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAnnotation.m b/spm/Sources/core-plot/CPTAnnotation.m new file mode 120000 index 000000000..b9fe84bfe --- /dev/null +++ b/spm/Sources/core-plot/CPTAnnotation.m @@ -0,0 +1 @@ +../../../framework/Source/CPTAnnotation.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAnnotationHostLayer.m b/spm/Sources/core-plot/CPTAnnotationHostLayer.m new file mode 120000 index 000000000..75530b843 --- /dev/null +++ b/spm/Sources/core-plot/CPTAnnotationHostLayer.m @@ -0,0 +1 @@ +../../../framework/Source/CPTAnnotationHostLayer.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAxis.m b/spm/Sources/core-plot/CPTAxis.m new file mode 120000 index 000000000..1aa6b7103 --- /dev/null +++ b/spm/Sources/core-plot/CPTAxis.m @@ -0,0 +1 @@ +../../../framework/Source/CPTAxis.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAxisLabel.m b/spm/Sources/core-plot/CPTAxisLabel.m new file mode 120000 index 000000000..da47a6c72 --- /dev/null +++ b/spm/Sources/core-plot/CPTAxisLabel.m @@ -0,0 +1 @@ +../../../framework/Source/CPTAxisLabel.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAxisLabelGroup.m b/spm/Sources/core-plot/CPTAxisLabelGroup.m new file mode 120000 index 000000000..47052e27a --- /dev/null +++ b/spm/Sources/core-plot/CPTAxisLabelGroup.m @@ -0,0 +1 @@ +../../../framework/Source/CPTAxisLabelGroup.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAxisSet.m b/spm/Sources/core-plot/CPTAxisSet.m new file mode 120000 index 000000000..1005973dd --- /dev/null +++ b/spm/Sources/core-plot/CPTAxisSet.m @@ -0,0 +1 @@ +../../../framework/Source/CPTAxisSet.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAxisTitle.m b/spm/Sources/core-plot/CPTAxisTitle.m new file mode 120000 index 000000000..ed4fdfa19 --- /dev/null +++ b/spm/Sources/core-plot/CPTAxisTitle.m @@ -0,0 +1 @@ +../../../framework/Source/CPTAxisTitle.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTBarPlot.m b/spm/Sources/core-plot/CPTBarPlot.m new file mode 120000 index 000000000..96416886c --- /dev/null +++ b/spm/Sources/core-plot/CPTBarPlot.m @@ -0,0 +1 @@ +../../../framework/Source/CPTBarPlot.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTBorderedLayer.m b/spm/Sources/core-plot/CPTBorderedLayer.m new file mode 120000 index 000000000..7f8e0fc21 --- /dev/null +++ b/spm/Sources/core-plot/CPTBorderedLayer.m @@ -0,0 +1 @@ +../../../framework/Source/CPTBorderedLayer.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTCalendarFormatter.m b/spm/Sources/core-plot/CPTCalendarFormatter.m new file mode 120000 index 000000000..f2d434828 --- /dev/null +++ b/spm/Sources/core-plot/CPTCalendarFormatter.m @@ -0,0 +1 @@ +../../../framework/Source/CPTCalendarFormatter.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTColor.m b/spm/Sources/core-plot/CPTColor.m new file mode 120000 index 000000000..80d47ac9e --- /dev/null +++ b/spm/Sources/core-plot/CPTColor.m @@ -0,0 +1 @@ +../../../framework/Source/CPTColor.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTColorSpace.m b/spm/Sources/core-plot/CPTColorSpace.m new file mode 120000 index 000000000..c075ca4bd --- /dev/null +++ b/spm/Sources/core-plot/CPTColorSpace.m @@ -0,0 +1 @@ +../../../framework/Source/CPTColorSpace.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTConstraints.m b/spm/Sources/core-plot/CPTConstraints.m new file mode 120000 index 000000000..2f8f0b4f3 --- /dev/null +++ b/spm/Sources/core-plot/CPTConstraints.m @@ -0,0 +1 @@ +../../../framework/Source/CPTConstraints.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTDefinitions.m b/spm/Sources/core-plot/CPTDefinitions.m new file mode 120000 index 000000000..2d93bb41d --- /dev/null +++ b/spm/Sources/core-plot/CPTDefinitions.m @@ -0,0 +1 @@ +../../../framework/Source/CPTDefinitions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTDerivedXYGraph.m b/spm/Sources/core-plot/CPTDerivedXYGraph.m new file mode 120000 index 000000000..e712248ad --- /dev/null +++ b/spm/Sources/core-plot/CPTDerivedXYGraph.m @@ -0,0 +1 @@ +../../../framework/Source/CPTDerivedXYGraph.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTExceptions.m b/spm/Sources/core-plot/CPTExceptions.m new file mode 120000 index 000000000..7edfd7fc1 --- /dev/null +++ b/spm/Sources/core-plot/CPTExceptions.m @@ -0,0 +1 @@ +../../../framework/Source/CPTExceptions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTFill.m b/spm/Sources/core-plot/CPTFill.m new file mode 120000 index 000000000..5059faeda --- /dev/null +++ b/spm/Sources/core-plot/CPTFill.m @@ -0,0 +1 @@ +../../../framework/Source/CPTFill.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTFunctionDataSource.m b/spm/Sources/core-plot/CPTFunctionDataSource.m new file mode 120000 index 000000000..9c584fabc --- /dev/null +++ b/spm/Sources/core-plot/CPTFunctionDataSource.m @@ -0,0 +1 @@ +../../../framework/Source/CPTFunctionDataSource.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTGradient.m b/spm/Sources/core-plot/CPTGradient.m new file mode 120000 index 000000000..8949b1c68 --- /dev/null +++ b/spm/Sources/core-plot/CPTGradient.m @@ -0,0 +1 @@ +../../../framework/Source/CPTGradient.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTGraph.m b/spm/Sources/core-plot/CPTGraph.m new file mode 120000 index 000000000..01c721f42 --- /dev/null +++ b/spm/Sources/core-plot/CPTGraph.m @@ -0,0 +1 @@ +../../../framework/Source/CPTGraph.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTGraphHostingView.m b/spm/Sources/core-plot/CPTGraphHostingView.m new file mode 120000 index 000000000..aed7567ed --- /dev/null +++ b/spm/Sources/core-plot/CPTGraphHostingView.m @@ -0,0 +1 @@ +../../../framework/PlatformSpecific/CPTGraphHostingView.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTGridLineGroup.m b/spm/Sources/core-plot/CPTGridLineGroup.m new file mode 120000 index 000000000..172c1c944 --- /dev/null +++ b/spm/Sources/core-plot/CPTGridLineGroup.m @@ -0,0 +1 @@ +../../../framework/Source/CPTGridLineGroup.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTGridLines.m b/spm/Sources/core-plot/CPTGridLines.m new file mode 120000 index 000000000..1cf83743b --- /dev/null +++ b/spm/Sources/core-plot/CPTGridLines.m @@ -0,0 +1 @@ +../../../framework/Source/CPTGridLines.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTImage.m b/spm/Sources/core-plot/CPTImage.m new file mode 120000 index 000000000..3001d970e --- /dev/null +++ b/spm/Sources/core-plot/CPTImage.m @@ -0,0 +1 @@ +../../../framework/Source/CPTImage.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTImagePlatformSpecific.m b/spm/Sources/core-plot/CPTImagePlatformSpecific.m new file mode 120000 index 000000000..589c983de --- /dev/null +++ b/spm/Sources/core-plot/CPTImagePlatformSpecific.m @@ -0,0 +1 @@ +../../../framework/PlatformSpecific/CPTImagePlatformSpecific.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTLayer.m b/spm/Sources/core-plot/CPTLayer.m new file mode 120000 index 000000000..8c84d5971 --- /dev/null +++ b/spm/Sources/core-plot/CPTLayer.m @@ -0,0 +1 @@ +../../../framework/Source/CPTLayer.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTLayerAnnotation.m b/spm/Sources/core-plot/CPTLayerAnnotation.m new file mode 120000 index 000000000..37f86e4d6 --- /dev/null +++ b/spm/Sources/core-plot/CPTLayerAnnotation.m @@ -0,0 +1 @@ +../../../framework/Source/CPTLayerAnnotation.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTLegend.m b/spm/Sources/core-plot/CPTLegend.m new file mode 120000 index 000000000..d8dee9348 --- /dev/null +++ b/spm/Sources/core-plot/CPTLegend.m @@ -0,0 +1 @@ +../../../framework/Source/CPTLegend.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTLegendEntry.m b/spm/Sources/core-plot/CPTLegendEntry.m new file mode 120000 index 000000000..81301d318 --- /dev/null +++ b/spm/Sources/core-plot/CPTLegendEntry.m @@ -0,0 +1 @@ +../../../framework/Source/CPTLegendEntry.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTLimitBand.m b/spm/Sources/core-plot/CPTLimitBand.m new file mode 120000 index 000000000..c8a8a5d65 --- /dev/null +++ b/spm/Sources/core-plot/CPTLimitBand.m @@ -0,0 +1 @@ +../../../framework/Source/CPTLimitBand.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTLineCap.m b/spm/Sources/core-plot/CPTLineCap.m new file mode 120000 index 000000000..41d7f0103 --- /dev/null +++ b/spm/Sources/core-plot/CPTLineCap.m @@ -0,0 +1 @@ +../../../framework/Source/CPTLineCap.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTLineStyle.m b/spm/Sources/core-plot/CPTLineStyle.m new file mode 120000 index 000000000..dd6e51794 --- /dev/null +++ b/spm/Sources/core-plot/CPTLineStyle.m @@ -0,0 +1 @@ +../../../framework/Source/CPTLineStyle.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTMutableLineStyle.m b/spm/Sources/core-plot/CPTMutableLineStyle.m new file mode 120000 index 000000000..f52200079 --- /dev/null +++ b/spm/Sources/core-plot/CPTMutableLineStyle.m @@ -0,0 +1 @@ +../../../framework/Source/CPTMutableLineStyle.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTMutableNumericData+TypeConversion.m b/spm/Sources/core-plot/CPTMutableNumericData+TypeConversion.m new file mode 120000 index 000000000..892e81926 --- /dev/null +++ b/spm/Sources/core-plot/CPTMutableNumericData+TypeConversion.m @@ -0,0 +1 @@ +../../../framework/Source/CPTMutableNumericData+TypeConversion.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTMutableNumericData.m b/spm/Sources/core-plot/CPTMutableNumericData.m new file mode 120000 index 000000000..fcddc44b6 --- /dev/null +++ b/spm/Sources/core-plot/CPTMutableNumericData.m @@ -0,0 +1 @@ +../../../framework/Source/CPTMutableNumericData.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTMutablePlotRange.m b/spm/Sources/core-plot/CPTMutablePlotRange.m new file mode 120000 index 000000000..ba573d97b --- /dev/null +++ b/spm/Sources/core-plot/CPTMutablePlotRange.m @@ -0,0 +1 @@ +../../../framework/Source/CPTMutablePlotRange.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTMutableShadow.m b/spm/Sources/core-plot/CPTMutableShadow.m new file mode 120000 index 000000000..6789a820a --- /dev/null +++ b/spm/Sources/core-plot/CPTMutableShadow.m @@ -0,0 +1 @@ +../../../framework/Source/CPTMutableShadow.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTMutableTextStyle.m b/spm/Sources/core-plot/CPTMutableTextStyle.m new file mode 120000 index 000000000..128907a10 --- /dev/null +++ b/spm/Sources/core-plot/CPTMutableTextStyle.m @@ -0,0 +1 @@ +../../../framework/Source/CPTMutableTextStyle.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTNumericData+TypeConversion.m b/spm/Sources/core-plot/CPTNumericData+TypeConversion.m new file mode 120000 index 000000000..4f9f960e5 --- /dev/null +++ b/spm/Sources/core-plot/CPTNumericData+TypeConversion.m @@ -0,0 +1 @@ +../../../framework/Source/CPTNumericData+TypeConversion.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTNumericData.m b/spm/Sources/core-plot/CPTNumericData.m new file mode 120000 index 000000000..0a95c83f9 --- /dev/null +++ b/spm/Sources/core-plot/CPTNumericData.m @@ -0,0 +1 @@ +../../../framework/Source/CPTNumericData.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTNumericDataType.m b/spm/Sources/core-plot/CPTNumericDataType.m new file mode 120000 index 000000000..187d3f0c0 --- /dev/null +++ b/spm/Sources/core-plot/CPTNumericDataType.m @@ -0,0 +1 @@ +../../../framework/Source/CPTNumericDataType.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPathExtensions.m b/spm/Sources/core-plot/CPTPathExtensions.m new file mode 120000 index 000000000..635a3ff2b --- /dev/null +++ b/spm/Sources/core-plot/CPTPathExtensions.m @@ -0,0 +1 @@ +../../../framework/Source/CPTPathExtensions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPieChart.m b/spm/Sources/core-plot/CPTPieChart.m new file mode 120000 index 000000000..e6337e1e7 --- /dev/null +++ b/spm/Sources/core-plot/CPTPieChart.m @@ -0,0 +1 @@ +../../../framework/Source/CPTPieChart.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlatformSpecificCategories.m b/spm/Sources/core-plot/CPTPlatformSpecificCategories.m new file mode 120000 index 000000000..5938ca9de --- /dev/null +++ b/spm/Sources/core-plot/CPTPlatformSpecificCategories.m @@ -0,0 +1 @@ +../../../framework/PlatformSpecific/CPTPlatformSpecificCategories.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlatformSpecificDefines.m b/spm/Sources/core-plot/CPTPlatformSpecificDefines.m new file mode 120000 index 000000000..a45be5581 --- /dev/null +++ b/spm/Sources/core-plot/CPTPlatformSpecificDefines.m @@ -0,0 +1 @@ +../../../framework/PlatformSpecific/CPTPlatformSpecificDefines.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlatformSpecificFunctions.m b/spm/Sources/core-plot/CPTPlatformSpecificFunctions.m new file mode 120000 index 000000000..c8671612f --- /dev/null +++ b/spm/Sources/core-plot/CPTPlatformSpecificFunctions.m @@ -0,0 +1 @@ +../../../framework/PlatformSpecific/CPTPlatformSpecificFunctions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlot.m b/spm/Sources/core-plot/CPTPlot.m new file mode 120000 index 000000000..fa92ce8cc --- /dev/null +++ b/spm/Sources/core-plot/CPTPlot.m @@ -0,0 +1 @@ +../../../framework/Source/CPTPlot.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlotArea.m b/spm/Sources/core-plot/CPTPlotArea.m new file mode 120000 index 000000000..297cfc628 --- /dev/null +++ b/spm/Sources/core-plot/CPTPlotArea.m @@ -0,0 +1 @@ +../../../framework/Source/CPTPlotArea.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlotAreaFrame.m b/spm/Sources/core-plot/CPTPlotAreaFrame.m new file mode 120000 index 000000000..b751436bd --- /dev/null +++ b/spm/Sources/core-plot/CPTPlotAreaFrame.m @@ -0,0 +1 @@ +../../../framework/Source/CPTPlotAreaFrame.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlotGroup.m b/spm/Sources/core-plot/CPTPlotGroup.m new file mode 120000 index 000000000..820c6ddd6 --- /dev/null +++ b/spm/Sources/core-plot/CPTPlotGroup.m @@ -0,0 +1 @@ +../../../framework/Source/CPTPlotGroup.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlotRange.m b/spm/Sources/core-plot/CPTPlotRange.m new file mode 120000 index 000000000..344bb8b96 --- /dev/null +++ b/spm/Sources/core-plot/CPTPlotRange.m @@ -0,0 +1 @@ +../../../framework/Source/CPTPlotRange.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlotSpace.m b/spm/Sources/core-plot/CPTPlotSpace.m new file mode 120000 index 000000000..a981e9981 --- /dev/null +++ b/spm/Sources/core-plot/CPTPlotSpace.m @@ -0,0 +1 @@ +../../../framework/Source/CPTPlotSpace.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlotSpaceAnnotation.m b/spm/Sources/core-plot/CPTPlotSpaceAnnotation.m new file mode 120000 index 000000000..f8e5911b7 --- /dev/null +++ b/spm/Sources/core-plot/CPTPlotSpaceAnnotation.m @@ -0,0 +1 @@ +../../../framework/Source/CPTPlotSpaceAnnotation.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlotSymbol.m b/spm/Sources/core-plot/CPTPlotSymbol.m new file mode 120000 index 000000000..05243cdf0 --- /dev/null +++ b/spm/Sources/core-plot/CPTPlotSymbol.m @@ -0,0 +1 @@ +../../../framework/Source/CPTPlotSymbol.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTRangePlot.m b/spm/Sources/core-plot/CPTRangePlot.m new file mode 120000 index 000000000..1a49ad72e --- /dev/null +++ b/spm/Sources/core-plot/CPTRangePlot.m @@ -0,0 +1 @@ +../../../framework/Source/CPTRangePlot.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTScatterPlot.m b/spm/Sources/core-plot/CPTScatterPlot.m new file mode 120000 index 000000000..2d1ff16e3 --- /dev/null +++ b/spm/Sources/core-plot/CPTScatterPlot.m @@ -0,0 +1 @@ +../../../framework/Source/CPTScatterPlot.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTShadow.m b/spm/Sources/core-plot/CPTShadow.m new file mode 120000 index 000000000..2173efbfe --- /dev/null +++ b/spm/Sources/core-plot/CPTShadow.m @@ -0,0 +1 @@ +../../../framework/Source/CPTShadow.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTTextLayer.m b/spm/Sources/core-plot/CPTTextLayer.m new file mode 120000 index 000000000..47e0aff04 --- /dev/null +++ b/spm/Sources/core-plot/CPTTextLayer.m @@ -0,0 +1 @@ +../../../framework/Source/CPTTextLayer.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTTextStyle.m b/spm/Sources/core-plot/CPTTextStyle.m new file mode 120000 index 000000000..edffa0d87 --- /dev/null +++ b/spm/Sources/core-plot/CPTTextStyle.m @@ -0,0 +1 @@ +../../../framework/Source/CPTTextStyle.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTTextStylePlatformSpecific.m b/spm/Sources/core-plot/CPTTextStylePlatformSpecific.m new file mode 120000 index 000000000..9fdc1b86c --- /dev/null +++ b/spm/Sources/core-plot/CPTTextStylePlatformSpecific.m @@ -0,0 +1 @@ +../../../framework/PlatformSpecific/CPTTextStylePlatformSpecific.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTTheme.m b/spm/Sources/core-plot/CPTTheme.m new file mode 120000 index 000000000..047560078 --- /dev/null +++ b/spm/Sources/core-plot/CPTTheme.m @@ -0,0 +1 @@ +../../../framework/Source/CPTTheme.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTTimeFormatter.m b/spm/Sources/core-plot/CPTTimeFormatter.m new file mode 120000 index 000000000..21d893f90 --- /dev/null +++ b/spm/Sources/core-plot/CPTTimeFormatter.m @@ -0,0 +1 @@ +../../../framework/Source/CPTTimeFormatter.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTTradingRangePlot.m b/spm/Sources/core-plot/CPTTradingRangePlot.m new file mode 120000 index 000000000..6f7331366 --- /dev/null +++ b/spm/Sources/core-plot/CPTTradingRangePlot.m @@ -0,0 +1 @@ +../../../framework/Source/CPTTradingRangePlot.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTUtilities.m b/spm/Sources/core-plot/CPTUtilities.m new file mode 120000 index 000000000..193ace357 --- /dev/null +++ b/spm/Sources/core-plot/CPTUtilities.m @@ -0,0 +1 @@ +../../../framework/Source/CPTUtilities.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTXYAxis.m b/spm/Sources/core-plot/CPTXYAxis.m new file mode 120000 index 000000000..dfde4fab8 --- /dev/null +++ b/spm/Sources/core-plot/CPTXYAxis.m @@ -0,0 +1 @@ +../../../framework/Source/CPTXYAxis.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTXYAxisSet.m b/spm/Sources/core-plot/CPTXYAxisSet.m new file mode 120000 index 000000000..697c1d56d --- /dev/null +++ b/spm/Sources/core-plot/CPTXYAxisSet.m @@ -0,0 +1 @@ +../../../framework/Source/CPTXYAxisSet.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTXYGraph.m b/spm/Sources/core-plot/CPTXYGraph.m new file mode 120000 index 000000000..006eb518b --- /dev/null +++ b/spm/Sources/core-plot/CPTXYGraph.m @@ -0,0 +1 @@ +../../../framework/Source/CPTXYGraph.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTXYPlotSpace.m b/spm/Sources/core-plot/CPTXYPlotSpace.m new file mode 120000 index 000000000..e1143e1db --- /dev/null +++ b/spm/Sources/core-plot/CPTXYPlotSpace.m @@ -0,0 +1 @@ +../../../framework/Source/CPTXYPlotSpace.m \ No newline at end of file diff --git a/spm/Sources/core-plot/NSCoderExtensions.m b/spm/Sources/core-plot/NSCoderExtensions.m new file mode 120000 index 000000000..f214ee254 --- /dev/null +++ b/spm/Sources/core-plot/NSCoderExtensions.m @@ -0,0 +1 @@ +../../../framework/Source/NSCoderExtensions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/NSDecimalNumberExtensions.m b/spm/Sources/core-plot/NSDecimalNumberExtensions.m new file mode 120000 index 000000000..c4ee7f4f9 --- /dev/null +++ b/spm/Sources/core-plot/NSDecimalNumberExtensions.m @@ -0,0 +1 @@ +../../../framework/Source/NSDecimalNumberExtensions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/NSNumberExtensions.m b/spm/Sources/core-plot/NSNumberExtensions.m new file mode 120000 index 000000000..0bc3e12de --- /dev/null +++ b/spm/Sources/core-plot/NSNumberExtensions.m @@ -0,0 +1 @@ +../../../framework/Source/NSNumberExtensions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.h b/spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.h new file mode 120000 index 000000000..2c387bcad --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationCGFloatPeriod.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.m b/spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.m new file mode 120000 index 000000000..711cecc2a --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationCGFloatPeriod.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationCGPointPeriod.h b/spm/Sources/core-plot/_CPTAnimationCGPointPeriod.h new file mode 120000 index 000000000..a8a2a1099 --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationCGPointPeriod.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationCGPointPeriod.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationCGPointPeriod.m b/spm/Sources/core-plot/_CPTAnimationCGPointPeriod.m new file mode 120000 index 000000000..91a1e8bce --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationCGPointPeriod.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationCGPointPeriod.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationCGRectPeriod.h b/spm/Sources/core-plot/_CPTAnimationCGRectPeriod.h new file mode 120000 index 000000000..bfbfb50ad --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationCGRectPeriod.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationCGRectPeriod.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationCGRectPeriod.m b/spm/Sources/core-plot/_CPTAnimationCGRectPeriod.m new file mode 120000 index 000000000..36ba199b9 --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationCGRectPeriod.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationCGRectPeriod.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationCGSizePeriod.h b/spm/Sources/core-plot/_CPTAnimationCGSizePeriod.h new file mode 120000 index 000000000..f527f2f00 --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationCGSizePeriod.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationCGSizePeriod.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationCGSizePeriod.m b/spm/Sources/core-plot/_CPTAnimationCGSizePeriod.m new file mode 120000 index 000000000..2414600b5 --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationCGSizePeriod.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationCGSizePeriod.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.h b/spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.h new file mode 120000 index 000000000..9864b5caf --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationNSDecimalPeriod.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.m b/spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.m new file mode 120000 index 000000000..3ad5013c7 --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationNSDecimalPeriod.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.h b/spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.h new file mode 120000 index 000000000..7d2309ba4 --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationNSNumberPeriod.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.m b/spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.m new file mode 120000 index 000000000..e384d8444 --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationNSNumberPeriod.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.h b/spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.h new file mode 120000 index 000000000..a9ef5b7a9 --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationPlotRangePeriod.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.m b/spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.m new file mode 120000 index 000000000..82fa1465e --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationPlotRangePeriod.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationTimingFunctions.h b/spm/Sources/core-plot/_CPTAnimationTimingFunctions.h new file mode 120000 index 000000000..1770c9279 --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationTimingFunctions.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationTimingFunctions.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationTimingFunctions.m b/spm/Sources/core-plot/_CPTAnimationTimingFunctions.m new file mode 120000 index 000000000..65b4266af --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationTimingFunctions.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationTimingFunctions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTBorderLayer.h b/spm/Sources/core-plot/_CPTBorderLayer.h new file mode 120000 index 000000000..3afc6c1e3 --- /dev/null +++ b/spm/Sources/core-plot/_CPTBorderLayer.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTBorderLayer.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTBorderLayer.m b/spm/Sources/core-plot/_CPTBorderLayer.m new file mode 120000 index 000000000..00443260c --- /dev/null +++ b/spm/Sources/core-plot/_CPTBorderLayer.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTBorderLayer.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTConstraintsFixed.h b/spm/Sources/core-plot/_CPTConstraintsFixed.h new file mode 120000 index 000000000..86d5a2165 --- /dev/null +++ b/spm/Sources/core-plot/_CPTConstraintsFixed.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTConstraintsFixed.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTConstraintsFixed.m b/spm/Sources/core-plot/_CPTConstraintsFixed.m new file mode 120000 index 000000000..62b705311 --- /dev/null +++ b/spm/Sources/core-plot/_CPTConstraintsFixed.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTConstraintsFixed.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTConstraintsRelative.h b/spm/Sources/core-plot/_CPTConstraintsRelative.h new file mode 120000 index 000000000..7af0d22db --- /dev/null +++ b/spm/Sources/core-plot/_CPTConstraintsRelative.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTConstraintsRelative.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTConstraintsRelative.m b/spm/Sources/core-plot/_CPTConstraintsRelative.m new file mode 120000 index 000000000..634e9a690 --- /dev/null +++ b/spm/Sources/core-plot/_CPTConstraintsRelative.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTConstraintsRelative.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTDarkGradientTheme.h b/spm/Sources/core-plot/_CPTDarkGradientTheme.h new file mode 120000 index 000000000..c37ae8a09 --- /dev/null +++ b/spm/Sources/core-plot/_CPTDarkGradientTheme.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTDarkGradientTheme.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTDarkGradientTheme.m b/spm/Sources/core-plot/_CPTDarkGradientTheme.m new file mode 120000 index 000000000..5c0cce515 --- /dev/null +++ b/spm/Sources/core-plot/_CPTDarkGradientTheme.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTDarkGradientTheme.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTFillColor.h b/spm/Sources/core-plot/_CPTFillColor.h new file mode 120000 index 000000000..8729abd32 --- /dev/null +++ b/spm/Sources/core-plot/_CPTFillColor.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTFillColor.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTFillColor.m b/spm/Sources/core-plot/_CPTFillColor.m new file mode 120000 index 000000000..45972cddd --- /dev/null +++ b/spm/Sources/core-plot/_CPTFillColor.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTFillColor.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTFillGradient.h b/spm/Sources/core-plot/_CPTFillGradient.h new file mode 120000 index 000000000..e4bc0b777 --- /dev/null +++ b/spm/Sources/core-plot/_CPTFillGradient.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTFillGradient.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTFillGradient.m b/spm/Sources/core-plot/_CPTFillGradient.m new file mode 120000 index 000000000..eee6c6e01 --- /dev/null +++ b/spm/Sources/core-plot/_CPTFillGradient.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTFillGradient.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTFillImage.h b/spm/Sources/core-plot/_CPTFillImage.h new file mode 120000 index 000000000..0c3352876 --- /dev/null +++ b/spm/Sources/core-plot/_CPTFillImage.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTFillImage.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTFillImage.m b/spm/Sources/core-plot/_CPTFillImage.m new file mode 120000 index 000000000..e9093df88 --- /dev/null +++ b/spm/Sources/core-plot/_CPTFillImage.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTFillImage.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTMaskLayer.h b/spm/Sources/core-plot/_CPTMaskLayer.h new file mode 120000 index 000000000..360e39661 --- /dev/null +++ b/spm/Sources/core-plot/_CPTMaskLayer.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTMaskLayer.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTMaskLayer.m b/spm/Sources/core-plot/_CPTMaskLayer.m new file mode 120000 index 000000000..15060d9eb --- /dev/null +++ b/spm/Sources/core-plot/_CPTMaskLayer.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTMaskLayer.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTPlainBlackTheme.h b/spm/Sources/core-plot/_CPTPlainBlackTheme.h new file mode 120000 index 000000000..4a6661adf --- /dev/null +++ b/spm/Sources/core-plot/_CPTPlainBlackTheme.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTPlainBlackTheme.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTPlainBlackTheme.m b/spm/Sources/core-plot/_CPTPlainBlackTheme.m new file mode 120000 index 000000000..3b175c6e4 --- /dev/null +++ b/spm/Sources/core-plot/_CPTPlainBlackTheme.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTPlainBlackTheme.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTPlainWhiteTheme.h b/spm/Sources/core-plot/_CPTPlainWhiteTheme.h new file mode 120000 index 000000000..c596aee7c --- /dev/null +++ b/spm/Sources/core-plot/_CPTPlainWhiteTheme.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTPlainWhiteTheme.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTPlainWhiteTheme.m b/spm/Sources/core-plot/_CPTPlainWhiteTheme.m new file mode 120000 index 000000000..b478bf193 --- /dev/null +++ b/spm/Sources/core-plot/_CPTPlainWhiteTheme.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTPlainWhiteTheme.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTSlateTheme.h b/spm/Sources/core-plot/_CPTSlateTheme.h new file mode 120000 index 000000000..be824d643 --- /dev/null +++ b/spm/Sources/core-plot/_CPTSlateTheme.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTSlateTheme.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTSlateTheme.m b/spm/Sources/core-plot/_CPTSlateTheme.m new file mode 120000 index 000000000..41da25ebc --- /dev/null +++ b/spm/Sources/core-plot/_CPTSlateTheme.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTSlateTheme.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTStocksTheme.h b/spm/Sources/core-plot/_CPTStocksTheme.h new file mode 120000 index 000000000..9f51d7930 --- /dev/null +++ b/spm/Sources/core-plot/_CPTStocksTheme.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTStocksTheme.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTStocksTheme.m b/spm/Sources/core-plot/_CPTStocksTheme.m new file mode 120000 index 000000000..97e996679 --- /dev/null +++ b/spm/Sources/core-plot/_CPTStocksTheme.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTStocksTheme.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTXYTheme.h b/spm/Sources/core-plot/_CPTXYTheme.h new file mode 120000 index 000000000..225ce8713 --- /dev/null +++ b/spm/Sources/core-plot/_CPTXYTheme.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTXYTheme.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTXYTheme.m b/spm/Sources/core-plot/_CPTXYTheme.m new file mode 120000 index 000000000..750641fe5 --- /dev/null +++ b/spm/Sources/core-plot/_CPTXYTheme.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTXYTheme.m \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAnimation.h b/spm/Sources/core-plot/include/CPTAnimation.h new file mode 120000 index 000000000..d2c87b5e2 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTAnimation.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTAnimation.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAnimationOperation.h b/spm/Sources/core-plot/include/CPTAnimationOperation.h new file mode 120000 index 000000000..070d475e1 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTAnimationOperation.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTAnimationOperation.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAnimationPeriod.h b/spm/Sources/core-plot/include/CPTAnimationPeriod.h new file mode 120000 index 000000000..99855620c --- /dev/null +++ b/spm/Sources/core-plot/include/CPTAnimationPeriod.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTAnimationPeriod.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAnnotation.h b/spm/Sources/core-plot/include/CPTAnnotation.h new file mode 120000 index 000000000..7a396b2d0 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTAnnotation.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTAnnotation.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAnnotationHostLayer.h b/spm/Sources/core-plot/include/CPTAnnotationHostLayer.h new file mode 120000 index 000000000..404703b3d --- /dev/null +++ b/spm/Sources/core-plot/include/CPTAnnotationHostLayer.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTAnnotationHostLayer.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAxis.h b/spm/Sources/core-plot/include/CPTAxis.h new file mode 120000 index 000000000..1603ef430 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTAxis.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTAxis.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAxisLabel.h b/spm/Sources/core-plot/include/CPTAxisLabel.h new file mode 120000 index 000000000..8e7bb2152 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTAxisLabel.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTAxisLabel.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAxisLabelGroup.h b/spm/Sources/core-plot/include/CPTAxisLabelGroup.h new file mode 120000 index 000000000..40d7b4fd4 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTAxisLabelGroup.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTAxisLabelGroup.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAxisSet.h b/spm/Sources/core-plot/include/CPTAxisSet.h new file mode 120000 index 000000000..8445d7388 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTAxisSet.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTAxisSet.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAxisTitle.h b/spm/Sources/core-plot/include/CPTAxisTitle.h new file mode 120000 index 000000000..f03866501 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTAxisTitle.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTAxisTitle.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTBarPlot.h b/spm/Sources/core-plot/include/CPTBarPlot.h new file mode 120000 index 000000000..818be1d3c --- /dev/null +++ b/spm/Sources/core-plot/include/CPTBarPlot.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTBarPlot.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTBorderedLayer.h b/spm/Sources/core-plot/include/CPTBorderedLayer.h new file mode 120000 index 000000000..509e957dd --- /dev/null +++ b/spm/Sources/core-plot/include/CPTBorderedLayer.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTBorderedLayer.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTCalendarFormatter.h b/spm/Sources/core-plot/include/CPTCalendarFormatter.h new file mode 120000 index 000000000..b649bc595 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTCalendarFormatter.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTCalendarFormatter.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTColor.h b/spm/Sources/core-plot/include/CPTColor.h new file mode 120000 index 000000000..89a66a388 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTColor.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTColor.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTColorSpace.h b/spm/Sources/core-plot/include/CPTColorSpace.h new file mode 120000 index 000000000..9a5ec33b3 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTColorSpace.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTColorSpace.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTConstraints.h b/spm/Sources/core-plot/include/CPTConstraints.h new file mode 120000 index 000000000..f5dd6b1fa --- /dev/null +++ b/spm/Sources/core-plot/include/CPTConstraints.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTConstraints.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTDebugQuickLook.h b/spm/Sources/core-plot/include/CPTDebugQuickLook.h new file mode 120000 index 000000000..500301a70 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTDebugQuickLook.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTDebugQuickLook.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTDefinitions.h b/spm/Sources/core-plot/include/CPTDefinitions.h new file mode 120000 index 000000000..77b264637 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTDefinitions.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTDefinitions.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTDerivedXYGraph.h b/spm/Sources/core-plot/include/CPTDerivedXYGraph.h new file mode 120000 index 000000000..c3afb6032 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTDerivedXYGraph.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTDerivedXYGraph.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTExceptions.h b/spm/Sources/core-plot/include/CPTExceptions.h new file mode 120000 index 000000000..ae845ca0a --- /dev/null +++ b/spm/Sources/core-plot/include/CPTExceptions.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTExceptions.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTFill.h b/spm/Sources/core-plot/include/CPTFill.h new file mode 120000 index 000000000..0cb9177a9 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTFill.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTFill.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTFunctionDataSource.h b/spm/Sources/core-plot/include/CPTFunctionDataSource.h new file mode 120000 index 000000000..9e661ae0b --- /dev/null +++ b/spm/Sources/core-plot/include/CPTFunctionDataSource.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTFunctionDataSource.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTGradient.h b/spm/Sources/core-plot/include/CPTGradient.h new file mode 120000 index 000000000..2a97c2614 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTGradient.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTGradient.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTGraph.h b/spm/Sources/core-plot/include/CPTGraph.h new file mode 120000 index 000000000..e1f85034f --- /dev/null +++ b/spm/Sources/core-plot/include/CPTGraph.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTGraph.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTGraphHostingView.h b/spm/Sources/core-plot/include/CPTGraphHostingView.h new file mode 120000 index 000000000..8bd643aaa --- /dev/null +++ b/spm/Sources/core-plot/include/CPTGraphHostingView.h @@ -0,0 +1 @@ +../../../../framework/PlatformSpecific/CPTGraphHostingView.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTGridLineGroup.h b/spm/Sources/core-plot/include/CPTGridLineGroup.h new file mode 120000 index 000000000..644db825f --- /dev/null +++ b/spm/Sources/core-plot/include/CPTGridLineGroup.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTGridLineGroup.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTGridLines.h b/spm/Sources/core-plot/include/CPTGridLines.h new file mode 120000 index 000000000..fcf64c697 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTGridLines.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTGridLines.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTImage.h b/spm/Sources/core-plot/include/CPTImage.h new file mode 120000 index 000000000..fdf4b866e --- /dev/null +++ b/spm/Sources/core-plot/include/CPTImage.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTImage.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTLayer.h b/spm/Sources/core-plot/include/CPTLayer.h new file mode 120000 index 000000000..1e16ba274 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTLayer.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTLayer.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTLayerAnnotation.h b/spm/Sources/core-plot/include/CPTLayerAnnotation.h new file mode 120000 index 000000000..4d31a6c35 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTLayerAnnotation.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTLayerAnnotation.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTLegend.h b/spm/Sources/core-plot/include/CPTLegend.h new file mode 120000 index 000000000..a881d49fc --- /dev/null +++ b/spm/Sources/core-plot/include/CPTLegend.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTLegend.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTLegendEntry.h b/spm/Sources/core-plot/include/CPTLegendEntry.h new file mode 120000 index 000000000..4657685f3 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTLegendEntry.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTLegendEntry.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTLimitBand.h b/spm/Sources/core-plot/include/CPTLimitBand.h new file mode 120000 index 000000000..8d1481db0 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTLimitBand.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTLimitBand.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTLineCap.h b/spm/Sources/core-plot/include/CPTLineCap.h new file mode 120000 index 000000000..5ef3aeb2f --- /dev/null +++ b/spm/Sources/core-plot/include/CPTLineCap.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTLineCap.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTLineStyle.h b/spm/Sources/core-plot/include/CPTLineStyle.h new file mode 120000 index 000000000..61d12117a --- /dev/null +++ b/spm/Sources/core-plot/include/CPTLineStyle.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTLineStyle.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTMutableLineStyle.h b/spm/Sources/core-plot/include/CPTMutableLineStyle.h new file mode 120000 index 000000000..e40949230 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTMutableLineStyle.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTMutableLineStyle.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTMutableNumericData+TypeConversion.h b/spm/Sources/core-plot/include/CPTMutableNumericData+TypeConversion.h new file mode 120000 index 000000000..2e15c93df --- /dev/null +++ b/spm/Sources/core-plot/include/CPTMutableNumericData+TypeConversion.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTMutableNumericData+TypeConversion.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTMutableNumericData.h b/spm/Sources/core-plot/include/CPTMutableNumericData.h new file mode 120000 index 000000000..1d7742957 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTMutableNumericData.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTMutableNumericData.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTMutablePlotRange.h b/spm/Sources/core-plot/include/CPTMutablePlotRange.h new file mode 120000 index 000000000..2f19b9034 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTMutablePlotRange.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTMutablePlotRange.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTMutableShadow.h b/spm/Sources/core-plot/include/CPTMutableShadow.h new file mode 120000 index 000000000..30b520124 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTMutableShadow.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTMutableShadow.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTMutableTextStyle.h b/spm/Sources/core-plot/include/CPTMutableTextStyle.h new file mode 120000 index 000000000..8224b9808 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTMutableTextStyle.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTMutableTextStyle.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTNumericData+TypeConversion.h b/spm/Sources/core-plot/include/CPTNumericData+TypeConversion.h new file mode 120000 index 000000000..c4a513584 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTNumericData+TypeConversion.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTNumericData+TypeConversion.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTNumericData.h b/spm/Sources/core-plot/include/CPTNumericData.h new file mode 120000 index 000000000..4578ef225 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTNumericData.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTNumericData.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTNumericDataType.h b/spm/Sources/core-plot/include/CPTNumericDataType.h new file mode 120000 index 000000000..d819981db --- /dev/null +++ b/spm/Sources/core-plot/include/CPTNumericDataType.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTNumericDataType.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPathExtensions.h b/spm/Sources/core-plot/include/CPTPathExtensions.h new file mode 120000 index 000000000..9963958d0 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTPathExtensions.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTPathExtensions.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPieChart.h b/spm/Sources/core-plot/include/CPTPieChart.h new file mode 120000 index 000000000..1efa1afcf --- /dev/null +++ b/spm/Sources/core-plot/include/CPTPieChart.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTPieChart.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlatformSpecificCategories.h b/spm/Sources/core-plot/include/CPTPlatformSpecificCategories.h new file mode 120000 index 000000000..bb322f194 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTPlatformSpecificCategories.h @@ -0,0 +1 @@ +../../../../framework/PlatformSpecific/CPTPlatformSpecificCategories.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlatformSpecificDefines.h b/spm/Sources/core-plot/include/CPTPlatformSpecificDefines.h new file mode 120000 index 000000000..1eedcf545 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTPlatformSpecificDefines.h @@ -0,0 +1 @@ +../../../../framework/PlatformSpecific/CPTPlatformSpecificDefines.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlatformSpecificFunctions.h b/spm/Sources/core-plot/include/CPTPlatformSpecificFunctions.h new file mode 120000 index 000000000..a3ebbb9a3 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTPlatformSpecificFunctions.h @@ -0,0 +1 @@ +../../../../framework/PlatformSpecific/CPTPlatformSpecificFunctions.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlot.h b/spm/Sources/core-plot/include/CPTPlot.h new file mode 120000 index 000000000..ff1e6cc48 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTPlot.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTPlot.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlotArea.h b/spm/Sources/core-plot/include/CPTPlotArea.h new file mode 120000 index 000000000..63394b35b --- /dev/null +++ b/spm/Sources/core-plot/include/CPTPlotArea.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTPlotArea.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlotAreaFrame.h b/spm/Sources/core-plot/include/CPTPlotAreaFrame.h new file mode 120000 index 000000000..f6a99186b --- /dev/null +++ b/spm/Sources/core-plot/include/CPTPlotAreaFrame.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTPlotAreaFrame.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlotGroup.h b/spm/Sources/core-plot/include/CPTPlotGroup.h new file mode 120000 index 000000000..6833290a6 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTPlotGroup.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTPlotGroup.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlotRange.h b/spm/Sources/core-plot/include/CPTPlotRange.h new file mode 120000 index 000000000..76fee2c4a --- /dev/null +++ b/spm/Sources/core-plot/include/CPTPlotRange.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTPlotRange.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlotSpace.h b/spm/Sources/core-plot/include/CPTPlotSpace.h new file mode 120000 index 000000000..c36e29379 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTPlotSpace.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTPlotSpace.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlotSpaceAnnotation.h b/spm/Sources/core-plot/include/CPTPlotSpaceAnnotation.h new file mode 120000 index 000000000..ed18e5ea8 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTPlotSpaceAnnotation.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTPlotSpaceAnnotation.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlotSymbol.h b/spm/Sources/core-plot/include/CPTPlotSymbol.h new file mode 120000 index 000000000..3cfc7530b --- /dev/null +++ b/spm/Sources/core-plot/include/CPTPlotSymbol.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTPlotSymbol.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTRangePlot.h b/spm/Sources/core-plot/include/CPTRangePlot.h new file mode 120000 index 000000000..5d6d9e79f --- /dev/null +++ b/spm/Sources/core-plot/include/CPTRangePlot.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTRangePlot.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTResponder.h b/spm/Sources/core-plot/include/CPTResponder.h new file mode 120000 index 000000000..34f94f9d8 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTResponder.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTResponder.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTScatterPlot.h b/spm/Sources/core-plot/include/CPTScatterPlot.h new file mode 120000 index 000000000..e0c15a810 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTScatterPlot.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTScatterPlot.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTShadow.h b/spm/Sources/core-plot/include/CPTShadow.h new file mode 120000 index 000000000..0ad2a6f44 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTShadow.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTShadow.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTTextLayer.h b/spm/Sources/core-plot/include/CPTTextLayer.h new file mode 120000 index 000000000..540905494 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTTextLayer.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTTextLayer.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTTextStyle.h b/spm/Sources/core-plot/include/CPTTextStyle.h new file mode 120000 index 000000000..ec8f72331 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTTextStyle.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTTextStyle.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTTextStylePlatformSpecific.h b/spm/Sources/core-plot/include/CPTTextStylePlatformSpecific.h new file mode 120000 index 000000000..91aadb45f --- /dev/null +++ b/spm/Sources/core-plot/include/CPTTextStylePlatformSpecific.h @@ -0,0 +1 @@ +../../../../framework/PlatformSpecific/CPTTextStylePlatformSpecific.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTTheme.h b/spm/Sources/core-plot/include/CPTTheme.h new file mode 120000 index 000000000..9786dc61d --- /dev/null +++ b/spm/Sources/core-plot/include/CPTTheme.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTTheme.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTTimeFormatter.h b/spm/Sources/core-plot/include/CPTTimeFormatter.h new file mode 120000 index 000000000..be4371ba1 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTTimeFormatter.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTTimeFormatter.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTTradingRangePlot.h b/spm/Sources/core-plot/include/CPTTradingRangePlot.h new file mode 120000 index 000000000..d861e6f43 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTTradingRangePlot.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTTradingRangePlot.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTUtilities.h b/spm/Sources/core-plot/include/CPTUtilities.h new file mode 120000 index 000000000..a14adfa4b --- /dev/null +++ b/spm/Sources/core-plot/include/CPTUtilities.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTUtilities.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTXYAxis.h b/spm/Sources/core-plot/include/CPTXYAxis.h new file mode 120000 index 000000000..309f67620 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTXYAxis.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTXYAxis.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTXYAxisSet.h b/spm/Sources/core-plot/include/CPTXYAxisSet.h new file mode 120000 index 000000000..842a4abff --- /dev/null +++ b/spm/Sources/core-plot/include/CPTXYAxisSet.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTXYAxisSet.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTXYGraph.h b/spm/Sources/core-plot/include/CPTXYGraph.h new file mode 120000 index 000000000..af004a251 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTXYGraph.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTXYGraph.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTXYPlotSpace.h b/spm/Sources/core-plot/include/CPTXYPlotSpace.h new file mode 120000 index 000000000..42852d175 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTXYPlotSpace.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTXYPlotSpace.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CorePlot.h b/spm/Sources/core-plot/include/CorePlot.h new file mode 120000 index 000000000..c0d510e52 --- /dev/null +++ b/spm/Sources/core-plot/include/CorePlot.h @@ -0,0 +1 @@ +../../../../framework/CocoaPods/CorePlot.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/NSCoderExtensions.h b/spm/Sources/core-plot/include/NSCoderExtensions.h new file mode 120000 index 000000000..1f38f0542 --- /dev/null +++ b/spm/Sources/core-plot/include/NSCoderExtensions.h @@ -0,0 +1 @@ +../../../../framework/Source/NSCoderExtensions.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/NSDecimalNumberExtensions.h b/spm/Sources/core-plot/include/NSDecimalNumberExtensions.h new file mode 120000 index 000000000..82fed29ca --- /dev/null +++ b/spm/Sources/core-plot/include/NSDecimalNumberExtensions.h @@ -0,0 +1 @@ +../../../../framework/Source/NSDecimalNumberExtensions.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/NSNumberExtensions.h b/spm/Sources/core-plot/include/NSNumberExtensions.h new file mode 120000 index 000000000..a775b31b9 --- /dev/null +++ b/spm/Sources/core-plot/include/NSNumberExtensions.h @@ -0,0 +1 @@ +../../../../framework/Source/NSNumberExtensions.h \ No newline at end of file From b8d15e151fef3333e4ca630444908f3d5554b201 Mon Sep 17 00:00:00 2001 From: 3a4oT Date: Sat, 12 Dec 2020 01:53:47 +0200 Subject: [PATCH 036/245] add github CI workflow as a POC --- .github/workflows/ci.yml | 56 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..41fae0515 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,56 @@ +name: "core-plot CI" + +on: + push: + branches: + - master + pull_request: + branches: + - "*" + +jobs: + UnitTests: + name: Unit Tests + runs-on: macOS-latest + env: + DEVELOPER_DIR: /Applications/Xcode_12.2.app/Contents/Developer + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Run unit tests for macOS + run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests Mac" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO + + - name: Run unit tests for iOS + run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests iOS" -sdk "iphonesimulator" -destination "name=iPhone 12 Pro" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO + + - name: Run unit tests for tvOS + run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests tvOS" -sdk "appletvsimulator" -destination "name=Apple TV 4K" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO + + - name: Run unit tests for CorePlot-CocoaTouch + run: xcodebuild -project framework/CorePlot.xcodeproj -target "CorePlot-CocoaTouchTests" -sdk "iphonesimulator" -destination "name=iPhone 12 Pro" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO + + SPM: + name: Verify SPM build + runs-on: macOS-latest + env: + DEVELOPER_DIR: /Applications/Xcode_12.2.app/Contents/Developer + strategy: + matrix: + destination: + [ + "platform=iOS Simulator,name=iPhone 12 Pro", + "platform=macOS,variant=Mac Catalyst", + "platform=macOS", + "platform=tvOS Simulator,name=Apple TV 4k", + ] + scheme: ["core-plot"] + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Generate SPM layout + run: ./scripts/generate_spm_sources_layout.sh + + - name: spm's xcodebuild - ${{ matrix.destination }} + run: xcodebuild clean build -scheme "${{ matrix.scheme }}" -destination "${{ matrix.destination }}" -configuration Release From 2409eb503e14fcae4aac250f977b33e5c07d9a06 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 12 Dec 2020 15:21:25 -0500 Subject: [PATCH 037/245] Added section markers and consolidated common headers in the platform-specific files. --- .../PlatformSpecific/CPTGraphHostingView.h | 27 +++++++++++++------ .../PlatformSpecific/CPTGraphHostingView.m | 14 +++++----- .../CPTPlatformSpecificCategories.h | 11 ++++---- .../CPTPlatformSpecificCategories.m | 8 ++++-- .../CPTPlatformSpecificDefines.h | 6 +++++ .../CPTPlatformSpecificFunctions.h | 10 ++++--- .../CPTPlatformSpecificFunctions.m | 5 ++++ 7 files changed, 56 insertions(+), 25 deletions(-) diff --git a/framework/PlatformSpecific/CPTGraphHostingView.h b/framework/PlatformSpecific/CPTGraphHostingView.h index ee3fc909c..4928b8ae6 100644 --- a/framework/PlatformSpecific/CPTGraphHostingView.h +++ b/framework/PlatformSpecific/CPTGraphHostingView.h @@ -1,14 +1,15 @@ -#import +#import "CPTDefinitions.h" -#if TARGET_OS_OSX +@class CPTGraph; -#import +#if TARGET_OS_OSX -@class CPTGraph; +#pragma mark macOS +#pragma mark - @interface CPTGraphHostingView : NSView -/// @name Hosted graph +/// @name Hosted Graph /// @{ @property (nonatomic, readwrite, strong, nullable) CPTGraph *hostedGraph; /// @} @@ -33,15 +34,25 @@ #else -#import "CPTDefinitions.h" - -@class CPTGraph; +#pragma mark - iOS, tvOS, Mac Catalyst +#pragma mark - @interface CPTGraphHostingView : UIView +/// @name Hosted Graph +/// @{ @property (nonatomic, readwrite, strong, nullable) CPTGraph *hostedGraph; +/// @} + +/// @name Layer Structure +/// @{ @property (nonatomic, readwrite, assign) BOOL collapsesLayers; +/// @} + +/// @name User Interaction +/// @{ @property (nonatomic, readwrite, assign) BOOL allowPinchScaling; +/// @} @end diff --git a/framework/PlatformSpecific/CPTGraphHostingView.m b/framework/PlatformSpecific/CPTGraphHostingView.m index f9605dccb..1141de317 100644 --- a/framework/PlatformSpecific/CPTGraphHostingView.m +++ b/framework/PlatformSpecific/CPTGraphHostingView.m @@ -1,12 +1,15 @@ #import "CPTGraphHostingView.h" -#if TARGET_OS_OSX - #import "CPTGraph.h" #import "CPTPlotArea.h" #import "CPTPlotAreaFrame.h" #import "CPTPlotSpace.h" +#if TARGET_OS_OSX + +#pragma mark macOS +#pragma mark - + /// @cond static void *CPTGraphHostingViewKVOContext = (void *)&CPTGraphHostingViewKVOContext; @@ -688,10 +691,9 @@ -(void)setOpenHandCursor:(nullable NSCursor *)newCursor #else -#import "CPTGraph.h" -#import "CPTPlotArea.h" -#import "CPTPlotAreaFrame.h" -#import "CPTPlotSpace.h" +#pragma mark - iOS, tvOS, Mac Catalyst +#pragma mark - + #import "NSNumberExtensions.h" /// @cond diff --git a/framework/PlatformSpecific/CPTPlatformSpecificCategories.h b/framework/PlatformSpecific/CPTPlatformSpecificCategories.h index 732706178..1a2c85642 100644 --- a/framework/PlatformSpecific/CPTPlatformSpecificCategories.h +++ b/framework/PlatformSpecific/CPTPlatformSpecificCategories.h @@ -1,11 +1,14 @@ #import -#if TARGET_OS_OSX - #import "CPTColor.h" #import "CPTLayer.h" #import "CPTPlatformSpecificDefines.h" +#if TARGET_OS_OSX + +#pragma mark macOS +#pragma mark - + #pragma mark CPTLayer /** @category CPTLayer(CPTPlatformSpecificLayerExtensions) @@ -41,9 +44,7 @@ #else -#import "CPTColor.h" -#import "CPTLayer.h" -#import "CPTPlatformSpecificDefines.h" +#pragma mark - iOS, tvOS, Mac Catalyst #pragma mark - CPTLayer diff --git a/framework/PlatformSpecific/CPTPlatformSpecificCategories.m b/framework/PlatformSpecific/CPTPlatformSpecificCategories.m index 100d4ec74..0e02d8d6b 100644 --- a/framework/PlatformSpecific/CPTPlatformSpecificCategories.m +++ b/framework/PlatformSpecific/CPTPlatformSpecificCategories.m @@ -1,10 +1,13 @@ #import "CPTPlatformSpecificCategories.h" +#import "CPTPlatformSpecificFunctions.h" #if TARGET_OS_OSX +#pragma mark macOS +#pragma mark - + #import "CPTGraph.h" #import "CPTGraphHostingView.h" -#import "CPTPlatformSpecificFunctions.h" #pragma mark CPTLayer @@ -120,7 +123,8 @@ -(CGSize)sizeAsDrawn #else -#import "CPTPlatformSpecificFunctions.h" +#pragma mark - iOS, tvOS, Mac Catalyst + #import #pragma mark - CPTLayer diff --git a/framework/PlatformSpecific/CPTPlatformSpecificDefines.h b/framework/PlatformSpecific/CPTPlatformSpecificDefines.h index 9d3a9d53b..bbe4e633c 100644 --- a/framework/PlatformSpecific/CPTPlatformSpecificDefines.h +++ b/framework/PlatformSpecific/CPTPlatformSpecificDefines.h @@ -4,6 +4,9 @@ #if TARGET_OS_OSX +#pragma mark macOS +#pragma mark - + #import typedef NSColor CPTNativeColor; ///< Platform-native color. @@ -13,6 +16,9 @@ typedef NSFont CPTNativeFont; ///< Platform-native font. #else +#pragma mark - iOS, tvOS, Mac Catalyst +#pragma mark - + #import typedef UIColor CPTNativeColor; ///< Platform-native color. diff --git a/framework/PlatformSpecific/CPTPlatformSpecificFunctions.h b/framework/PlatformSpecific/CPTPlatformSpecificFunctions.h index 40d55e05c..e365ce96b 100644 --- a/framework/PlatformSpecific/CPTPlatformSpecificFunctions.h +++ b/framework/PlatformSpecific/CPTPlatformSpecificFunctions.h @@ -1,9 +1,11 @@ +#import "CPTDefinitions.h" +#import "CPTPlatformSpecificDefines.h" #import #if TARGET_OS_OSX -#import "CPTDefinitions.h" -#import "CPTPlatformSpecificDefines.h" +#pragma mark macOS +#pragma mark - /// @file @@ -37,8 +39,8 @@ CPTNativeImage *__nonnull CPTQuickLookImage(CGRect rect, __nonnull CPTQuickLookI #else -#import "CPTDefinitions.h" -#import "CPTPlatformSpecificDefines.h" +#pragma mark - iOS, tvOS, Mac Catalyst +#pragma mark - /// @file diff --git a/framework/PlatformSpecific/CPTPlatformSpecificFunctions.m b/framework/PlatformSpecific/CPTPlatformSpecificFunctions.m index e46dbda11..a1c57fd00 100644 --- a/framework/PlatformSpecific/CPTPlatformSpecificFunctions.m +++ b/framework/PlatformSpecific/CPTPlatformSpecificFunctions.m @@ -2,6 +2,9 @@ #if TARGET_OS_OSX +#pragma mark macOS +#pragma mark - + #pragma mark Graphics Context // linked list to store saved contexts @@ -145,6 +148,8 @@ CPTRGBAColor CPTRGBAColorFromNSColor(NSColor *__nonnull nsColor) #else +#pragma mark - iOS, tvOS, Mac Catalyst + #import "CPTExceptions.h" #pragma mark - From 87db1a7b1d994a506905318a01e7c7ced55b2eb8 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 12 Dec 2020 16:01:56 -0500 Subject: [PATCH 038/245] Consolidated platform specific file definitions in the podspec files. --- CorePlot-latest.podspec | 7 +++---- CorePlot.podspec | 7 +++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/CorePlot-latest.podspec b/CorePlot-latest.podspec index e7dd63299..e4f9b07b6 100644 --- a/CorePlot-latest.podspec +++ b/CorePlot-latest.podspec @@ -26,11 +26,10 @@ Pod::Spec.new do |s| s.osx.header_dir = 'osx' s.tvos.header_dir = 'tvos' - s.source_files = 'framework/Source/*.{h,m}', 'framework/CocoaPods/*.h' + s.source_files = 'framework/Source/*.{h,m}', 'framework/CocoaPods/*.h', 'framework/PlatformSpecific/*.{h,m}' s.exclude_files = '**/*{TestCase,Tests}.{h,m}', '**/mainpage.h' - s.ios.source_files = 'framework/CorePlot-CocoaTouch.h', 'framework/PlatformSpecific/*.{h,m}' - s.tvos.source_files = 'framework/PlatformSpecific/*.{h,m}' - s.osx.source_files = 'framework/MacOnly/*.{h,m}', 'framework/PlatformSpecific/*.{h,m}' + s.ios.source_files = 'framework/CorePlot-CocoaTouch.h' + s.osx.source_files = 'framework/MacOnly/*.{h,m}' s.private_header_files = '**/_*.h' s.requires_arc = true diff --git a/CorePlot.podspec b/CorePlot.podspec index 544d67aed..75cb41638 100644 --- a/CorePlot.podspec +++ b/CorePlot.podspec @@ -26,11 +26,10 @@ Pod::Spec.new do |s| s.osx.header_dir = 'osx' s.tvos.header_dir = 'tvos' - s.source_files = 'framework/Source/*.{h,m}', 'framework/CocoaPods/*.h' + s.source_files = 'framework/Source/*.{h,m}', 'framework/CocoaPods/*.h', 'framework/PlatformSpecific/*.{h,m}' s.exclude_files = '**/*{TestCase,Tests}.{h,m}', '**/mainpage.h' - s.ios.source_files = 'framework/CorePlot-CocoaTouch.h', 'framework/PlatformSpecific/*.{h,m}' - s.tvos.source_files = 'framework/PlatformSpecific/*.{h,m}' - s.osx.source_files = 'framework/MacOnly/*.{h,m}', 'framework/PlatformSpecific/*.{h,m}' + s.ios.source_files = 'framework/CorePlot-CocoaTouch.h' + s.osx.source_files = 'framework/MacOnly/*.{h,m}' s.private_header_files = '**/_*.h' s.requires_arc = true From eb4ac6367b3c677207152574c05574da407c2ac5 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 12 Dec 2020 16:54:43 -0500 Subject: [PATCH 039/245] Added section markers and consolidated common headers in the platform-specific files. --- .../PlatformSpecific/CPTImagePlatformSpecific.m | 7 +++++-- .../PlatformSpecific/CPTTextStylePlatformSpecific.h | 7 +++++++ .../PlatformSpecific/CPTTextStylePlatformSpecific.m | 13 ++++++++----- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/framework/PlatformSpecific/CPTImagePlatformSpecific.m b/framework/PlatformSpecific/CPTImagePlatformSpecific.m index 9afa84451..6e25f05f5 100644 --- a/framework/PlatformSpecific/CPTImagePlatformSpecific.m +++ b/framework/PlatformSpecific/CPTImagePlatformSpecific.m @@ -1,8 +1,10 @@ +#import "CPTImage.h" #import #if TARGET_OS_OSX -#import "CPTImage.h" +#pragma mark macOS +#pragma mark - @implementation CPTImage(CPTPlatformSpecificImageExtensions) @@ -71,7 +73,8 @@ -(nonnull instancetype)initForPNGFile:(nonnull NSString *)path #else -#import "CPTImage.h" +#pragma mark - iOS, tvOS, Mac Catalyst +#pragma mark - #import "CPTUtilities.h" diff --git a/framework/PlatformSpecific/CPTTextStylePlatformSpecific.h b/framework/PlatformSpecific/CPTTextStylePlatformSpecific.h index 5e0199411..11ecf1d31 100644 --- a/framework/PlatformSpecific/CPTTextStylePlatformSpecific.h +++ b/framework/PlatformSpecific/CPTTextStylePlatformSpecific.h @@ -3,6 +3,10 @@ #import #if TARGET_OS_OSX + +#pragma mark macOS +#pragma mark - + #import /** @@ -28,6 +32,9 @@ typedef NS_ENUM (NSInteger, CPTTextAlignment) { #else +#pragma mark - iOS, tvOS, Mac Catalyst +#pragma mark - + #import /// @file diff --git a/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m b/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m index 25cd7771b..3f1b47cbc 100644 --- a/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m +++ b/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m @@ -1,11 +1,14 @@ #import "CPTTextStylePlatformSpecific.h" -#if TARGET_OS_OSX - #import "CPTMutableTextStyle.h" #import "CPTPlatformSpecificCategories.h" #import "CPTPlatformSpecificFunctions.h" +#if TARGET_OS_OSX + +#pragma mark macOS +#pragma mark - + @implementation CPTTextStyle(CPTPlatformSpecificTextStyleExtensions) /** @property nonnull CPTDictionary *attributes @@ -280,10 +283,10 @@ -(void)drawInRect:(CGRect)rect withTextStyle:(nullable CPTTextStyle *)style inCo #else +#pragma mark - iOS, tvOS, Mac Catalyst +#pragma mark - + #import "CPTColor.h" -#import "CPTMutableTextStyle.h" -#import "CPTPlatformSpecificCategories.h" -#import "CPTPlatformSpecificFunctions.h" #import @implementation CPTTextStyle(CPTPlatformSpecificTextStyleExtensions) From e87c0518629a8abe3699a9de32d295387268ab00 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 12 Dec 2020 18:58:29 -0500 Subject: [PATCH 040/245] Include the PlatformSpecific folder when building documentation with Doxygen. --- documentation/doxygen/doxygen touch.config | 2 +- documentation/doxygen/doxygen.config | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/documentation/doxygen/doxygen touch.config b/documentation/doxygen/doxygen touch.config index edd3b412d..e52498f10 100644 --- a/documentation/doxygen/doxygen touch.config +++ b/documentation/doxygen/doxygen touch.config @@ -834,7 +834,7 @@ WARN_LOGFILE = INPUT = "$(SOURCE_ROOT)/CorePlot-CocoaTouch.h" \ "$(SOURCE_ROOT)/Source" \ - "$(SOURCE_ROOT)/iPhoneOnly" + "$(SOURCE_ROOT)/PlatformSpecific" # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses diff --git a/documentation/doxygen/doxygen.config b/documentation/doxygen/doxygen.config index ce790056f..ca7444467 100644 --- a/documentation/doxygen/doxygen.config +++ b/documentation/doxygen/doxygen.config @@ -834,6 +834,7 @@ WARN_LOGFILE = INPUT = "$(SOURCE_ROOT)/CorePlot.h" \ "$(SOURCE_ROOT)/Source" \ + "$(SOURCE_ROOT)/PlatformSpecific" \ "$(SOURCE_ROOT)/MacOnly" # This tag can be used to specify the character encoding of the source files @@ -2174,7 +2175,8 @@ INCLUDE_FILE_PATTERNS = # recursively expanded use the := operator instead of the = operator. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -PREDEFINED = NS_DESIGNATED_INITIALIZER \ +PREDEFINED = TARGET_OS_OSX \ + NS_DESIGNATED_INITIALIZER \ NS_RETURNS_INNER_POINTER \ "NS_ENUM(_type,_name)=enum _name : _type _name; enum _name : _type " \ "NS_CLOSED_ENUM(_type,_name)=enum _name : _type _name; enum _name : _type " \ From 3a98c0a8788ce4aba4d838e3c1cc44aa5c729c89 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 13 Dec 2020 09:10:31 -0500 Subject: [PATCH 041/245] Added Petro Rovenskyy to the license. --- License.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/License.txt b/License.txt index fbd7853fe..b79ec0c03 100644 --- a/License.txt +++ b/License.txt @@ -1,4 +1,4 @@ -Copyright (c) 2020, Drew McCormack, Brad Larson, Eric Skroch, Barry Wark, Dirkjan Krijnders, Rick Maddy, Vijay Kalusani, Caleb Cannon, Jeff Buck, Thomas Elstner, Jeroen Leenarts, Craig Hockenberry, Hartwig Wiesmann, Koen van der Drift, Nino Ag, Mike Lischke, Trevor Harmon, Travis Fischer, Graham Mueller, Rafał Wójcik, Mike Rossetti, Michael Merickel, Lane Roathe, Ingmar Stein, Sean Holbert, Victor Martin Garcia, Jérôme Morissard, Demitri Muna, Tim Monzures, Kirill Yakimovich, Tom Izaks, Pascal Freiburghaus, Fred Potter, and Aurélien Hugelé. +Copyright (c) 2020, Drew McCormack, Brad Larson, Eric Skroch, Barry Wark, Dirkjan Krijnders, Rick Maddy, Vijay Kalusani, Caleb Cannon, Jeff Buck, Thomas Elstner, Jeroen Leenarts, Craig Hockenberry, Hartwig Wiesmann, Koen van der Drift, Nino Ag, Mike Lischke, Trevor Harmon, Travis Fischer, Graham Mueller, Rafał Wójcik, Mike Rossetti, Michael Merickel, Lane Roathe, Ingmar Stein, Sean Holbert, Victor Martin Garcia, Jérôme Morissard, Demitri Muna, Tim Monzures, Kirill Yakimovich, Tom Izaks, Pascal Freiburghaus, Fred Potter, Aurélien Hugelé, and Petro Rovenskyy. All rights reserved. From 8e8eef49e69f00ea10d531e2b0c2e9b496520617 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 13 Dec 2020 09:18:37 -0500 Subject: [PATCH 042/245] Updated the podspec and release instructions to use semantic version numbering. --- CorePlot.podspec | 2 +- scripts/README Creating a release package.md | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CorePlot.podspec b/CorePlot.podspec index 75cb41638..e2d60dc4e 100644 --- a/CorePlot.podspec +++ b/CorePlot.podspec @@ -12,7 +12,7 @@ Pod::Spec.new do |s| 'Eric Skroch' => 'eskroch@mac.com', 'Barry Wark' => 'barrywark@gmail.com' } - s.source = { :git => 'https://github.com/core-plot/core-plot.git', :tag => 'release_2.3'} + s.source = { :git => 'https://github.com/core-plot/core-plot.git', :tag => '2.3.0'} s.description = 'Core Plot is a plotting framework for macOS, iOS, and tvOS. It provides 2D visualization ' \ 'of data, and is tightly integrated with Apple technologies like Core Animation, ' \ diff --git a/scripts/README Creating a release package.md b/scripts/README Creating a release package.md index bcfb6724c..b22c4694b 100644 --- a/scripts/README Creating a release package.md +++ b/scripts/README Creating a release package.md @@ -20,9 +20,9 @@ Follow these steps to create a Core Plot release and post it to GitHub: 6. Tag the current revision with the release version: - `$ git tag release_` + `$ git tag ` - where **<version>** is the version number for this release. + where **<version>** is the semantic version number for this release, e.g., 2.5.0. 7. Change to the **scripts** folder: @@ -52,7 +52,7 @@ Follow these steps to create a Core Plot release and post it to GitHub: 13. Click **Draft a new release**. -14. Select the tag for the new release (`release_`). +14. Select the tag for the new release (``). Enter the following: @@ -73,7 +73,7 @@ Follow these steps to create a Core Plot release and post it to GitHub: 3. Tag the current documentation revision with the release version: - `$ git tag release_` + `$ git tag ` 4. Review the [wiki pages](https://github.com/core-plot/core-plot/wiki) and make any needed updates. @@ -85,10 +85,10 @@ Follow these steps to create a Core Plot release and post it to GitHub: `s.version = ''` -3. Add the git tag name (`release_`) under the **source** tag. +3. Add the git tag name (``) under the **source** tag. `s.source = { :git => 'https://github.com/core-plot/core-plot.git', - :tag => 'release_'}` + :tag => ''}` 4. Submit the updated podspec to [CocoaPods](https://github.com/CocoaPods/CocoaPods). From 334b11fbe48b2fbed8e6fae80ffccb831a87dced Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 13 Dec 2020 09:56:20 -0500 Subject: [PATCH 043/245] Removed the Quartz Composer plugin because Quartz Composer is deprecated and no longer supported on macOS 11 Big Sur. --- .travis.yml | 3 - QCPlugin/Base.lproj/Info.plist | 30 - QCPlugin/Base.lproj/Settings.xib | 80 -- QCPlugin/CPTBarPlotPlugin.h | 11 - QCPlugin/CPTBarPlotPlugin.m | 238 ----- QCPlugin/CPTPieChartPlugin.h | 14 - QCPlugin/CPTPieChartPlugin.m | 287 ------ QCPlugin/CPTScatterPlotPlugin.h | 6 - QCPlugin/CPTScatterPlotPlugin.m | 264 ------ QCPlugin/Compositions/Bar Chart.qtz | Bin 41178 -> 0 bytes QCPlugin/Compositions/Layers.qtz | Bin 52576 -> 0 bytes QCPlugin/Compositions/Pie Chart.qtz | Bin 39400 -> 0 bytes QCPlugin/Compositions/Scatter Plot.qtz | Bin 41774 -> 0 bytes QCPlugin/CorePlotQCPlugin.h | 54 -- QCPlugin/CorePlotQCPlugin.m | 855 ------------------ .../TemplateIcon.icns | Bin 42106 -> 0 bytes .../project.pbxproj | 558 ------------ .../contents.xcworkspacedata | 7 - .../xcschemes/Build & Copy.xcscheme | 67 -- .../xcschemes/CorePlotQCPlugin.xcscheme | 67 -- QCPlugin/CorePlotQCPlugin_Prefix.pch | 3 - .../contents.xcworkspacedata | 7 - 22 files changed, 2551 deletions(-) delete mode 100644 QCPlugin/Base.lproj/Info.plist delete mode 100644 QCPlugin/Base.lproj/Settings.xib delete mode 100644 QCPlugin/CPTBarPlotPlugin.h delete mode 100644 QCPlugin/CPTBarPlotPlugin.m delete mode 100644 QCPlugin/CPTPieChartPlugin.h delete mode 100644 QCPlugin/CPTPieChartPlugin.m delete mode 100644 QCPlugin/CPTScatterPlotPlugin.h delete mode 100644 QCPlugin/CPTScatterPlotPlugin.m delete mode 100644 QCPlugin/Compositions/Bar Chart.qtz delete mode 100644 QCPlugin/Compositions/Layers.qtz delete mode 100644 QCPlugin/Compositions/Pie Chart.qtz delete mode 100644 QCPlugin/Compositions/Scatter Plot.qtz delete mode 100644 QCPlugin/CorePlotQCPlugin.h delete mode 100644 QCPlugin/CorePlotQCPlugin.m delete mode 100644 QCPlugin/CorePlotQCPlugin.xcodeproj/TemplateIcon.icns delete mode 100644 QCPlugin/CorePlotQCPlugin.xcodeproj/project.pbxproj delete mode 100644 QCPlugin/CorePlotQCPlugin.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 QCPlugin/CorePlotQCPlugin.xcodeproj/xcshareddata/xcschemes/Build & Copy.xcscheme delete mode 100644 QCPlugin/CorePlotQCPlugin.xcodeproj/xcshareddata/xcschemes/CorePlotQCPlugin.xcscheme delete mode 100644 QCPlugin/CorePlotQCPlugin_Prefix.pch diff --git a/.travis.yml b/.travis.yml index 1df945ce3..87cc44309 100644 --- a/.travis.yml +++ b/.travis.yml @@ -39,6 +39,3 @@ script: xcodebuild -project examples/StockPlot/StockPlot.xcodeproj -target Stock # tvOS examples script: xcodebuild -project examples/CorePlotGallery/Plot_Gallery.xcodeproj -target "Plot Gallery-tvOS" -sdk ${TVSDK} -configuration Release - -# Quartz Composer plugin -script: xcodebuild -project QCPlugin/CorePlotQCPlugin.xcodeproj -target CorePlotQCPlugin -configuration Release diff --git a/QCPlugin/Base.lproj/Info.plist b/QCPlugin/Base.lproj/Info.plist deleted file mode 100644 index 27bfe3460..000000000 --- a/QCPlugin/Base.lproj/Info.plist +++ /dev/null @@ -1,30 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleGetInfoString - CorePlotQCPlugin version 1.0, Copyright YourCompany. - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1.0 - QCPlugInClasses - - CPTBarPlotPlugIn - CPTScatterPlotPlugIn - CPTPieChartPlugIn - - - diff --git a/QCPlugin/Base.lproj/Settings.xib b/QCPlugin/Base.lproj/Settings.xib deleted file mode 100644 index fa3c596e5..000000000 --- a/QCPlugin/Base.lproj/Settings.xib +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/QCPlugin/CPTBarPlotPlugin.h b/QCPlugin/CPTBarPlotPlugin.h deleted file mode 100644 index e5fbb2bce..000000000 --- a/QCPlugin/CPTBarPlotPlugin.h +++ /dev/null @@ -1,11 +0,0 @@ -#import "CorePlotQCPlugin.h" -#import - -@interface CPTBarPlotPlugIn : CorePlotQCPlugIn - -@property (readwrite, assign) double inputBaseValue; -@property (readwrite, assign) double inputBarWidth; -@property (readwrite, assign) double inputBarOffset; -@property (readwrite, assign) BOOL inputHorizontalBars; - -@end diff --git a/QCPlugin/CPTBarPlotPlugin.m b/QCPlugin/CPTBarPlotPlugin.m deleted file mode 100644 index 61488114c..000000000 --- a/QCPlugin/CPTBarPlotPlugin.m +++ /dev/null @@ -1,238 +0,0 @@ -#import "CPTBarPlotPlugin.h" - -@implementation CPTBarPlotPlugIn - -/* - * NOTE: It seems that QC plugins don't inherit dynamic input ports which is - * why all of the accessor declarations are duplicated here - */ - -/* - * Accessor for the output image - */ -@dynamic outputImage; - -/* - * Dynamic accessors for the static PlugIn inputs - */ -@dynamic inputPixelsWide, inputPixelsHigh; -@dynamic inputPlotAreaColor; -@dynamic inputAxisColor, inputAxisLineWidth, inputAxisMinorTickWidth, inputAxisMajorTickWidth, inputAxisMajorTickLength, inputAxisMinorTickLength; -@dynamic inputMajorGridLineWidth, inputMinorGridLineWidth; -@dynamic inputXMin, inputXMax, inputYMin, inputYMax; -@dynamic inputXMajorIntervals, inputYMajorIntervals, inputXMinorIntervals, inputYMinorIntervals; - -/* - * Bar plot special accessors - */ -@dynamic inputBaseValue, inputBarOffset, inputBarWidth, inputHorizontalBars; - -+(nonnull NSDictionary *)attributes -{ - return @{ - QCPlugInAttributeNameKey: @"Core Plot Bar Chart", - QCPlugInAttributeDescriptionKey: @"Bar chart" - }; -} - -+(nullable CPTDictionary *)attributesForPropertyPortWithKey:(nullable NSString *)key -{ - // A few additional ports for the bar plot chart type ... - - if ( [key isEqualToString:@"inputBarWidth"] ) { - return @{ - QCPortAttributeNameKey: @"Bar Width", - QCPortAttributeDefaultValueKey: @1.0, - QCPortAttributeMinimumValueKey: @0.0 - }; - } - - if ( [key isEqualToString:@"inputBarOffset"] ) { - return @{ - QCPortAttributeNameKey: @"Bar Offset", - QCPortAttributeDefaultValueKey: @0.5 - }; - } - - if ( [key isEqualToString:@"inputBaseValue"] ) { - return @{ - QCPortAttributeNameKey: @"Base Value", - QCPortAttributeDefaultValueKey: @0.0 - }; - } - - if ( [key isEqualToString:@"inputHorizontalBars"] ) { - return @{ - QCPortAttributeNameKey: @"Horizontal Bars", - QCPortAttributeDefaultValueKey: @NO - }; - } - - if ( [key isEqualToString:@"inputXMin"] ) { - return @{ - QCPortAttributeNameKey: @"X Range Min", - QCPortAttributeDefaultValueKey: @0.0 - }; - } - - if ( [key isEqualToString:@"inputXMax"] ) { - return @{ - QCPortAttributeNameKey: @"X Range Max", - QCPortAttributeDefaultValueKey: @5.0 - }; - } - - if ( [key isEqualToString:@"inputYMin"] ) { - return @{ - QCPortAttributeNameKey: @"Y Range Min", - QCPortAttributeDefaultValueKey: @0.0 - }; - } - - if ( [key isEqualToString:@"inputYMax"] ) { - return @{ - QCPortAttributeNameKey: @"Y Range Max", - QCPortAttributeDefaultValueKey: @5.0 - }; - } - - return [super attributesForPropertyPortWithKey:key]; -} - --(void)addPlotWithIndex:(NSUInteger)index -{ - // Create input ports for the new plot - - [self addInputPortWithType:QCPortTypeStructure - forKey:[NSString stringWithFormat:@"plotNumbers%lu", (unsigned long)index] - withAttributes:@{ QCPortAttributeNameKey: [NSString stringWithFormat:@"Values %lu", (unsigned long)(index + 1)], - QCPortAttributeTypeKey: QCPortTypeStructure } - ]; - - CGColorRef lineColor = [self newDefaultColorForPlot:index alpha:1.0]; - - [self addInputPortWithType:QCPortTypeColor - forKey:[NSString stringWithFormat:@"plotDataLineColor%lu", (unsigned long)index] - withAttributes:@{ QCPortAttributeNameKey: [NSString stringWithFormat:@"Plot Line Color %lu", (unsigned long)(index + 1)], - QCPortAttributeTypeKey: QCPortTypeColor, - QCPortAttributeDefaultValueKey: (id)CFBridgingRelease(lineColor) } - ]; - - CGColorRef fillColor = [self newDefaultColorForPlot:index alpha:0.25]; - - [self addInputPortWithType:QCPortTypeColor - forKey:[NSString stringWithFormat:@"plotFillColor%lu", (unsigned long)index] - withAttributes:@{ QCPortAttributeNameKey: [NSString stringWithFormat:@"Plot Fill Color %lu", (unsigned long)(index + 1)], - QCPortAttributeTypeKey: QCPortTypeColor, - QCPortAttributeDefaultValueKey: (id)CFBridgingRelease(fillColor) } - ]; - - [self addInputPortWithType:QCPortTypeNumber - forKey:[NSString stringWithFormat:@"plotDataLineWidth%lu", (unsigned long)index] - withAttributes:@{ QCPortAttributeNameKey: [NSString stringWithFormat:@"Plot Line Width %lu", (unsigned long)(index + 1)], - QCPortAttributeTypeKey: QCPortTypeNumber, - QCPortAttributeDefaultValueKey: @1.0, - QCPortAttributeMinimumValueKey: @0.0 } - ]; - - // Add the new plot to the graph - CPTBarPlot *barPlot = [CPTBarPlot tubularBarPlotWithColor:[CPTColor greenColor] horizontalBars:NO]; - - barPlot.identifier = [NSString stringWithFormat:@"Bar Plot %lu", (unsigned long)(index + 1)]; - barPlot.dataSource = self; - [self.graph addPlot:barPlot]; -} - --(void)removePlots:(NSUInteger)count -{ - // Clean up a deleted plot - CPTGraph *theGraph = self.graph; - - NSUInteger plotCount = self.numberOfPlots; - - for ( NSUInteger i = plotCount; i > plotCount - count; i-- ) { - [self removeInputPortForKey:[NSString stringWithFormat:@"plotNumbers%lu", (unsigned long)(i - 1)]]; - [self removeInputPortForKey:[NSString stringWithFormat:@"plotDataLineColor%lu", (unsigned long)(i - 1)]]; - [self removeInputPortForKey:[NSString stringWithFormat:@"plotFillColor%lu", (unsigned long)(i - 1)]]; - [self removeInputPortForKey:[NSString stringWithFormat:@"plotDataLineWidth%lu", (unsigned long)(i - 1)]]; - - [theGraph removePlot:[theGraph allPlots].lastObject]; - } -} - --(BOOL)configurePlots -{ - CPTGraph *theGraph = self.graph; - - // The pixel width of a single plot unit (1..2) along the x axis of the plot - double count = (double)[theGraph allPlots].count; - double unitWidth = theGraph.plotAreaFrame.bounds.size.width / (self.inputXMax - self.inputXMin); - double barWidth = self.inputBarWidth * unitWidth / count; - - // Configure scatter plots for active plot inputs - for ( CPTBarPlot *plot in [theGraph allPlots] ) { - NSUInteger index = [[theGraph allPlots] indexOfObject:plot]; - CPTMutableLineStyle *lineStyle = [CPTMutableLineStyle lineStyle]; - lineStyle.lineColor = [CPTColor colorWithCGColor:[self dataLineColor:index]]; - lineStyle.lineWidth = [self dataLineWidth:index]; - plot.lineStyle = lineStyle; - plot.baseValue = @(self.inputBaseValue); - plot.barWidth = @(barWidth); - plot.barOffset = @(self.inputBarOffset); - plot.barsAreHorizontal = self.inputHorizontalBars; - CGColorRef fillColor = [self areaFillColor:index]; - if ( fillColor ) { - plot.fill = [CPTFill fillWithColor:[CPTColor colorWithCGColor:fillColor]]; - } - - [plot reloadData]; - } - - return YES; -} - -#pragma mark - -#pragma mark Data source methods - --(NSUInteger)numberOfRecordsForPlot:(nonnull CPTPlot *)plot -{ - NSUInteger plotIndex = [[self.graph allPlots] indexOfObject:plot]; - NSString *key = [NSString stringWithFormat:@"plotNumbers%lu", (unsigned long)plotIndex]; - - return [[self valueForInputKey:key] count]; -} - --(nullable NSArray *)numbersForPlot:(nonnull CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndexRange:(NSRange __unused)indexRange -{ - NSUInteger plotIndex = [[self.graph allPlots] indexOfObject:plot]; - NSString *key = [NSString stringWithFormat:@"plotNumbers%lu", (unsigned long)plotIndex]; - - CPTDictionary *dict = [self valueForInputKey:key]; - - if ( !dict ) { - return nil; - } - - NSUInteger keyCount = dict.allKeys.count; - CPTMutableNumberArray *array = [NSMutableArray array]; - - if ( fieldEnum == CPTBarPlotFieldBarLocation ) { - // Calculate horizontal position of bar - nth bar index + barWidth*plotIndex + 0.5 - float xpos; - float plotCount = [self.graph allPlots].count; - - for ( NSUInteger i = 0; i < keyCount; i++ ) { - xpos = (float)i + (float)plotIndex / (plotCount); - [array addObject:[NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:@"%f", (double)xpos]]]; - } - } - else { - for ( NSUInteger i = 0; i < keyCount; i++ ) { - [array addObject:[NSDecimalNumber decimalNumberWithString:[dict[[NSString stringWithFormat:@"%lu", (unsigned long)i]] stringValue]]]; - } - } - - return array; -} - -@end diff --git a/QCPlugin/CPTPieChartPlugin.h b/QCPlugin/CPTPieChartPlugin.h deleted file mode 100644 index 844715ba9..000000000 --- a/QCPlugin/CPTPieChartPlugin.h +++ /dev/null @@ -1,14 +0,0 @@ -#import "CorePlotQCPlugin.h" -#import - -@interface CPTPieChartPlugIn : CorePlotQCPlugIn - -@property (readwrite, assign) double inputPieRadius; -@property (readwrite, assign) double inputSliceLabelOffset; -@property (readwrite, assign) double inputStartAngle; -@property (readwrite, assign) NSUInteger inputSliceDirection; -@property (readwrite, assign) double inputBorderWidth; -@property (readwrite, assign, nonnull) CGColorRef inputBorderColor; -@property (readwrite, assign, nonnull) CGColorRef inputLabelColor; - -@end diff --git a/QCPlugin/CPTPieChartPlugin.m b/QCPlugin/CPTPieChartPlugin.m deleted file mode 100644 index 7955a4d75..000000000 --- a/QCPlugin/CPTPieChartPlugin.m +++ /dev/null @@ -1,287 +0,0 @@ -#import "CPTPieChartPlugin.h" - -@implementation CPTPieChartPlugIn - -/* - * NOTE: It seems that QC plugins don't inherit dynamic input ports which is - * why all of the accessor declarations are duplicated here - */ - -/* - * Accessor for the output image - */ -@dynamic outputImage; - -/* - * Dynamic accessors for the static PlugIn inputs - */ -@dynamic inputPixelsWide, inputPixelsHigh; -@dynamic inputAxisLineWidth, inputAxisColor; -@dynamic inputPlotAreaColor, inputBorderColor, inputBorderWidth; -@dynamic inputLabelColor; - -/* - * Pie chart special accessors - */ -@dynamic inputPieRadius, inputSliceLabelOffset, inputStartAngle, inputSliceDirection; - -+(nonnull NSDictionary *)attributes -{ - return @{ - QCPlugInAttributeNameKey: @"Core Plot Pie Chart", - QCPlugInAttributeDescriptionKey: @"Pie chart" - }; -} - --(double)inputXMax -{ - return 1.0; -} - --(double)inputXMin -{ - return -1.0; -} - --(double)inputYMax -{ - return 1.0; -} - --(double)inputYMin -{ - return -1.0; -} - -// Pie charts only support one layer so we override the createViewController method (to hide the number of charts button) - --(nullable QCPlugInViewController *)createViewController -{ - return nil; -} - -+(nonnull CPTStringArray *)sortedPropertyPortKeys -{ - CPTStringArray *pieChartPropertyPortKeys = @[@"inputPieRadius", @"inputSliceLabelOffset", @"inputStartAngle", @"inputSliceDirection", @"inputBorderColor", @"inputBorderWidth"]; - - return [[super sortedPropertyPortKeys] arrayByAddingObjectsFromArray:pieChartPropertyPortKeys]; -} - -+(nullable CPTDictionary *)attributesForPropertyPortWithKey:(nullable NSString *)key -{ - // A few additional ports for the pie chart type ... - if ( [key isEqualToString:@"inputPieRadius"] ) { - return @{ - QCPortAttributeNameKey: @"Pie Radius", - QCPortAttributeMinimumValueKey: @0.0, - QCPortAttributeDefaultValueKey: @0.75 - }; - } - else if ( [key isEqualToString:@"inputSliceLabelOffset"] ) { - return @{ - QCPortAttributeNameKey: @"Label Offset", - QCPortAttributeDefaultValueKey: @20.0 - }; - } - else if ( [key isEqualToString:@"inputStartAngle"] ) { - return @{ - QCPortAttributeNameKey: @"Start Angle", - QCPortAttributeDefaultValueKey: @0.0 - }; - } - else if ( [key isEqualToString:@"inputSliceDirection"] ) { - return @{ - QCPortAttributeNameKey: @"Slice Direction", - QCPortAttributeMaximumValueKey: @1, - QCPortAttributeMenuItemsKey: @[@"Clockwise", @"Counter-Clockwise"], - QCPortAttributeDefaultValueKey: @0 - }; - } - else if ( [key isEqualToString:@"inputBorderWidth"] ) { - return @{ - QCPortAttributeNameKey: @"Border Width", - QCPortAttributeMinimumValueKey: @0.0, - QCPortAttributeDefaultValueKey: @1.0 - }; - } - else if ( [key isEqualToString:@"inputBorderColor"] ) { - CGColorRef grayColor = CGColorCreateGenericGray(0.0, 1.0); - CPTDictionary *result = @{ - QCPortAttributeNameKey: @"Border Color", - QCPortAttributeDefaultValueKey: (id)CFBridgingRelease(grayColor) - }; - return result; - } - else if ( [key isEqualToString:@"inputLabelColor"] ) { - CGColorRef grayColor = CGColorCreateGenericGray(1.0, 1.0); - CPTDictionary *result = @{ - QCPortAttributeNameKey: @"Label Color", - QCPortAttributeDefaultValueKey: (id)CFBridgingRelease(grayColor) - }; - return result; - } - else { - return [super attributesForPropertyPortWithKey:key]; - } -} - --(void)addPlotWithIndex:(NSUInteger)index -{ - if ( index == 0 ) { - [self addInputPortWithType:QCPortTypeStructure - forKey:[NSString stringWithFormat:@"plotNumbers%lu", (unsigned long)index] - withAttributes:@{ QCPortAttributeNameKey: [NSString stringWithFormat:@"Data Values %u", (unsigned)(index + 1)], - QCPortAttributeTypeKey: QCPortTypeStructure } - ]; - - [self addInputPortWithType:QCPortTypeStructure - forKey:[NSString stringWithFormat:@"plotLabels%lu", (unsigned long)index] - withAttributes:@{ QCPortAttributeNameKey: [NSString stringWithFormat:@"Data Labels %lu", (unsigned long)(index + 1)], - QCPortAttributeTypeKey: QCPortTypeStructure } - ]; - - // TODO: add support for used defined fill colors. As of now we use a single color - // multiplied against the 'default' pie chart colors - CGColorRef grayColor = CGColorCreateGenericGray(1.0, 1.0); - [self addInputPortWithType:QCPortTypeColor - forKey:[NSString stringWithFormat:@"plotFillColor%lu", (unsigned long)index] - withAttributes:@{ QCPortAttributeNameKey: [NSString stringWithFormat:@"Primary Fill Color %lu", (unsigned long)(index + 1)], - QCPortAttributeTypeKey: QCPortTypeColor, - QCPortAttributeDefaultValueKey: (id)CFBridgingRelease(grayColor) } - ]; - - // Add the new plot to the graph - CPTPieChart *pieChart = [[CPTPieChart alloc] init]; - pieChart.identifier = [NSString stringWithFormat:@"Pie Chart %lu", (unsigned long)(index + 1)]; - pieChart.dataSource = self; - - [self.graph addPlot:pieChart]; - } -} - -#pragma mark - -#pragma mark Graph configuration - --(void)createGraph -{ - if ( !self.graph ) { - // Create graph from theme - CPTTheme *theme = [CPTTheme themeNamed:kCPTPlainWhiteTheme]; - self.graph = (CPTXYGraph *)[theme newGraph]; - - self.graph.axisSet = nil; - } -} - --(BOOL)configureAxis -{ - // We use no axis for the pie chart - self.graph.axisSet = nil; - - self.graph.plotAreaFrame.plotArea.borderLineStyle = nil; - - return YES; -} - --(BOOL)configurePlots -{ - // Configure the pie chart - for ( CPTPieChart *pieChart in [self.graph allPlots] ) { - pieChart.plotArea.borderLineStyle = nil; - - pieChart.pieRadius = self.inputPieRadius * MIN(self.inputPixelsWide, self.inputPixelsHigh) / 2.0; - pieChart.labelOffset = self.inputSliceLabelOffset; - pieChart.startAngle = self.inputStartAngle * M_PI / 180.0; // QC typically works in degrees - pieChart.centerAnchor = CGPointMake(0.5, 0.5); - pieChart.sliceDirection = (self.inputSliceDirection == 0) ? CPTPieDirectionClockwise : CPTPieDirectionCounterClockwise; - - if ( self.inputBorderWidth > 0.0 ) { - CPTMutableLineStyle *borderLineStyle = [CPTMutableLineStyle lineStyle]; - borderLineStyle.lineWidth = self.inputBorderWidth; - borderLineStyle.lineColor = [CPTColor colorWithCGColor:self.inputBorderColor]; - borderLineStyle.lineCap = kCGLineCapSquare; - borderLineStyle.lineJoin = kCGLineJoinBevel; - pieChart.borderLineStyle = borderLineStyle; - } - else { - pieChart.borderLineStyle = nil; - } - - [pieChart reloadData]; - } - - return YES; -} - -#pragma mark - -#pragma mark Data source methods - --(NSUInteger)numberOfRecordsForPlot:(nonnull CPTPlot *)plot -{ - NSUInteger plotIndex = [[self.graph allPlots] indexOfObject:plot]; - NSString *key = [NSString stringWithFormat:@"plotNumbers%lu", (unsigned long)plotIndex]; - - return [[self valueForInputKey:key] count]; -} - --(nullable id)numberForPlot:(nonnull CPTPlot *)plot field:(NSUInteger __unused)fieldEnum recordIndex:(NSUInteger)index -{ - NSUInteger plotIndex = [[self.graph allPlots] indexOfObject:plot]; - NSString *key = [NSString stringWithFormat:@"plotNumbers%lu", (unsigned long)plotIndex]; - - CPTDictionary *dict = [self valueForInputKey:key]; - - if ( dict ) { - return [NSDecimalNumber decimalNumberWithString:[dict[[NSString stringWithFormat:@"%lu", (unsigned long)index]] stringValue]]; - } - else { - return nil; - } -} - --(nullable CPTFill *)sliceFillForPieChart:(nonnull CPTPieChart *__unused)pieChart recordIndex:(NSUInteger)index -{ - CGColorRef plotFillColor = [CPTPieChart defaultPieSliceColorForIndex:index].cgColor; - CGColorRef inputFillColor = (CGColorRef)[self areaFillColor:0]; - - const CGFloat *plotColorComponents = CGColorGetComponents(plotFillColor); - const CGFloat *inputColorComponents = CGColorGetComponents(inputFillColor); - - CGColorRef fillColor = CGColorCreateGenericRGB(plotColorComponents[0] * inputColorComponents[0], - plotColorComponents[1] * inputColorComponents[1], - plotColorComponents[2] * inputColorComponents[2], - plotColorComponents[3] * inputColorComponents[3]); - - CPTColor *fillCPColor = [CPTColor colorWithCGColor:fillColor]; - - CGColorRelease(fillColor); - - return [[CPTFill alloc] initWithColor:fillCPColor]; -} - --(nullable CPTTextLayer *)sliceLabelForPieChart:(nonnull CPTPieChart *)pieChart recordIndex:(NSUInteger)index -{ - NSUInteger plotIndex = [[self.graph allPlots] indexOfObject:pieChart]; - NSString *key = [NSString stringWithFormat:@"plotLabels%lu", (unsigned long)plotIndex]; - - CPTDictionary *dict = [self valueForInputKey:key]; - - if ( !dict ) { - return nil; - } - - NSString *label = dict[[NSString stringWithFormat:@"%lu", (unsigned long)index]]; - - CPTTextLayer *layer = [[CPTTextLayer alloc] initWithText:label]; - - [layer sizeToFit]; - - CPTMutableTextStyle *style = [CPTMutableTextStyle textStyle]; - - style.color = [CPTColor colorWithCGColor:self.inputLabelColor]; - layer.textStyle = style; - - return layer; -} - -@end diff --git a/QCPlugin/CPTScatterPlotPlugin.h b/QCPlugin/CPTScatterPlotPlugin.h deleted file mode 100644 index aaad42138..000000000 --- a/QCPlugin/CPTScatterPlotPlugin.h +++ /dev/null @@ -1,6 +0,0 @@ -#import "CorePlotQCPlugin.h" -#import - -@interface CPTScatterPlotPlugIn : CorePlotQCPlugIn - -@end diff --git a/QCPlugin/CPTScatterPlotPlugin.m b/QCPlugin/CPTScatterPlotPlugin.m deleted file mode 100644 index fe0b15d07..000000000 --- a/QCPlugin/CPTScatterPlotPlugin.m +++ /dev/null @@ -1,264 +0,0 @@ -#import "CPTScatterPlotPlugin.h" - -@implementation CPTScatterPlotPlugIn - -/* - * NOTE: It seems that QC plugins don't inherit dynamic input ports which is - * why all of the accessor declarations are duplicated here - */ - -/* - * Accessor for the output image - */ -@dynamic outputImage; - -/* - * Dynamic accessors for the static PlugIn inputs - */ -@dynamic inputPixelsWide, inputPixelsHigh; -@dynamic inputPlotAreaColor; -@dynamic inputAxisColor, inputAxisLineWidth, inputAxisMinorTickWidth, inputAxisMajorTickWidth, inputAxisMajorTickLength, inputAxisMinorTickLength; -@dynamic inputMajorGridLineWidth, inputMinorGridLineWidth; -@dynamic inputXMin, inputXMax, inputYMin, inputYMax; -@dynamic inputXMajorIntervals, inputYMajorIntervals, inputXMinorIntervals, inputYMinorIntervals; - -+(nonnull NSDictionary *)attributes -{ - return @{ - QCPlugInAttributeNameKey: @"Core Plot Scatter Plot", - QCPlugInAttributeDescriptionKey: @"Scatter plot" - }; -} - --(void)addPlotWithIndex:(NSUInteger)index -{ - // Create input ports for the new plot - - [self addInputPortWithType:QCPortTypeStructure - forKey:[NSString stringWithFormat:@"plotXNumbers%lu", (unsigned long)index] - withAttributes:@{ QCPortAttributeNameKey: [NSString stringWithFormat:@"X Values %lu", (unsigned long)(index + 1)], - QCPortAttributeTypeKey: QCPortTypeStructure } - ]; - - [self addInputPortWithType:QCPortTypeStructure - forKey:[NSString stringWithFormat:@"plotYNumbers%lu", (unsigned long)index] - withAttributes:@{ QCPortAttributeNameKey: [NSString stringWithFormat:@"Y Values %lu", (unsigned long)(index + 1)], - QCPortAttributeTypeKey: QCPortTypeStructure } - ]; - - CGColorRef lineColor = [self newDefaultColorForPlot:index alpha:1.0]; - - [self addInputPortWithType:QCPortTypeColor - forKey:[NSString stringWithFormat:@"plotDataLineColor%lu", (unsigned long)index] - withAttributes:@{ QCPortAttributeNameKey: [NSString stringWithFormat:@"Plot Line Color %lu", (unsigned long)(index + 1)], - QCPortAttributeTypeKey: QCPortTypeColor, - QCPortAttributeDefaultValueKey: (id)CFBridgingRelease(lineColor) } - ]; - - CGColorRef fillColor = [self newDefaultColorForPlot:index alpha:0.25]; - - [self addInputPortWithType:QCPortTypeColor - forKey:[NSString stringWithFormat:@"plotFillColor%lu", (unsigned long)index] - withAttributes:@{ QCPortAttributeNameKey: [NSString stringWithFormat:@"Plot Fill Color %lu", (unsigned long)(index + 1)], - QCPortAttributeTypeKey: QCPortTypeColor, - QCPortAttributeDefaultValueKey: (id)CFBridgingRelease(fillColor) } - ]; - - [self addInputPortWithType:QCPortTypeNumber - forKey:[NSString stringWithFormat:@"plotDataLineWidth%lu", (unsigned long)index] - withAttributes:@{ QCPortAttributeNameKey: [NSString stringWithFormat:@"Plot Line Width %lu", (unsigned long)(index + 1)], - QCPortAttributeTypeKey: QCPortTypeNumber, - QCPortAttributeDefaultValueKey: @1.0, - QCPortAttributeMinimumValueKey: @0.0 } - ]; - - [self addInputPortWithType:QCPortTypeIndex - forKey:[NSString stringWithFormat:@"plotDataSymbols%lu", (unsigned long)index] - withAttributes:@{ QCPortAttributeNameKey: [NSString stringWithFormat:@"Data Symbols %lu", (unsigned long)(index + 1)], - QCPortAttributeTypeKey: QCPortTypeIndex, - QCPortAttributeMenuItemsKey: @[@"Empty", @"Circle", @"Triangle", @"Square", @"Plus", @"Star", @"Diamond", @"Pentagon", @"Hexagon", @"Dash", @"Snow"], - QCPortAttributeDefaultValueKey: @0, - QCPortAttributeMinimumValueKey: @0, - QCPortAttributeMaximumValueKey: @10 } - ]; - - CGColorRef symbolColor = [self newDefaultColorForPlot:index alpha:0.25]; - - [self addInputPortWithType:QCPortTypeColor - forKey:[NSString stringWithFormat:@"plotDataSymbolColor%lu", (unsigned long)index] - withAttributes:@{ QCPortAttributeNameKey: [NSString stringWithFormat:@"Data Symbol Color %lu", (unsigned long)(index + 1)], - QCPortAttributeTypeKey: QCPortTypeColor, - QCPortAttributeDefaultValueKey: (id)CFBridgingRelease(symbolColor) } - ]; - - // Add the new plot to the graph - CPTScatterPlot *scatterPlot = [[CPTScatterPlot alloc] init]; - - scatterPlot.identifier = [NSString stringWithFormat:@"Data Source Plot %lu", (unsigned long)(index + 1)]; - - // Line Style - lineColor = [self newDefaultColorForPlot:index alpha:1.0]; - fillColor = [self newDefaultColorForPlot:index alpha:0.25]; - CPTMutableLineStyle *lineStyle = [CPTMutableLineStyle lineStyle]; - - lineStyle.lineWidth = 3.0; - lineStyle.lineColor = [CPTColor colorWithCGColor:lineColor]; - scatterPlot.dataLineStyle = lineStyle; - scatterPlot.areaFill = [CPTFill fillWithColor:[CPTColor colorWithCGColor:fillColor]]; - scatterPlot.dataSource = self; - [self.graph addPlot:scatterPlot]; - - CGColorRelease(lineColor); - CGColorRelease(fillColor); -} - --(void)removePlots:(NSUInteger)count -{ - // Clean up a deleted plot - CPTGraph *theGraph = self.graph; - - NSUInteger plotCount = self.numberOfPlots; - - for ( NSUInteger i = plotCount; i > plotCount - count; i-- ) { - [self removeInputPortForKey:[NSString stringWithFormat:@"plotXNumbers%lu", (unsigned long)(i - 1)]]; - [self removeInputPortForKey:[NSString stringWithFormat:@"plotYNumbers%lu", (unsigned long)(i - 1)]]; - [self removeInputPortForKey:[NSString stringWithFormat:@"plotDataLineColor%lu", (unsigned long)(i - 1)]]; - [self removeInputPortForKey:[NSString stringWithFormat:@"plotFillColor%lu", (unsigned long)(i - 1)]]; - [self removeInputPortForKey:[NSString stringWithFormat:@"plotDataLineWidth%lu", (unsigned long)(i - 1)]]; - [self removeInputPortForKey:[NSString stringWithFormat:@"plotDataSymbols%lu", (unsigned long)(i - 1)]]; - [self removeInputPortForKey:[NSString stringWithFormat:@"plotDataSymbolColor%lu", (unsigned long)(i - 1)]]; - - [theGraph removePlot:[theGraph allPlots].lastObject]; - } -} - --(nullable CPTPlotSymbol *)plotSymbol:(NSUInteger)index -{ - NSString *key = [NSString stringWithFormat:@"plotDataSymbols%lu", (unsigned long)index]; - NSUInteger value = [[self valueForInputKey:key] unsignedIntegerValue]; - - switch ( value ) { - case 1: - return [CPTPlotSymbol ellipsePlotSymbol]; - - case 2: - return [CPTPlotSymbol trianglePlotSymbol]; - - case 3: - return [CPTPlotSymbol rectanglePlotSymbol]; - - case 4: - return [CPTPlotSymbol plusPlotSymbol]; - - case 5: - return [CPTPlotSymbol starPlotSymbol]; - - case 6: - return [CPTPlotSymbol diamondPlotSymbol]; - - case 7: - return [CPTPlotSymbol pentagonPlotSymbol]; - - case 8: - return [CPTPlotSymbol hexagonPlotSymbol]; - - case 9: - return [CPTPlotSymbol dashPlotSymbol]; - - case 10: - return [CPTPlotSymbol snowPlotSymbol]; - - default: - return nil; - } -} - --(nonnull CGColorRef)dataSymbolColor:(NSUInteger)index -{ - NSString *key = [NSString stringWithFormat:@"plotDataSymbolColor%lu", (unsigned long)index]; - - return (__bridge CGColorRef)[self valueForInputKey:key]; -} - --(BOOL)configurePlots -{ - // Adjust the plots configuration using the QC input ports - CPTGraph *theGraph = self.graph; - - for ( CPTScatterPlot *plot in [theGraph allPlots] ) { - NSUInteger index = [[theGraph allPlots] indexOfObject:plot]; - - CPTMutableLineStyle *lineStyle = [CPTMutableLineStyle lineStyle]; - lineStyle.lineColor = [CPTColor colorWithCGColor:[self dataLineColor:index]]; - lineStyle.lineWidth = [self dataLineWidth:index]; - plot.dataLineStyle = lineStyle; - - lineStyle.lineColor = [CPTColor colorWithCGColor:[self dataSymbolColor:index]]; - plot.plotSymbol = [self plotSymbol:index]; - plot.plotSymbol.lineStyle = lineStyle; - plot.plotSymbol.fill = [CPTFill fillWithColor:[CPTColor colorWithCGColor:[self dataSymbolColor:index]]]; - plot.plotSymbol.size = CGSizeMake(10.0, 10.0); - CGColorRef fillColor = [self areaFillColor:index]; - if ( fillColor ) { - plot.areaFill = [CPTFill fillWithColor:[CPTColor colorWithCGColor:fillColor]]; - } - plot.areaBaseValue = @(MAX(self.inputYMin, MIN(self.inputYMax, 0.0))); - - [plot reloadData]; - } - return YES; -} - -#pragma mark - -#pragma mark Data source methods - --(NSUInteger)numberOfRecordsForPlot:(nonnull CPTPlot *)plot -{ - NSUInteger plotIndex = [[self.graph allPlots] indexOfObject:plot]; - NSString *xKey = [NSString stringWithFormat:@"plotXNumbers%lu", (unsigned long)plotIndex]; - NSString *yKey = [NSString stringWithFormat:@"plotYNumbers%lu", (unsigned long)plotIndex]; - - CPTDictionary *xVals = [self valueForInputKey:xKey]; - CPTDictionary *yVals = [self valueForInputKey:yKey]; - - if ( !xVals || !yVals ) { - return 0; - } - else if ( xVals.count != yVals.count ) { - return 0; - } - - return xVals.count; -} - --(nullable id)numberForPlot:(nonnull CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index -{ - NSUInteger plotIndex = [[self.graph allPlots] indexOfObject:plot]; - NSString *xKey = [NSString stringWithFormat:@"plotXNumbers%lu", (unsigned long)plotIndex]; - NSString *yKey = [NSString stringWithFormat:@"plotYNumbers%lu", (unsigned long)plotIndex]; - - CPTDictionary *xVals = [self valueForInputKey:xKey]; - CPTDictionary *yVals = [self valueForInputKey:yKey]; - - if ( !xVals || !yVals ) { - return nil; - } - else if ( xVals.count != yVals.count ) { - return nil; - } - - CPTDictionary *dict = (fieldEnum == CPTScatterPlotFieldX) ? xVals : yVals; - - NSString *dictionaryKey = [NSString stringWithFormat:@"%lu", (unsigned long)index]; - - NSNumber *number = dict[dictionaryKey]; - - if ( number == nil ) { - NSLog(@"No value for key: %@", dictionaryKey); - NSLog(@"Dict: %@", dict); - } - - return number; -} - -@end diff --git a/QCPlugin/Compositions/Bar Chart.qtz b/QCPlugin/Compositions/Bar Chart.qtz deleted file mode 100644 index d3366575d8dc39d39e7867d80cd0bcb49674ae50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41178 zcmeHwd0dp$_waqzK|mN~bpb|EQDhr7QACkJ5EYPpQJ?_^7#wDXnE@3;K@m)}(sE5r zFtw~q(>7a7Q?oS9HElQBv&Ht+-gBR4o@Lbf*5}i!{PDwr=kDj;d+xdCoO|xMY=c&EjnHbDQl&8&Z5ETks?yEYRW#rfm8nW)tI?^< zxbCq0iCi6JO8>~nSXE@KS``-&p^A-;RYkx*b!;5`iinI;okU91r%dS^uCLQp>r~|? zOQp`D(i$sO)*3B9d#l>GnX9 zq2c^Or;(h}8KL~Q#f25CnudKyC>!i%%yS`ZD|8&-6F^|+*FdB(MP^c{Lkb_M(4x%S-~*3UxHwi3NR6UVEEEH4eu0G}ZSMU*K$aR!Ud+F-Ehjnyh{F2lqM{@KS^lz_$&=klyJtxcC#VbEHw zXVG|+h$f&Uq(RB33H^+IXI#pZ9_EH}SQ|CEN)C=`0Frfjg~@2tRbWH})b|u~WH#6^ zvfwOvMiU@%VS`m?Ni$ZN9z+vSI?6>ekQP-VGio@4Qcx-yizcBoG#O1n5xKZPF79#8 zOx>IUZlRP#mT&`6X117S&nZ)%1kk2tD$TTu)n?IY>uht(y2{p1sWu|9t*y-?BPYGV zh8I(^o`X$mnSY26 zFx=d#P)Dy8ZQ`va4fOX*)oC+^K zIml_SUh|L_4`Dug;dn@Os7f5{n>nI(NI6IxL9Ic0 z)IX0KY97Q|WRehMCNiKpWE5cz9RHWJ?iO_CIs~Z)1hJrg5`w7tK3S1XhR97f3z6+x zo{Hb{RE6@9Zv;?hA#VxPNFLPLXilK89c3zS6{tn+?e8f^ptO@P?GIS@p3*C*DqZQ~LbT3+oR-x5s4O)xVq5IH!v;l2I_oGdy z3w5K-=mGQydK5j5odIuj*p2p}C(x5+%082H`sx~6S+c&WN@vj-D|Gg%qO-Im6K9)&YsAt^nL0v(^+ro z@s;hD*AXS9K7>kO{9Y>L*+Mz^htPg>7`;4$AI5BsEiO~`BNi~BMFuUiEDyk;O} zJ$ePbgkDAE`FxM^v$d7_2CD=G9_M3dufw>=fIN8tc0t|@&qX*XPuC0QD7=2P?r5bMqn zBta20!4NE=Ae@L^gfsWQOGy=%Zr1|YL$IFHx$VN!2!vT{00B%|Sk@V{ELyYKo~Nir zYfYMC264Lp2m+?XN}@1HZ_pccT8k1XNfCOYH$eX~;f7af+Jveq$RU!mQ-nLAB>E78 z%9LIe4OW|}E{)UDVBr}H^dOXb=o_^ldE3QtKK3lpm+&Aw2`|E%@FDsU0|-ANpiJp~ z4Xw!=F^m{a1mog?4h4pa1#nuBL)r+3&`2@oX}}@CBqEeJhu4i=Jwk*L@x% zNFb634UtTw5^2N~Vk(hAWD?VeY$BJ)BMOKjqFBx`N&5&fju=lQ5)2&)0xSp567X#So28Ri)QGOgnj-SKLKChj zZ%usW>qGhe@-b_%Ao@O z)WDu9pGRail zezWu%eFpQ*ssttI;P&?7ER7HnKwk==H_Aa@c8g&Y0J{qS%a8+hcMkz<1prne2kf36 z0@zAeniHj^xk_4^t1(JD3nRN0@{O1Bt&{TI=a6p$bo9K`(T&9Yz<#Ap>-{cp59D6 zNIXV7E^!=>0mtzWs=-sVUE(+%CLSRkC3c7eN~BHKe+YZYPGT2PIGr0%jm2axQ^O|4 z@sQbY+@dvB8+2vGQr_J}`t|7rC(&}^32A$bz;1@toK_;(6%a3#g`qgKLV;V$>P<9cZ7_*%yiZ!~x=^f7015;*bE! z^B9ya;$;DlBg9$a`E$f8ut&ZMH2WxV3|7EvAUik_X9(vR+6Lg%VS}tl&P;}F(^_Mi zm7}dQ8({C`j(e?k-IE4{i5c3;MlI-XDzRj75_)hPPY-ZV0z>#ZagsPioc<>emnoxX za@|%n>MEk)G#O50hnJOA;JnF1(Ap!vVtrPr+g7t2XUT2 z#7^Quz9tP%HoxJ%NnAWdyhXfCyhFTq{p5m(a4kL*;cmSv_5z3A7ejni9}pkn=u2WW z4t*qsgu(v=h)O*sKKy3+DGd5z;)|2O`Fw^8d@dH~Aw=~{;tD!*iuejP_OFR=igluP zu6Ve1Y{ZE1q1rJKH}h0wu+%JU=)hb^+B{*1zXOnAelf`36F(FU*Ny`?IWTYDDJOtw zZxx^v0Q(65yTk+bGx5uGK1*bKk=~?_#2WC11UE7z z_($pqvLD%>96$~v{YZZ@fK-u#$iZYFIfNWa4kLre;p7OBMG!O+Vg&lf+6JkJUB4hj z*mVi=h#M;qd0!cRzU4A2N|CX2hsrlKnN!z@Fps7`edYouueuv`J%aeqOdNp z3!u*=CXu5!K7ouQH8Sa$98JcP3FLTk0;WHbk_(5%ia3Qs#2)Fi@G8+mKlP#pJY}!B&vjn7GRU%jqG2hq7^Tpk}LQv=N@tmCr^_1lB;m#E5(vHv|0@Dnbwk6 zWks$Nqj6}x7!o?N5ylWs?(G^D@_up$xrco60df=BMLs}2Z0|puoM)na_5j&UZbq+` zrfM6&7DH>~Y@XHAc{PdM-as;qts%GYQ?OMUif!bBnEIQy+2A3+tk z7mtc1&wwe{X0)0ZOFl;KBzKXZ6A}>UIN1#_*Gm!j_;@GTEk$51D?)za42%f58>NAb z45w)+%huU#P`bz`gn_8Xrwv=kr^vnJH{^HZkK$aBPlMroH~CDdCQUvv|C1s->$vis zBM+0WlE=Eq=SgwAUjVpw-{7DIj+cai#tZXBexUbD1ATyei9ARi5{K(=%pXs~NG?a4 z$(P9^MSvW$cG%eLBB;F71qj5yjC`ouaTF?uLU$aE?=rA z$T!FfUF7Q`_*laQ;u}`rk#OK|*AS7X$us0x^4vcGzl%ICG;d$3ZwgJnb)%*FwtT6+ zgWH7zOrhQP$oI*M=Xe@O z-4p1HR0oCwjP<05-CT}~T~se&1a<+iJGN0SR3H^fO`>k2DyeD-yE$79%9X=zsyF2e z0t%c)gCz#KLb*{&sxRe9c>~%~?jqXaP#=eoheOEAA><>51HX->A|5|*-YyI6#j$(K&iTQaDbpG*9mN-dWN7$VL?;cizx#&hw7x3 zZKdicBW0q@R6S*}uloN;*GpMBT`y%5`8%qCYNTdSvqhv5@#*@Hf28ZBny9(d?Nl>0 zkD5=lP_5JgY9ZA|Euz|~4r(!V2em{Zj&|!aG2;Jpy_{)R7qwK_e0W_ibtkogT1Bm< z9-|(oo}iwlo~8CtFHwi7BNPZ4oLM7v7pRRSdoJp3QEfym2O1)(m#BLnpJbRt-7Do= z$>kF_6bJf9Ork*E20K-1E%kt$h^?d6QyZyGR5vD6_la19LmNa4!lC;e(z+Z%o5h^+ zs<%+vsE4SBsYh|~tquhq6bs`<>NV;O>H_uFX6iU~ zmV(j{f9u%Z>Z~~&dawz-b9K5oege% z62YmEx~aFRZv~*=0iXpFDe7J7W9ri`>OB!ytU#jP=YfSQDgv+{P?x9=Daq32dKkr+ zF6tAZabAH$eI_*h`3)3E)E6=Z5_K7q>S=nH5sF{gcE zXdg_Z&+b4a7SjVkVy64y3gJSA-Q9-RYR{mTv_By99#JVp2hfA*AUe34 zR?&m(h{((70#-W8+8*-v=QML9k8mdUg9IDq3x0gmyv4vq=1Y+;kM>yqgtdLliI&hDl)bh5Bgr-Lq8 zP^ED~>;?NV6B;ts*v3lT>@GUX4k_Mf()n}&;Y1hGMR3Rm6-?EZ!-b=p%gf+)p0w#l*x z0qENtS;oaQXtH{O1tVPnXfLU4=t^2o8)-`y4fnw8{34M;SJBmUs(6Vm60Y3RH8=Ch zEw_f++fU&`VY-%8TXTS5uxe1t&Q-K|AVc$-&1x4gQPPp;bMT32V*fU}r zZKlEgN<-IYD(i0+=CJ&tZg20Vt@LaGMQrpe+HjI?pc_jn3_7iG0^C^xvv*xDFnE@_ zB;=mspdz802p9P0bc&u!RMNN8&9WOX=nG zz4U4U)MeLFtvl(vfNI@MgE7?2yvp+TluCeh#kJH4Zc5#1k|e;k@>(Las)rDvHI77R zExm!>L_g3)uahlRAVT-isd%Zbzh$InBYnS!zXItIBP0sbB?B8MOgB$qHs2ZwvxR<8 znE$OJg@MCiPSZ+12SzHgo8C)5 z>p)k8z|&B}bKB_W=>znu^lS84`aJ!W(76|`B{lo#7lG95@0q0LB}{7IvINfx(FbAf z7Spes0`@YUK19EaDgI$m>cF8RVyNfPq@&l;q+>mVCLM>-eOemb6Wr*Y;Yas%`V=0| zlj3;dkaXd#=Zx+-Kxmmk(PH|I9x}QYfQ(40O8QOuUHT&ZQ5XG|jC2CUf19WH@7ywq z{~rCmNNN6t;(s6m8z}xIp5lLaYbgH5w4mXnKe?Xbf9^=}zmQY>%QUuEvonhVQT!UF z3h1vu@xP(Jr+=b<>!Pp7`V3R`Ek9M?-Lk3rfd-pRL43B$1!9D>IsYsJ8>Z?PeyV=G zHBQb~7-~=0d=W;%Ec{dT@f>)7|!?|NY;9fVl zt&ON!PjLQqdx58GlL4F`RYP#yec-Eit|oPwNpG|zR8}@`Sjb%>n{@k&{Kpz|B3H_Z zccNx8a)mZ-XkAFQHt-cX8BI3bRPf{tNo{RzqC?;b7K;}90tP_%&y}m73-_#|u$NyJ zoC)(FtX|W1LS-d?16o(9;vLa)ZL;OqH<*=cv8_!7VB#z73371Z8@t}ckT-8?UH1EP zty@v+oro*WaCfaapa2B!0yZ9t3bKu^f**pwJseN8LkmJJU-hu zwO0Jm$`Gy3qS@^$9$wM*D43Gpux!XQZKaBLY+y5~%5|Kta4SG3_zkyvgyphGwRilv zyLA(4y$^u?yV^%M)UK_lFx8nV!O@cn{1VzBhIX)@Z>j3r|J1e?60L`BR5jK)0He(G zCO|cqh>{pLq+#5dKqg#aF0_GXopP;JcMjAN*mqGEcrof`luTd7o9V~+F)ESzpyNy* zY>^Ib(5D$1s?&_Tvp~(X+$61KngN`zbFnf9J&XtA$#^k+3OMYvM$VY5ZPbDm0KBi4 zMb0oo5gvuDlFE?rfg-+QktlgC$>9;xpBcamWIT&`zdyOqhkX32EHW4OM+BMihuQ+f z+SKyeBrPN}2yzV;b4AN@MLoa_VM3Wm<`p}MV}>#zjORIK7!$+{CloM}Bk)-p6Ab^4 zB%Di)c4s|l*f*H9z^I#rJq+Z-O2oZZx(n&N3q)&KA8JN;uye268ogD;XHtRh#>$2Y z9fWn@#7t{YY4P&1s=zmz0hY}yy{$%Nw(1%xO)BgU%2emvi?7w{931ZKT-9LY+;gjD z>9jMmxeWX;54Y-cm2y`E5n(Z^kt*yYD6GO{<&q(ca|PpH!Z(+}syFiGN2r2TP!M}C zkeV9q+^eh%)_Fq(R`#g)`BsPAC^qtju~9dSjUJ(LuG8v`Dz1LMlPWyJTra=_o83>l zDnSJUt>XQT4<8Zl+zY!~z#iPg?4a0laMX#*;E){o_sLOzpB#N%vU9Hr?3W4RVVnRK zu+}YtfI0&IKuo%JHV%gh5zf8v(jKmdxQKX_UNu(5m50xfBS$#*0_PFebZ5H01XmtB z9A;u9{2wgN(RGuq9~m_wm>V-ZE{^p?{;PUo{<5B^e^t+@zpN+vU)7^l%PMMyzKK3I z_{qg6nyFm=AMVRH@MbUHEw9^&9roM%TKf^LS+EI#DpVqb0$B-T)XacW9BB?`BJ#~z za4!p9r+N_d%Mb@WxD~^sRy?(5qL^r=4+HK_mDg?saEc(?DNZx7ggem7QOp?T$aFKe zS#XXMPcm`L=n{c2;+@2*q~B8pGV#n^RiO^+z&>#&JzjOLLjqnPvt&01CbP`<7aylC8`F zW+4L?Z7RDiVa8~VjqMLT=IaJjzb6KZS%|OWwD`56j3}CySxVho_imNIejx#W4!#_zL`18e8xT^uuA8cPnb{7GH)&&(qJ_>X1t`%Ae9CF?a1?OA%Y=()%;)UG%*nTz zF91uD2zTZ(s74gbmvG@w$$Z6p&3waLVZLV@2`6?nJ&$Q**Rvb28FY!+WSCQJGTNUQ zQ!1@G;8H;^kzi?8JO4VBQbH^!~`& z*oF(tPs~x~XRNRVsD8n(W--4qzcE*tKUs?H&HAzaEO0@d*yo=GyTJxuxG5I?T`FLi zY!+}h4>+5Hy#|+q|8LtIh?QqfGlF4)UK=?6nYC*-!GvO*z-Fqj3Ph6F#UgPzAUFYJ z2?TC>G%R@w)_`E7)ydK<%PLrBQON;Ef%Rx7%M|9AEqZVVE-6#E6uA!p)(P!pd$CL& z$6D}c&wYxOu`ZCqm1Xkzmo9j}3H-g z@<6fVm=Ls9Ir?g&*1)$8KG!Q|!mzWRB5lPXZ- zL>4F>M;zEe>|k~%n~c3ff{%Le9j^sNMm0<}8^}-go9r+)h#k(3V1wC_YzXr%8_I^U z;jEgCVq@4*>}YljJC;piHTgU{$p0yVCkTNl&n~wA6~gu*&@^ybS3YmCo!vI*jPMpj zH9s!JJSoC`jga?_jdTb_JA`5#LUHmC;f$+_mq)P)A{}GLvE$i9c7lwK3Gem^Td|k~ z^>Di#0iM@-ko5U0(YhbCw-;hZ$QaFq*-mvl9NfrG%2aOs5BFyBdR6>&57=RK^1smo ze2iKrfgV8U!enmC7S5)CzD!}W*aEhcwRE#n*>wAvKM8&| zz?(^#= zW(!$(T2E&4#ul+48)(?#o7rEESjrw611I<6*cmJsrfJxcn|b=ik4k&{18f_Op0T*Qe|9&jqY{phY8s0X>JlsW)G{Yya*oc~mcV^>b_$c& z1tN)s5YMf$?GB9DVtEc0uHW0mO}3L=$}VFi9g&#t`VZWagZhYFA=PsadoR0^T_u&` z<^+C;V2B@G>>6=fWgAcgyOx)6*4@l))h_1)$N6qgL*(Ssb87TPQ0!Yl(&bM9?9q0C8{9H&&W+Yhii*j?-k z>?u$zf!f)LeGKXVnXH?AoP9>Zr`_xx_6hds>AAYuHg1k#ZE;=B;Y>n!-t|fLsnTSN zwps}%`^_N2&2qvPyuY_K6lu>08q z>`UxHyV-=spf}F|1A%J((56hyi{umVJMZvJ9*2)97E>L!-xvWyt!0+#a=CsX96K#! z4^M{|)(qt)tp(nu5*q`?_y{qXJ%Ifc;^Q*V9@)vOm<1hTUj^JbT%s|7XpB`jT6j7_ zOlFU<2SFY`Y`+)7!6PPO!Gb-`9^vtcJ9Uyua*40AM|jCw7(KBpHx9?yS07|gvzOS* z?9YlpiU`GIh45AqdxrghJ%X7bB`C(gT82H#o(KDmaQ5O!_8j{LoYQbv?9eY*0N_S| zy}-W7zQw-HzRSMHOZvI|PR_%btuyPiHW|$LUJLtugRAF^Mt2TozVEc+4r`6+5BHH`h3#a;$k2QP!{XCj&EQ5{@Qa2qZ1wz%WpigSsl7awS` zKZsF1s`u?A*Lyg(m#s*l`@bku?CuNfuXtIozp=lwe_-<`_A2|Q0x8@S0~LOXfrN{~ zpJ^s9I)-0 zF}0yWU#U%nL9NuCRS>MJf@FIsCM2hXD!?hvpp|46;w+><)TP_D>u&Km?>v1A_;T4#QC{=sj^KdKBt(6WB{KFfr7lhG-+%S_H(?zMd3nq(pnc*9FojA{A+GAW!6lypa#` zMg35JMU)~&5wA#4j8{xhXmA&!MPCs(6f3fQicyL<#c0JCvCksLT>pVfjuoFD!J%vqIXZ0D4$Pnlo)@cwq)IVzh8Y_) zahsa1vKXH`@(Nq0lZqTgF3)Fk`X0Qp^2CL74j)D-3KWHGDC8?rOjndB$`o2fIlr}V z@BIRoEC`O=4QzWOxT0c*1v|qbR4NbgS_zI7QAiqLr=E4?_P1w2E?~=OvGJzQoIc=RoCwWs^@NQfQ~B$E2<(4! zheQ%cos;zzxRe3-hwo{uUgMw?{Hxm~2V3pxlc_D&t54S5w`oIbHq|;B7>7*dm7d)B zUgFaJCw*^SMJ?o1E8o=qMX%MA8tbmf7kXZ&|HUOA(3T6AeE!`9p8JihgNWAgMC&SE z1uVZKl#r?e+YGQPv0}|PclUwQf?LY`rLU?1TNeOWpea^axpQij z9u)bN+{GZR3gEApSq>`fc6g(4#}|@#Kw1)x&gTKi zriUc9UO}yKWc!Lo@Dd!TfnyJDpj1|P0JIV`FsgF66;V+Gq)2LmtDbAsnhA+UVVB!-Rp3#Grd0O z^-Zs<&aTe=oP(TWoRgfVIhQ)mbe`kf;k?qh+j*z+3(m)!-*o=e`9~MZrH@O1OQ=h{ z%Osb4mr56lON+~$F6&*kyFBf3*yXg#MVGH!{&aPA^>Phz9qpRvn&F!7TJ1X9^-kAS zu3fHsTo1WkaJ}ey$@NNavbR_7z}_Q!kL^9NcXscJ-m`n((R)?zZM}E)-rxIp@6UVx z;pXP%4A@kGt)2d)@84+h=ayyF0n}a}Rcpcc1EB>^{@| zcK18n*ST+Vf7<;O_cz@?asOHAu2d=2$`oaRvPL;axkR~D`IPdA@`Cbne{O`oHE-tO~BU!t#j-{E~@`zH6D-nXW&rEgQ;+xsr++tK%qzU%t#==)UP6MaAG z`>ThC$4HN4j~N~|k2xL-JUTq?_E_n$(POj6BObdv_IjM~IOFk-#|Iu?czomWi^o+@ zg{P~hm*-&5D9=RCbkAbXYEPSItLF;O)t(P}?(*F0`I6@`FAp!3m)a}AE7>c7ddwU0Y$9YfnF7Y;dw|cMe-s1hF_W|$I-XD5@ z?ftFypFRV9M)-{J$@D4psqiuR*nH;tEcRLJv(aa>&m%rB`keH6)8}iS?|uI8C4F6d zmA?Ia{e6RcLwsX=C;Mjl7W$U>R{75KwfWBRUEtf{d$;cf-|fD8eE0WD>^G%fVLx5J z5Bpu|ceQ_W|0Vrb5AYrkI3Rk!=mFyfOc^j^fObID0PBF30e22`9q2bOcA#e9w1LM5 zzBTaj!0-HMzg~X*{Q~_${9^pZ`AzXF@T>Kk<+sG|F27BFoBekBJ>hr2?}Xneze|2s z{C@OT_$&SU`49FV=^y4F??29eihrely??v^a{rC~oBbd3f5!iS|55)l{_g~M1`G}e z4u}s(3YZd*8&Dn46fi$valo>GRRQ-0JP`0`z~ceW1{?{v5b$omrGU$-nX1{UR@G9~ z>Op-5`41X7D0>qM!$a_OB5BX&%JJe&SYN&c>?9kMq(}oreEgw2_=;K3Q8hU2vM?-%crWocs zY{alJ!=?s{!}|^&FkCf!#PHbR zn&AhApBVo3i0LD0Ml_80K9~r03tkqyF8JZ#oxx889|%4jd_MS{;Ln498rd+iedPTk z9~t>f$f%Iyki3u?A$1{^kcA;jLso`t4A~a4CuD!f;gB~%-VFI9+Bdj2-GORwVC2VQfhOq9i-C@s#9SS=h_D0yJVPA&*7_JES4IdFc zCVWbGN%(Eyb>Xwa?+9NLzAOBN@Dt%@!Y_vZ5Wz;cL=21=8W9#TDk3o=J)$(i6wwl~ zFyiir)e#Rw?26bEaVX-|h_@m>jQBF*$A~}Gq}pBGR~?{^QzxjC)H&)IYMt7so~2%_ zUanrJzF+;I`cd_h>V4{i>etk#)NiRjR9{hFjl4bbj>uI}o>7CMBBMq{B}e5&6-QM> zEsfd`wIga@)ay|fqrQ!%qCKOBM#n~vj!ucri>`_`MYl!Y5xpXMb@Zm_EzvuocSk=L zy+8WZ==Y*OjQ%qE+vwk7P)x5Fw-}$8fiXj4B4eh+ymtv2^o{jw=_KVo>WB(ZCJj!E~->6liHjjEF zZfIO=-1xZMxT3i7xav4_TtnQvxP@^`Nv$X*KuCs29FCLw`1J1iXo*TWkE`3DxKOVwSVe8shd)tNZp&dFZD?3$w|{Dl}xId zbbiuDlfFv3Ev+tXUfRO6yVEwL?MT~~b|~#!+IwkVrd^%POm>?bFgbW~=;SezHIt`J z)=jRT{PpDTC;u^}*A(w5fm6b!?40t#l%rG5Pc4{QIkjQx?5TH5y=Us0beD9`^r7kM z^l|B#>DlQO={4zZr(aC}D*d|*B7@9u&ls2ynh~3kl#!Y-H6tTqdWIpRK4V@+XU6)B zM>Af?IFa#w#-)sJGJeTqGY4d@&D@x|Ept!i{%M+N)25Y7dwbev(|(=yN0wWbM^<~* zU0Iv5c4h6!I+XQl_PA_K_O$H0?ELJCY+H77_JZt=?0d7fWIvMqO!ndI)7c+p|B%Dx z_~Z=FiOq@6nUs^4Q<+nr)1FJ`_R8&>8;~23J34nj zb>8~CEqUAXcIU_BC*^16AJ2a)|8oA<1*m{2m|f6Xu%cjd!PbJO3Z5&BD2ypgDoib$ zRG3#-RcI=-70xMaFI-)?uJGZ)okf8~Aw>yA8AVw|6swCT7au8pt@u>&8^!OJ%r9A7vbLnV!!m($S?Ur3Izs zrTS81>HN};(tAs{ls;OzxAdjb*GoSu{kaU4Da!hl&#CBL(Z3?7BBEkc#nFmW6_+Z0 ztfVXZRQgp8u8gRRtlVFDzVegGA9XG|m2Qk~nyywiM|Y=gy>6H8sP28;*Sf1!zE#0h zOvZh~+e@#$LNKH)5n40*S#G164jGD5Vnwt8WrkaH{ zi)+@_bk{swv!~|yngcaQYhJIpSo3+!cQwE38NIXKL+`5}q#vda*GKCo>NE5O`rGt+ zIMSb`zg<6H-=<%tU!h;AU#H)!e^CF7{(%0d{*3+|{RjH*^uO0KwQjXOwF7I1)&|!` z)yCCMs7K}8patW8nO-5h9<)@!<~kE3~LN)4I2#)8Fm=<8IBlE8s0Qq zs%xlgteaQYUUyI3!Mam*AJu(lB#pg|-o^n&m2r@9h*53KH`W;!8rK@TjoXZm7#}r0 zX?(``s_}#=$&_P)d+4Tlrn^ilO`A-+Oi!B*nl6|=HhpJCW)HK!InW$pR-4C|$D1da z)6E&?9CNO@#9V2vH!m>XWxm(E*1XRAlKEBhN%IBsMe}FoAI*Q%yVU#E`_&JtA6Xw= zKe|4tKDB;YeO`TOeMNmueSLjneMkM>^=s?9>mRP)S^tD3&5~^?vly&i*1^_M*0I(! zYq7P$YOua%{l-Sv`q~0*(Y6V;6kCC9hV6vyecMM3MGfT*riPY=MGZ?D?rDr`oY*+I z@$JUX8n4cxW;xATH*4Fh=VtAnb$E91oYJNVP3cWVO-)VhO)Huum<#X4~ z-7t5@+}*biyFIAcsoAS}L~~+ue)IHZLvus(yylMPyPH=wZ*1P&{7Cat%?F#`Y5t)3 zljcvGzihrb&v~BrynuOO^ES=fGVjTG`{o^)KW={Ne8c?a`FGA=JAdo^UGra?|L*+H z=l|ByyT!jHq$Qyxt);l7s%2KoqLx)H+gkRtywY;KT7o1-3{(`R;{IcNcLd8PYg?$$GU$|r8 za|>Tt_|?Ln+FaT^+k)FhwI#O|wbisWv@K}sXuG>@W!uKK&25jg?P}ZGwy*6-+edBR zwf($^Si~-JU*x&SZ_(gIL5m_5#Vi`LNV90_qP#_)E&6=XkL`+fm-fK+koM8-iS4QF z8SOdkGupN7we6<%*&VJO{W=DBjPFS9Nbkt*sOT_sG<3}C=;&D5v9e=b$L5X)J9c$E z*|D$VV8_{xcRN1m_@?8RC2N*!S#o&Ei6w6>`DV!|ENpymLk8>dy6@TROLPZd)3^G<9k2Qr*(prKY8`mkqsh@Lk@#g$zmZ Oe--uoU*Y%i^ZyT)4;wH5 diff --git a/QCPlugin/Compositions/Layers.qtz b/QCPlugin/Compositions/Layers.qtz deleted file mode 100644 index 3362856074d01c96d5e05d32c118e206874c2fed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52576 zcmeHw2Uu0d*7oea0hJ@5U_%rYR6weth$vve0#XH3@BoLR)N=r_fTDoLl0?AG_vcf-=ehVKXHQ?#)~xl;%$k(^>?~8E zr{^U^AQDlCMhs#RhuR@)rcJU=mu}SO7-r@fXT%wdrmVc&r2IT%;fTUQV^&I0p}~}_ zvoWM)73LY^vJ5i~#z|SZX?Zh~inEM`Mf&WC`oh#qgDJt7msco!$9ee;^za&Z4)Mrh zQnDdepOS4jk1UZDYJ=KNPBWNNjam7HP)bZLl$xw_3dzeYH0EWSoD3y~)FK?>l$Y*Q zm}zjz$9a3ijTG`o*7fxA_xExduY!6_xrm}W3K>2uSZOqqJ1`XaP|4YUESzb*1W0m(Y+tlaz}ARV_sA=Lj0 zvO^tEM`Vv2P$$$GbwOQGZ`235AXn6Pag!xZy(NM3fH5%P%^N=S}KPd6C~ zlM|+x-O;J~Y{O);BRIS0!Km?4R3RtlpzXGfD=P{XTtwZFBkGQvP!H4-Iip^&`t1Bn zeQbu&V91S0$u2TP8x3jBL3fex=Pdpph-v;)K3;fz9sa9TA_vvqsdPLV`K263DXkys zkKB;ED(*AC=g)^cor8{yJcsjk4%$%}F%3R&TMdxg$`g4ZUo;R6LjGtl8Zs#i_d&8( ztne!i0dM33EfoWOE3~>39%vr1VYmmx2!6;jS!ahM7!9VP?82(4j-p5cB zh=viDV@-wnLPKn7w%%mAgo4m;Gy(;q5EP1Lqo2@kj8(GEHoqtZ=0~O>O`u~UkYt*i znwOhvNX3H@hQFO0BciAf4;CCHHa8Cjb9|A>U<}Jm&)behq6sJlO+k8;f$~w&MKlVH zMnlmU6o$s4amX_UCy2o{j-FwdHA$E($=*|ihDgpg=9SD!_BscojgQdf(^jTJqd}ij zI4j?fR(_kRAcj{|RM>_`PbezH6Dl-IpiOU_g(@oAghy-Ke0X$3%5HWqLf=$XDa3}O2s9DdB}N0!D1`Zt>=P?ccpgOpZBZyX zwpb5CPadTay5dJgtd%(7obcpRlN<)~H5PRcDU3stm7zQd#iIn2s0?L1dhwq;?B$OL z-ONW-k2dCd2-96%k*U!3NytHIdtb3m$!MChG+`fQdy7oV2{SDZA-1FR@N0RHz!rvmez!HZOTj;*#eSuWtEbAay3{sF3O{l3IdhIZMk?gzj;X znow1BL)RD0L32?lDns+od{mAWpoORcRiY}i2rWiWpe1N2T85URC(%>rX|w{ZMAfJU ztwO8O8nhOzL$#<5tw$TsMzjfSM)jxxZ9$D_H`;@qK}XQD=y~)aI*DFEuc0^4Tj(8h z4qZT(V9k6NT}SVs_t6dXA^He?f<8r`q1)&SbO(KfzDD1myXaf=9r_;KM?at+rz$H^ zvahGw09J2Wed1YL}P)6jh#nnjjyw%V)4UqQ54{SMBolQ%BSiq9NH!L$a5b zI+-R%9}WG!nk;=Zwei-_<*liJm!<-mEWNbFX@@HCcLVsPxiM>8o-1 zXlVA)ey)^BtiRk62rqcT&YC>DlHnbh>K*eY$+LdU^D>9}Uu;gO?3T^x$dB&V%RV@ypL+CJSPS&*_W5~+LEKCl~N>4W!4Y{cXb5_2Q z`l%yJ@_&1RMj!pREZ^K_L4deA0>1LnhNdra=a)Os>wfvUP7nQt5d{gj1t7+ zWL+nrD5bH4uWXQY6QG_g8d6oG*U`)93`&U;YZMoyPs=JYDOBKgeiI$nw2O+!x6uLU z)3cM+J*u;h7KT{104TNb^KH4CS;(gr)p4(_54^}PhX|1Q>Yob{ea?uTX8Hp zu6ST-4x?M@^n;bqx6!NUb95H87h$9X>r-cB81ss9(}cmH#5;vfKzr^}Ja9Q*K72H* zh(CocLQ|-ciM6?@JPdj-HrC4htPraaC#oShoLW`KR~%11G?p(1VU#CA~7q?kXx9Q zo(1Zf&ORjUp%ZdyWQfr7qq4F=t-DN+1VzvUL$Cx#@Pq|nDg0+OHC+fdBSB^t%;yQh za$%PXj9H%z3YapnOjBkW_4)bcI0>10Q}C>OP`4)mL%_UPN5ltbWoP9Y^hO=hkuvo} zTcG|`q8*;4VI$JhA%@J(&J)&zj%ZKxNY-^oEix76<%9_+4OX79LJvy0ZC0@!G;gyy zF8W>~YzSMzj_5#iBHnP(LGt$u?4S;FlJ?B}$4AHe_N3F0425S53i zdC*_TDE=IZBphVH9J@Npng(`t)r2`}TuyRKb)|X|y@)=9E71=pch)56EhoTXE}F2u z8drZg<^>o-Fp>y&;xe8$W_X0~AOeUfMABAb0O3h^5#EFk;d?=VGsXaqjX+~12L=mv zN)D{Oz9~7d_wF0@V^jK`>tlLi~KRhzKNti4Y=`7)^u`G#>gH} z;0R&@3Y$DJtHh9PN*)7plN<=KucG~`*jP>k@Jsvq>eF5z#~> z5Ht!z4pAf!%K|aWpw6fm-BT4s#0iN;v`D0(4~QQ{#4E(N%rP8FRoWIf_*oP|Ojefu zf%U{x^XMZcL*4f7C6b8@Vg`{zR1!;xCy5nA4Y8J3Pi!U{h$d+oOe4~XQ5S*r=!q2I zimAXC;U9=~xkWiC24h5e1nz$U6igC^0{#qvHMQ^@kwzFM%YGQhizF=LB17=Nk+RQ( z>_;fsXNlS4q|=4y=Y_eLP2e^+Gi#;QHEfd@L*$AqGLM+8<`4OVktigJi4vS)fjpP6 z%OuYu>?+cP&D6MN$uZSg&ml^Qc|VGA^_3OT0KC{@G~RB!=W zdl3qO23brzk$@r65DeH(i3|xBS{`dA5xTjL3fE}gQ!Lg=0zrFLRV7A-NG^%=Wk7nd zn)Kz5nMR4Qr+~09O9sZ7n)%G6wghqR^Cvg;sTkP@#} ziC3qIw*e}8RjKGkViSm8qsI%JR2+6saT=x37PvW+-IG!sX+5Zj4;#50P-u@5AU9Viob(N0C;*hTCn_7Hnz z1|{>R2S22>WIu6$h@UJpXoxW{KiLZwF+qlmg6$T4Zbr5tIZ=swkeKjb_@r}a1#wte z9z8KmLhP?6j>rjNJ@afJjuBU+Y97b(*#)R3Y+e!160Z=a>xt*&>JcZPde5WGsRCW& z48~kTwzvYlpj7rn;w9oF@$%oPY&~&GBIN`orJi_IBIGsV5^>@(@j9%LXMktFLA(hw z;4RP{c;X^qIYnOtk~%Dqsi6^}uxy$#^JYftbMmuc?G(0rO=j#V1eA#>`m|y_;5TVl zvp5GecpG;QNKleM_zrQ7I8R*oI}|7Dd}j#Nb}BZc`ofMf?8v$%C#T|H(bd;-j-`ds zP*`Nl6+HqhOD!dpNNlo6ks$*3BF_%uDuIao#I?APFx=VVg8MFU^E`2#c#n9Wxba}; zf{M^`JS5<1eIVBYyFQd%Vpbm!pJ4BgWpC{IRCY;?e+!sO0cJkpVtE@HeKB$897sN& z;{;#G30etL{ffAUE}kd8hK2nb;%=frM&}Y;^+P@T2D$5pcs|Nqm7Yqmu%Lr*p`dwE z6MqLJL;qruzbEb|xax-iodTJUZkH3tG?xlgN`(CggncX$_7m~*WHE|&Km8DWgs$XK zEhTNuqzUD!i2D_Ydr2bhw^l&VA23sjm6`G)tR$|8brB!EEnz&OK0(EvGy zr25MqkmTX&em&V=l2b$-pL8d^NI!BQ8BRu$G2|pNkxU{}NCTNcPM3zZhepRI2LNk; zf1reuo_GW7lwvD_D-H&N`GFMUElIlH+lLk(vafZVx3Nv>#VbQIGuvj2Wt#*@ft%R_6AWW@xlL@Vau*n*=o1CIdvZ*j& zmC2Z_QM<`$N<6(LUMf^nt#*@Xk5^5Vd4s5Elj;9X(IzunDB5J!PnK!aW^$fL?0kjTa&iH=kW_%m2Wgaj>Pe8# z@hQ(Spn_vXnOrOt{lr5QWpat6D1*97F2yW)nNsd@@=5Y3@@bh5%cVT{ArC82LnT*= zOHMVpR?sKO8gezxe3hIMyVl4qG158`Lsn$1?2TRPWtUWujnIa$b8kji$W7#4@(|hF zNNy(U$wqRQx&E+o9)VskJIDrd3p$fDT3-ZbG4#2@nP;!bB1~dFZ=f8F%_N(|F4(Fx z#Wr#~xr5xPG{wI@l_&Qm?ER*ayHP5x#U453ML5c}1+5{5lKaU0eA!z`;O*R0{ z1&RmWKHg6@C>~hK@>K6QgCIg4L}747MnGDUqYUOVDD~uFsUZsRZbK7!ggj2(CBGwo zko$@}3Wx6-$YV(%Vd|Fow;bVF?aX_QJWZY<-)taHkaBxJ4|E@V$VLrpFG&rJC+3S{ zL%*an^hxq%@)h!w++2Tg{P6;`stEcK&@(Ovao_t3pA0u3#zF`25gbjZ)LPTC5FOrwY z%YTRbdh)7Nym_j=D;0hHVN>-z^;CTymkS%1Qn@$C56PS4M}MbWx%Y&t;bw=??i7_Erw-W7pS8Byrz}d|s;2Jy-@+qT5FD+t#s&e6JOd zHj?*S2VFnH;Dd8D5|8_d{GH+{%Leji@)v1ZE0_9!Mgsy*Q42*nRS+4s{$OTanuAVf{LV~@sJxYPafda2pe9BM9AN|jObsQFYmwSZbkRZx{w6}5<3Og%v@QJACo z^qK7OU#wR++Eq_2lNKKl>!qHgR#K~}HPk-p8R{@~lzNtWfqI!bO}$2eq9Gh>q@DuU zNIB0%JuSmV)C%AsGQ31pLpicQ9Gzz)E=CCt0uvAIROsasR`SyaqX33 zN)5GNt1v944m@UwMk4GW7Q|FoFLkJu5Y`NYsj*(_NGl=in3k_ErjEA~!k&XkrW~=N zPAHS?c^I(DWPB0gDMzfRmy~!XHSu17imI_*>eS;^CS~3rV!hO>{|?!qUT=Z*QfD4- z4Wvo;CM?0qp(^Sv>I!v@y1s>ao4Q27?HEZ121toID_}AdAT?%eggQr^r!G(zWrid3 zng>55hW=2jm%6H60>vXz6ks;E^f810AvI9%QQt~LzYj!9N2I6^sL!a|_0$cSSPURh zABx1n6%~otkEoBSPblT2&4V<`KK0Zssc;cMqCS_3{^B735_LxfAW>gpmi(1c?$^{e z)LrV{-)SUyScw1<^_{rnd{6x>U_;b>>PMXU4{~1E^^@!pBmF}ChP{84y|L?e*`<_$ z)%XL{pF$ZlqODYG4^7Y%&Cnce0f}i+PK;f&+)UWTYQlJp%TkW1&bkfVj@HpOv>i^~ zR+GS5PJqKScmb`!3+N7VOmoN3_Lxau5|wy-zL<8Py8t^`Om_v1neK!$gbNvFa~pE0 zt%G0EjxeAP$)FV7o$g7y(ES={C%T7uAc}grG%B?^IqgjMqI=VQ4eJrP8+P$FBU-zIe%2 z4^uzdUl^u?@h}BTI+64s+5SUo8>RuE&)yP|ixhh3W7B8pVL(T-L`Tr$qhkb2TUaE` zSTY?2$(FXk;35zm zL60?G#Li7Kl+@FaW=iR?u$lFGBOOgA(#dp+G<{;QLczA^k{m#ydX@5>ohn9K6)?JVltgXkG()o5iXus!J;r#Yy;sw zPlRsXqr!*mq{}9%9t6Ay&L*ooB%-HjMaIQ6AX%;91S6da!(M@H=rlTu&ZUj@G~5F- z%ZtP)I-Sm-N6VM!yy40%o%txQ+zNB3s_H!66sD)s%3W}J2Az#B=b7*P31$MOM5kgy zTiCXfYC;jw5EE{^)zfgkL9Q7wjLxUw{8b2D5TPr0R3nEKCv{a-18t&9q#;sB&!n@@ z(M5Fe)YNQ)K6eD%S%YKm1`9awtW-&gJxc?T(6b3E_{X28=MZW1T)I?sr470(lCZ*y zQJIdClFx^3ha27!w=1VB=qKo<4fFzfp_v)3vIp3QVYu9*w8!`p3q4Hqx8q@hh<& z*+bzl^(wM~!!(E-X3OK@FirG!ssFdi90oRr1*DbUp=BdG)of%Jy<1@&Qi8qERbYBU zVjTPEgY+@_xh?d5`T+gRLs>@wNKHFi@DYKFpmO>UeVA^hkH~FkmYM*>P{f=95TleG zM-XfTxknuXdmPmWQr->par#*eUy&R~A&2L-(I@DW^cngs`VxJW{#vTs^DSA;3-pV? zYF=uctmb9RYT&YjC<@W9K;JE<*-CiQ z+t9j4mDW8gwC+W*b>E@St2QdtvXP&n7-0VTK5{T5e2HG-=#mG zZ_=OE)7Mq36FB~RBFBIKv2pwx^oKI1`3sK!k&0~K_#cZL|C7hV@js&_gpSwX5etA4y^&9=C)Xcv>&{Yi5bQMFWx{4tg>Vd9e7`%SL@h4F5 z;j$?O$DbIM;TX6l!&tV8H4Jbu2E)*V0w+hbC+q$}#fyH>YOdw%yu6%I`cyE44YqRy zo4TTz2r$9Rg+~kKSP+=k?N?Djq^~Cg`??lj?K&?Tj2~ryv$hUw_09q zsK>T|fe`U?)oQ3h^=b-R`DMYFut>t1wKgNt(!?9khBPP95Uo%qn}ThFnS>H6Dx82! ze5E~5O)h+6)4Q1R(#_?|e|xTcD=L2y3CS7ZuC+iEkRV*Z#%+;GR?zA2M-aG%K|~eA zz(j4uWLaWTM9ZyJE4SnJ*}1tq_4jgyD1R1}RIS{#vSJS$C4XpIw~6{RC(*D$VV+Zp zL9iEY0_r5&;bx1lLKG$UMSmVF-;B!Zfat%MPj_J&FksvR~41Afc@)i}-jd5hUGl~@|=b#UDIw$DF2R|ZoPyK^4 z?;-Z8)$`$jxu%&>b>%^1@2V;bxXT}cn`x5p|77U^AkznHh?f~#VHpxT!iDL_3}VJH ziOkoybzH^PX<+&@VBX1$@Gx$SJLAE4O^z{?6pCm6%@-O(tJ;ETTV?>`nG|Z&XE?!# zGzx~n9wiKoNvo=g!9OzH2$UwqhZ!i+=gasx54RIo4vNs3{&)LKu`$kv7Kuias;c6p z&uaj|ZHDus6>wB~DJloMT@8#sGng613}=FwP-YY}hEZWWZ!>P1n;6UxCV&~r1SX1B zr$Vx`@~1?B`3-}>gp<9*VLbwy%Li+N!dw|;%*zqXQ|5xHJX5kUBSnSkff0MS`@sZF z219k(DS3J$nD|oG{9()pVl0E73JA*u(|P%MU}jUWF)Bwvr3XCh%0Ph=*aV1zn4G2vnUbHDD5BU;@qyTsWCYJ5Tkd`Y_X&6kIdCTr=!Sl{Xt&RRz}* zLInZ)Rpy6Ow+yC$2@&g-$>d*PvY6@6<1?5XCO1j!@jS5Hf^D=Umwm+SF`8JxbRv@doXGV_HFdpBeJtHa=|2Cp%94WA}~prnP<$J4RKY$Q*!jV@Jz~h z{Vd>BQ^psiW~J#zVp^sG4q)D%mSu@sbUt34L>@2R(>YVQ=DL;&0}#E zjyJ#+y4(zr!-*ReLg!!`HsFstque>@nE2iYb}f{<2D>UXu0kg}s!^iSZ%OreN6_ z9yT#oqE(Hk1_DdsRXpq{%Cdlbe1_S`YywWdIU27nx(;~MfncRwdBpiv&+NLuG%#D3 zMy83`#_Wg_`p`@K@fLr4aKmhs*$Q@P&UiA)1<6*`L>tNS1mLOCG}{AD@*IZ)MKHDY zGN)R+uEXqO4lqZUW6ZP63FZY{#r^Vu9PEPon&z`w%t7W5bC_wC+e02i4}Rd3M`ar? z*mYb^hF#Cerzx=Oc{u~@dQmCyCFUgaGV_X@^e=8l{#X0_ulCuBwNGg-zRKKUg03>J zG1!2cjyc1;AuM@sGIh+`%z5~K9rG#kSv;-@w#qg+BrM7RD-{M0Kvc{F8*VuelqP#l z$;Y;3g{9DtmWZvtiAxoKjycP`Bd$?`DP%me&dC$$GIN2s$XsGBGglzqRpwphJ>~=E zL*}N)_~ON%1aYAeOe|w@Ti0G-lES99xkxcaa5fNWUi+?TCi8WT>wS%@4ht@#^rGD4 z<#`?5s+g&f5+oQ{Ze-O&>denEC@&kiV!psf#uxxzBN(s=7s-67()D)!gAzCSATp-t zdRAbE+gRu%XfXmV^dAW0CFORoY((gO`3H&phhRLVf|j9KM)SL1LjC?0!1qe|@P&ff zJ%0Yf0KUx|0JSK83n^>nT?FJxXE9Si4w3?U0LMJAwCH)-F!u{ae^BY!I6z(chIF#@Ye>ScPW0v5ssHHV|71 zh4%{J9Ra;b;M+XgU98Nzcx7OFvd(NTwl~`cK$9!13+u}EW8GK})|2&SeONy>fE@~t zP=e+Es6_K`g8A3nZ6QSh<}R)yiDK_1iV!I7AB{PDw!gYZSa*$UfX3yeb_wtX>#O!+ z2g<@DJBamX2eU)uHSaGzfFxlZA}m`Kl3GpP2gDAWy~YDW>d)bL8&CC;B0GW|%}!ur z*vtktm<=%>k08M$iP~NQ;E-%6N)>QOb|gDWZjDE|%_m4A_>D5bCJb82j$y;tvFtc` zBxAG6LkJ5t(;nS9MX^e;P9wswaEh2%%qD^e z!{WCySmnxhgs$NqT#Eiugki*Cf;XuC1L1{&7v-c{O(C*LxYHKGPHj!|`Cj=FMZ#dQ zMYT~F7#5y709ws9)z}m;g~$q4)vQ_*_2ui)B&CJZfO-MemZ&$t$bo-s2Btn8GgP3y z72(Y5QTYaF{RrJ3|KKowh(x6bsybm9o3}_Yl=z>D@0RR zJBOXima=8+Ja#@?&MsgVvK4G4Tg5J77qd^WOW3E`6>K%Tie1BQU^lV#>=w3(-O6rf zcd)zIJ?uXA0Q(GklzpCkkv%CrsTB_ymOZ7vU2tVMY`T)j|zp+0(6P6|BN?I~^w;Oa?L zjTh*Y8$^nrFA=|Rdr4pV5~zWcqfC*i(Qu9BoLa<{8(7LfBuVmCH7CyH!R8d&M+y?! zM}*z6zmN$q5V{PnKuZ;YZW+6reUb%m`yEj`k_A8ILwbr^PQJ3eU~rn%Al~e1S;N9b ztW}Cw$JVlS?0V;*mqn93vXu1T2Tr+BE*ZNv%aO3F!CZ2qOfUF~BI`Ei7tBwFgO^xM z1xdzfcdH|?inRb72Jmdl#0QlM9AXc%&Fm35j!dBPp-RpkQ&JvhpJkt8Psr3N3B=aM z=MI#D*%zFL_YwmzQ7<_UH^;&*xQ}4QjM-P%Q|xK>RXOQHa+R`gRg2xvCm0-<+#hD6|vStFMX&e$=wjy4u>hax1cYg&6d&)%ta{_-xb$*g%nFr8hvGIHWm{ z!M@3!Wxr&9WfHkfSj~M4`V=(eCiWfnGW#C;5qnFPtl4wydG-Q(e#%&Vu^#TWWaSqo zdq>YIfw$x%VY#@-UP{*W#V;^74|B7J*EVhq)7fX_FZ`*K1#JA-U&#ks)~(IhF^7Czt4Wa-UI^m zB_e@0*bn8I^@s`7mxu)FOVk8@%znat963Xz?o;+N6?NJF;8c3Z2_;4DB4%iN^)~xC zdpmNbNYfYWoyS7c%&Mv@g4SCvows4XV!vj;VZUR)XYaFcmQ}hZVTO#f9%>_~>|ORA z`z?FUeDo#;513>GOKoxlTNBE{ne81z4~wv$Q(xY#rmujcXM zkxG+tLzVp*qWuEVW~rhjNYR?u-#7&i#C0=6M4Thn zU2cR&$y!=ML|hN9C+E!dk_YYo2Sn7s_2K%;>A7-Zhzo?Mm{|6QF zf%DZE8~rCyA!*_Vb8+msD_jT{N?3Cv@zDfs6gH#8jpkzD|FMK+l7#hy;q4#Oq+G*H zd{7|{u32E=UuP|aM-&y}2$$K9+4n)RzRitc&vRkiIBo(L!9{Y>v8lqdt-wyk%IpL) z7sX}-c7@9VICf3c#EfztK1@^|A&kA4+@AV#KtIb7PNppU;GL655nyEcLZ?Fg3ciLcX%u$s|e0(%}FmX^`^hE&)nbDCk8H4|R4 zHwiZo(hTreHf)@kv%`tSgU~pdQ{k+9gK3Cma&k%@oZr;vx;Z5$3wAm1huA*&OS}^z z1m@^73}&yQRBS5%JBqWwY=A!7(lQ)woS5s82{#~$a#QgEXQ^ysMiD**X>!sV4NwJr zntNVu_AC#}egiBm<+!ev7E;kzxrldjQhVr2T6h3V)G|hbn*~k+M2i$UnT19%p5kp5 z68kz?=IFC>ozw+m@l=y7R<&Aq=u6}bar=TQsfjSdO-1)iwL=(A!Xtz5DmkH*#DHtx080xY7I+K#XO6za)yvIEObLPbeL|tv%~dle7q0UNsm;OWDn1a5 z%fodHu#|JcZ4JJ-q5(?&pumZ~`VzG-v^vD~@)Z8m0f65@fV&(5IpIoX0nPY6jB6Hz zdImUUISmaIYXjf?`}ei9fF~C%O3dXu^>=c`sw3Dw#^m(v=bAOZ+-MdpDn2=DDozC1 zO9AF8ivb3hKCaL+xIuvwDGp?c$rPIw)O~YnVQ)8chj=LY2#KXAVg=<+QF;H1l%-;C z39m_tvGH?~t!l>sZaMV;oCOYkE8vL4XXCj<_TG8nK0qP|<}X^$f^IJm4ew@Sm9oWV z0XN0G55P_3lDLfm_WwUX`?+Lp8kf#xa9P|8E{8L5Mchno7B`2R%aw8SxN>eGSII5n z7IRN>HQZ`$EpT^1p0je<2tETE>?jZZINYx?ku!^e3 z2k>%7*xMpSN4aBAI5zt__XhVCca}THUEnTqm$~;i{3H{1MrP*N z^`^%4w#N02#&urp60zA!!bw;_XKQg*SCnPrDtC>0m%A?a>tB38%2tofe%KP5y~*9; zzU02+fz^J*ef$^L>?aa7`zfd1Sb22Z-~nv*HupLA1$RdtcmH45>{r}fna>E=?AIbT z`^}?d!wbYhSD zRl;WB@$%NA3~901KU!k5_*HZG#}j~V@^FB^HDj|p)dHL4X*2aKrk*iV|6gpjwPLfp z#lOI2c}tAV@*N3F4c5wA@ojl)zCCZtcYx02+sKRoyI?0&In2ZBWRVw#*=WM-)F>;r zy){BCX4c3%s8AKYQ)^-*BC65?PT{+l;S|0r-;JO8KZR3xN4`7XoA1NB^8I)>-kbO3 z2lD>>5I%qpY#Emy zsvgM#BEko0(vDC^;6pTFBh|=-n0Sm*fiQk7KaL+Sr;rO*?D44DhzASeW+aJ^;3x8t zeAM4f8KZ_%_&7CDe7urt0-wlF=BKF0kh)5m+H!%dX)64mgj1Fi<=6gWIE9~vMSTsN z!t41oeimO2rl-0AoWf%>CKyiP4SW`#!x!+%OWqhx;nU4<3ZKElQRE(f0jHGo^YQR} z{3q!6>1H5>pTTF#Q|(bo@DBr0_*^rP!sqe%s#)>qRHuglDZJ4Pr0^zQL60MJj}J)U zi_Jg^Ka(#}wbP@c=s_TbpUuzV=kld|89$Gouc(@j7D(Y2@EiG8`OEw@N!VDZ0aEx1 zei6Sx08;o$aZ*1NNZ}XrOZa8{ll;^CO1_$3#nJcjd2(LDNUHh zxQhU!@HO)3b)0y$vS6&?*YfN5TDf2U;sa8)b|8h{)B;H1H}hNhUHmir=?1=@Z}`_h z3ctk+r0|V=liUc8l1H@!QuuBBc76xHQyJa=^LvmD{BC}q21w!e2tW$I_fb~yVL%GM zUjR~gc-!zX04e-I{uuup|B^I;4{3lD{xAko_@e-%@XdJQD0e9SF99k1aWjy@Kiisw zJ`IqT8Do=89tZcB1^A2$N`THsaff3xzR>uP?R{ z%>wSUJ>nyUH{;9vVX`%)qh|a9xkvw#4>!3kvaK=vz)Mj zc_-JjyrPtBgL`T=+(pOstPNn+xUX>V`#&@kzp1=4`9=Bb2yCMZ$^W*Ycp1=d9OF~`9I<(ptJCl1V}q_H_* z(BLlIXX7{>+)U~R*Jg%tBjJq4JKS~d6YeX1I)D{b{8Ri|iw+jgS)8%BYVn!H_m-rk z&a#_jf6Kv^qby@AQ!Mk~tm;zBb(UK#4_ThHe8=(w%P%c|vEr;cSUFpHSp`{*w@S3i zv?{i$uv%%g*=n!Vb5>`pu2_9)^=%ufO}jRo+VpP|*e0}1RGY*$Guq5;v$9QXo2E8L z+q~Z9{WhPrxz*-=TefYdwk~Z4v>o0ytZiJ|jJ9*zE^k}gc30a&ZBMm5-}dWvL_3>y zo!U9I^J*8=ZeqJB?TXtiYPYssQ@iGNFSonc?!9(jwfo7sjdeF`59=W7iPlNhdDio- zms@YN-evuq^;^~-Sl_Y!O=qj?rSsE`)lJrA>q>P`>UQd$)xD{EU-z}{&-S|Zw(Wbh z@7sQT`?KvoY=6gwv9Yyrvl(JD#wOV&+oss2%x1pL6E;h2mfLK!dB)~hn+rCd+x%f` zZ#%$tjO{er65CSSD%+*DHMZ+)8*I1P?zcT``@HQ1+pD%WZ9lX9#`b&L-|a{{D?6QC zC%Zm&gX}`>BJGmwX4sY3Robn#tFzl}ci8TEyI1Yr>0sZXR|mfiBRY)f5Y-`}!}Jbw zIxOo@-J!O_t`0ABc&Eel4qtZoy`x3P&K>)A9NKYWM}5b_j+Gr(cihqOc*oNnuXMcK z@w<*c*i-gS_U`t>?4#{d>@)05_9gc7?3dYZuy3&6X20M575hu}AJ~6q|C0mZz&cnv z*g14_=;_ek!P8-|L%2hEhoduuE{4h%VE*7`jaFGP6rXmz7<0U3+vL(sgv#n6Br$ z-spO_>yO>|Zf(0cc5~_G*==yQ;BFD!CU?v2HmBQ@-Kx7acH7qNP`6{AfkN11V_cZj(?fH4nADlVoHqPyxJ3Fs)-s-%s zSKnR(dj<76+Ur!W%e_ACb+^~=y)Ap&_wLo(ulJDN<9f&Rp4vOTcV6%2-mmt)+WYg~ zzx1){)3uL#pJ9C>`b_In&}TuP>OPHq4);0T=SrV<``mJ&UD~_!ba8QUa~bS1)+NFv z#$~EYuFFi9WiBgRYF#$DYzR7*F`_Ah7Q$MDkO}`cWHul@s?@+&E{Z9A0((k=~H~W3v@7Mmb z`Y-9frT_l^C)@(u#<(T8O>--7D|TDt_O#nNw+6ReZb#itxt(#l?)HJ(9k;t~zq?zy zw{>@PcXs!64|E^p9^oGEKG{9feTI99`wI8f?se|F-4DAz@BXU$JMK5#zi|J~{U;B? zgY~fXaPa8n(Z{2|hp)#7k0_7H9+@6R9u*!>d(?Yu^*G}3qQ~nV=RK}_eCct|Ezkh)7vw^Gt@KE zGsV;7S>d_Jv&OT|bGzqZ&!e8Nd%o>?!}GT1J~qoQQ=cDvIbR3gzP>|z1AWK(CiqVGHTf>~UGBTux6ZfG zcZcsYzDImt^gZSKw(rNjw|(#V{^0wkAMMxH&&IEdpOar-zkz-ce(`>KzYqOB_4~r_ zJHOusG6QV}IuCRm=r=HIVBElrfh7Yg2d*BtcHoYI%>!Q@_~yWC13w%1&A^`q5rf(d zvLDoAQ0<^?gZBIP^&jFN;vern)j!>ThJT^|EdK@mi~OJVU**5i|DgX-|Cjtv`=9l{ z=>NX|NB(#G@B05dm>q0A*k*9W;1z>whqM{eX-J2OZeHb~+YM5?Vr(u1D`3!qz*bBqn3>p^{A7lvnBu?}$x=^Nr55)cv^GCCwCWKu|4NNLD| zkVPSDL+V3zh8zreF66C{%ON*HJ_-3M^7_p)sLTLsLR$ zgyx6N3M~s=6uK;QRp`#peW6D~PlTQheIxW@=(W&~LT`oM4gGzj%}D!^T}SpF=`nK8 z$m1j582Qe~_eXv)^4C#qMs*wIF)CYe{c{K9%$hV_{qee%?L?uKeMrA~mM3qNXMJ
whn2s^dF}^W@F~Kq8 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 -#import - -@interface CorePlotQCPlugIn : QCPlugIn - -@property (readwrite, strong, nullable) CPTGraph *graph; - -@property (readwrite, strong, nonnull) id outputImage; - -@property (readwrite, assign) NSUInteger numberOfPlots; - -@property (readwrite, assign) NSUInteger inputPixelsWide; -@property (readwrite, assign) NSUInteger inputPixelsHigh; - -@property (readwrite, assign, nonnull) CGColorRef inputPlotAreaColor; - -@property (readwrite, assign, nonnull) CGColorRef inputAxisColor; -@property (readwrite, assign) double inputAxisLineWidth; -@property (readwrite, assign) double inputAxisMajorTickWidth; -@property (readwrite, assign) double inputAxisMinorTickWidth; -@property (readwrite, assign) double inputAxisMajorTickLength; -@property (readwrite, assign) double inputAxisMinorTickLength; -@property (readwrite, assign) double inputMajorGridLineWidth; -@property (readwrite, assign) double inputMinorGridLineWidth; - -@property (readwrite, assign) NSUInteger inputXMajorIntervals; -@property (readwrite, assign) NSUInteger inputYMajorIntervals; -@property (readwrite, assign) NSUInteger inputXMinorIntervals; -@property (readwrite, assign) NSUInteger inputYMinorIntervals; - -@property (readwrite, assign) double inputXMin; -@property (readwrite, assign) double inputXMax; -@property (readwrite, assign) double inputYMin; -@property (readwrite, assign) double inputYMax; - --(void)createGraph; --(void)addPlots:(NSUInteger)count; --(void)addPlotWithIndex:(NSUInteger)index; --(void)removePlots:(NSUInteger)count; --(BOOL)configureGraph; --(BOOL)configurePlots; --(BOOL)configureAxis; - --(NSUInteger)numberOfRecordsForPlot:(nonnull CPTPlot *)plot; --(nonnull CGColorRef)newDefaultColorForPlot:(NSUInteger)index alpha:(CGFloat)alpha; - --(void)freeResources; - --(nonnull CGColorRef)dataLineColor:(NSUInteger)index; --(CGFloat)dataLineWidth:(NSUInteger)index; --(nullable CGColorRef)areaFillColor:(NSUInteger)index; --(nullable CGImageRef)newAreaFillImage:(NSUInteger)index; - -@end diff --git a/QCPlugin/CorePlotQCPlugin.m b/QCPlugin/CorePlotQCPlugin.m deleted file mode 100644 index 62f303356..000000000 --- a/QCPlugin/CorePlotQCPlugin.m +++ /dev/null @@ -1,855 +0,0 @@ -#import "CorePlotQCPlugin.h" -#import - -#define kQCPlugIn_Name @"CorePlotQCPlugIn" -#define kQCPlugIn_Description @"CorePlotQCPlugIn base plugin." - -#pragma mark - - -@interface CorePlotQCPlugIn() - -@property (nonatomic, readwrite, strong, nullable) NSMutableData *imageData; -@property (nonatomic, readwrite, assign, nullable) CGContextRef bitmapContext; -@property (nonatomic, readwrite, strong, nullable) id imageProvider; - -void drawErrorText(CGContextRef __nonnull context, CGRect rect); - -@end - -#pragma mark - - -// Draws the string "ERROR" in the given context in big red letters -void drawErrorText(CGContextRef __nonnull context, CGRect rect) -{ - CGContextSaveGState(context); - - CGFloat w = rect.size.width; - CGFloat h = rect.size.height; - - CGContextSelectFont(context, "Verdana", h / 4, kCGEncodingMacRoman); - CGContextSetTextDrawingMode(context, kCGTextFillStroke); - - CGContextSetRGBFillColor(context, 1, 0, 0, 0.5); - CGContextSetRGBStrokeColor(context, 0, 0, 0, 1); - - CGContextSetTextMatrix(context, CGAffineTransformIdentity); - - // Compute the width of the text - CGPoint r0 = CGContextGetTextPosition(context); - - CGContextSetTextDrawingMode(context, kCGTextInvisible); - CGContextShowText(context, "ERROR", 5); // 10 - CGPoint r1 = CGContextGetTextPosition(context); - - CGFloat width = r1.x - r0.x; - CGFloat height = h / 3; - - CGFloat x = rect.origin.x + w / 2.0 - width / 2.0; - CGFloat y = rect.origin.y + h / 2.0 - height / 2.0; - - CGContextSetTextDrawingMode(context, kCGTextFillStroke); - CGContextShowTextAtPoint(context, x, y, "ERROR", 5); - - CGContextRestoreGState(context); -} - -#pragma mark - - -@implementation CorePlotQCPlugIn - -@synthesize graph; -@synthesize imageData; -@synthesize bitmapContext; -@synthesize imageProvider; - -// TODO: Make the port accessors dynamic, that way certain inputs can be removed based on settings and subclasses won't need the @dynamic declarations - -/* - * Accessor for the output image - */ -@dynamic outputImage; - -/* - * Dynamic accessors for the static PlugIn inputs - */ -@dynamic inputPixelsWide, inputPixelsHigh; -@dynamic inputPlotAreaColor; -@dynamic inputAxisColor, inputAxisLineWidth, inputAxisMinorTickWidth, inputAxisMajorTickWidth, inputAxisMajorTickLength, inputAxisMinorTickLength; -@dynamic inputMajorGridLineWidth, inputMinorGridLineWidth; -@dynamic inputXMin, inputXMax, inputYMin, inputYMax; -@dynamic inputXMajorIntervals, inputYMajorIntervals, inputXMinorIntervals, inputYMinorIntervals; - -/* - * Synthesized accessors for internal PlugIn settings - */ -@synthesize numberOfPlots; - -+(nonnull NSDictionary *)attributes -{ - /* - * Return a dictionary of attributes describing the plug-in (QCPlugInAttributeNameKey, QCPlugInAttributeDescriptionKey...). - */ - - return @{ - QCPlugInAttributeNameKey: kQCPlugIn_Name, - QCPlugInAttributeDescriptionKey: kQCPlugIn_Description - }; -} - -+(QCPlugInExecutionMode)executionMode -{ - /* - * Return the execution mode of the plug-in: kQCPlugInExecutionModeProvider, kQCPlugInExecutionModeProcessor, or kQCPlugInExecutionModeConsumer. - */ - - return kQCPlugInExecutionModeProcessor; -} - -+(QCPlugInTimeMode)timeMode -{ - /* - * Return the time dependency mode of the plug-in: kQCPlugInTimeModeNone, kQCPlugInTimeModeIdle or kQCPlugInTimeModeTimeBase. - */ - - return kQCPlugInTimeModeNone; -} - --(nonnull instancetype)init -{ - if ((self = [super init])) { - /* - * Allocate any permanent resource required by the plug-in. - */ - - [self createGraph]; - - self.numberOfPlots = 1; - - imageData = nil; - imageProvider = nil; - bitmapContext = NULL; - } - - return self; -} - --(void)dealloc -{ - [self freeResources]; -} - --(void)freeImageResources -{ - self.bitmapContext = NULL; - self.imageData = nil; -} - --(void)freeResources -{ - [self freeImageResources]; - self.graph = nil; -} - --(nullable QCPlugInViewController *)createViewController -{ - /* - * Return a new QCPlugInViewController to edit the internal settings of this plug-in instance. - * You can return a subclass of QCPlugInViewController if necessary. - */ - - return [[QCPlugInViewController alloc] initWithPlugIn:self viewNibName:@"Settings"]; -} - -#pragma mark - -#pragma mark Input and output port configuration - -+(nonnull CPTStringArray *)sortedPropertyPortKeys -{ - return @[@"inputPixelsWide", - @"inputPixelsHigh", - @"inputPlotAreaColor", - @"inputAxisColor", - @"inputAxisLineWidth", - - @"inputXMin", - @"inputXMax", - @"inputYMin", - @"inputYMax", - - @"inputXMajorIntervals", - @"inputYMajorIntervals", - @"inputAxisMajorTickLength", - @"inputAxisMajorTickWidth", - - @"inputXMinorIntervals", - @"inputYMinorIntervals", - @"inputAxisMinorTickLength", - @"inputAxisMinorTickWidth"]; -} - -+(nullable CPTDictionary *)attributesForPropertyPortWithKey:(nullable NSString *)key -{ - /* - * Specify the optional attributes for property based ports (QCPortAttributeNameKey, QCPortAttributeDefaultValueKey...). - */ - - if ( [key isEqualToString:@"inputXMin"] ) { - return @{ - QCPortAttributeNameKey: @"X Range Min", - QCPortAttributeDefaultValueKey: @(-1.0) - }; - } - - if ( [key isEqualToString:@"inputXMax"] ) { - return @{ - QCPortAttributeNameKey: @"X Range Max", - QCPortAttributeDefaultValueKey: @1.0 - }; - } - - if ( [key isEqualToString:@"inputYMin"] ) { - return @{ - QCPortAttributeNameKey: @"Y Range Min", - QCPortAttributeDefaultValueKey: @(-1.0) - }; - } - - if ( [key isEqualToString:@"inputYMax"] ) { - return @{ - QCPortAttributeNameKey: @"Y Range Max", - QCPortAttributeDefaultValueKey: @1.0 - }; - } - - if ( [key isEqualToString:@"inputXMajorIntervals"] ) { - return @{ - QCPortAttributeNameKey: @"X Major Intervals", - QCPortAttributeDefaultValueKey: @4.0, - QCPortAttributeMinimumValueKey: @0.0 - }; - } - - if ( [key isEqualToString:@"inputYMajorIntervals"] ) { - return @{ - QCPortAttributeNameKey: @"Y Major Intervals", - QCPortAttributeDefaultValueKey: @4.0, - QCPortAttributeMinimumValueKey: @0.0 - }; - } - - if ( [key isEqualToString:@"inputXMinorIntervals"] ) { - return @{ - QCPortAttributeNameKey: @"X Minor Intervals", - QCPortAttributeDefaultValueKey: @1, - QCPortAttributeMinimumValueKey: @0 - }; - } - - if ( [key isEqualToString:@"inputYMinorIntervals"] ) { - return @{ - QCPortAttributeNameKey: @"Y Minor Intervals", - QCPortAttributeDefaultValueKey: @1, - QCPortAttributeMinimumValueKey: @0 - }; - } - - if ( [key isEqualToString:@"inputAxisColor"] ) { - CGColorRef axisColor = CGColorCreateGenericRGB(1.0, 1.0, 1.0, 1.0); - CPTDictionary *result = @{ - QCPortAttributeNameKey: @"Axis Color", - QCPortAttributeDefaultValueKey: (id)CFBridgingRelease(axisColor) - }; - return result; - } - - if ( [key isEqualToString:@"inputAxisLineWidth"] ) { - return @{ - QCPortAttributeNameKey: @"Axis Line Width", - QCPortAttributeMinimumValueKey: @0.0, - QCPortAttributeDefaultValueKey: @1.0 - }; - } - - if ( [key isEqualToString:@"inputAxisMajorTickWidth"] ) { - return @{ - QCPortAttributeNameKey: @"Major Tick Width", - QCPortAttributeMinimumValueKey: @0.0, - QCPortAttributeDefaultValueKey: @2.0 - }; - } - - if ( [key isEqualToString:@"inputAxisMinorTickWidth"] ) { - return @{ - QCPortAttributeNameKey: @"Minor Tick Width", - QCPortAttributeMinimumValueKey: @0.0, - QCPortAttributeDefaultValueKey: @1.0 - }; - } - - if ( [key isEqualToString:@"inputAxisMajorTickLength"] ) { - return @{ - QCPortAttributeNameKey: @"Major Tick Length", - QCPortAttributeMinimumValueKey: @0.0, - QCPortAttributeDefaultValueKey: @10.0 - }; - } - - if ( [key isEqualToString:@"inputAxisMinorTickLength"] ) { - return @{ - QCPortAttributeNameKey: @"Minor Tick Length", - QCPortAttributeMinimumValueKey: @0.0, - QCPortAttributeDefaultValueKey: @3.0 - }; - } - - if ( [key isEqualToString:@"inputMajorGridLineWidth"] ) { - return @{ - QCPortAttributeNameKey: @"Major Grid Line Width", - QCPortAttributeMinimumValueKey: @0.0, - QCPortAttributeDefaultValueKey: @1.0 - }; - } - - if ( [key isEqualToString:@"inputMinorGridLineWidth"] ) { - return @{ - QCPortAttributeNameKey: @"Minor Grid Line Width", - QCPortAttributeMinimumValueKey: @0.0, - QCPortAttributeDefaultValueKey: @0.0 - }; - } - - if ( [key isEqualToString:@"inputPlotAreaColor"] ) { - CGColorRef plotAreaColor = CGColorCreateGenericRGB(0.0, 0.0, 0.0, 0.4); - CPTDictionary *result = @{ - QCPortAttributeNameKey: @"Plot Area Color", - QCPortAttributeDefaultValueKey: (id)CFBridgingRelease(plotAreaColor) - }; - return result; - } - - if ( [key isEqualToString:@"inputPixelsWide"] ) { - return @{ - QCPortAttributeNameKey: @"Pixels Wide", - QCPortAttributeMinimumValueKey: @1, - QCPortAttributeDefaultValueKey: @512 - }; - } - - if ( [key isEqualToString:@"inputPixelsHigh"] ) { - return @{ - QCPortAttributeNameKey: @"Pixels High", - QCPortAttributeMinimumValueKey: @1, - QCPortAttributeDefaultValueKey: @512 - }; - } - - if ( [key isEqualToString:@"outputImage"] ) { - return @{ - QCPortAttributeNameKey: @"Image" - }; - } - - return nil; -} - -#pragma mark - -#pragma mark Graph configuration - --(void)createGraph -{ - if ( !self.graph ) { - // Create graph from theme - CPTTheme *theme = [CPTTheme themeNamed:kCPTPlainBlackTheme]; - CPTXYGraph *newGraph = (CPTXYGraph *)[theme newGraph]; - self.graph = newGraph; - - // Setup scatter plot space - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)newGraph.defaultPlotSpace; - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@1.0 length:@1.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@(-1.0) length:@1.0]; - - // Axes - CPTXYAxisSet *axisSet = (CPTXYAxisSet *)newGraph.axisSet; - - CPTXYAxis *x = axisSet.xAxis; - x.majorIntervalLength = @0.5; - x.minorTicksPerInterval = 2; - - CPTXYAxis *y = axisSet.yAxis; - y.majorIntervalLength = @0.5; - y.minorTicksPerInterval = 5; - } -} - --(nonnull CGColorRef)newDefaultColorForPlot:(NSUInteger)index alpha:(CGFloat)alpha -{ - CGColorRef color; - - switch ( index ) { - case 0: - color = CGColorCreateGenericRGB(1.0, 0.0, 0.0, alpha); - break; - - case 1: - color = CGColorCreateGenericRGB(0.0, 1.0, 0.0, alpha); - break; - - case 2: - color = CGColorCreateGenericRGB(0.0, 0.0, 1.0, alpha); - break; - - case 3: - color = CGColorCreateGenericRGB(1.0, 1.0, 0.0, alpha); - break; - - case 4: - color = CGColorCreateGenericRGB(1.0, 0.0, 1.0, alpha); - break; - - case 5: - color = CGColorCreateGenericRGB(0.0, 1.0, 1.0, alpha); - break; - - default: - color = CGColorCreateGenericRGB(1.0, 0.0, 0.0, alpha); - break; - } - - return color; -} - --(void)addPlots:(NSUInteger)count -{ - NSUInteger plotCount = self.numberOfPlots; - - for ( NSUInteger i = 0; i < count; i++ ) { - [self addPlotWithIndex:i + plotCount]; - } -} - --(BOOL)configureAxis -{ - CPTColor *axisColor = [CPTColor colorWithCGColor:self.inputAxisColor]; - - CPTXYAxisSet *set = (CPTXYAxisSet *)self.graph.axisSet; - CPTMutableLineStyle *lineStyle = [CPTMutableLineStyle lineStyle]; - - lineStyle.lineColor = axisColor; - lineStyle.lineWidth = self.inputAxisLineWidth; - set.xAxis.axisLineStyle = lineStyle; - set.yAxis.axisLineStyle = lineStyle; - - lineStyle.lineWidth = self.inputAxisMajorTickWidth; - set.xAxis.majorTickLineStyle = lineStyle; - set.yAxis.majorTickLineStyle = lineStyle; - - lineStyle.lineWidth = self.inputAxisMinorTickWidth; - set.xAxis.minorTickLineStyle = lineStyle; - set.yAxis.minorTickLineStyle = lineStyle; - - CPTMutableTextStyle *textStyle = [CPTMutableTextStyle textStyle]; - - textStyle.color = axisColor; - set.xAxis.labelTextStyle = textStyle; - - double xrange = self.inputXMax - self.inputXMin; - - set.xAxis.majorIntervalLength = @(xrange / (self.inputXMajorIntervals)); - set.xAxis.minorTicksPerInterval = self.inputXMinorIntervals; - - double yrange = self.inputYMax - self.inputYMin; - - set.yAxis.majorIntervalLength = @(yrange / (self.inputYMajorIntervals)); - set.yAxis.minorTicksPerInterval = self.inputYMinorIntervals; - - set.xAxis.minorTickLength = self.inputAxisMinorTickLength; - set.yAxis.minorTickLength = self.inputAxisMinorTickLength; - - set.xAxis.majorTickLength = self.inputAxisMajorTickLength; - set.yAxis.majorTickLength = self.inputAxisMajorTickLength; - - if ( [self didValueForInputKeyChange:@"inputMajorGridLineWidth"] || [self didValueForInputKeyChange:@"inputAxisColor"] ) { - CPTMutableLineStyle *majorGridLineStyle = nil; - if ( self.inputMajorGridLineWidth == 0.0 ) { - majorGridLineStyle = nil; - } - else { - majorGridLineStyle = [CPTMutableLineStyle lineStyle]; - majorGridLineStyle.lineColor = [CPTColor colorWithCGColor:self.inputAxisColor]; - majorGridLineStyle.lineWidth = self.inputMajorGridLineWidth; - } - - set.xAxis.majorGridLineStyle = majorGridLineStyle; - set.yAxis.majorGridLineStyle = majorGridLineStyle; - } - - if ( [self didValueForInputKeyChange:@"inputMinorGridLineWidth"] || [self didValueForInputKeyChange:@"inputAxisColor"] ) { - CPTMutableLineStyle *minorGridLineStyle; - if ( self.inputMinorGridLineWidth == 0.0 ) { - minorGridLineStyle = nil; - } - else { - minorGridLineStyle = [CPTMutableLineStyle lineStyle]; - minorGridLineStyle.lineColor = [CPTColor colorWithCGColor:self.inputAxisColor]; - minorGridLineStyle.lineWidth = self.inputMinorGridLineWidth; - } - - set.xAxis.minorGridLineStyle = minorGridLineStyle; - set.yAxis.minorGridLineStyle = minorGridLineStyle; - } - - return YES; -} - --(nonnull CGColorRef)dataLineColor:(NSUInteger)index -{ - NSString *key = [NSString stringWithFormat:@"plotDataLineColor%lu", (unsigned long)index]; - - return (__bridge CGColorRef)([self valueForInputKey:key]); -} - --(CGFloat)dataLineWidth:(NSUInteger)index -{ - NSString *key = [NSString stringWithFormat:@"plotDataLineWidth%lu", (unsigned long)index]; - - NSNumber *inputValue = [self valueForInputKey:key]; - - return inputValue.doubleValue; -} - --(nullable CGColorRef)areaFillColor:(NSUInteger)index -{ - NSString *key = [NSString stringWithFormat:@"plotFillColor%lu", (unsigned long)index]; - - return (__bridge CGColorRef)([self valueForInputKey:key]); -} - --(nullable CGImageRef)newAreaFillImage:(NSUInteger)index -{ - NSString *key = [NSString stringWithFormat:@"plotFillImage%lu", (unsigned long)index]; - - id img = [self valueForInputKey:key]; - - if ( !img ) { - return nil; - } - -#if __BIG_ENDIAN__ - NSString *pixelFormat = QCPlugInPixelFormatARGB8; -#else - NSString *pixelFormat = QCPlugInPixelFormatBGRA8; -#endif - - CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB(); - [img lockBufferRepresentationWithPixelFormat:pixelFormat colorSpace:rgbColorSpace forBounds:[img imageBounds]]; - CGColorSpaceRelease(rgbColorSpace); - - const void *baseAddress = [img bufferBaseAddress]; - NSUInteger pixelsWide = [img bufferPixelsWide]; - NSUInteger pixelsHigh = [img bufferPixelsHigh]; - NSUInteger bitsPerComponent = 8; - NSUInteger bytesPerRow = [img bufferBytesPerRow]; - CGColorSpaceRef colorSpace = [img bufferColorSpace]; - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wincompatible-pointer-types-discards-qualifiers" - - CGContextRef imgContext = CGBitmapContextCreate(baseAddress, - pixelsWide, - pixelsHigh, - bitsPerComponent, - bytesPerRow, - colorSpace, - (CGBitmapInfo)kCGImageAlphaNoneSkipLast); - -#pragma clang diagnostic pop - - CGImageRef imageRef = CGBitmapContextCreateImage(imgContext); - - [img unlockBufferRepresentation]; - - CGContextRelease(imgContext); - - return imageRef; -} - -static void _BufferReleaseCallback(const void *__nonnull __unused address, void *__nonnull __unused context) -{ - // Don't do anything. We release the buffer manually when it's recreated or during dealloc -} - --(void)createImageResourcesWithContext:(nonnull id)context -{ - // Create a CG bitmap for drawing. The image data is released when QC calls _BufferReleaseCallback - CGSize boundsSize = self.graph.bounds.size; - NSUInteger bitsPerComponent = 8; - size_t rowBytes = (size_t)boundsSize.width * 4; - - if ( rowBytes % 16 ) { - rowBytes = ((rowBytes / 16) + 1) * 16; - } - - if ( !self.imageData ) { - size_t bufferLength = rowBytes * (size_t)boundsSize.height; - void *buffer = valloc(bufferLength); - - if ( !buffer ) { - NSLog(@"Couldn't allocate memory for image data"); - return; - } - - self.imageData = [NSMutableData dataWithBytesNoCopy:buffer length:bufferLength]; - } - - CGContextRef newContext = CGBitmapContextCreate(self.imageData.mutableBytes, - (size_t)boundsSize.width, - (size_t)boundsSize.height, - bitsPerComponent, - rowBytes, - [context colorSpace], - (CGBitmapInfo)kCGImageAlphaPremultipliedFirst); - - self.bitmapContext = newContext; - - if ( !newContext ) { - self.imageData = nil; - NSLog(@"Couldn't create bitmap context"); - return; - } - - CGContextRelease(newContext); - - if ( rowBytes % 16 ) { - rowBytes = ((rowBytes / 16) + 1) * 16; - } - - // Note: I don't have a PPC to test on so this may or may not cause some color issues -#if __BIG_ENDIAN__ - self.imageProvider = [context outputImageProviderFromBufferWithPixelFormat:QCPlugInPixelFormatBGRA8 - pixelsWide:(NSUInteger)boundsSize.width - pixelsHigh:(NSUInteger)boundsSize.height - baseAddress:self.imageData.bytes - bytesPerRow:rowBytes - releaseCallback:_BufferReleaseCallback - releaseContext:NULL - colorSpace:[context colorSpace] - shouldColorMatch:YES]; -#else - self.imageProvider = [context outputImageProviderFromBufferWithPixelFormat:QCPlugInPixelFormatARGB8 - pixelsWide:(NSUInteger)boundsSize.width - pixelsHigh:(NSUInteger)boundsSize.height - baseAddress:self.imageData.bytes - bytesPerRow:rowBytes - releaseCallback:_BufferReleaseCallback - releaseContext:NULL - colorSpace:[context colorSpace] - shouldColorMatch:YES]; -#endif -} - -#pragma mark - -#pragma mark Data source methods - --(NSUInteger)numberOfRecordsForPlot:(nonnull CPTPlot *__unused)plot -{ - return 0; -} - --(nullable id)numberForPlot:(nonnull CPTPlot *__unused)plot field:(NSUInteger __unused)fieldEnum recordIndex:(NSUInteger __unused)index -{ - return @0; -} - -#pragma mark - -#pragma mark Methods for dealing with plugin keys - --(NSUInteger)numberOfPlots -{ - return numberOfPlots; -} - --(void)setNumberOfPlots:(NSUInteger)number -{ - number = MAX(1, number); - - if ( number > numberOfPlots ) { - [self addPlots:number - numberOfPlots]; - } - else { - [self removePlots:numberOfPlots - number]; - } - - numberOfPlots = number; -} - -+(nonnull CPTStringArray *)plugInKeys -{ - return @[@"numberOfPlots"]; -} - --(nonnull id)serializedValueForKey:(nonnull NSString *)key -{ - /* - * Provide custom serialization for the plug-in internal settings that are not values complying to the protocol. - * The return object must be nil or a PList compatible i.e. NSString, NSNumber, NSDate, NSData, NSArray or NSDictionary. - */ - - if ( [key isEqualToString:@"numberOfPlots"] ) { - return @(self.numberOfPlots); - } - else { - return [super serializedValueForKey:key]; - } -} - --(void)setSerializedValue:(nonnull id)serializedValue forKey:(nonnull NSString *)key -{ - /* - * Provide deserialization for the plug-in internal settings that were custom serialized in -serializedValueForKey. - * Deserialize the value, then call [self setValue:value forKey:key] to set the corresponding internal setting of the plug-in instance to that deserialized value. - */ - - if ( [key isEqualToString:@"numberOfPlots"] ) { - [self setNumberOfPlots:MAX(1, [(NSNumber *) serializedValue unsignedIntegerValue])]; - } - else { - [super setSerializedValue:serializedValue forKey:key]; - } -} - -#pragma mark - -#pragma mark Accessors - --(void)setBitmapContext:(nullable CGContextRef)newContext -{ - if ( newContext != bitmapContext ) { - CGContextRelease(bitmapContext); - bitmapContext = CGContextRetain(newContext); - } -} - -#pragma mark - -#pragma mark Subclass methods - --(void)addPlotWithIndex:(NSUInteger __unused)index -{ - /* - * Subclasses should override this method to create their own ports, plots, and add the plots to the graph - */ -} - --(void)removePlots:(NSUInteger __unused)count -{ - /* - * Subclasses should override this method to remove plots and their ports - */ -} - --(BOOL)configurePlots -{ - /* - * Subclasses sjpi;d override this method to configure the plots (i.e., by using values from the input ports) - */ - - return YES; -} - --(BOOL)configureGraph -{ - /* - * Subclasses can override this method to configure the graph (i.e., by using values from the input ports) - */ - - // Configure the graph area - CGRect frame = CPTRectMake(0.0, 0.0, MAX(1, self.inputPixelsWide), MAX(1, self.inputPixelsHigh)); - - self.graph.bounds = frame; - - self.graph.paddingLeft = 0.0; - self.graph.paddingRight = 0.0; - self.graph.paddingTop = 0.0; - self.graph.paddingBottom = 0.0; - - // Perform some sanity checks. If there is a configuration error set the error flag so that a message is displayed - if ((self.inputXMax <= self.inputXMin) || (self.inputYMax <= self.inputYMin)) { - return NO; - } - - self.graph.fill = nil; - self.graph.plotAreaFrame.fill = [CPTFill fillWithColor:[CPTColor colorWithCGColor:self.inputPlotAreaColor]]; - if ( self.inputAxisLineWidth > 0.0 ) { - CPTMutableLineStyle *lineStyle = [CPTMutableLineStyle lineStyle]; - lineStyle.lineWidth = self.inputAxisLineWidth; - lineStyle.lineColor = [CPTColor colorWithCGColor:self.inputAxisColor]; - self.graph.plotAreaFrame.borderLineStyle = lineStyle; - } - else { - self.graph.plotAreaFrame.borderLineStyle = nil; - } - - // Configure the plot space and axis sets - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; - - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@(self.inputXMin) length:@(self.inputXMax - self.inputXMin)]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@(self.inputYMin) length:@(self.inputYMax - self.inputYMin)]; - - [self configureAxis]; - - [self.graph layoutIfNeeded]; - [self.graph setNeedsDisplay]; - - return YES; -} - -@end - -#pragma mark - - -@implementation CorePlotQCPlugIn(Execution) - --(BOOL)execute:(nonnull id)context atTime:(NSTimeInterval __unused)time withArguments:(nullable CPTDictionary *__unused)arguments -{ - // Configure the plot for drawing - BOOL configurationCheck = [self configureGraph]; - - // If the output image dimensions change recreate the image resources - if ( [self didValueForInputKeyChange:@"inputPixelsWide"] || [self didValueForInputKeyChange:@"inputPixelsHigh"] || !self.imageProvider ) { - [self freeImageResources]; - } - - // Verifies that the image data + bitmap context are valid - [self createImageResourcesWithContext:context]; - - // Draw the plot ... - CGSize boundsSize = self.graph.bounds.size; - CGContextRef bmContext = self.bitmapContext; - - CGContextClearRect(bmContext, CPTRectMake(0.0, 0.0, boundsSize.width, boundsSize.height)); - CGContextSetRGBFillColor(bmContext, 0.0, 0.0, 0.0, 0.0); - CGContextFillRect(bmContext, CPTRectMake(0, 0, boundsSize.width, boundsSize.height)); - CGContextSetAllowsAntialiasing(bmContext, true); - - if ( configurationCheck ) { - [self configurePlots]; - [self.graph recursivelyRenderInContext:bmContext]; - } - else { - drawErrorText(bmContext, CPTRectMake(0, 0, self.inputPixelsWide, self.inputPixelsHigh)); - } - - // CGContextSetAllowsAntialiasing(bitmapContext, false); - CGContextFlush(bmContext); - - // ... and put it on the output port - id provider = self.imageProvider; - - if ( provider ) { - self.outputImage = provider; - return YES; - } - else { - return NO; - } -} - -@end diff --git a/QCPlugin/CorePlotQCPlugin.xcodeproj/TemplateIcon.icns b/QCPlugin/CorePlotQCPlugin.xcodeproj/TemplateIcon.icns deleted file mode 100644 index 312ac48ec111b56c6f6faed25d478fc58471e872..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42106 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 - - - - diff --git a/QCPlugin/CorePlotQCPlugin.xcodeproj/xcshareddata/xcschemes/Build & Copy.xcscheme b/QCPlugin/CorePlotQCPlugin.xcodeproj/xcshareddata/xcschemes/Build & Copy.xcscheme deleted file mode 100644 index 7afa5ea4a..000000000 --- a/QCPlugin/CorePlotQCPlugin.xcodeproj/xcshareddata/xcschemes/Build & Copy.xcscheme +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/QCPlugin/CorePlotQCPlugin.xcodeproj/xcshareddata/xcschemes/CorePlotQCPlugin.xcscheme b/QCPlugin/CorePlotQCPlugin.xcodeproj/xcshareddata/xcschemes/CorePlotQCPlugin.xcscheme deleted file mode 100644 index d1baaa5f3..000000000 --- a/QCPlugin/CorePlotQCPlugin.xcodeproj/xcshareddata/xcschemes/CorePlotQCPlugin.xcscheme +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/QCPlugin/CorePlotQCPlugin_Prefix.pch b/QCPlugin/CorePlotQCPlugin_Prefix.pch deleted file mode 100644 index 692047ddb..000000000 --- a/QCPlugin/CorePlotQCPlugin_Prefix.pch +++ /dev/null @@ -1,3 +0,0 @@ -#ifdef __OBJC__ - #import -#endif diff --git a/examples/CorePlotExamples.xcworkspace/contents.xcworkspacedata b/examples/CorePlotExamples.xcworkspace/contents.xcworkspacedata index a9ec2bf00..936be0293 100644 --- a/examples/CorePlotExamples.xcworkspace/contents.xcworkspacedata +++ b/examples/CorePlotExamples.xcworkspace/contents.xcworkspacedata @@ -37,11 +37,4 @@ location = "group:CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj"> - - - - From 6fb3e8ad52b05de71ddbd716d0b11692ba0914df Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 13 Dec 2020 10:30:55 -0500 Subject: [PATCH 044/245] Added SDK versions to fix Travis CI builds. --- .travis.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 87cc44309..70e07802e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,12 +2,12 @@ language: objective-c osx_image: xcode11 ios_env: - SDK:iphonesimulator - SDK:iphoneos + SDK:iphonesimulator13.0 + SDK:iphoneos13.0 tvos_env: - TVSDK:appletvsimulator - TVSDK:appletvos + TVSDK:appletvsimulator13.0 + TVSDK:appletvos13.0 # Framework builds script: xcodebuild -project framework/CorePlot.xcodeproj -target "CorePlot Mac" -configuration Release From c847775b171c61ce09bf7a8e47537557c792370a Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 13 Dec 2020 11:42:57 -0500 Subject: [PATCH 045/245] Fixed travis.yml file to build all of the projects. --- .travis.yml | 80 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 46 insertions(+), 34 deletions(-) diff --git a/.travis.yml b/.travis.yml index 70e07802e..cb449710d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,41 +1,53 @@ language: objective-c osx_image: xcode11 -ios_env: - SDK:iphonesimulator13.0 - SDK:iphoneos13.0 +jobs: + include: + # Mac framework + - env: PROJECT=framework/CorePlot TARGET="CorePlot Mac" SDK=macosx + - env: PROJECT=framework/CorePlot TARGET="UnitTests Mac" SDK=macosx + + # iOS framework + - env: PROJECT=framework/CorePlot TARGET="CorePlot iOS" SDK=iphoneos + - env: PROJECT=framework/CorePlot TARGET="CorePlot iOS" SDK=iphonesimulator + - env: PROJECT=framework/CorePlot TARGET="UnitTests iOS" SDK=iphoneos + - env: PROJECT=framework/CorePlot TARGET="UnitTests iOS" SDK=iphonesimulator + + # iOS static library + - env: PROJECT=framework/CorePlot TARGET="CorePlot-CocoaTouch" SDK=iphoneos + - env: PROJECT=framework/CorePlot TARGET="CorePlot-CocoaTouch" SDK=iphonesimulator + - env: PROJECT=framework/CorePlot TARGET="CorePlot-CocoaTouchTests" SDK=iphoneos + - env: PROJECT=framework/CorePlot TARGET="CorePlot-CocoaTouchTests" SDK=iphonesimulator + + # tvOS framework + - env: PROJECT=framework/CorePlot TARGET="CorePlot tvOS" SDK=appletvos + - env: PROJECT=framework/CorePlot TARGET="CorePlot tvOS" SDK=appletvsimulator + - env: PROJECT=framework/CorePlot TARGET="UnitTests tvOS" SDK=appletvos + - env: PROJECT=framework/CorePlot TARGET="UnitTests tvOS" SDK=appletvsimulator -tvos_env: - TVSDK:appletvsimulator13.0 - TVSDK:appletvos13.0 + # Mac examples + - env: PROJECT=examples/CorePlotGallery/Plot_Gallery TARGET="Plot Gallery-Mac" SDK=macosx + - env: PROJECT=examples/CPTTestApp/CPTTestApp TARGET="CPTTestApp" SDK=macosx + - env: PROJECT=examples/DatePlot/DatePlot TARGET="DatePlot" SDK=macosx + - env: PROJECT=examples/DropPlot/DropPlot TARGET="DropPlot" SDK=macosx + - env: PROJECT=examples/MinorTickLabels/minorTickFormatter TARGET="minorTickFormatter" SDK=macosx + - env: PROJECT=examples/RangePlot/RangePlot TARGET="RangePlot" SDK=macosx -# Framework builds -script: xcodebuild -project framework/CorePlot.xcodeproj -target "CorePlot Mac" -configuration Release -script: xcodebuild -project framework/CorePlot.xcodeproj -target "CorePlot iOS" -sdk ${SDK} -configuration Release -script: xcodebuild -project framework/CorePlot.xcodeproj -target "CorePlot tvOS" -sdk ${TVSDK} -configuration Release -script: xcodebuild -project framework/CorePlot.xcodeproj -target "CorePlot-CocoaTouch" -sdk ${SDK} -configuration Release + # iOS examples + - env: PROJECT=examples/CorePlotGallery/Plot_Gallery TARGET="Plot Gallery-iOS" SDK=iphoneos + - env: PROJECT=examples/CorePlotGallery/Plot_Gallery TARGET="Plot Gallery-iOS" SDK=iphonesimulator + - env: PROJECT=examples/AAPLot/AAPLot TARGET="AAPLot" SDK=iphoneos + - env: PROJECT=examples/AAPLot/AAPLot TARGET="AAPLot" SDK=iphonesimulator + - env: PROJECT=examples/CPTTestApp-iPad/CPTTestApp-iPad TARGET="CPTTestApp-iPad" SDK=iphoneos + - env: PROJECT=examples/CPTTestApp-iPad/CPTTestApp-iPad TARGET="CPTTestApp-iPad" SDK=iphonesimulator + - env: PROJECT=examples/CPTTestApp-iPhone/CPTTestApp-iPhone TARGET="CPTTestApp-iPhone" SDK=iphoneos + - env: PROJECT=examples/CPTTestApp-iPhone/CPTTestApp-iPhone TARGET="CPTTestApp-iPhone" SDK=iphonesimulator + - env: PROJECT=examples/StockPlot/StockPlot TARGET="StockPlot" SDK=iphoneos + - env: PROJECT=examples/StockPlot/StockPlot TARGET="StockPlot" SDK=iphonesimulator -# Unit tests -script: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests Mac" -configuration Release -script: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests iOS" -sdk ${SDK} -configuration Release -script: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests tvOS" -sdk ${TVSDK} -configuration Release -script: xcodebuild -project framework/CorePlot.xcodeproj -target "CorePlot-CocoaTouchTests" -sdk ${SDK} -configuration Release + # tvOS examples + - env: PROJECT=examples/CorePlotGallery/Plot_Gallery TARGET="Plot Gallery-tvOS" SDK=appletvos + - env: PROJECT=examples/CorePlotGallery/Plot_Gallery TARGET="Plot Gallery-tvOS" SDK=appletvsimulator -# Mac examples -script: xcodebuild -project examples/CorePlotGallery/Plot_Gallery.xcodeproj -target "Plot Gallery-Mac" -configuration Release -script: xcodebuild -project examples/CPTTestApp/CPTTestApp.xcodeproj -target CPTTestApp -configuration Release -script: xcodebuild -project examples/DatePlot/DatePlot.xcodeproj -target DatePlot -configuration Release -script: xcodebuild -project examples/DropPlot/DropPlot.xcodeproj -target DropPlot -configuration Release -script: xcodebuild -project examples/MinorTickLabels/minorTickFormatter.xcodeproj -target minorTickFormatter -configuration Release -script: xcodebuild -project examples/RangePlot/RangePlot.xcodeproj -target RangePlot -configuration Release - -# iOS examples -script: xcodebuild -project examples/CorePlotGallery/Plot_Gallery.xcodeproj -target "Plot Gallery-iOS" -sdk ${SDK} -configuration Release -script: xcodebuild -project examples/AAPLot/AAPLot.xcodeproj -target AAPLot -sdk ${SDK} -configuration Release -script: xcodebuild -project examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj -target CPTTestApp-iPad -sdk ${SDK} -configuration Release -script: xcodebuild -project examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj -target CPTTestApp-iPhone -sdk ${SDK} -configuration Release -script: xcodebuild -project examples/CPTTestApp-iPhone-SpeedTest/CPTTestApp-iPhone.xcodeproj -CPTTestApp-iPhone AAPLot -sdk ${SDK} -configuration Release -script: xcodebuild -project examples/StockPlot/StockPlot.xcodeproj -target StockPlot -sdk ${SDK} -configuration Release - -# tvOS examples -script: xcodebuild -project examples/CorePlotGallery/Plot_Gallery.xcodeproj -target "Plot Gallery-tvOS" -sdk ${TVSDK} -configuration Release +# Build script +script: xcodebuild -project ${PROJECT}.xcodeproj -target ${TARGET} -sdk ${SDK} -configuration Release From d0314bbeb98bd655ee0b9afcd559e2cb14fdea66 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 13 Dec 2020 11:50:58 -0500 Subject: [PATCH 046/245] Added quotes to the Travis build configuration to handle projects and targets with spaces in the names. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index cb449710d..b5e29f5fe 100644 --- a/.travis.yml +++ b/.travis.yml @@ -50,4 +50,4 @@ jobs: - env: PROJECT=examples/CorePlotGallery/Plot_Gallery TARGET="Plot Gallery-tvOS" SDK=appletvsimulator # Build script -script: xcodebuild -project ${PROJECT}.xcodeproj -target ${TARGET} -sdk ${SDK} -configuration Release +script: xcodebuild -project "${PROJECT}.xcodeproj" -target "${TARGET}" -sdk ${SDK} -configuration Release From d0ea3064206bad1d9628fcc4045cb8bdf6125ad1 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 13 Dec 2020 12:15:26 -0500 Subject: [PATCH 047/245] Removed device builds and old example apps from the Travis config file. --- .travis.yml | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/.travis.yml b/.travis.yml index b5e29f5fe..193e3192d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,21 +8,15 @@ jobs: - env: PROJECT=framework/CorePlot TARGET="UnitTests Mac" SDK=macosx # iOS framework - - env: PROJECT=framework/CorePlot TARGET="CorePlot iOS" SDK=iphoneos - env: PROJECT=framework/CorePlot TARGET="CorePlot iOS" SDK=iphonesimulator - - env: PROJECT=framework/CorePlot TARGET="UnitTests iOS" SDK=iphoneos - env: PROJECT=framework/CorePlot TARGET="UnitTests iOS" SDK=iphonesimulator # iOS static library - - env: PROJECT=framework/CorePlot TARGET="CorePlot-CocoaTouch" SDK=iphoneos - env: PROJECT=framework/CorePlot TARGET="CorePlot-CocoaTouch" SDK=iphonesimulator - - env: PROJECT=framework/CorePlot TARGET="CorePlot-CocoaTouchTests" SDK=iphoneos - env: PROJECT=framework/CorePlot TARGET="CorePlot-CocoaTouchTests" SDK=iphonesimulator # tvOS framework - - env: PROJECT=framework/CorePlot TARGET="CorePlot tvOS" SDK=appletvos - env: PROJECT=framework/CorePlot TARGET="CorePlot tvOS" SDK=appletvsimulator - - env: PROJECT=framework/CorePlot TARGET="UnitTests tvOS" SDK=appletvos - env: PROJECT=framework/CorePlot TARGET="UnitTests tvOS" SDK=appletvsimulator # Mac examples @@ -34,19 +28,11 @@ jobs: - env: PROJECT=examples/RangePlot/RangePlot TARGET="RangePlot" SDK=macosx # iOS examples - - env: PROJECT=examples/CorePlotGallery/Plot_Gallery TARGET="Plot Gallery-iOS" SDK=iphoneos - env: PROJECT=examples/CorePlotGallery/Plot_Gallery TARGET="Plot Gallery-iOS" SDK=iphonesimulator - - env: PROJECT=examples/AAPLot/AAPLot TARGET="AAPLot" SDK=iphoneos - - env: PROJECT=examples/AAPLot/AAPLot TARGET="AAPLot" SDK=iphonesimulator - - env: PROJECT=examples/CPTTestApp-iPad/CPTTestApp-iPad TARGET="CPTTestApp-iPad" SDK=iphoneos - env: PROJECT=examples/CPTTestApp-iPad/CPTTestApp-iPad TARGET="CPTTestApp-iPad" SDK=iphonesimulator - - env: PROJECT=examples/CPTTestApp-iPhone/CPTTestApp-iPhone TARGET="CPTTestApp-iPhone" SDK=iphoneos - env: PROJECT=examples/CPTTestApp-iPhone/CPTTestApp-iPhone TARGET="CPTTestApp-iPhone" SDK=iphonesimulator - - env: PROJECT=examples/StockPlot/StockPlot TARGET="StockPlot" SDK=iphoneos - - env: PROJECT=examples/StockPlot/StockPlot TARGET="StockPlot" SDK=iphonesimulator # tvOS examples - - env: PROJECT=examples/CorePlotGallery/Plot_Gallery TARGET="Plot Gallery-tvOS" SDK=appletvos - env: PROJECT=examples/CorePlotGallery/Plot_Gallery TARGET="Plot Gallery-tvOS" SDK=appletvsimulator # Build script From 76a4cd33b8985fdc4f8c9d8de15a3c4455395ddb Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 13 Dec 2020 13:27:59 -0500 Subject: [PATCH 048/245] Changed the target name of the tvOS Plot Gallery to match the naming convention of the other OS versions. --- .../Plot_Gallery.xcodeproj/project.pbxproj | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj index 25846c5d9..b6a13a0ae 100644 --- a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj +++ b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj @@ -276,7 +276,7 @@ C309C23323B3E12500DEDE9D /* PlotViewItem.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = PlotViewItem.xib; path = "Plot Gallery-Mac/PlotViewItem.xib"; sourceTree = ""; }; C309C23523B3E21500DEDE9D /* PlotViewItem.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = PlotViewItem.m; path = src/mac/PlotViewItem.m; sourceTree = ""; }; C309C23723B3E29F00DEDE9D /* PlotViewItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PlotViewItem.h; path = src/mac/PlotViewItem.h; sourceTree = ""; }; - C30D8AF61BCAF99D0003BB70 /* Plot Gallery tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Plot Gallery tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + C30D8AF61BCAF99D0003BB70 /* Plot Gallery-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Plot Gallery-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; C30D8AF91BCAF99D0003BB70 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = main.m; path = src/tvOS/main.m; sourceTree = ""; }; C30D8AFB1BCAF99D0003BB70 /* AppDelegateTV.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppDelegateTV.h; path = src/tvOS/AppDelegateTV.h; sourceTree = ""; }; C30D8AFC1BCAF99D0003BB70 /* AppDelegateTV.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = AppDelegateTV.m; path = src/tvOS/AppDelegateTV.m; sourceTree = ""; }; @@ -411,7 +411,7 @@ children = ( 8D1107320486CEB800E47090 /* Plot Gallery.app */, C34CB52E1BC9A76A009270A0 /* Plot Gallery-iOS.app */, - C30D8AF61BCAF99D0003BB70 /* Plot Gallery tvOS.app */, + C30D8AF61BCAF99D0003BB70 /* Plot Gallery-tvOS.app */, ); name = Products; sourceTree = ""; @@ -666,7 +666,7 @@ ); name = "Plot Gallery tvOS"; productName = "Plot Gallery tvOS"; - productReference = C30D8AF61BCAF99D0003BB70 /* Plot Gallery tvOS.app */; + productReference = C30D8AF61BCAF99D0003BB70 /* Plot Gallery-tvOS.app */; productType = "com.apple.product-type.application"; }; C34CB52D1BC9A76A009270A0 /* Plot Gallery-iOS */ = { @@ -1151,7 +1151,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.Plot-Gallery-tvOS"; - PRODUCT_NAME = "$(TARGET_NAME)"; + PRODUCT_NAME = "Plot Gallery-tvOS"; SDKROOT = appletvos; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; @@ -1175,7 +1175,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.Plot-Gallery-tvOS"; - PRODUCT_NAME = "$(TARGET_NAME)"; + PRODUCT_NAME = "Plot Gallery-tvOS"; SDKROOT = appletvos; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; From e9d940285a7dd6935e1cde5ad5026a04f3e8dc49 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 13 Dec 2020 13:44:04 -0500 Subject: [PATCH 049/245] Removed the iOS static library because it is obsolete. --- .travis.yml | 4 - documentation/changelog.markdown | 5 +- documentation/doxygen/doxygen touch.config | 3 +- .../CPTTestApp-iPad.xcodeproj/project.pbxproj | 52 +-- .../Classes/CPTTestApp_iPadViewController.h | 2 +- .../CPTTestApp-iPhone-Bridging-Header.h | 2 +- .../project.pbxproj | 52 +-- framework/CorePlot-CocoaTouch.h | 68 --- framework/CorePlot.xcodeproj/project.pbxproj | 438 ------------------ .../xcschemes/CorePlot-CocoaTouch.xcscheme | 109 ----- scripts/createrelease.py | 7 - 11 files changed, 46 insertions(+), 696 deletions(-) delete mode 100644 framework/CorePlot-CocoaTouch.h delete mode 100644 framework/CorePlot.xcodeproj/xcshareddata/xcschemes/CorePlot-CocoaTouch.xcscheme diff --git a/.travis.yml b/.travis.yml index 193e3192d..b7a823c28 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,10 +11,6 @@ jobs: - env: PROJECT=framework/CorePlot TARGET="CorePlot iOS" SDK=iphonesimulator - env: PROJECT=framework/CorePlot TARGET="UnitTests iOS" SDK=iphonesimulator - # iOS static library - - env: PROJECT=framework/CorePlot TARGET="CorePlot-CocoaTouch" SDK=iphonesimulator - - env: PROJECT=framework/CorePlot TARGET="CorePlot-CocoaTouchTests" SDK=iphonesimulator - # tvOS framework - env: PROJECT=framework/CorePlot TARGET="CorePlot tvOS" SDK=appletvsimulator - env: PROJECT=framework/CorePlot TARGET="UnitTests tvOS" SDK=appletvsimulator diff --git a/documentation/changelog.markdown b/documentation/changelog.markdown index 9d239b92c..057defc4f 100644 --- a/documentation/changelog.markdown +++ b/documentation/changelog.markdown @@ -4,12 +4,13 @@ This release updates Core Plot to be compatible with Xcode 12. -The Mac deployment target is now macOS 10.9. The iOS deployment target is now iOS 9.0 for both the framework and the static library. The tvOS deployment target remains tvOS 9.0. +The Mac deployment target is now macOS 10.9. The iOS deployment target is now iOS 9.0. The tvOS deployment target remains tvOS 9.0. The iOS static is obsolete and has been removed. ## Details - **New**: Swift Package Manager support -- **Changed**: Updated the deployment targets for all supported operating systems for the minimums required by Xcode 12. The Mac deployment target is now macOS 10.9. The iOS deployment target is now iOS 12.0 for both the framework and the static library. The tvOS deployment target is now tvOS 12.0. +- **Changed**: Updated the deployment targets for all supported operating systems for the minimums required by Xcode 12. The Mac deployment target is now macOS 10.9. The iOS deployment target is now iOS 9.0. The tvOS deployment target remains tvOS 9.0. +- **Removed**: Removed the iOS static library. # Release 2.3 (January 10, 2020) diff --git a/documentation/doxygen/doxygen touch.config b/documentation/doxygen/doxygen touch.config index e52498f10..02c87a1fe 100644 --- a/documentation/doxygen/doxygen touch.config +++ b/documentation/doxygen/doxygen touch.config @@ -832,8 +832,7 @@ WARN_LOGFILE = # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = "$(SOURCE_ROOT)/CorePlot-CocoaTouch.h" \ - "$(SOURCE_ROOT)/Source" \ +INPUT = "$(SOURCE_ROOT)/Source" \ "$(SOURCE_ROOT)/PlatformSpecific" # This tag can be used to specify the character encoding of the source files diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj index 2bef93439..0371631a4 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj @@ -14,11 +14,12 @@ 288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765A40DF7441C002DB57D /* CoreGraphics.framework */; }; 28D7ACF80DDB3853001CB0EB /* CPTTestApp_iPadViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D7ACF70DDB3853001CB0EB /* CPTTestApp_iPadViewController.m */; }; BC65758F116549890008F594 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC65758E116549890008F594 /* QuartzCore.framework */; }; + C314514C2586970F00A857B2 /* CorePlot.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3D414A61A7D843800B6F5D6 /* CorePlot.framework */; }; + C314514D2586970F00A857B2 /* CorePlot.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C3D414A61A7D843800B6F5D6 /* CorePlot.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; C3D0A1F520E019BF00BA2921 /* CPTTestApp_iPadViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = C3D0A1F720E019BF00BA2921 /* CPTTestApp_iPadViewController.xib */; }; C3D0A20620E019CD00BA2921 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = C3D0A20820E019CD00BA2921 /* MainWindow.xib */; }; C3D0A20920E019D400BA2921 /* Launch Screen.xib in Resources */ = {isa = PBXBuildFile; fileRef = C3D0A20B20E019D400BA2921 /* Launch Screen.xib */; }; C3D3936019FD670400148319 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C3D3935F19FD670400148319 /* Images.xcassets */; }; - C3D414AD1A7D844400B6F5D6 /* libCorePlot-CocoaTouch.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C3D414AA1A7D843800B6F5D6 /* libCorePlot-CocoaTouch.a */; }; C3F47B6E17BF99DE0075181F /* CorePlotIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = C3F47B6C17BF99DE0075181F /* CorePlotIcon.png */; }; C3F47B6F17BF99DE0075181F /* CorePlotIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = C3F47B6D17BF99DE0075181F /* CorePlotIcon@2x.png */; }; /* End PBXBuildFile section */ @@ -66,22 +67,22 @@ remoteGlobalIDString = C38A09821A46185300D45436; remoteInfo = CorePlot_iOSTests; }; - C3D414A91A7D843800B6F5D6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C3D414951A7D843800B6F5D6 /* CorePlot.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C38A09BA1A4619A900D45436; - remoteInfo = "CorePlot-CocoaTouch"; - }; - C3D414AB1A7D843800B6F5D6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C3D414951A7D843800B6F5D6 /* CorePlot.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C38A09C41A4619A900D45436; - remoteInfo = "CorePlot-CocoaTouchTests"; - }; /* End PBXContainerItemProxy section */ +/* Begin PBXCopyFilesBuildPhase section */ + C314514E2586970F00A857B2 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + C314514D2586970F00A857B2 /* CorePlot.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 1D3623240D0F684500981E51 /* CPTTestApp_iPadAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTTestApp_iPadAppDelegate.h; sourceTree = ""; }; @@ -114,8 +115,8 @@ 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */, 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */, 288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */, + C314514C2586970F00A857B2 /* CorePlot.framework in Frameworks */, BC65758F116549890008F594 /* QuartzCore.framework in Frameworks */, - C3D414AD1A7D844400B6F5D6 /* libCorePlot-CocoaTouch.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -200,8 +201,6 @@ C3D414A41A7D843800B6F5D6 /* UnitTests.xctest */, C3D414A61A7D843800B6F5D6 /* CorePlot.framework */, C3D414A81A7D843800B6F5D6 /* UnitTests iOS.xctest */, - C3D414AA1A7D843800B6F5D6 /* libCorePlot-CocoaTouch.a */, - C3D414AC1A7D843800B6F5D6 /* CorePlot-CocoaTouchTests.xctest */, C31D01E11D10F4FF008C1EF2 /* CorePlot.framework */, C31D01E31D10F4FF008C1EF2 /* UnitTests tvOS.xctest */, ); @@ -218,6 +217,7 @@ 1D60588D0D05DD3D006BFB54 /* Resources */, 1D60588E0D05DD3D006BFB54 /* Sources */, 1D60588F0D05DD3D006BFB54 /* Frameworks */, + C314514E2586970F00A857B2 /* Embed Frameworks */, ); buildRules = ( ); @@ -310,20 +310,6 @@ remoteRef = C3D414A71A7D843800B6F5D6 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - C3D414AA1A7D843800B6F5D6 /* libCorePlot-CocoaTouch.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libCorePlot-CocoaTouch.a"; - remoteRef = C3D414A91A7D843800B6F5D6 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C3D414AC1A7D843800B6F5D6 /* CorePlot-CocoaTouchTests.xctest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = "CorePlot-CocoaTouchTests.xctest"; - remoteRef = C3D414AB1A7D843800B6F5D6 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; /* End PBXReferenceProxy section */ /* Begin PBXResourcesBuildPhase section */ @@ -408,6 +394,7 @@ GCC_PREFIX_HEADER = CPTTestApp_iPad_Prefix.pch; HEADER_SEARCH_PATHS = ""; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/CPTTestApp_iPad-Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = org.CorePlot.CPTTestAppiPad; PRODUCT_NAME = "CPTTestApp-iPad"; }; @@ -429,6 +416,7 @@ GCC_PREFIX_HEADER = CPTTestApp_iPad_Prefix.pch; HEADER_SEARCH_PATHS = ""; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/CPTTestApp_iPad-Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = org.CorePlot.CPTTestAppiPad; PRODUCT_NAME = "CPTTestApp-iPad"; VALIDATE_PRODUCT = YES; diff --git a/examples/CPTTestApp-iPad/Classes/CPTTestApp_iPadViewController.h b/examples/CPTTestApp-iPad/Classes/CPTTestApp_iPadViewController.h index 120d9fbf3..df5abe5d5 100644 --- a/examples/CPTTestApp-iPad/Classes/CPTTestApp_iPadViewController.h +++ b/examples/CPTTestApp-iPad/Classes/CPTTestApp_iPadViewController.h @@ -5,7 +5,7 @@ // Created by Brad Larson on 4/1/2010. // -#import "CorePlot-CocoaTouch.h" +#import #import @interface CPTTestApp_iPadViewController : UIViewController diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj index 339d4898e..edcc8de55 100644 --- a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj @@ -14,6 +14,8 @@ BC8166CF1100DD00006D898E /* 17-bar-chart.png in Resources */ = {isa = PBXBuildFile; fileRef = BC8166CD1100DD00006D898E /* 17-bar-chart.png */; }; BC8166D21100DD6F006D898E /* 62-contrast.png in Resources */ = {isa = PBXBuildFile; fileRef = BC8166D11100DD6F006D898E /* 62-contrast.png */; }; BC9B81DA0FB893F70035D8DA /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC9B81D90FB893F70035D8DA /* QuartzCore.framework */; }; + C314515B2586971A00A857B2 /* CorePlot.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3D414BF1A7D846500B6F5D6 /* CorePlot.framework */; }; + C314515C2586971A00A857B2 /* CorePlot.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C3D414BF1A7D846500B6F5D6 /* CorePlot.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; C359603719CE34FC005CDFB9 /* BarChartController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C359603319CE34FB005CDFB9 /* BarChartController.swift */; }; C359603819CE34FC005CDFB9 /* iPhoneAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C359603419CE34FB005CDFB9 /* iPhoneAppDelegate.swift */; }; C359603919CE34FC005CDFB9 /* PieChartController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C359603519CE34FB005CDFB9 /* PieChartController.swift */; }; @@ -25,7 +27,6 @@ C3D0A22220E019F800BA2921 /* ScatterPlot.xib in Resources */ = {isa = PBXBuildFile; fileRef = C3D0A22420E019F800BA2921 /* ScatterPlot.xib */; }; C3D0A22520E019FF00BA2921 /* Launch Screen.xib in Resources */ = {isa = PBXBuildFile; fileRef = C3D0A22720E019FF00BA2921 /* Launch Screen.xib */; }; C3D3936419FD671100148319 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C3D3936319FD671100148319 /* Images.xcassets */; }; - C3D414C61A7D847C00B6F5D6 /* libCorePlot-CocoaTouch.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C3D414C31A7D846500B6F5D6 /* libCorePlot-CocoaTouch.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -71,22 +72,22 @@ remoteGlobalIDString = C38A09821A46185300D45436; remoteInfo = CorePlot_iOSTests; }; - C3D414C21A7D846500B6F5D6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C3D414AE1A7D846500B6F5D6 /* CorePlot.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C38A09BA1A4619A900D45436; - remoteInfo = "CorePlot-CocoaTouch"; - }; - C3D414C41A7D846500B6F5D6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C3D414AE1A7D846500B6F5D6 /* CorePlot.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C38A09C41A4619A900D45436; - remoteInfo = "CorePlot-CocoaTouchTests"; - }; /* End PBXContainerItemProxy section */ +/* Begin PBXCopyFilesBuildPhase section */ + C314515D2586971A00A857B2 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + C314515C2586971A00A857B2 /* CorePlot.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 1D6058910D05DD3D006BFB54 /* CPTTestApp-iPhone.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "CPTTestApp-iPhone.app"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -122,8 +123,8 @@ 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */, 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */, 288765080DF74369002DB57D /* CoreGraphics.framework in Frameworks */, + C314515B2586971A00A857B2 /* CorePlot.framework in Frameworks */, BC9B81DA0FB893F70035D8DA /* QuartzCore.framework in Frameworks */, - C3D414C61A7D847C00B6F5D6 /* libCorePlot-CocoaTouch.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -211,8 +212,6 @@ C3D414BD1A7D846500B6F5D6 /* UnitTests.xctest */, C3D414BF1A7D846500B6F5D6 /* CorePlot.framework */, C3D414C11A7D846500B6F5D6 /* UnitTests iOS.xctest */, - C3D414C31A7D846500B6F5D6 /* libCorePlot-CocoaTouch.a */, - C3D414C51A7D846500B6F5D6 /* CorePlot-CocoaTouchTests.xctest */, C31D01F21D10F506008C1EF2 /* CorePlot.framework */, C31D01F41D10F506008C1EF2 /* UnitTests tvOS.xctest */, ); @@ -229,6 +228,7 @@ 1D60588D0D05DD3D006BFB54 /* Resources */, 1D60588E0D05DD3D006BFB54 /* Sources */, 1D60588F0D05DD3D006BFB54 /* Frameworks */, + C314515D2586971A00A857B2 /* Embed Frameworks */, ); buildRules = ( ); @@ -323,20 +323,6 @@ remoteRef = C3D414C01A7D846500B6F5D6 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - C3D414C31A7D846500B6F5D6 /* libCorePlot-CocoaTouch.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libCorePlot-CocoaTouch.a"; - remoteRef = C3D414C21A7D846500B6F5D6 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C3D414C51A7D846500B6F5D6 /* CorePlot-CocoaTouchTests.xctest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = "CorePlot-CocoaTouchTests.xctest"; - remoteRef = C3D414C41A7D846500B6F5D6 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; /* End PBXReferenceProxy section */ /* Begin PBXResourcesBuildPhase section */ @@ -440,6 +426,7 @@ GCC_PREFIX_HEADER = CPTTestApp_iPhone_Prefix.pch; HEADER_SEARCH_PATHS = ""; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ""; OTHER_LDFLAGS = ( "-all_load", @@ -467,6 +454,7 @@ GCC_PREFIX_HEADER = CPTTestApp_iPhone_Prefix.pch; HEADER_SEARCH_PATHS = ""; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ""; OTHER_LDFLAGS = ( "-all_load", diff --git a/framework/CorePlot-CocoaTouch.h b/framework/CorePlot-CocoaTouch.h deleted file mode 100644 index 5b8bd9349..000000000 --- a/framework/CorePlot-CocoaTouch.h +++ /dev/null @@ -1,68 +0,0 @@ -#import -#import - -#import "CPTAnimation.h" -#import "CPTAnimationOperation.h" -#import "CPTAnimationPeriod.h" -#import "CPTAnnotation.h" -#import "CPTAnnotationHostLayer.h" -#import "CPTAxis.h" -#import "CPTAxisLabel.h" -#import "CPTAxisSet.h" -#import "CPTAxisTitle.h" -#import "CPTBarPlot.h" -#import "CPTBorderedLayer.h" -#import "CPTCalendarFormatter.h" -#import "CPTColor.h" -#import "CPTColorSpace.h" -#import "CPTConstraints.h" -#import "CPTDefinitions.h" -#import "CPTExceptions.h" -#import "CPTFill.h" -#import "CPTFunctionDataSource.h" -#import "CPTGradient.h" -#import "CPTGraph.h" -#import "CPTGraphHostingView.h" -#import "CPTImage.h" -#import "CPTLayer.h" -#import "CPTLayerAnnotation.h" -#import "CPTLegend.h" -#import "CPTLegendEntry.h" -#import "CPTLimitBand.h" -#import "CPTLineCap.h" -#import "CPTLineStyle.h" -#import "CPTMutableLineStyle.h" -#import "CPTMutableNumericData+TypeConversion.h" -#import "CPTMutableNumericData.h" -#import "CPTMutablePlotRange.h" -#import "CPTMutableShadow.h" -#import "CPTMutableTextStyle.h" -#import "CPTNumericData+TypeConversion.h" -#import "CPTNumericData.h" -#import "CPTNumericDataType.h" -#import "CPTPathExtensions.h" -#import "CPTPieChart.h" -#import "CPTPlatformSpecificCategories.h" -#import "CPTPlatformSpecificDefines.h" -#import "CPTPlatformSpecificFunctions.h" -#import "CPTPlot.h" -#import "CPTPlotArea.h" -#import "CPTPlotAreaFrame.h" -#import "CPTPlotRange.h" -#import "CPTPlotSpace.h" -#import "CPTPlotSpaceAnnotation.h" -#import "CPTPlotSymbol.h" -#import "CPTRangePlot.h" -#import "CPTResponder.h" -#import "CPTScatterPlot.h" -#import "CPTShadow.h" -#import "CPTTextLayer.h" -#import "CPTTextStyle.h" -#import "CPTTheme.h" -#import "CPTTimeFormatter.h" -#import "CPTTradingRangePlot.h" -#import "CPTUtilities.h" -#import "CPTXYAxis.h" -#import "CPTXYAxisSet.h" -#import "CPTXYGraph.h" -#import "CPTXYPlotSpace.h" diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 0a9cea8ee..ed39ddbb3 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -195,9 +195,6 @@ C30550EE1399BE5400E0151F /* CPTLegendEntry.m in Sources */ = {isa = PBXBuildFile; fileRef = C30550EC1399BE5400E0151F /* CPTLegendEntry.m */; }; C318F4AD11EA188700595FF9 /* CPTLimitBand.h in Headers */ = {isa = PBXBuildFile; fileRef = C318F4AB11EA188700595FF9 /* CPTLimitBand.h */; settings = {ATTRIBUTES = (Public, ); }; }; C318F4AE11EA188700595FF9 /* CPTLimitBand.m in Sources */ = {isa = PBXBuildFile; fileRef = C318F4AC11EA188700595FF9 /* CPTLimitBand.m */; }; - C3226A521A69F6DA00F77249 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3226A511A69F6DA00F77249 /* QuartzCore.framework */; }; - C3226A541A69F6DF00F77249 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3226A531A69F6DF00F77249 /* UIKit.framework */; }; - C3226A581A69F6FA00F77249 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3226A571A69F6FA00F77249 /* CoreGraphics.framework */; }; C3226A5C1A69F72900F77249 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3226A531A69F6DF00F77249 /* UIKit.framework */; }; C3226A5E1A69F73800F77249 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3226A511A69F6DA00F77249 /* QuartzCore.framework */; }; C3226A5F1A69F75400F77249 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3226A571A69F6FA00F77249 /* CoreGraphics.framework */; }; @@ -236,7 +233,6 @@ C370D5971A753F1C00AF4312 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3226A571A69F6FA00F77249 /* CoreGraphics.framework */; }; C377B3BB1C122AA600891DF8 /* CPTCalendarFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C377B3BA1C122AA600891DF8 /* CPTCalendarFormatterTests.m */; }; C377B3BC1C122AA600891DF8 /* CPTCalendarFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C377B3BA1C122AA600891DF8 /* CPTCalendarFormatterTests.m */; }; - C377B3BD1C122AA600891DF8 /* CPTCalendarFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C377B3BA1C122AA600891DF8 /* CPTCalendarFormatterTests.m */; }; C377B3BE1C122AA600891DF8 /* CPTCalendarFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C377B3BA1C122AA600891DF8 /* CPTCalendarFormatterTests.m */; }; C37EA5CB1BC83F2A0091C8F7 /* CPTGraphHostingView.m in Sources */ = {isa = PBXBuildFile; fileRef = C38A0B281A46265300D45436 /* CPTGraphHostingView.m */; }; C37EA5CC1BC83F2A0091C8F7 /* CPTLayerAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 07E10BBA11D10183000B8DAB /* CPTLayerAnnotation.m */; }; @@ -455,134 +451,86 @@ C37EA6AF1BC83F2D0091C8F7 /* CPTScatterPlotTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 07FEBD61110B7E8B00E44D37 /* CPTScatterPlotTests.m */; }; C37EA6B11BC83F2D0091C8F7 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3226A571A69F6FA00F77249 /* CoreGraphics.framework */; }; C38A09831A46185300D45436 /* CorePlot.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C38A09781A46185200D45436 /* CorePlot.framework */; }; - C38A09C51A4619A900D45436 /* libCorePlot-CocoaTouch.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C38A09BA1A4619A900D45436 /* libCorePlot-CocoaTouch.a */; }; C38A09D11A461C1100D45436 /* CPTTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 0730F64D109494D100E95162 /* CPTTestCase.m */; }; - C38A09D21A461C1300D45436 /* CPTTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 0730F64D109494D100E95162 /* CPTTestCase.m */; }; C38A09D31A461C1800D45436 /* CPTDataSourceTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C9A745E0FB24C7200918464 /* CPTDataSourceTestCase.m */; }; - C38A09D41A461C1900D45436 /* CPTDataSourceTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C9A745E0FB24C7200918464 /* CPTDataSourceTestCase.m */; }; C38A09D81A461C5800D45436 /* CPTNumericDataType.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C97EEFC104D80C400B554F9 /* CPTNumericDataType.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A09D91A461C6B00D45436 /* CPTNumericDataType.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C97EEFD104D80C400B554F9 /* CPTNumericDataType.m */; }; - C38A09DA1A461C6C00D45436 /* CPTNumericDataType.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C97EEFD104D80C400B554F9 /* CPTNumericDataType.m */; }; C38A09DB1A461C7D00D45436 /* CPTNumericData.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C97EEFB104D80C400B554F9 /* CPTNumericData.m */; }; - C38A09DC1A461C7D00D45436 /* CPTNumericData.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C97EEFB104D80C400B554F9 /* CPTNumericData.m */; }; C38A09DD1A461C8100D45436 /* CPTMutableNumericData.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C97EF11104D819100B554F9 /* CPTMutableNumericData.m */; }; - C38A09DE1A461C8100D45436 /* CPTMutableNumericData.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C97EF11104D819100B554F9 /* CPTMutableNumericData.m */; }; C38A09DF1A461C8500D45436 /* CPTNumericData+TypeConversion.m in Sources */ = {isa = PBXBuildFile; fileRef = C3392A371225F667008DA6BD /* CPTNumericData+TypeConversion.m */; }; - C38A09E01A461C8500D45436 /* CPTNumericData+TypeConversion.m in Sources */ = {isa = PBXBuildFile; fileRef = C3392A371225F667008DA6BD /* CPTNumericData+TypeConversion.m */; }; C38A09E11A461C8800D45436 /* CPTMutableNumericData+TypeConversion.m in Sources */ = {isa = PBXBuildFile; fileRef = C3CAFB251229E41F00F5C989 /* CPTMutableNumericData+TypeConversion.m */; }; - C38A09E21A461C8900D45436 /* CPTMutableNumericData+TypeConversion.m in Sources */ = {isa = PBXBuildFile; fileRef = C3CAFB251229E41F00F5C989 /* CPTMutableNumericData+TypeConversion.m */; }; C38A09E41A461CAD00D45436 /* CPTMutableNumericDataTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3CADDC611B167AD00D36017 /* CPTMutableNumericDataTests.m */; }; - C38A09E51A461CAE00D45436 /* CPTMutableNumericDataTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3CADDC611B167AD00D36017 /* CPTMutableNumericDataTests.m */; }; C38A09E61A461CB200D45436 /* CPTMutableNumericDataTypeConversionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3CB561B122A9E9F00FBFB61 /* CPTMutableNumericDataTypeConversionTests.m */; }; - C38A09E71A461CB300D45436 /* CPTMutableNumericDataTypeConversionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3CB561B122A9E9F00FBFB61 /* CPTMutableNumericDataTypeConversionTests.m */; }; C38A09E81A461CB600D45436 /* CPTNumericDataTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C97EF06104D80D400B554F9 /* CPTNumericDataTests.m */; }; - C38A09E91A461CB700D45436 /* CPTNumericDataTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C97EF06104D80D400B554F9 /* CPTNumericDataTests.m */; }; C38A09EA1A461CBA00D45436 /* CPTNumericDataTypeConversionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C97EF08104D80D400B554F9 /* CPTNumericDataTypeConversionTests.m */; }; - C38A09EB1A461CBB00D45436 /* CPTNumericDataTypeConversionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C97EF08104D80D400B554F9 /* CPTNumericDataTypeConversionTests.m */; }; C38A09EF1A461CD000D45436 /* CPTDefinitions.h in Headers */ = {isa = PBXBuildFile; fileRef = 07BF0DF10F2B7BFB002FCEA7 /* CPTDefinitions.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A09F01A461CD900D45436 /* CPTDefinitions.m in Sources */ = {isa = PBXBuildFile; fileRef = 07BF0DF20F2B7BFB002FCEA7 /* CPTDefinitions.m */; }; - C38A09F11A461CDA00D45436 /* CPTDefinitions.m in Sources */ = {isa = PBXBuildFile; fileRef = 07BF0DF20F2B7BFB002FCEA7 /* CPTDefinitions.m */; }; C38A09F21A461CEE00D45436 /* CPTExceptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 07321BBF0F37370D00F423D8 /* CPTExceptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A09F31A461CF500D45436 /* CPTExceptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 07321BC00F37370D00F423D8 /* CPTExceptions.m */; }; - C38A09F41A461CF600D45436 /* CPTExceptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 07321BC00F37370D00F423D8 /* CPTExceptions.m */; }; C38A09F51A461CF900D45436 /* CPTUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 07321BC40F37382D00F423D8 /* CPTUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A09F61A461D0000D45436 /* CPTUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 07321BC50F37382D00F423D8 /* CPTUtilities.m */; }; - C38A09F71A461D0100D45436 /* CPTUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 07321BC50F37382D00F423D8 /* CPTUtilities.m */; }; C38A09F81A461D0500D45436 /* CPTPlotRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 32484B3F0F530E8B002151AD /* CPTPlotRange.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A09F91A461D0B00D45436 /* CPTPlotRange.m in Sources */ = {isa = PBXBuildFile; fileRef = 32484B400F530E8B002151AD /* CPTPlotRange.m */; }; - C38A09FA1A461D0C00D45436 /* CPTPlotRange.m in Sources */ = {isa = PBXBuildFile; fileRef = 32484B400F530E8B002151AD /* CPTPlotRange.m */; }; C38A09FB1A461D0F00D45436 /* CPTMutablePlotRange.h in Headers */ = {isa = PBXBuildFile; fileRef = C3A695E3146A19BC00AF5653 /* CPTMutablePlotRange.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A09FC1A461D1300D45436 /* CPTMutablePlotRange.m in Sources */ = {isa = PBXBuildFile; fileRef = C3A695E4146A19BC00AF5653 /* CPTMutablePlotRange.m */; }; - C38A09FD1A461D1400D45436 /* CPTMutablePlotRange.m in Sources */ = {isa = PBXBuildFile; fileRef = C3A695E4146A19BC00AF5653 /* CPTMutablePlotRange.m */; }; C38A09FE1A461D1800D45436 /* CPTFunctionDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F97F1C17A9E07B00A52FF2 /* CPTFunctionDataSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A09FF1A461D1D00D45436 /* CPTFunctionDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F97F1D17A9E07B00A52FF2 /* CPTFunctionDataSource.m */; }; - C38A0A001A461D1D00D45436 /* CPTFunctionDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F97F1D17A9E07B00A52FF2 /* CPTFunctionDataSource.m */; }; C38A0A011A461D2E00D45436 /* CPTPlotRangeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C36E89B911EE7F97003DE309 /* CPTPlotRangeTests.m */; }; - C38A0A021A461D2E00D45436 /* CPTPlotRangeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C36E89B911EE7F97003DE309 /* CPTPlotRangeTests.m */; }; C38A0A031A461D3100D45436 /* CPTUtilitiesTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7E9630F4B625900F9BCBB /* CPTUtilitiesTests.m */; }; - C38A0A041A461D3200D45436 /* CPTUtilitiesTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7E9630F4B625900F9BCBB /* CPTUtilitiesTests.m */; }; C38A0A051A461D3F00D45436 /* CPTLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CD7E7EA0F4B4F9600F9BCBB /* CPTLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0A061A461D4400D45436 /* CPTLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7E7EB0F4B4F9600F9BCBB /* CPTLayer.m */; }; - C38A0A071A461D4500D45436 /* CPTLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7E7EB0F4B4F9600F9BCBB /* CPTLayer.m */; }; C38A0A081A461D4800D45436 /* CPTBorderedLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0706223A0FDF215C0066A6C4 /* CPTBorderedLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0A091A461D4D00D45436 /* CPTBorderedLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 0706223B0FDF215C0066A6C4 /* CPTBorderedLayer.m */; }; - C38A0A0A1A461D4D00D45436 /* CPTBorderedLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 0706223B0FDF215C0066A6C4 /* CPTBorderedLayer.m */; }; C38A0A0B1A461D5100D45436 /* _CPTBorderLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = C3408C3C15FC1C3E004F1D70 /* _CPTBorderLayer.h */; }; C38A0A0C1A461D5700D45436 /* _CPTBorderLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = C3408C3D15FC1C3E004F1D70 /* _CPTBorderLayer.m */; }; - C38A0A0D1A461D5800D45436 /* _CPTBorderLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = C3408C3D15FC1C3E004F1D70 /* _CPTBorderLayer.m */; }; C38A0A0E1A461D5B00D45436 /* _CPTMaskLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = C3286BFE15D8740100A436A8 /* _CPTMaskLayer.h */; }; C38A0A0F1A461D5E00D45436 /* _CPTMaskLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = C3286BFF15D8740100A436A8 /* _CPTMaskLayer.m */; }; - C38A0A101A461D5F00D45436 /* _CPTMaskLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = C3286BFF15D8740100A436A8 /* _CPTMaskLayer.m */; }; C38A0A111A461D6300D45436 /* CPTResponder.h in Headers */ = {isa = PBXBuildFile; fileRef = 07AEF1FD10BBE1F10012BEFF /* CPTResponder.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0A121A461D6A00D45436 /* CPTLayerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C1C07F1790D3B400E8B1B7 /* CPTLayerTests.m */; }; - C38A0A131A461D6B00D45436 /* CPTLayerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C1C07F1790D3B400E8B1B7 /* CPTLayerTests.m */; }; C38A0A141A461E5000D45436 /* CPTAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C2846F16584EB9006BA43C /* CPTAnimation.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0A151A461E5800D45436 /* CPTAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C2847016584EB9006BA43C /* CPTAnimation.m */; }; - C38A0A161A461E5800D45436 /* CPTAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C2847016584EB9006BA43C /* CPTAnimation.m */; }; C38A0A171A461E5B00D45436 /* CPTAnimationOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C9CB0C165DB4D500739006 /* CPTAnimationOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0A181A461E6000D45436 /* CPTAnimationOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C9CB0D165DB4D500739006 /* CPTAnimationOperation.m */; }; - C38A0A191A461E6100D45436 /* CPTAnimationOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C9CB0D165DB4D500739006 /* CPTAnimationOperation.m */; }; C38A0A1A1A461E6400D45436 /* CPTAnimationPeriod.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C9CB11165DB50300739006 /* CPTAnimationPeriod.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0A1B1A461E6A00D45436 /* CPTAnimationPeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C9CB12165DB50300739006 /* CPTAnimationPeriod.m */; }; - C38A0A1C1A461E6B00D45436 /* CPTAnimationPeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C9CB12165DB50300739006 /* CPTAnimationPeriod.m */; }; C38A0A1D1A461E6E00D45436 /* _CPTAnimationCGFloatPeriod.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C9CB15165DB52C00739006 /* _CPTAnimationCGFloatPeriod.h */; }; C38A0A1E1A461E7A00D45436 /* _CPTAnimationCGFloatPeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C9CB16165DB52C00739006 /* _CPTAnimationCGFloatPeriod.m */; }; - C38A0A1F1A461E7B00D45436 /* _CPTAnimationCGFloatPeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C9CB16165DB52C00739006 /* _CPTAnimationCGFloatPeriod.m */; }; C38A0A201A461E8800D45436 /* _CPTAnimationCGPointPeriod.h in Headers */ = {isa = PBXBuildFile; fileRef = A92C0E154E8598EDE2EDEF2F /* _CPTAnimationCGPointPeriod.h */; }; C38A0A211A461E8B00D45436 /* _CPTAnimationCGPointPeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = A92C0AE447398AF62D584F9C /* _CPTAnimationCGPointPeriod.m */; }; - C38A0A221A461E8C00D45436 /* _CPTAnimationCGPointPeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = A92C0AE447398AF62D584F9C /* _CPTAnimationCGPointPeriod.m */; }; C38A0A231A461E8F00D45436 /* _CPTAnimationCGSizePeriod.h in Headers */ = {isa = PBXBuildFile; fileRef = A92C0563E082D1C1E249FA6F /* _CPTAnimationCGSizePeriod.h */; }; C38A0A241A461E9200D45436 /* _CPTAnimationCGSizePeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = A92C087BF0913A6BA2363E40 /* _CPTAnimationCGSizePeriod.m */; }; - C38A0A251A461E9300D45436 /* _CPTAnimationCGSizePeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = A92C087BF0913A6BA2363E40 /* _CPTAnimationCGSizePeriod.m */; }; C38A0A261A461E9600D45436 /* _CPTAnimationCGRectPeriod.h in Headers */ = {isa = PBXBuildFile; fileRef = A92C0E876AE37EB30019586B /* _CPTAnimationCGRectPeriod.h */; }; C38A0A271A461E9A00D45436 /* _CPTAnimationCGRectPeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = A92C0C3DB583ED8FC2EFD9DB /* _CPTAnimationCGRectPeriod.m */; }; - C38A0A281A461E9B00D45436 /* _CPTAnimationCGRectPeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = A92C0C3DB583ED8FC2EFD9DB /* _CPTAnimationCGRectPeriod.m */; }; C38A0A291A461EA300D45436 /* _CPTAnimationNSDecimalPeriod.h in Headers */ = {isa = PBXBuildFile; fileRef = A92C0685ACE3281299F10F73 /* _CPTAnimationNSDecimalPeriod.h */; }; C38A0A2A1A461EA600D45436 /* _CPTAnimationNSDecimalPeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = A92C00B71DCB2085A92BE0A9 /* _CPTAnimationNSDecimalPeriod.m */; }; - C38A0A2B1A461EA600D45436 /* _CPTAnimationNSDecimalPeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = A92C00B71DCB2085A92BE0A9 /* _CPTAnimationNSDecimalPeriod.m */; }; C38A0A2C1A461EAA00D45436 /* _CPTAnimationPlotRangePeriod.h in Headers */ = {isa = PBXBuildFile; fileRef = A92C0E16290C226BC4BE3936 /* _CPTAnimationPlotRangePeriod.h */; }; C38A0A2D1A461EAD00D45436 /* _CPTAnimationPlotRangePeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = A92C091B8592D9F32AC384CB /* _CPTAnimationPlotRangePeriod.m */; }; - C38A0A2E1A461EAE00D45436 /* _CPTAnimationPlotRangePeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = A92C091B8592D9F32AC384CB /* _CPTAnimationPlotRangePeriod.m */; }; C38A0A2F1A461EB100D45436 /* _CPTAnimationTimingFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C2847316585085006BA43C /* _CPTAnimationTimingFunctions.h */; }; C38A0A301A461EB500D45436 /* _CPTAnimationTimingFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C2847416585085006BA43C /* _CPTAnimationTimingFunctions.m */; }; - C38A0A311A461EB600D45436 /* _CPTAnimationTimingFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C2847416585085006BA43C /* _CPTAnimationTimingFunctions.m */; }; C38A0A321A461EBD00D45436 /* CPTAnnotation.h in Headers */ = {isa = PBXBuildFile; fileRef = 07E10BB411D10177000B8DAB /* CPTAnnotation.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0A331A461EC200D45436 /* CPTAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 07E10BB511D10177000B8DAB /* CPTAnnotation.m */; }; - C38A0A341A461EC300D45436 /* CPTAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 07E10BB511D10177000B8DAB /* CPTAnnotation.m */; }; C38A0A351A461EC800D45436 /* CPTPlotSpaceAnnotation.h in Headers */ = {isa = PBXBuildFile; fileRef = 07E10BAF11D1016B000B8DAB /* CPTPlotSpaceAnnotation.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0A361A461ECD00D45436 /* CPTPlotSpaceAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 07E10BB011D1016B000B8DAB /* CPTPlotSpaceAnnotation.m */; }; - C38A0A371A461ECD00D45436 /* CPTPlotSpaceAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 07E10BB011D1016B000B8DAB /* CPTPlotSpaceAnnotation.m */; }; C38A0A381A461ED000D45436 /* CPTLayerAnnotation.h in Headers */ = {isa = PBXBuildFile; fileRef = 07E10BB911D10183000B8DAB /* CPTLayerAnnotation.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0A391A461ED600D45436 /* CPTLayerAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 07E10BBA11D10183000B8DAB /* CPTLayerAnnotation.m */; }; - C38A0A3A1A461ED700D45436 /* CPTLayerAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 07E10BBA11D10183000B8DAB /* CPTLayerAnnotation.m */; }; C38A0A3B1A461EDA00D45436 /* CPTAnnotationHostLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 072161E911D1F6BD009CC871 /* CPTAnnotationHostLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0A3C1A461EDF00D45436 /* CPTAnnotationHostLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 072161EA11D1F6BD009CC871 /* CPTAnnotationHostLayer.m */; }; - C38A0A3D1A461EE000D45436 /* CPTAnnotationHostLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 072161EA11D1F6BD009CC871 /* CPTAnnotationHostLayer.m */; }; C38A0A3E1A461EE600D45436 /* CPTConstraints.h in Headers */ = {isa = PBXBuildFile; fileRef = 070064E7111F2BAA003DE087 /* CPTConstraints.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0A3F1A461EEB00D45436 /* CPTConstraints.m in Sources */ = {isa = PBXBuildFile; fileRef = 070064E8111F2BAA003DE087 /* CPTConstraints.m */; }; - C38A0A401A461EEB00D45436 /* CPTConstraints.m in Sources */ = {isa = PBXBuildFile; fileRef = 070064E8111F2BAA003DE087 /* CPTConstraints.m */; }; C38A0A411A461EEE00D45436 /* _CPTConstraintsFixed.h in Headers */ = {isa = PBXBuildFile; fileRef = C3CCA03913E8D85800CE6DB1 /* _CPTConstraintsFixed.h */; settings = {ATTRIBUTES = (Private, ); }; }; C38A0A421A461EF500D45436 /* _CPTConstraintsFixed.m in Sources */ = {isa = PBXBuildFile; fileRef = C3CCA03A13E8D85800CE6DB1 /* _CPTConstraintsFixed.m */; }; - C38A0A431A461EF600D45436 /* _CPTConstraintsFixed.m in Sources */ = {isa = PBXBuildFile; fileRef = C3CCA03A13E8D85800CE6DB1 /* _CPTConstraintsFixed.m */; }; C38A0A441A461EFA00D45436 /* _CPTConstraintsRelative.h in Headers */ = {isa = PBXBuildFile; fileRef = C3CCA03B13E8D85800CE6DB1 /* _CPTConstraintsRelative.h */; settings = {ATTRIBUTES = (Private, ); }; }; C38A0A451A461F0100D45436 /* _CPTConstraintsRelative.m in Sources */ = {isa = PBXBuildFile; fileRef = C3CCA03C13E8D85800CE6DB1 /* _CPTConstraintsRelative.m */; }; - C38A0A461A461F0200D45436 /* _CPTConstraintsRelative.m in Sources */ = {isa = PBXBuildFile; fileRef = C3CCA03C13E8D85800CE6DB1 /* _CPTConstraintsRelative.m */; }; C38A0A471A461F0C00D45436 /* CPTTextLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CD7E7E50F4B4F8200F9BCBB /* CPTTextLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0A481A461F1100D45436 /* CPTTextLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7E7E60F4B4F8200F9BCBB /* CPTTextLayer.m */; }; - C38A0A491A461F1200D45436 /* CPTTextLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7E7E60F4B4F8200F9BCBB /* CPTTextLayer.m */; }; C38A0A4A1A461F1500D45436 /* CPTTextStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B69A5B12B6215000F4C16C /* CPTTextStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0A4B1A461F1A00D45436 /* CPTTextStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 07B69A5C12B6215000F4C16C /* CPTTextStyle.m */; }; - C38A0A4C1A461F1B00D45436 /* CPTTextStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 07B69A5C12B6215000F4C16C /* CPTTextStyle.m */; }; C38A0A4D1A461F1D00D45436 /* CPTMutableTextStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 07C467990FE1A24C00299939 /* CPTMutableTextStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0A4E1A461F2200D45436 /* CPTMutableTextStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 07C4679A0FE1A24C00299939 /* CPTMutableTextStyle.m */; }; - C38A0A4F1A461F2200D45436 /* CPTMutableTextStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 07C4679A0FE1A24C00299939 /* CPTMutableTextStyle.m */; }; C38A0A501A461F3D00D45436 /* CPTTextStyleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C36468A90FE5533F0064B186 /* CPTTextStyleTests.m */; }; - C38A0A511A461F3D00D45436 /* CPTTextStyleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C36468A90FE5533F0064B186 /* CPTTextStyleTests.m */; }; C38A0A551A461F9700D45436 /* CPTTextStylePlatformSpecific.h in Headers */ = {isa = PBXBuildFile; fileRef = C38A0A531A461F9700D45436 /* CPTTextStylePlatformSpecific.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0A561A461F9700D45436 /* CPTTextStylePlatformSpecific.m in Sources */ = {isa = PBXBuildFile; fileRef = C38A0A541A461F9700D45436 /* CPTTextStylePlatformSpecific.m */; }; - C38A0A571A461F9700D45436 /* CPTTextStylePlatformSpecific.m in Sources */ = {isa = PBXBuildFile; fileRef = C38A0A541A461F9700D45436 /* CPTTextStylePlatformSpecific.m */; }; C38A0A5A1A4620B800D45436 /* CPTImagePlatformSpecific.m in Sources */ = {isa = PBXBuildFile; fileRef = C38A0A591A4620B800D45436 /* CPTImagePlatformSpecific.m */; }; - C38A0A5B1A4620B800D45436 /* CPTImagePlatformSpecific.m in Sources */ = {isa = PBXBuildFile; fileRef = C38A0A591A4620B800D45436 /* CPTImagePlatformSpecific.m */; }; C38A0A5C1A4620D400D45436 /* CPTColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 079FC0B20FB975500037E990 /* CPTColor.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0A5D1A4620D400D45436 /* CPTColorSpace.h in Headers */ = {isa = PBXBuildFile; fileRef = 079FC0BB0FB9762B0037E990 /* CPTColorSpace.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0A5E1A4620D400D45436 /* CPTGradient.h in Headers */ = {isa = PBXBuildFile; fileRef = 07CA112D0FAC8F85000861CE /* CPTGradient.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -603,16 +551,6 @@ C38A0A6D1A4620E200D45436 /* CPTPathExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 070622310FDF1B250066A6C4 /* CPTPathExtensions.m */; }; C38A0A6E1A4620E200D45436 /* CPTShadow.m in Sources */ = {isa = PBXBuildFile; fileRef = C32EE1B513EC4AA800038266 /* CPTShadow.m */; }; C38A0A6F1A4620E200D45436 /* CPTMutableShadow.m in Sources */ = {isa = PBXBuildFile; fileRef = C32EE1C013EC4BE700038266 /* CPTMutableShadow.m */; }; - C38A0A701A4620E200D45436 /* CPTColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 079FC0B30FB975500037E990 /* CPTColor.m */; }; - C38A0A711A4620E200D45436 /* CPTColorSpace.m in Sources */ = {isa = PBXBuildFile; fileRef = 079FC0BC0FB9762B0037E990 /* CPTColorSpace.m */; }; - C38A0A721A4620E200D45436 /* CPTGradient.m in Sources */ = {isa = PBXBuildFile; fileRef = 07CA112E0FAC8F85000861CE /* CPTGradient.m */; }; - C38A0A731A4620E200D45436 /* CPTImage.m in Sources */ = {isa = PBXBuildFile; fileRef = C3AFC9D00FB62969005DFFDC /* CPTImage.m */; }; - C38A0A741A4620E200D45436 /* CPTLineCap.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D3AD2C13DF8DCE0004EA73 /* CPTLineCap.m */; }; - C38A0A751A4620E200D45436 /* CPTLineStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 906156BD0F375598001B75FC /* CPTLineStyle.m */; }; - C38A0A761A4620E200D45436 /* CPTMutableLineStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 07B69B1612B62ABB00F4C16C /* CPTMutableLineStyle.m */; }; - C38A0A771A4620E200D45436 /* CPTPathExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 070622310FDF1B250066A6C4 /* CPTPathExtensions.m */; }; - C38A0A781A4620E200D45436 /* CPTShadow.m in Sources */ = {isa = PBXBuildFile; fileRef = C32EE1B513EC4AA800038266 /* CPTShadow.m */; }; - C38A0A791A4620E200D45436 /* CPTMutableShadow.m in Sources */ = {isa = PBXBuildFile; fileRef = C32EE1C013EC4BE700038266 /* CPTMutableShadow.m */; }; C38A0A7A1A4620E800D45436 /* CPTFill.h in Headers */ = {isa = PBXBuildFile; fileRef = C342601F0FAE096C00072842 /* CPTFill.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0A7B1A4620EF00D45436 /* _CPTFillColor.h in Headers */ = {isa = PBXBuildFile; fileRef = C342601B0FAE096C00072842 /* _CPTFillColor.h */; settings = {ATTRIBUTES = (Private, ); }; }; C38A0A7C1A4620EF00D45436 /* _CPTFillGradient.h in Headers */ = {isa = PBXBuildFile; fileRef = C342601E0FAE096C00072842 /* _CPTFillGradient.h */; settings = {ATTRIBUTES = (Private, ); }; }; @@ -621,64 +559,39 @@ C38A0A7F1A4620F700D45436 /* _CPTFillColor.m in Sources */ = {isa = PBXBuildFile; fileRef = C342601C0FAE096C00072842 /* _CPTFillColor.m */; }; C38A0A801A4620F700D45436 /* _CPTFillGradient.m in Sources */ = {isa = PBXBuildFile; fileRef = C34260190FAE096C00072842 /* _CPTFillGradient.m */; }; C38A0A811A4620F700D45436 /* _CPTFillImage.m in Sources */ = {isa = PBXBuildFile; fileRef = C342601D0FAE096C00072842 /* _CPTFillImage.m */; }; - C38A0A821A4620F800D45436 /* CPTFill.m in Sources */ = {isa = PBXBuildFile; fileRef = C342601A0FAE096C00072842 /* CPTFill.m */; }; - C38A0A831A4620F800D45436 /* _CPTFillColor.m in Sources */ = {isa = PBXBuildFile; fileRef = C342601C0FAE096C00072842 /* _CPTFillColor.m */; }; - C38A0A841A4620F800D45436 /* _CPTFillGradient.m in Sources */ = {isa = PBXBuildFile; fileRef = C34260190FAE096C00072842 /* _CPTFillGradient.m */; }; - C38A0A851A4620F800D45436 /* _CPTFillImage.m in Sources */ = {isa = PBXBuildFile; fileRef = C342601D0FAE096C00072842 /* _CPTFillImage.m */; }; C38A0A861A46210A00D45436 /* CPTColorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979AB13D2332500145DFF /* CPTColorTests.m */; }; C38A0A871A46210A00D45436 /* CPTColorSpaceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979AE13D2337E00145DFF /* CPTColorSpaceTests.m */; }; C38A0A881A46210A00D45436 /* CPTFillTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979BA13D2347300145DFF /* CPTFillTests.m */; }; C38A0A891A46210A00D45436 /* CPTGradientTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979B113D233C000145DFF /* CPTGradientTests.m */; }; C38A0A8A1A46210A00D45436 /* CPTImageTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979B413D2340000145DFF /* CPTImageTests.m */; }; C38A0A8B1A46210A00D45436 /* CPTLineStyleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979B713D2344000145DFF /* CPTLineStyleTests.m */; }; - C38A0A8C1A46210A00D45436 /* CPTColorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979AB13D2332500145DFF /* CPTColorTests.m */; }; - C38A0A8D1A46210A00D45436 /* CPTColorSpaceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979AE13D2337E00145DFF /* CPTColorSpaceTests.m */; }; - C38A0A8E1A46210A00D45436 /* CPTFillTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979BA13D2347300145DFF /* CPTFillTests.m */; }; - C38A0A8F1A46210A00D45436 /* CPTGradientTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979B113D233C000145DFF /* CPTGradientTests.m */; }; - C38A0A901A46210A00D45436 /* CPTImageTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979B413D2340000145DFF /* CPTImageTests.m */; }; - C38A0A911A46210A00D45436 /* CPTLineStyleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979B713D2344000145DFF /* CPTLineStyleTests.m */; }; C38A0A951A46218B00D45436 /* CPTCalendarFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = C349DCB2151AAFBF00BFD6A7 /* CPTCalendarFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0A961A46218B00D45436 /* CPTTimeFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 07A2E6FA102DF47900809BC5 /* CPTTimeFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0A971A46219100D45436 /* CPTCalendarFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = C349DCB3151AAFBF00BFD6A7 /* CPTCalendarFormatter.m */; }; C38A0A981A46219100D45436 /* CPTTimeFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 07A2E6FB102DF47900809BC5 /* CPTTimeFormatter.m */; }; - C38A0A991A46219200D45436 /* CPTCalendarFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = C349DCB3151AAFBF00BFD6A7 /* CPTCalendarFormatter.m */; }; - C38A0A9A1A46219200D45436 /* CPTTimeFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 07A2E6FB102DF47900809BC5 /* CPTTimeFormatter.m */; }; C38A0A9B1A46219600D45436 /* CPTTimeFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979A813D2328000145DFF /* CPTTimeFormatterTests.m */; }; - C38A0A9C1A46219700D45436 /* CPTTimeFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979A813D2328000145DFF /* CPTTimeFormatterTests.m */; }; C38A0A9D1A4621A500D45436 /* NSCoderExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = C3978E0413CE653B00A420D9 /* NSCoderExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; C38A0A9E1A4621A500D45436 /* NSDecimalNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CD7E7EE0F4B4FA700F9BCBB /* NSDecimalNumberExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; C38A0A9F1A4621A500D45436 /* NSNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 078F42D90FACC075006E670B /* NSNumberExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; C38A0AA01A4621AC00D45436 /* NSCoderExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = C3978E0513CE653B00A420D9 /* NSCoderExtensions.m */; }; C38A0AA11A4621AC00D45436 /* NSDecimalNumberExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7E7EF0F4B4FA700F9BCBB /* NSDecimalNumberExtensions.m */; }; C38A0AA21A4621AC00D45436 /* NSNumberExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 078F42DA0FACC075006E670B /* NSNumberExtensions.m */; }; - C38A0AA31A4621AD00D45436 /* NSCoderExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = C3978E0513CE653B00A420D9 /* NSCoderExtensions.m */; }; - C38A0AA41A4621AD00D45436 /* NSDecimalNumberExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7E7EF0F4B4FA700F9BCBB /* NSDecimalNumberExtensions.m */; }; - C38A0AA51A4621AD00D45436 /* NSNumberExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 078F42DA0FACC075006E670B /* NSNumberExtensions.m */; }; C38A0AA71A46240300D45436 /* CPTGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = 07BF0D700F2B718F002FCEA7 /* CPTGraph.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0AA81A46240300D45436 /* CPTXYGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = 07983EF40F2F9A3D008C8618 /* CPTXYGraph.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0AA91A46240900D45436 /* CPTGraph.m in Sources */ = {isa = PBXBuildFile; fileRef = 07BF0D710F2B718F002FCEA7 /* CPTGraph.m */; }; C38A0AAA1A46240900D45436 /* CPTXYGraph.m in Sources */ = {isa = PBXBuildFile; fileRef = 07983EF50F2F9A3D008C8618 /* CPTXYGraph.m */; }; - C38A0AAB1A46240A00D45436 /* CPTGraph.m in Sources */ = {isa = PBXBuildFile; fileRef = 07BF0D710F2B718F002FCEA7 /* CPTGraph.m */; }; - C38A0AAC1A46240A00D45436 /* CPTXYGraph.m in Sources */ = {isa = PBXBuildFile; fileRef = 07983EF50F2F9A3D008C8618 /* CPTXYGraph.m */; }; C38A0AAD1A46241100D45436 /* CPTPlotAreaFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 07BF0D760F2B723A002FCEA7 /* CPTPlotAreaFrame.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0AAE1A46241100D45436 /* CPTPlotArea.h in Headers */ = {isa = PBXBuildFile; fileRef = C34BF5BA10A67633007F0894 /* CPTPlotArea.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0AAF1A46241100D45436 /* CPTLimitBand.h in Headers */ = {isa = PBXBuildFile; fileRef = C318F4AB11EA188700595FF9 /* CPTLimitBand.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0AB01A46241700D45436 /* CPTPlotAreaFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 07BF0D770F2B723A002FCEA7 /* CPTPlotAreaFrame.m */; }; C38A0AB11A46241700D45436 /* CPTPlotArea.m in Sources */ = {isa = PBXBuildFile; fileRef = C34BF5BB10A67633007F0894 /* CPTPlotArea.m */; }; C38A0AB21A46241700D45436 /* CPTLimitBand.m in Sources */ = {isa = PBXBuildFile; fileRef = C318F4AC11EA188700595FF9 /* CPTLimitBand.m */; }; - C38A0AB31A46241800D45436 /* CPTPlotAreaFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 07BF0D770F2B723A002FCEA7 /* CPTPlotAreaFrame.m */; }; - C38A0AB41A46241800D45436 /* CPTPlotArea.m in Sources */ = {isa = PBXBuildFile; fileRef = C34BF5BB10A67633007F0894 /* CPTPlotArea.m */; }; - C38A0AB51A46241800D45436 /* CPTLimitBand.m in Sources */ = {isa = PBXBuildFile; fileRef = C318F4AC11EA188700595FF9 /* CPTLimitBand.m */; }; C38A0AB61A4624C200D45436 /* CPTPlotSpace.h in Headers */ = {isa = PBXBuildFile; fileRef = 07BF0D7A0F2B72B0002FCEA7 /* CPTPlotSpace.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0AB71A4624C200D45436 /* CPTXYPlotSpace.h in Headers */ = {isa = PBXBuildFile; fileRef = 0799E0970F2BB6E800790525 /* CPTXYPlotSpace.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0AB81A46250500D45436 /* CPTPlotSpace.m in Sources */ = {isa = PBXBuildFile; fileRef = 07BF0D7B0F2B72B0002FCEA7 /* CPTPlotSpace.m */; }; C38A0AB91A46250500D45436 /* CPTXYPlotSpace.m in Sources */ = {isa = PBXBuildFile; fileRef = 90AF4FB90F36D39700753D26 /* CPTXYPlotSpace.m */; }; - C38A0ABA1A46250600D45436 /* CPTPlotSpace.m in Sources */ = {isa = PBXBuildFile; fileRef = 07BF0D7B0F2B72B0002FCEA7 /* CPTPlotSpace.m */; }; - C38A0ABB1A46250600D45436 /* CPTXYPlotSpace.m in Sources */ = {isa = PBXBuildFile; fileRef = 90AF4FB90F36D39700753D26 /* CPTXYPlotSpace.m */; }; C38A0ABC1A46250B00D45436 /* CPTPlotSpaceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979A313D2136600145DFF /* CPTPlotSpaceTests.m */; }; C38A0ABD1A46250B00D45436 /* CPTXYPlotSpaceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C422A630FB1FCD5000CAA43 /* CPTXYPlotSpaceTests.m */; }; - C38A0ABE1A46250C00D45436 /* CPTPlotSpaceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979A313D2136600145DFF /* CPTPlotSpaceTests.m */; }; - C38A0ABF1A46250C00D45436 /* CPTXYPlotSpaceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C422A630FB1FCD5000CAA43 /* CPTXYPlotSpaceTests.m */; }; C38A0AC01A46254E00D45436 /* CPTPlotGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F31DE81045EB470058520A /* CPTPlotGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; C38A0AC11A46255C00D45436 /* CPTPlot.h in Headers */ = {isa = PBXBuildFile; fileRef = 07BF0D7E0F2B72F6002FCEA7 /* CPTPlot.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0AC21A46255C00D45436 /* CPTBarPlot.h in Headers */ = {isa = PBXBuildFile; fileRef = 0799E0930F2BB5F300790525 /* CPTBarPlot.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -693,23 +606,13 @@ C38A0ACB1A46256500D45436 /* CPTRangePlot.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C0477B12D6560900DA8047 /* CPTRangePlot.m */; }; C38A0ACC1A46256500D45436 /* CPTScatterPlot.m in Sources */ = {isa = PBXBuildFile; fileRef = 07BF0D960F2B73CA002FCEA7 /* CPTScatterPlot.m */; }; C38A0ACD1A46256500D45436 /* CPTTradingRangePlot.m in Sources */ = {isa = PBXBuildFile; fileRef = 0772B43810E24D5C009CD04C /* CPTTradingRangePlot.m */; }; - C38A0ACE1A46256600D45436 /* CPTPlotGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F31DE71045EB470058520A /* CPTPlotGroup.m */; }; - C38A0ACF1A46256600D45436 /* CPTPlot.m in Sources */ = {isa = PBXBuildFile; fileRef = 07BF0D7F0F2B72F6002FCEA7 /* CPTPlot.m */; }; - C38A0AD01A46256600D45436 /* CPTBarPlot.m in Sources */ = {isa = PBXBuildFile; fileRef = 0799E0940F2BB5F300790525 /* CPTBarPlot.m */; }; - C38A0AD11A46256600D45436 /* CPTPieChart.m in Sources */ = {isa = PBXBuildFile; fileRef = BC74A32F10FC402600E7E90D /* CPTPieChart.m */; }; - C38A0AD21A46256600D45436 /* CPTRangePlot.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C0477B12D6560900DA8047 /* CPTRangePlot.m */; }; - C38A0AD31A46256600D45436 /* CPTScatterPlot.m in Sources */ = {isa = PBXBuildFile; fileRef = 07BF0D960F2B73CA002FCEA7 /* CPTScatterPlot.m */; }; - C38A0AD41A46256600D45436 /* CPTTradingRangePlot.m in Sources */ = {isa = PBXBuildFile; fileRef = 0772B43810E24D5C009CD04C /* CPTTradingRangePlot.m */; }; C38A0AD51A46256B00D45436 /* CPTPlotSymbol.h in Headers */ = {isa = PBXBuildFile; fileRef = C34AFE6911021D010041675A /* CPTPlotSymbol.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0AD61A46257100D45436 /* CPTPlotSymbol.m in Sources */ = {isa = PBXBuildFile; fileRef = C34AFE6A11021D010041675A /* CPTPlotSymbol.m */; }; - C38A0AD71A46257200D45436 /* CPTPlotSymbol.m in Sources */ = {isa = PBXBuildFile; fileRef = C34AFE6A11021D010041675A /* CPTPlotSymbol.m */; }; C38A0AD81A46257600D45436 /* CPTScatterPlotTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 07FEBD61110B7E8B00E44D37 /* CPTScatterPlotTests.m */; }; - C38A0AD91A46257700D45436 /* CPTScatterPlotTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 07FEBD61110B7E8B00E44D37 /* CPTScatterPlotTests.m */; }; C38A0ADA1A4625B100D45436 /* CPTGridLines.h in Headers */ = {isa = PBXBuildFile; fileRef = C32B391610AA4C78000470D4 /* CPTGridLines.h */; settings = {ATTRIBUTES = (Private, ); }; }; C38A0ADB1A4625B100D45436 /* CPTGridLineGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C38DD49111A04B7A002A68E7 /* CPTGridLineGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; C38A0ADC1A4625C100D45436 /* CPTAxisLabelGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C032C710B8DEDC003A11B6 /* CPTAxisLabelGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; C38A0ADD1A4625C900D45436 /* CPTAxisLabelTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD23FFB0FFBE78400ADD2E2 /* CPTAxisLabelTests.m */; }; - C38A0ADE1A4625CA00D45436 /* CPTAxisLabelTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD23FFB0FFBE78400ADD2E2 /* CPTAxisLabelTests.m */; }; C38A0ADF1A4625D400D45436 /* CPTAxis.m in Sources */ = {isa = PBXBuildFile; fileRef = 07975C480F3B818800DE45DC /* CPTAxis.m */; }; C38A0AE01A4625D400D45436 /* CPTAxisSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 07BF0D830F2B7340002FCEA7 /* CPTAxisSet.m */; }; C38A0AE11A4625D400D45436 /* CPTGridLines.m in Sources */ = {isa = PBXBuildFile; fileRef = C32B391710AA4C78000470D4 /* CPTGridLines.m */; }; @@ -719,15 +622,6 @@ C38A0AE51A4625D400D45436 /* CPTAxisLabelGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C032C810B8DEDC003A11B6 /* CPTAxisLabelGroup.m */; }; C38A0AE61A4625D400D45436 /* CPTXYAxis.m in Sources */ = {isa = PBXBuildFile; fileRef = 0783DD540FBF097E006C3696 /* CPTXYAxis.m */; }; C38A0AE71A4625D400D45436 /* CPTXYAxisSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 07975C420F3B816600DE45DC /* CPTXYAxisSet.m */; }; - C38A0AE81A4625D500D45436 /* CPTAxis.m in Sources */ = {isa = PBXBuildFile; fileRef = 07975C480F3B818800DE45DC /* CPTAxis.m */; }; - C38A0AE91A4625D500D45436 /* CPTAxisSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 07BF0D830F2B7340002FCEA7 /* CPTAxisSet.m */; }; - C38A0AEA1A4625D500D45436 /* CPTGridLines.m in Sources */ = {isa = PBXBuildFile; fileRef = C32B391710AA4C78000470D4 /* CPTGridLines.m */; }; - C38A0AEB1A4625D500D45436 /* CPTGridLineGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C38DD49211A04B7A002A68E7 /* CPTGridLineGroup.m */; }; - C38A0AEC1A4625D500D45436 /* CPTAxisLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 073FB02F0FC991A3007A728E /* CPTAxisLabel.m */; }; - C38A0AED1A4625D500D45436 /* CPTAxisTitle.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFC7C3610921FDB00DAECAA /* CPTAxisTitle.m */; }; - C38A0AEE1A4625D500D45436 /* CPTAxisLabelGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C032C810B8DEDC003A11B6 /* CPTAxisLabelGroup.m */; }; - C38A0AEF1A4625D500D45436 /* CPTXYAxis.m in Sources */ = {isa = PBXBuildFile; fileRef = 0783DD540FBF097E006C3696 /* CPTXYAxis.m */; }; - C38A0AF01A4625D500D45436 /* CPTXYAxisSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 07975C420F3B816600DE45DC /* CPTXYAxisSet.m */; }; C38A0AF11A4625E800D45436 /* CPTAxis.h in Headers */ = {isa = PBXBuildFile; fileRef = 07975C470F3B818800DE45DC /* CPTAxis.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0AF21A4625E800D45436 /* CPTAxisSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 07BF0D820F2B7340002FCEA7 /* CPTAxisSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0AF31A4625E800D45436 /* CPTAxisLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = 073FB02E0FC991A3007A728E /* CPTAxisLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -738,8 +632,6 @@ C38A0AF81A4625F500D45436 /* CPTLegendEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = C30550EB1399BE5400E0151F /* CPTLegendEntry.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0AF91A4625FA00D45436 /* CPTLegend.m in Sources */ = {isa = PBXBuildFile; fileRef = C3920AC31395B6500045F3BB /* CPTLegend.m */; }; C38A0AFA1A4625FA00D45436 /* CPTLegendEntry.m in Sources */ = {isa = PBXBuildFile; fileRef = C30550EC1399BE5400E0151F /* CPTLegendEntry.m */; }; - C38A0AFB1A4625FB00D45436 /* CPTLegend.m in Sources */ = {isa = PBXBuildFile; fileRef = C3920AC31395B6500045F3BB /* CPTLegend.m */; }; - C38A0AFC1A4625FB00D45436 /* CPTLegendEntry.m in Sources */ = {isa = PBXBuildFile; fileRef = C30550EC1399BE5400E0151F /* CPTLegendEntry.m */; }; C38A0AFD1A46260300D45436 /* CPTTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = 0772C9250FE2F71600EC4C16 /* CPTTheme.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0AFE1A46260B00D45436 /* _CPTXYTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = C3DA34CB107AD7710051DA02 /* _CPTXYTheme.h */; settings = {ATTRIBUTES = (Private, ); }; }; C38A0AFF1A46260B00D45436 /* _CPTDarkGradientTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = 0772C92D0FE2F89000EC4C16 /* _CPTDarkGradientTheme.h */; settings = {ATTRIBUTES = (Private, ); }; }; @@ -754,31 +646,17 @@ C38A0B081A46261700D45436 /* _CPTPlainWhiteTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = BC55022F10059F22005DF982 /* _CPTPlainWhiteTheme.m */; }; C38A0B091A46261700D45436 /* _CPTSlateTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = 07FCF2C5115B54AE00E46606 /* _CPTSlateTheme.m */; }; C38A0B0A1A46261700D45436 /* _CPTStocksTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = BC55023110059F22005DF982 /* _CPTStocksTheme.m */; }; - C38A0B0B1A46261700D45436 /* CPTTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = 0772C9260FE2F71600EC4C16 /* CPTTheme.m */; }; - C38A0B0C1A46261700D45436 /* _CPTXYTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = C3DA34CA107AD7710051DA02 /* _CPTXYTheme.m */; }; - C38A0B0D1A46261700D45436 /* _CPTDarkGradientTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = 0772C92E0FE2F89000EC4C16 /* _CPTDarkGradientTheme.m */; }; - C38A0B0E1A46261700D45436 /* _CPTPlainBlackTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = BC55022D10059F22005DF982 /* _CPTPlainBlackTheme.m */; }; - C38A0B0F1A46261700D45436 /* _CPTPlainWhiteTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = BC55022F10059F22005DF982 /* _CPTPlainWhiteTheme.m */; }; - C38A0B101A46261700D45436 /* _CPTSlateTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = 07FCF2C5115B54AE00E46606 /* _CPTSlateTheme.m */; }; - C38A0B111A46261700D45436 /* _CPTStocksTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = BC55023110059F22005DF982 /* _CPTStocksTheme.m */; }; C38A0B121A46261F00D45436 /* CPTThemeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E1620CBD100F03A100A84E77 /* CPTThemeTests.m */; }; C38A0B131A46261F00D45436 /* CPTDarkGradientThemeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E1FE6051100F27EF00895A91 /* CPTDarkGradientThemeTests.m */; }; C38A0B141A46261F00D45436 /* CPTDerivedXYGraph.m in Sources */ = {isa = PBXBuildFile; fileRef = E1FE611A100F3FB700895A91 /* CPTDerivedXYGraph.m */; }; - C38A0B151A46262000D45436 /* CPTThemeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E1620CBD100F03A100A84E77 /* CPTThemeTests.m */; }; - C38A0B161A46262000D45436 /* CPTDarkGradientThemeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E1FE6051100F27EF00895A91 /* CPTDarkGradientThemeTests.m */; }; - C38A0B171A46262000D45436 /* CPTDerivedXYGraph.m in Sources */ = {isa = PBXBuildFile; fileRef = E1FE611A100F3FB700895A91 /* CPTDerivedXYGraph.m */; }; C38A0B1E1A46264500D45436 /* CPTPlatformSpecificCategories.h in Headers */ = {isa = PBXBuildFile; fileRef = C38A0B181A46264500D45436 /* CPTPlatformSpecificCategories.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0B1F1A46264500D45436 /* CPTPlatformSpecificCategories.m in Sources */ = {isa = PBXBuildFile; fileRef = C38A0B191A46264500D45436 /* CPTPlatformSpecificCategories.m */; }; - C38A0B201A46264500D45436 /* CPTPlatformSpecificCategories.m in Sources */ = {isa = PBXBuildFile; fileRef = C38A0B191A46264500D45436 /* CPTPlatformSpecificCategories.m */; }; C38A0B211A46264500D45436 /* CPTPlatformSpecificDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = C38A0B1A1A46264500D45436 /* CPTPlatformSpecificDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0B221A46264500D45436 /* CPTPlatformSpecificDefines.m in Sources */ = {isa = PBXBuildFile; fileRef = C38A0B1B1A46264500D45436 /* CPTPlatformSpecificDefines.m */; }; - C38A0B231A46264500D45436 /* CPTPlatformSpecificDefines.m in Sources */ = {isa = PBXBuildFile; fileRef = C38A0B1B1A46264500D45436 /* CPTPlatformSpecificDefines.m */; }; C38A0B241A46264500D45436 /* CPTPlatformSpecificFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = C38A0B1C1A46264500D45436 /* CPTPlatformSpecificFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0B251A46264500D45436 /* CPTPlatformSpecificFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = C38A0B1D1A46264500D45436 /* CPTPlatformSpecificFunctions.m */; }; - C38A0B261A46264500D45436 /* CPTPlatformSpecificFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = C38A0B1D1A46264500D45436 /* CPTPlatformSpecificFunctions.m */; }; C38A0B291A46265300D45436 /* CPTGraphHostingView.h in Headers */ = {isa = PBXBuildFile; fileRef = C38A0B271A46265300D45436 /* CPTGraphHostingView.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0B2A1A46265300D45436 /* CPTGraphHostingView.m in Sources */ = {isa = PBXBuildFile; fileRef = C38A0B281A46265300D45436 /* CPTGraphHostingView.m */; }; - C38A0B2B1A46265300D45436 /* CPTGraphHostingView.m in Sources */ = {isa = PBXBuildFile; fileRef = C38A0B281A46265300D45436 /* CPTGraphHostingView.m */; }; C38DD49311A04B7A002A68E7 /* CPTGridLineGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C38DD49111A04B7A002A68E7 /* CPTGridLineGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; C38DD49411A04B7A002A68E7 /* CPTGridLineGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C38DD49211A04B7A002A68E7 /* CPTGridLineGroup.m */; }; C3920AC41395B6500045F3BB /* CPTLegend.h in Headers */ = {isa = PBXBuildFile; fileRef = C3920AC21395B6500045F3BB /* CPTLegend.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -794,7 +672,6 @@ C3BB3C901C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.h in Headers */ = {isa = PBXBuildFile; fileRef = C3BB3C8C1C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.h */; }; C3BB3C911C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = C3BB3C8D1C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.m */; }; C3BB3C921C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = C3BB3C8D1C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.m */; }; - C3BB3C931C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = C3BB3C8D1C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.m */; }; C3BB3C941C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = C3BB3C8D1C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.m */; }; C3BB93191B729BD200004527 /* CPTDebugQuickLook.h in Headers */ = {isa = PBXBuildFile; fileRef = C3BB93181B729BD200004527 /* CPTDebugQuickLook.h */; }; C3BB931A1B729BD200004527 /* CPTDebugQuickLook.h in Headers */ = {isa = PBXBuildFile; fileRef = C3BB93181B729BD200004527 /* CPTDebugQuickLook.h */; }; @@ -842,9 +719,6 @@ C3D979BB13D2347400145DFF /* CPTFillTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979BA13D2347300145DFF /* CPTFillTests.m */; }; C3DA34CC107AD7710051DA02 /* _CPTXYTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = C3DA34CA107AD7710051DA02 /* _CPTXYTheme.m */; }; C3DA34CD107AD7710051DA02 /* _CPTXYTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = C3DA34CB107AD7710051DA02 /* _CPTXYTheme.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C3EE4E691A6C133D0098F4E6 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3226A511A69F6DA00F77249 /* QuartzCore.framework */; }; - C3EE4E6A1A6C134B0098F4E6 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3226A571A69F6FA00F77249 /* CoreGraphics.framework */; }; - C3EE4E6B1A6C13560098F4E6 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3226A531A69F6DF00F77249 /* UIKit.framework */; }; C3EE4E6E1A6C15890098F4E6 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07BF0D630F2B70B8002FCEA7 /* QuartzCore.framework */; }; C3EE4E981A6C1E890098F4E6 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3EE4E971A6C1E890098F4E6 /* Cocoa.framework */; }; C3EE4E9A1A6C1F770098F4E6 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07BF0D630F2B70B8002FCEA7 /* QuartzCore.framework */; }; @@ -883,13 +757,6 @@ remoteGlobalIDString = C38A09771A46185200D45436; remoteInfo = "CorePlot-iOS"; }; - C38A09C61A4619A900D45436 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = C38A09B91A4619A900D45436; - remoteInfo = "CorePlot-CocoaTouch"; - }; C3B4D4951BC997F600450C37 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; @@ -899,18 +766,6 @@ }; /* End PBXContainerItemProxy section */ -/* Begin PBXCopyFilesBuildPhase section */ - C38A09B81A4619A900D45436 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "include/$(PRODUCT_NAME)"; - dstSubfolderSpec = 16; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - /* Begin PBXFileReference section */ 070064E7111F2BAA003DE087 /* CPTConstraints.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTConstraints.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; 070064E8111F2BAA003DE087 /* CPTConstraints.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTConstraints.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; @@ -1105,8 +960,6 @@ C37EA6B71BC83F2D0091C8F7 /* UnitTests tvOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "UnitTests tvOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; C38A09781A46185200D45436 /* CorePlot.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CorePlot.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C38A09821A46185300D45436 /* UnitTests iOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "UnitTests iOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - C38A09BA1A4619A900D45436 /* libCorePlot-CocoaTouch.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libCorePlot-CocoaTouch.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - C38A09C41A4619A900D45436 /* CorePlot-CocoaTouchTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "CorePlot-CocoaTouchTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; C38A0A531A461F9700D45436 /* CPTTextStylePlatformSpecific.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPTTextStylePlatformSpecific.h; path = PlatformSpecific/CPTTextStylePlatformSpecific.h; sourceTree = SOURCE_ROOT; }; C38A0A541A461F9700D45436 /* CPTTextStylePlatformSpecific.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CPTTextStylePlatformSpecific.m; path = PlatformSpecific/CPTTextStylePlatformSpecific.m; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; C38A0A591A4620B800D45436 /* CPTImagePlatformSpecific.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CPTImagePlatformSpecific.m; path = PlatformSpecific/CPTImagePlatformSpecific.m; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; @@ -1256,27 +1109,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - C38A09B71A4619A900D45436 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C3226A581A69F6FA00F77249 /* CoreGraphics.framework in Frameworks */, - C3226A521A69F6DA00F77249 /* QuartzCore.framework in Frameworks */, - C3226A541A69F6DF00F77249 /* UIKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C38A09C11A4619A900D45436 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C3EE4E6A1A6C134B0098F4E6 /* CoreGraphics.framework in Frameworks */, - C3EE4E691A6C133D0098F4E6 /* QuartzCore.framework in Frameworks */, - C3EE4E6B1A6C13560098F4E6 /* UIKit.framework in Frameworks */, - C38A09C51A4619A900D45436 /* libCorePlot-CocoaTouch.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -1287,8 +1119,6 @@ 0730F600109492D800E95162 /* UnitTests.xctest */, C38A09781A46185200D45436 /* CorePlot.framework */, C38A09821A46185300D45436 /* UnitTests iOS.xctest */, - C38A09BA1A4619A900D45436 /* libCorePlot-CocoaTouch.a */, - C38A09C41A4619A900D45436 /* CorePlot-CocoaTouchTests.xctest */, C37EA6921BC83F2A0091C8F7 /* CorePlot.framework */, C37EA6B71BC83F2D0091C8F7 /* UnitTests tvOS.xctest */, ); @@ -2377,41 +2207,6 @@ productReference = C38A09821A46185300D45436 /* UnitTests iOS.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; - C38A09B91A4619A900D45436 /* CorePlot-CocoaTouch */ = { - isa = PBXNativeTarget; - buildConfigurationList = C38A09CB1A4619A900D45436 /* Build configuration list for PBXNativeTarget "CorePlot-CocoaTouch" */; - buildPhases = ( - C38A09B61A4619A900D45436 /* Sources */, - C38A09B71A4619A900D45436 /* Frameworks */, - C38A09B81A4619A900D45436 /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "CorePlot-CocoaTouch"; - productName = "CorePlot-CocoaTouch"; - productReference = C38A09BA1A4619A900D45436 /* libCorePlot-CocoaTouch.a */; - productType = "com.apple.product-type.library.static"; - }; - C38A09C31A4619A900D45436 /* CorePlot-CocoaTouchTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = C38A09CE1A4619A900D45436 /* Build configuration list for PBXNativeTarget "CorePlot-CocoaTouchTests" */; - buildPhases = ( - C38A09C01A4619A900D45436 /* Sources */, - C38A09C11A4619A900D45436 /* Frameworks */, - C38A09C21A4619A900D45436 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - C38A09C71A4619A900D45436 /* PBXTargetDependency */, - ); - name = "CorePlot-CocoaTouchTests"; - productName = "CorePlot-CocoaTouchTests"; - productReference = C38A09C41A4619A900D45436 /* CorePlot-CocoaTouchTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -2429,12 +2224,6 @@ C38A09811A46185300D45436 = { CreatedOnToolsVersion = 6.1.1; }; - C38A09B91A4619A900D45436 = { - CreatedOnToolsVersion = 6.1.1; - }; - C38A09C31A4619A900D45436 = { - CreatedOnToolsVersion = 6.1.1; - }; }; }; buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "CorePlot" */; @@ -2457,8 +2246,6 @@ 0730F5FF109492D800E95162 /* UnitTests Mac */, C38A09771A46185200D45436 /* CorePlot iOS */, C38A09811A46185300D45436 /* UnitTests iOS */, - C38A09B91A4619A900D45436 /* CorePlot-CocoaTouch */, - C38A09C31A4619A900D45436 /* CorePlot-CocoaTouchTests */, C37EA5C91BC83F2A0091C8F7 /* CorePlot tvOS */, C37EA6941BC83F2D0091C8F7 /* UnitTests tvOS */, 9021E49E0FC5C9DC00443472 /* Documentation-Mac */, @@ -2516,13 +2303,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - C38A09C21A4619A900D45436 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ @@ -3007,139 +2787,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - C38A09B61A4619A900D45436 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C38A0A461A461F0200D45436 /* _CPTConstraintsRelative.m in Sources */, - C38A0ABB1A46250600D45436 /* CPTXYPlotSpace.m in Sources */, - C38A0A821A4620F800D45436 /* CPTFill.m in Sources */, - C38A09F41A461CF600D45436 /* CPTExceptions.m in Sources */, - C38A0AB51A46241800D45436 /* CPTLimitBand.m in Sources */, - C38A0A841A4620F800D45436 /* _CPTFillGradient.m in Sources */, - C38A0AED1A4625D500D45436 /* CPTAxisTitle.m in Sources */, - C38A0A851A4620F800D45436 /* _CPTFillImage.m in Sources */, - C38A09FA1A461D0C00D45436 /* CPTPlotRange.m in Sources */, - C38A0AEB1A4625D500D45436 /* CPTGridLineGroup.m in Sources */, - C38A0A491A461F1200D45436 /* CPTTextLayer.m in Sources */, - C38A0B111A46261700D45436 /* _CPTStocksTheme.m in Sources */, - C38A0AD71A46257200D45436 /* CPTPlotSymbol.m in Sources */, - C38A0A0A1A461D4D00D45436 /* CPTBorderedLayer.m in Sources */, - C38A0AD11A46256600D45436 /* CPTPieChart.m in Sources */, - C38A0AB41A46241800D45436 /* CPTPlotArea.m in Sources */, - C38A0A771A4620E200D45436 /* CPTPathExtensions.m in Sources */, - C38A0AE91A4625D500D45436 /* CPTAxisSet.m in Sources */, - C38A09E21A461C8900D45436 /* CPTMutableNumericData+TypeConversion.m in Sources */, - C38A0A251A461E9300D45436 /* _CPTAnimationCGSizePeriod.m in Sources */, - C38A0B201A46264500D45436 /* CPTPlatformSpecificCategories.m in Sources */, - C38A0AEF1A4625D500D45436 /* CPTXYAxis.m in Sources */, - C38A09DA1A461C6C00D45436 /* CPTNumericDataType.m in Sources */, - C38A0AD41A46256600D45436 /* CPTTradingRangePlot.m in Sources */, - C38A0ABA1A46250600D45436 /* CPTPlotSpace.m in Sources */, - C38A0A281A461E9B00D45436 /* _CPTAnimationCGRectPeriod.m in Sources */, - C38A0AEC1A4625D500D45436 /* CPTAxisLabel.m in Sources */, - C3BB3C931C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.m in Sources */, - C38A0A991A46219200D45436 /* CPTCalendarFormatter.m in Sources */, - C38A0A3A1A461ED700D45436 /* CPTLayerAnnotation.m in Sources */, - C38A0B231A46264500D45436 /* CPTPlatformSpecificDefines.m in Sources */, - C38A0AD21A46256600D45436 /* CPTRangePlot.m in Sources */, - C38A0A571A461F9700D45436 /* CPTTextStylePlatformSpecific.m in Sources */, - C38A0A341A461EC300D45436 /* CPTAnnotation.m in Sources */, - C38A0AFB1A4625FB00D45436 /* CPTLegend.m in Sources */, - C38A0AA51A4621AD00D45436 /* NSNumberExtensions.m in Sources */, - C38A0A791A4620E200D45436 /* CPTMutableShadow.m in Sources */, - C38A0B0D1A46261700D45436 /* _CPTDarkGradientTheme.m in Sources */, - C38A0AE81A4625D500D45436 /* CPTAxis.m in Sources */, - C38A0AEE1A4625D500D45436 /* CPTAxisLabelGroup.m in Sources */, - C38A0AFC1A4625FB00D45436 /* CPTLegendEntry.m in Sources */, - C38A0A401A461EEB00D45436 /* CPTConstraints.m in Sources */, - C38A0A1F1A461E7B00D45436 /* _CPTAnimationCGFloatPeriod.m in Sources */, - C38A0AB31A46241800D45436 /* CPTPlotAreaFrame.m in Sources */, - C38A0B0C1A46261700D45436 /* _CPTXYTheme.m in Sources */, - C38A0A371A461ECD00D45436 /* CPTPlotSpaceAnnotation.m in Sources */, - C38A0A191A461E6100D45436 /* CPTAnimationOperation.m in Sources */, - C38A0ACF1A46256600D45436 /* CPTPlot.m in Sources */, - C38A0A101A461D5F00D45436 /* _CPTMaskLayer.m in Sources */, - C38A0ACE1A46256600D45436 /* CPTPlotGroup.m in Sources */, - C38A0A781A4620E200D45436 /* CPTShadow.m in Sources */, - C38A0B0B1A46261700D45436 /* CPTTheme.m in Sources */, - C38A0A431A461EF600D45436 /* _CPTConstraintsFixed.m in Sources */, - C38A09FD1A461D1400D45436 /* CPTMutablePlotRange.m in Sources */, - C38A09F71A461D0100D45436 /* CPTUtilities.m in Sources */, - C38A0A721A4620E200D45436 /* CPTGradient.m in Sources */, - C38A0A9A1A46219200D45436 /* CPTTimeFormatter.m in Sources */, - C38A0A161A461E5800D45436 /* CPTAnimation.m in Sources */, - C38A0AAC1A46240A00D45436 /* CPTXYGraph.m in Sources */, - C38A0A751A4620E200D45436 /* CPTLineStyle.m in Sources */, - C38A09DE1A461C8100D45436 /* CPTMutableNumericData.m in Sources */, - C38A0B0E1A46261700D45436 /* _CPTPlainBlackTheme.m in Sources */, - C38A0B2B1A46265300D45436 /* CPTGraphHostingView.m in Sources */, - C38A0B261A46264500D45436 /* CPTPlatformSpecificFunctions.m in Sources */, - C38A0A1C1A461E6B00D45436 /* CPTAnimationPeriod.m in Sources */, - C38A0AA31A4621AD00D45436 /* NSCoderExtensions.m in Sources */, - C38A0AEA1A4625D500D45436 /* CPTGridLines.m in Sources */, - C38A09DC1A461C7D00D45436 /* CPTNumericData.m in Sources */, - C38A0A2E1A461EAE00D45436 /* _CPTAnimationPlotRangePeriod.m in Sources */, - C38A0B0F1A46261700D45436 /* _CPTPlainWhiteTheme.m in Sources */, - C38A0A701A4620E200D45436 /* CPTColor.m in Sources */, - C38A09F11A461CDA00D45436 /* CPTDefinitions.m in Sources */, - C38A0AAB1A46240A00D45436 /* CPTGraph.m in Sources */, - C38A0AA41A4621AD00D45436 /* NSDecimalNumberExtensions.m in Sources */, - C38A0A4F1A461F2200D45436 /* CPTMutableTextStyle.m in Sources */, - C38A0A831A4620F800D45436 /* _CPTFillColor.m in Sources */, - C38A0A761A4620E200D45436 /* CPTMutableLineStyle.m in Sources */, - C38A0A731A4620E200D45436 /* CPTImage.m in Sources */, - C38A0AF01A4625D500D45436 /* CPTXYAxisSet.m in Sources */, - C38A09E01A461C8500D45436 /* CPTNumericData+TypeConversion.m in Sources */, - C38A0A3D1A461EE000D45436 /* CPTAnnotationHostLayer.m in Sources */, - C38A0A311A461EB600D45436 /* _CPTAnimationTimingFunctions.m in Sources */, - C38A0A5B1A4620B800D45436 /* CPTImagePlatformSpecific.m in Sources */, - C38A0A4C1A461F1B00D45436 /* CPTTextStyle.m in Sources */, - C38A0B101A46261700D45436 /* _CPTSlateTheme.m in Sources */, - C38A0AD31A46256600D45436 /* CPTScatterPlot.m in Sources */, - C38A0A0D1A461D5800D45436 /* _CPTBorderLayer.m in Sources */, - C38A0A711A4620E200D45436 /* CPTColorSpace.m in Sources */, - C38A0A001A461D1D00D45436 /* CPTFunctionDataSource.m in Sources */, - C38A0A221A461E8C00D45436 /* _CPTAnimationCGPointPeriod.m in Sources */, - C38A0A2B1A461EA600D45436 /* _CPTAnimationNSDecimalPeriod.m in Sources */, - C38A0A741A4620E200D45436 /* CPTLineCap.m in Sources */, - C38A0AD01A46256600D45436 /* CPTBarPlot.m in Sources */, - C38A0A071A461D4500D45436 /* CPTLayer.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C38A09C01A4619A900D45436 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C38A09D41A461C1900D45436 /* CPTDataSourceTestCase.m in Sources */, - C38A0ADE1A4625CA00D45436 /* CPTAxisLabelTests.m in Sources */, - C38A09EB1A461CBB00D45436 /* CPTNumericDataTypeConversionTests.m in Sources */, - C38A0A8D1A46210A00D45436 /* CPTColorSpaceTests.m in Sources */, - C38A0A8F1A46210A00D45436 /* CPTGradientTests.m in Sources */, - C38A09D21A461C1300D45436 /* CPTTestCase.m in Sources */, - C38A0ABE1A46250C00D45436 /* CPTPlotSpaceTests.m in Sources */, - C38A0AD91A46257700D45436 /* CPTScatterPlotTests.m in Sources */, - C38A0A041A461D3200D45436 /* CPTUtilitiesTests.m in Sources */, - C38A0B151A46262000D45436 /* CPTThemeTests.m in Sources */, - C38A0A901A46210A00D45436 /* CPTImageTests.m in Sources */, - C38A0A911A46210A00D45436 /* CPTLineStyleTests.m in Sources */, - C38A0A021A461D2E00D45436 /* CPTPlotRangeTests.m in Sources */, - C38A0B171A46262000D45436 /* CPTDerivedXYGraph.m in Sources */, - C38A09E71A461CB300D45436 /* CPTMutableNumericDataTypeConversionTests.m in Sources */, - C38A0A8E1A46210A00D45436 /* CPTFillTests.m in Sources */, - C38A09E91A461CB700D45436 /* CPTNumericDataTests.m in Sources */, - C38A0ABF1A46250C00D45436 /* CPTXYPlotSpaceTests.m in Sources */, - C38A09E51A461CAE00D45436 /* CPTMutableNumericDataTests.m in Sources */, - C38A0B161A46262000D45436 /* CPTDarkGradientThemeTests.m in Sources */, - C38A0A131A461D6B00D45436 /* CPTLayerTests.m in Sources */, - C377B3BD1C122AA600891DF8 /* CPTCalendarFormatterTests.m in Sources */, - C38A0A9C1A46219700D45436 /* CPTTimeFormatterTests.m in Sources */, - C38A0A511A461F3D00D45436 /* CPTTextStyleTests.m in Sources */, - C38A0A8C1A46210A00D45436 /* CPTColorTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ @@ -3153,11 +2800,6 @@ target = C38A09771A46185200D45436 /* CorePlot iOS */; targetProxy = C38A09841A46185300D45436 /* PBXContainerItemProxy */; }; - C38A09C71A4619A900D45436 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = C38A09B91A4619A900D45436 /* CorePlot-CocoaTouch */; - targetProxy = C38A09C61A4619A900D45436 /* PBXContainerItemProxy */; - }; C3B4D4961BC997F600450C37 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = C37EA5C91BC83F2A0091C8F7 /* CorePlot tvOS */; @@ -3587,68 +3229,6 @@ }; name = Release; }; - C38A09CC1A4619A900D45436 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; - INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-CocoaTouch-Info.plist"; - INSTALL_PATH = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; - }; - name = Debug; - }; - C38A09CD1A4619A900D45436 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; - INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-CocoaTouch-Info.plist"; - INSTALL_PATH = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; - }; - name = Release; - }; - C38A09CF1A4619A900D45436 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; - INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-CocoaTouchTests-Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; - }; - name = Debug; - }; - C38A09D01A4619A900D45436 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; - INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-CocoaTouchTests-Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; - }; - name = Release; - }; C3A546821BC1A817005C1BBC /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3809,24 +3389,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C38A09CB1A4619A900D45436 /* Build configuration list for PBXNativeTarget "CorePlot-CocoaTouch" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C38A09CC1A4619A900D45436 /* Debug */, - C38A09CD1A4619A900D45436 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C38A09CE1A4619A900D45436 /* Build configuration list for PBXNativeTarget "CorePlot-CocoaTouchTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C38A09CF1A4619A900D45436 /* Debug */, - C38A09D01A4619A900D45436 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; C3A546811BC1A817005C1BBC /* Build configuration list for PBXAggregateTarget "Universal iOS Framework" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/CorePlot-CocoaTouch.xcscheme b/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/CorePlot-CocoaTouch.xcscheme deleted file mode 100644 index fe0aaaaef..000000000 --- a/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/CorePlot-CocoaTouch.xcscheme +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/scripts/createrelease.py b/scripts/createrelease.py index 0d94efe65..1d7db457a 100644 --- a/scripts/createrelease.py +++ b/scripts/createrelease.py @@ -78,13 +78,6 @@ def RunXcode(project, target): iOSFramework = join(iOSProductsDir, 'CorePlot.framework') copytree(iOSFramework, join(iosDir, 'CorePlot.framework'), symlinks=True) -# Build iOS Static Library -RunXcode('CorePlot.xcodeproj', 'Universal Library') -iOSLibFile = join(join(projectRoot, 'build/Release-universal'), 'libCorePlot-CocoaTouch.a') -copy(iOSLibFile, iosDir) -iOSHeaderFile = join(join(projectRoot, 'build/Release-universal'), 'CorePlotHeaders') -copytree(iOSHeaderFile, join(iosDir, 'CorePlotHeaders')) - # Build tvOS Framework RunXcode('CorePlot.xcodeproj', 'Universal tvOS Framework') tvOSProductsDir = join(projectRoot, 'build/Release-appletvuniversal') From 90cf88ca2a4858fcae015129109b2bf77a1e4684 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 13 Dec 2020 15:37:34 -0500 Subject: [PATCH 050/245] Changed the target name of the tvOS Plot Gallery to match the naming convention of the other OS versions. --- .../Plot_Gallery.xcodeproj/project.pbxproj | 40 +++---------------- .../xcschemes/Plot Gallery-tvOS.xcscheme | 16 ++++---- 2 files changed, 13 insertions(+), 43 deletions(-) diff --git a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj index b6a13a0ae..3c9b1ccd7 100644 --- a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj +++ b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj @@ -197,20 +197,6 @@ remoteGlobalIDString = C38A09821A46185300D45436; remoteInfo = CorePlot_iOSTests; }; - C3D414721A7D824700B6F5D6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 4F35EC1D1236AE6E007C3389 /* CorePlot.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C38A09BA1A4619A900D45436; - remoteInfo = "CorePlot-CocoaTouch"; - }; - C3D414741A7D824700B6F5D6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 4F35EC1D1236AE6E007C3389 /* CorePlot.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C38A09C41A4619A900D45436; - remoteInfo = "CorePlot-CocoaTouchTests"; - }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -542,8 +528,6 @@ 4F48928B1290FFCD00EDB93F /* UnitTests.xctest */, C3D4146F1A7D824700B6F5D6 /* CorePlot.framework */, C3D414711A7D824700B6F5D6 /* UnitTests iOS.xctest */, - C3D414731A7D824700B6F5D6 /* libCorePlot-CocoaTouch.a */, - C3D414751A7D824700B6F5D6 /* CorePlot-CocoaTouchTests.xctest */, C30D8B181BCAF99D0003BB70 /* CorePlot.framework */, C30D8B1A1BCAF99D0003BB70 /* UnitTests tvOS.xctest */, ); @@ -651,9 +635,9 @@ productReference = 8D1107320486CEB800E47090 /* Plot Gallery.app */; productType = "com.apple.product-type.application"; }; - C30D8AF51BCAF99D0003BB70 /* Plot Gallery tvOS */ = { + C30D8AF51BCAF99D0003BB70 /* Plot Gallery-tvOS */ = { isa = PBXNativeTarget; - buildConfigurationList = C30D8B1B1BCAF99D0003BB70 /* Build configuration list for PBXNativeTarget "Plot Gallery tvOS" */; + buildConfigurationList = C30D8B1B1BCAF99D0003BB70 /* Build configuration list for PBXNativeTarget "Plot Gallery-tvOS" */; buildPhases = ( C30D8AF21BCAF99D0003BB70 /* Sources */, C30D8AF31BCAF99D0003BB70 /* Frameworks */, @@ -664,7 +648,7 @@ dependencies = ( C30D8B1F1BCAFC080003BB70 /* PBXTargetDependency */, ); - name = "Plot Gallery tvOS"; + name = "Plot Gallery-tvOS"; productName = "Plot Gallery tvOS"; productReference = C30D8AF61BCAF99D0003BB70 /* Plot Gallery-tvOS.app */; productType = "com.apple.product-type.application"; @@ -730,7 +714,7 @@ targets = ( 8D1107260486CEB800E47090 /* Plot Gallery-Mac */, C34CB52D1BC9A76A009270A0 /* Plot Gallery-iOS */, - C30D8AF51BCAF99D0003BB70 /* Plot Gallery tvOS */, + C30D8AF51BCAF99D0003BB70 /* Plot Gallery-tvOS */, ); }; /* End PBXProject section */ @@ -778,20 +762,6 @@ remoteRef = C3D414701A7D824700B6F5D6 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - C3D414731A7D824700B6F5D6 /* libCorePlot-CocoaTouch.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libCorePlot-CocoaTouch.a"; - remoteRef = C3D414721A7D824700B6F5D6 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C3D414751A7D824700B6F5D6 /* CorePlot-CocoaTouchTests.xctest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = "CorePlot-CocoaTouchTests.xctest"; - remoteRef = C3D414741A7D824700B6F5D6 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; /* End PBXReferenceProxy section */ /* Begin PBXResourcesBuildPhase section */ @@ -1257,7 +1227,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C30D8B1B1BCAF99D0003BB70 /* Build configuration list for PBXNativeTarget "Plot Gallery tvOS" */ = { + C30D8B1B1BCAF99D0003BB70 /* Build configuration list for PBXNativeTarget "Plot Gallery-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( C30D8B0A1BCAF99D0003BB70 /* Debug */, diff --git a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/xcshareddata/xcschemes/Plot Gallery-tvOS.xcscheme b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/xcshareddata/xcschemes/Plot Gallery-tvOS.xcscheme index d0f30ca9a..f3456dc1a 100644 --- a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/xcshareddata/xcschemes/Plot Gallery-tvOS.xcscheme +++ b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/xcshareddata/xcschemes/Plot Gallery-tvOS.xcscheme @@ -15,8 +15,8 @@ @@ -32,8 +32,8 @@ @@ -55,8 +55,8 @@ @@ -72,8 +72,8 @@ From c02edd6d14e3c2800c0df959f3eda2242a3aac3e Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 13 Dec 2020 15:39:21 -0500 Subject: [PATCH 051/245] Fixed header search paths in the iPad and iPhone CPTTestApp example apps. --- .../CPTTestApp-iPad.xcodeproj/project.pbxproj | 6 ------ .../CPTTestApp-iPhone.xcodeproj/project.pbxproj | 6 ------ 2 files changed, 12 deletions(-) diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj index 0371631a4..eab069497 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj @@ -392,7 +392,6 @@ GCC_DYNAMIC_NO_PIC = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = CPTTestApp_iPad_Prefix.pch; - HEADER_SEARCH_PATHS = ""; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/CPTTestApp_iPad-Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = org.CorePlot.CPTTestAppiPad; @@ -414,7 +413,6 @@ DEVELOPMENT_TEAM = 28ZA45DE7D; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = CPTTestApp_iPad_Prefix.pch; - HEADER_SEARCH_PATHS = ""; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/CPTTestApp_iPad-Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = org.CorePlot.CPTTestAppiPad; @@ -433,7 +431,6 @@ GCC_C_LANGUAGE_STANDARD = c99; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; - HEADER_SEARCH_PATHS = ""; IPHONEOS_DEPLOYMENT_TARGET = 9.0; ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = ( @@ -443,7 +440,6 @@ SDKROOT = iphoneos; SYMROOT = "$(SRCROOT)/../../build"; TARGETED_DEVICE_FAMILY = 2; - USER_HEADER_SEARCH_PATHS = "\"${PROJECT_DIR}/../../framework\" \"${PROJECT_DIR}/../../framework/Source\" \"${PROJECT_DIR}/../../framework/iPhoneOnly\""; }; name = Debug; }; @@ -456,7 +452,6 @@ GCC_C_LANGUAGE_STANDARD = c99; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = s; - HEADER_SEARCH_PATHS = ""; IPHONEOS_DEPLOYMENT_TARGET = 9.0; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; OTHER_LDFLAGS = ( @@ -466,7 +461,6 @@ SDKROOT = iphoneos; SYMROOT = "$(SRCROOT)/../../build"; TARGETED_DEVICE_FAMILY = 2; - USER_HEADER_SEARCH_PATHS = "\"${PROJECT_DIR}/../../framework\" \"${PROJECT_DIR}/../../framework/Source\" \"${PROJECT_DIR}/../../framework/iPhoneOnly\""; }; name = Release; }; diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj index edcc8de55..80f7c20f3 100644 --- a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj @@ -424,7 +424,6 @@ GCC_DYNAMIC_NO_PIC = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = CPTTestApp_iPhone_Prefix.pch; - HEADER_SEARCH_PATHS = ""; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ""; @@ -452,7 +451,6 @@ DEVELOPMENT_TEAM = 28ZA45DE7D; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = CPTTestApp_iPhone_Prefix.pch; - HEADER_SEARCH_PATHS = ""; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ""; @@ -482,7 +480,6 @@ GCC_C_LANGUAGE_STANDARD = c99; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; - HEADER_SEARCH_PATHS = ""; IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/Frameworks"; ONLY_ACTIVE_ARCH = YES; @@ -492,7 +489,6 @@ SDKROOT = iphoneos; SYMROOT = "$(SRCROOT)/../../build"; TARGETED_DEVICE_FAMILY = 1; - USER_HEADER_SEARCH_PATHS = "\"${PROJECT_DIR}/../../framework\" \"${PROJECT_DIR}/../../framework/Source\" \"${PROJECT_DIR}/../../framework/iPhoneOnly\""; }; name = Debug; }; @@ -508,7 +504,6 @@ GCC_C_LANGUAGE_STANDARD = c99; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = s; - HEADER_SEARCH_PATHS = ""; IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/Frameworks"; ONLY_ACTIVE_ARCH = YES; @@ -518,7 +513,6 @@ SDKROOT = iphoneos; SYMROOT = "$(SRCROOT)/../../build"; TARGETED_DEVICE_FAMILY = 1; - USER_HEADER_SEARCH_PATHS = "\"${PROJECT_DIR}/../../framework\" \"${PROJECT_DIR}/../../framework/Source\" \"${PROJECT_DIR}/../../framework/iPhoneOnly\""; }; name = Release; }; From e4480fed6aaf63f88dfadb99174a47743eb2f014 Mon Sep 17 00:00:00 2001 From: 3a4oT Date: Mon, 14 Dec 2020 01:14:23 +0200 Subject: [PATCH 052/245] fixed package name so you can @import CorePlot instead of `@import core-plot` --- Package.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Package.swift b/Package.swift index 52db8d693..2d5d990a7 100644 --- a/Package.swift +++ b/Package.swift @@ -4,7 +4,7 @@ import PackageDescription let package = Package( - name: "core-plot", + name: "CorePlot", platforms: [ .macOS(.v10_12), .iOS(.v10), @@ -13,8 +13,8 @@ let package = Package( products: [ // Products define the executables and libraries a package produces, and make them visible to other packages. .library( - name: "core-plot", - targets: ["core-plot"]), + name: "CorePlot", + targets: ["CorePlot"]), ], dependencies: [ // Dependencies declare other packages that this package depends on. @@ -24,7 +24,7 @@ let package = Package( // Targets are the basic building blocks of a package. A target can define a module or a test suite. // Targets can depend on other targets in this package, and on products in packages this package depends on. .target( - name: "core-plot", + name: "CorePlot", dependencies: [], path: "spm/Sources/core-plot"), ] From df273ce259d7be07844a1ee8e86767c86e40f998 Mon Sep 17 00:00:00 2001 From: 3a4oT Date: Mon, 14 Dec 2020 01:18:53 +0200 Subject: [PATCH 053/245] fixed CI --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 41fae0515..3858e6d8d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,7 +44,7 @@ jobs: "platform=macOS", "platform=tvOS Simulator,name=Apple TV 4k", ] - scheme: ["core-plot"] + scheme: ["CorePlot"] steps: - name: Checkout uses: actions/checkout@v2 From f071267e72549544bd65c43e6308f668a80e1fd4 Mon Sep 17 00:00:00 2001 From: 3a4oT Date: Mon, 14 Dec 2020 01:27:09 +0200 Subject: [PATCH 054/245] removed static lib tests from CI since it was removed from main repo --- .github/workflows/ci.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3858e6d8d..bd1ac0609 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,10 +26,7 @@ jobs: - name: Run unit tests for tvOS run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests tvOS" -sdk "appletvsimulator" -destination "name=Apple TV 4K" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO - - - name: Run unit tests for CorePlot-CocoaTouch - run: xcodebuild -project framework/CorePlot.xcodeproj -target "CorePlot-CocoaTouchTests" -sdk "iphonesimulator" -destination "name=iPhone 12 Pro" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO - + SPM: name: Verify SPM build runs-on: macOS-latest From 940fe9e37d1408c1b466f4fa8aaf4c02e5880884 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 13 Dec 2020 21:29:22 -0500 Subject: [PATCH 055/245] Added Core Plot framework build dependencies to the iPhone and iPad CPTTestApp example apps. --- .../CPTTestApp-iPad.xcodeproj/project.pbxproj | 16 ++++++ .../project.pbxproj | 16 ++++++ .../CPTTestApp.xcodeproj/project.pbxproj | 51 ++----------------- .../Plot_Gallery.xcodeproj/project.pbxproj | 13 ----- 4 files changed, 36 insertions(+), 60 deletions(-) diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj index eab069497..d75ea397e 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj @@ -39,6 +39,13 @@ remoteGlobalIDString = C37EA6B71BC83F2D0091C8F7; remoteInfo = "UnitTests tvOS"; }; + C3268810258704DD0007B718 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C3D414951A7D843800B6F5D6 /* CorePlot.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = C38A09771A46185200D45436; + remoteInfo = "CorePlot iOS"; + }; C3D414A11A7D843800B6F5D6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = C3D414951A7D843800B6F5D6 /* CorePlot.xcodeproj */; @@ -222,6 +229,7 @@ buildRules = ( ); dependencies = ( + C3268811258704DD0007B718 /* PBXTargetDependency */, ); name = "CPTTestApp-iPad"; productName = "CPTTestApp-iPad"; @@ -341,6 +349,14 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + C3268811258704DD0007B718 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "CorePlot iOS"; + targetProxy = C3268810258704DD0007B718 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ C37A40E220E0320500C4FF48 /* CPTTestApp_iPad-Info.plist */ = { isa = PBXVariantGroup; diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj index 80f7c20f3..36f4eb662 100644 --- a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj @@ -44,6 +44,13 @@ remoteGlobalIDString = C37EA6B71BC83F2D0091C8F7; remoteInfo = "UnitTests tvOS"; }; + C326881E258704E80007B718 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C3D414AE1A7D846500B6F5D6 /* CorePlot.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = C38A09771A46185200D45436; + remoteInfo = "CorePlot iOS"; + }; C3D414BA1A7D846500B6F5D6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = C3D414AE1A7D846500B6F5D6 /* CorePlot.xcodeproj */; @@ -233,6 +240,7 @@ buildRules = ( ); dependencies = ( + C326881F258704E80007B718 /* PBXTargetDependency */, ); name = "CPTTestApp-iPhone"; productName = "CPTTestApp-iPhone"; @@ -359,6 +367,14 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + C326881F258704E80007B718 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "CorePlot iOS"; + targetProxy = C326881E258704E80007B718 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ C37A40F120E0322D00C4FF48 /* Info.plist */ = { isa = PBXVariantGroup; diff --git a/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj b/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj index 12eeff3eb..d634a3823 100644 --- a/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj @@ -40,14 +40,7 @@ remoteGlobalIDString = 0730F600109492D800E95162; remoteInfo = UnitTests; }; - 07032B7311ABBA0E00463D20 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 07032B6311ABB9E000463D20 /* CorePlot.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = 8DC2EF4F0486A6940098B216; - remoteInfo = CorePlot; - }; - C36912D41C0B48DF000A1D61 /* PBXContainerItemProxy */ = { + C326880E258704B30007B718 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 07032B6311ABB9E000463D20 /* CorePlot.xcodeproj */; proxyType = 1; @@ -68,20 +61,6 @@ remoteGlobalIDString = C38A09821A46185300D45436; remoteInfo = "UnitTests iOS"; }; - C371E4D41BB714EC00AC18DB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 07032B6311ABB9E000463D20 /* CorePlot.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C38A09BA1A4619A900D45436; - remoteInfo = "CorePlot-CocoaTouch"; - }; - C371E4D61BB714EC00AC18DB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 07032B6311ABB9E000463D20 /* CorePlot.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C38A09C41A4619A900D45436; - remoteInfo = "CorePlot-CocoaTouchTests"; - }; C3CBFB691BE5874200519EE8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 07032B6311ABB9E000463D20 /* CorePlot.xcodeproj */; @@ -164,8 +143,6 @@ 07032B6C11ABB9E000463D20 /* UnitTests.xctest */, C371E4D11BB714EC00AC18DB /* CorePlot.framework */, C371E4D31BB714EC00AC18DB /* UnitTests iOS.xctest */, - C371E4D51BB714EC00AC18DB /* libCorePlot-CocoaTouch.a */, - C371E4D71BB714EC00AC18DB /* CorePlot-CocoaTouchTests.xctest */, C3CBFB6A1BE5874200519EE8 /* CorePlot.framework */, C3CBFB6C1BE5874200519EE8 /* UnitTests tvOS.xctest */, ); @@ -281,8 +258,7 @@ buildRules = ( ); dependencies = ( - 07032B7411ABBA0E00463D20 /* PBXTargetDependency */, - C36912D51C0B48DF000A1D61 /* PBXTargetDependency */, + C326880F258704B30007B718 /* PBXTargetDependency */, ); name = CPTTestApp; productInstallPath = "$(HOME)/Applications"; @@ -353,20 +329,6 @@ remoteRef = C371E4D21BB714EC00AC18DB /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - C371E4D51BB714EC00AC18DB /* libCorePlot-CocoaTouch.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libCorePlot-CocoaTouch.a"; - remoteRef = C371E4D41BB714EC00AC18DB /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C371E4D71BB714EC00AC18DB /* CorePlot-CocoaTouchTests.xctest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = "CorePlot-CocoaTouchTests.xctest"; - remoteRef = C371E4D61BB714EC00AC18DB /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; C3CBFB6A1BE5874200519EE8 /* CorePlot.framework */ = { isa = PBXReferenceProxy; fileType = wrapper.framework; @@ -416,15 +378,10 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 07032B7411ABBA0E00463D20 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = CorePlot; - targetProxy = 07032B7311ABBA0E00463D20 /* PBXContainerItemProxy */; - }; - C36912D51C0B48DF000A1D61 /* PBXTargetDependency */ = { + C326880F258704B30007B718 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "CorePlot Mac"; - targetProxy = C36912D41C0B48DF000A1D61 /* PBXContainerItemProxy */; + targetProxy = C326880E258704B30007B718 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ diff --git a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj index 3c9b1ccd7..c3121798b 100644 --- a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj +++ b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj @@ -148,13 +148,6 @@ remoteGlobalIDString = 8DC2EF4F0486A6940098B216; remoteInfo = CorePlot; }; - C30B12451BCADD300084C567 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 4F35EC1D1236AE6E007C3389 /* CorePlot.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = C38A09771A46185200D45436; - remoteInfo = "CorePlot iOS"; - }; C30D8B171BCAF99D0003BB70 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 4F35EC1D1236AE6E007C3389 /* CorePlot.xcodeproj */; @@ -666,7 +659,6 @@ ); dependencies = ( C34CB57A1BC9B0D4009270A0 /* PBXTargetDependency */, - C30B12461BCADD300084C567 /* PBXTargetDependency */, ); name = "Plot Gallery-iOS"; productName = "Plot Gallery-iOS"; @@ -920,11 +912,6 @@ name = CorePlot; targetProxy = 4F4892921290FFED00EDB93F /* PBXContainerItemProxy */; }; - C30B12461BCADD300084C567 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "CorePlot iOS"; - targetProxy = C30B12451BCADD300084C567 /* PBXContainerItemProxy */; - }; C30D8B1F1BCAFC080003BB70 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "CorePlot tvOS"; From 40217c4914924f37462f3689be9b67bf1366a662 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 20 Dec 2020 18:02:03 -0500 Subject: [PATCH 056/245] Removed the project reference to the static library header file. --- framework/CorePlot.xcodeproj/project.pbxproj | 2 -- 1 file changed, 2 deletions(-) diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index ed39ddbb3..729ef6aad 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -910,7 +910,6 @@ C31908A41998168C00B61898 /* CorePlot.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlot.xcconfig; path = xcconfig/CorePlot.xcconfig; sourceTree = ""; }; C3226A451A69ED0900F77249 /* doxygen touch.config */ = {isa = PBXFileReference; lastKnownFileType = text; lineEnding = 0; name = "doxygen touch.config"; path = "../documentation/doxygen/doxygen touch.config"; sourceTree = ""; xcLanguageSpecificationIdentifier = ""; }; C3226A461A69ED1F00F77249 /* doxygen-cocoa-touch-tags.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = "doxygen-cocoa-touch-tags.xml"; path = "../documentation/doxygen/doxygen-cocoa-touch-tags.xml"; sourceTree = ""; }; - C3226A471A69EE9200F77249 /* CorePlot-CocoaTouch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CorePlot-CocoaTouch.h"; sourceTree = ""; }; C3226A511A69F6DA00F77249 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; C3226A531A69F6DF00F77249 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; C3226A551A69F6F000F77249 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/Accelerate.framework; sourceTree = DEVELOPER_DIR; }; @@ -1454,7 +1453,6 @@ children = ( 32DBCF5E0370ADEE00C91783 /* CorePlot_Prefix.pch */, 070CF7AE0F3CA7AB0001FFF4 /* CorePlot.h */, - C3226A471A69EE9200F77249 /* CorePlot-CocoaTouch.h */, C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */, C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */, C31908A41998168C00B61898 /* CorePlot.xcconfig */, From 8d1fc30fef40e1a85d2bcce4fbd56a6eb04e126c Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 2 Jan 2021 11:48:34 -0500 Subject: [PATCH 057/245] Updated deployment targets to macOS 10.10, iOS 12.0, and tvOS 12.0 for Xcode 12 compatibility. --- .travis.yml | 2 +- CorePlot-latest.podspec | 6 ++-- documentation/changelog.markdown | 7 ++-- .../CPTTestApp-iPad.xcodeproj/project.pbxproj | 6 ++-- .../xcschemes/CPTTestApp-iPad.xcscheme | 2 +- .../xcschemes/CPTTestApp-iPhone.xcscheme | 2 +- .../CPTTestApp.xcodeproj/project.pbxproj | 4 +-- .../xcschemes/CPTTestApp.xcscheme | 2 +- .../Plot_Gallery.xcodeproj/project.pbxproj | 10 +++--- .../xcschemes/Plot Gallery-Mac.xcscheme | 2 +- .../xcschemes/Plot Gallery-iOS.xcscheme | 2 +- .../xcschemes/Plot Gallery-tvOS.xcscheme | 2 +- .../DatePlot.xcodeproj/project.pbxproj | 34 ++----------------- .../xcshareddata/xcschemes/DatePlot.xcscheme | 2 +- examples/DropPlot/CPTPlotDocument.m | 4 +-- .../DropPlot.xcodeproj/project.pbxproj | 34 ++----------------- .../xcshareddata/xcschemes/DropPlot.xcscheme | 2 +- .../project.pbxproj | 34 ++----------------- .../xcschemes/minorTickFormatter.xcscheme | 2 +- .../RangePlot.xcodeproj/project.pbxproj | 34 ++----------------- .../xcshareddata/xcschemes/RangePlot.xcscheme | 2 +- framework/CorePlot.xcodeproj/project.pbxproj | 4 --- .../xcschemes/CorePlot Mac.xcscheme | 2 +- .../xcschemes/CorePlot iOS.xcscheme | 2 +- .../xcschemes/CorePlot tvOS.xcscheme | 2 +- .../xcschemes/Documentation-Mac.xcscheme | 2 +- .../xcschemes/Documentation-iOS.xcscheme | 2 +- .../xcschemes/Universal Library.xcscheme | 2 +- .../xcschemes/Universal XCFramework.xcscheme | 2 +- .../Universal iOS Framework.xcscheme | 2 +- .../Universal tvOS Framework.xcscheme | 2 +- framework/xcconfig/CorePlot.xcconfig | 6 ++-- 32 files changed, 50 insertions(+), 173 deletions(-) diff --git a/.travis.yml b/.travis.yml index b7a823c28..91e88dfca 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ language: objective-c -osx_image: xcode11 +osx_image: xcode12 jobs: include: diff --git a/CorePlot-latest.podspec b/CorePlot-latest.podspec index e4f9b07b6..f73c5966f 100644 --- a/CorePlot-latest.podspec +++ b/CorePlot-latest.podspec @@ -18,9 +18,9 @@ Pod::Spec.new do |s| 'of data, and is tightly integrated with Apple technologies like Core Animation, ' \ 'Core Data, and Cocoa Bindings.' - s.ios.deployment_target = '9.0' - s.osx.deployment_target = '10.9' - s.tvos.deployment_target = '9.0' + s.ios.deployment_target = '12.0' + s.osx.deployment_target = '10.10' + s.tvos.deployment_target = '12.0' s.ios.header_dir = 'ios' s.osx.header_dir = 'osx' diff --git a/documentation/changelog.markdown b/documentation/changelog.markdown index 057defc4f..2794963d6 100644 --- a/documentation/changelog.markdown +++ b/documentation/changelog.markdown @@ -2,14 +2,15 @@ ## Release Notes -This release updates Core Plot to be compatible with Xcode 12. +This release updates Core Plot to be compatible with Xcode 12, Mac Catalyst, and the Swift Package Manager. -The Mac deployment target is now macOS 10.9. The iOS deployment target is now iOS 9.0. The tvOS deployment target remains tvOS 9.0. The iOS static is obsolete and has been removed. +The Mac deployment target is now macOS 10.10. The iOS deployment target has changed to iOS 12.0. The tvOS deployment target has changed to tvOS 12.0. The iOS static library is obsolete and has been removed. ## Details +- **New**: Mac Catalyst support - **New**: Swift Package Manager support -- **Changed**: Updated the deployment targets for all supported operating systems for the minimums required by Xcode 12. The Mac deployment target is now macOS 10.9. The iOS deployment target is now iOS 9.0. The tvOS deployment target remains tvOS 9.0. +- **Changed**: Updated the deployment targets for all supported operating systems for the minimums required by Xcode 12. The Mac deployment target is now macOS 10.10. The iOS deployment target is now iOS 12.0. The tvOS deployment target is now tvOS 12.0. - **Removed**: Removed the iOS static library. # Release 2.3 (January 10, 2020) diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj index d75ea397e..11141835d 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj @@ -242,7 +242,7 @@ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0900; + LastUpgradeCheck = 1230; TargetAttributes = { 1D6058900D05DD3D006BFB54 = { DevelopmentTeam = 28ZA45DE7D; @@ -447,7 +447,7 @@ GCC_C_LANGUAGE_STANDARD = c99; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = ( "-ObjC", @@ -468,7 +468,7 @@ GCC_C_LANGUAGE_STANDARD = c99; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = s; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; OTHER_LDFLAGS = ( "-ObjC", diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme index 8ee44490d..a60f9e7d4 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme @@ -1,6 +1,6 @@ Date: Sat, 9 Jan 2021 08:14:19 -0500 Subject: [PATCH 058/245] Added Swift Package Manager badge to the readme file. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dc9e47455..63ba16d7d 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ *Cocoa plotting framework for macOS, iOS, and tvOS.* -[![Build Status](https://secure.travis-ci.org/core-plot/core-plot.svg)](https://travis-ci.org/core-plot/core-plot) [![Version Status](https://img.shields.io/cocoapods/v/CorePlot.svg)](https://cocoapods.org/pods/CorePlot) [![license MIT](https://img.shields.io/cocoapods/l/CorePlot.svg)](https://opensource.org/licenses/BSD-3-Clause) [![Platform](https://img.shields.io/cocoapods/p/CorePlot.svg)](https://core-plot.github.io) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) +[![Build Status](https://secure.travis-ci.org/core-plot/core-plot.svg)](https://travis-ci.org/core-plot/core-plot) [![Platform](https://img.shields.io/cocoapods/p/CorePlot.svg)](https://core-plot.github.io) [![license MIT](https://img.shields.io/cocoapods/l/CorePlot.svg)](https://opensource.org/licenses/BSD-3-Clause) [![Version Status](https://img.shields.io/cocoapods/v/CorePlot.svg)](https://cocoapods.org/pods/CorePlot) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![Swift Package Manager compatible](https://img.shields.io/badge/SPM-compatible-brightgreen.svg)](https://github.com/apple/swift-package-manager) # Introduction From 3a528441ec81efa4063b48dbe2b2807db6effacb Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Fri, 5 Feb 2021 11:09:04 -0500 Subject: [PATCH 059/245] Updated deprecated NSModalResponse constant. --- examples/CPTTestApp/Source/Controller.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/CPTTestApp/Source/Controller.m b/examples/CPTTestApp/Source/Controller.m index 3bc5662eb..6ef1619b0 100644 --- a/examples/CPTTestApp/Source/Controller.m +++ b/examples/CPTTestApp/Source/Controller.m @@ -641,7 +641,7 @@ -(IBAction)exportToPDF:(nullable id __unused)sender pdfSavingDialog.allowedFileTypes = @[@"pdf"]; - if ( [pdfSavingDialog runModal] == NSOKButton ) { + if ( [pdfSavingDialog runModal] == NSModalResponseOK ) { NSData *dataForPDF = [self.graph dataForPDFRepresentationOfLayer]; NSURL *url = pdfSavingDialog.URL; @@ -657,7 +657,7 @@ -(IBAction)exportToPNG:(nullable id __unused)sender pngSavingDialog.allowedFileTypes = @[@"png"]; - if ( [pngSavingDialog runModal] == NSOKButton ) { + if ( [pngSavingDialog runModal] == NSModalResponseOK ) { NSImage *image = [self.graph imageOfLayer]; NSData *tiffData = image.TIFFRepresentation; NSBitmapImageRep *tiffRep = [NSBitmapImageRep imageRepWithData:tiffData]; From 234803625427f15b0d62bb81d0c7b1c24dcd3d7e Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Fri, 5 Feb 2021 11:47:37 -0500 Subject: [PATCH 060/245] Updated deprecated functions and methods in the unit tests. --- framework/Source/CPTColorSpaceTests.m | 11 ++--------- framework/Source/CPTTestCase.m | 10 ++++------ 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/framework/Source/CPTColorSpaceTests.m b/framework/Source/CPTColorSpaceTests.m index 40fecd110..e43c28708 100644 --- a/framework/Source/CPTColorSpaceTests.m +++ b/framework/Source/CPTColorSpaceTests.m @@ -16,15 +16,8 @@ -(void)testKeyedArchivingRoundTrip CFDataRef iccProfile = NULL; CFDataRef newIccProfile = NULL; - // CGColorSpaceCopyICCProfile() is deprecated as of macOS 10.13 - if ( CGColorSpaceCopyICCData ) { - iccProfile = CGColorSpaceCopyICCData(colorSpace.cgColorSpace); - newIccProfile = CGColorSpaceCopyICCData(newColorSpace.cgColorSpace); - } - else { - iccProfile = CGColorSpaceCopyICCProfile(colorSpace.cgColorSpace); - newIccProfile = CGColorSpaceCopyICCProfile(newColorSpace.cgColorSpace); - } + iccProfile = CGColorSpaceCopyICCData(colorSpace.cgColorSpace); + newIccProfile = CGColorSpaceCopyICCData(newColorSpace.cgColorSpace); if ( iccProfile && newIccProfile ) { XCTAssertTrue([(__bridge NSData *) iccProfile isEqualToData:(__bridge NSData *)newIccProfile], @"Color spaces not equal"); diff --git a/framework/Source/CPTTestCase.m b/framework/Source/CPTTestCase.m index 1cc9808ec..72182a6e7 100644 --- a/framework/Source/CPTTestCase.m +++ b/framework/Source/CPTTestCase.m @@ -11,16 +11,14 @@ -(nullable id)archiveRoundTrip:(nonnull id)object toClass:(nonnull Class)archive { const BOOL secure = ![archiveClass isSubclassOfClass:[NSNumberFormatter class]]; - NSMutableData *archiveData = [[NSMutableData alloc] init]; - - NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:archiveData]; - - archiver.requiresSecureCoding = secure; + NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initRequiringSecureCoding:secure]; [archiver encodeObject:object forKey:@"test"]; [archiver finishEncoding]; - NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:archiveData]; + NSData *archiveData = [archiver encodedData]; + + NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingFromData:archiveData error:NULL]; unarchiver.requiresSecureCoding = secure; From 9bc374ce902106668eb029a289d84994cf681791 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Fri, 5 Feb 2021 12:03:44 -0500 Subject: [PATCH 061/245] Enabled automatic code signing in all projects. --- .../CPTTestApp-iPad.xcodeproj/project.pbxproj | 9 +-- .../project.pbxproj | 5 +- .../CPTTestApp.xcodeproj/project.pbxproj | 11 ++++ .../Plot_Gallery.xcodeproj/project.pbxproj | 14 ++++- .../DatePlot.xcodeproj/project.pbxproj | 7 +++ .../DropPlot.xcodeproj/project.pbxproj | 11 ++++ .../project.pbxproj | 11 ++++ .../RangePlot.xcodeproj/project.pbxproj | 11 ++++ framework/CorePlot.xcodeproj/project.pbxproj | 60 +++++++++++++++++-- 9 files changed, 123 insertions(+), 16 deletions(-) diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj index 11141835d..95ffb2568 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj @@ -243,11 +243,6 @@ isa = PBXProject; attributes = { LastUpgradeCheck = 1230; - TargetAttributes = { - 1D6058900D05DD3D006BFB54 = { - DevelopmentTeam = 28ZA45DE7D; - }; - }; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "CPTTestApp-iPad" */; compatibilityVersion = "Xcode 6.3"; @@ -404,7 +399,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; - DEVELOPMENT_TEAM = 28ZA45DE7D; + DEVELOPMENT_TEAM = ""; GCC_DYNAMIC_NO_PIC = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = CPTTestApp_iPad_Prefix.pch; @@ -426,7 +421,7 @@ CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=*]" = "iPhone Distribution"; COPY_PHASE_STRIP = YES; - DEVELOPMENT_TEAM = 28ZA45DE7D; + DEVELOPMENT_TEAM = ""; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = CPTTestApp_iPad_Prefix.pch; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/CPTTestApp_iPad-Info.plist"; diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj index 36f4eb662..1cf760b70 100644 --- a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj @@ -257,7 +257,6 @@ LastUpgradeCheck = 0930; TargetAttributes = { 1D6058900D05DD3D006BFB54 = { - DevelopmentTeam = 28ZA45DE7D; LastSwiftMigration = 1020; }; }; @@ -436,7 +435,7 @@ CLANG_ENABLE_OBJC_ARC = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; - DEVELOPMENT_TEAM = 28ZA45DE7D; + DEVELOPMENT_TEAM = ""; GCC_DYNAMIC_NO_PIC = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = CPTTestApp_iPhone_Prefix.pch; @@ -464,7 +463,7 @@ CLANG_ENABLE_OBJC_ARC = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; COPY_PHASE_STRIP = YES; - DEVELOPMENT_TEAM = 28ZA45DE7D; + DEVELOPMENT_TEAM = ""; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = CPTTestApp_iPhone_Prefix.pch; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; diff --git a/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj b/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj index ce2072c38..5df9c9999 100644 --- a/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj @@ -273,6 +273,11 @@ isa = PBXProject; attributes = { LastUpgradeCheck = 1100; + TargetAttributes = { + 8D1107260486CEB800E47090 = { + ProvisioningStyle = Automatic; + }; + }; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "CPTTestApp" */; compatibilityVersion = "Xcode 6.3"; @@ -449,8 +454,10 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; + DEVELOPMENT_TEAM = ""; GCC_DYNAMIC_NO_PIC = NO; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -462,6 +469,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks @executable_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = CPTTestApp; + PROVISIONING_PROFILE_SPECIFIER = ""; }; name = Debug; }; @@ -473,8 +481,10 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = ""; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = CPTTestApp_Prefix.pch; @@ -484,6 +494,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks @executable_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = CPTTestApp; + PROVISIONING_PROFILE_SPECIFIER = ""; }; name = Release; }; diff --git a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj index 8f88aa883..440a5dfa4 100644 --- a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj +++ b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj @@ -673,13 +673,14 @@ attributes = { LastUpgradeCheck = 1230; TargetAttributes = { + 8D1107260486CEB800E47090 = { + ProvisioningStyle = Automatic; + }; C30D8AF51BCAF99D0003BB70 = { CreatedOnToolsVersion = 7.1; - DevelopmentTeam = 28ZA45DE7D; }; C34CB52D1BC9A76A009270A0 = { CreatedOnToolsVersion = 7.0.1; - DevelopmentTeam = 28ZA45DE7D; }; }; }; @@ -1003,8 +1004,10 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; + DEVELOPMENT_TEAM = ""; GCC_DYNAMIC_NO_PIC = NO; GCC_MODEL_TUNING = G5; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Plot_Gallery_Mac-Info.plist"; @@ -1017,6 +1020,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.Plot-Gallery-Mac"; PRODUCT_NAME = "Plot Gallery"; + PROVISIONING_PROFILE_SPECIFIER = ""; RUN_CLANG_STATIC_ANALYZER = YES; SDKROOT = macosx; }; @@ -1029,8 +1033,10 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = ""; GCC_MODEL_TUNING = G5; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Plot_Gallery_Mac-Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; @@ -1042,6 +1048,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.Plot-Gallery-Mac"; PRODUCT_NAME = "Plot Gallery"; + PROVISIONING_PROFILE_SPECIFIER = ""; RUN_CLANG_STATIC_ANALYZER = YES; SDKROOT = macosx; }; @@ -1098,6 +1105,7 @@ CLANG_ENABLE_OBJC_ARC = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = ""; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = ( @@ -1126,6 +1134,7 @@ CLANG_ENABLE_OBJC_ARC = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = ""; ENABLE_NS_ASSERTIONS = NO; GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Plot_Gallery_tvOS-Info.plist"; @@ -1151,6 +1160,7 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = ""; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = ( diff --git a/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj b/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj index bf3b6f9bc..704bb2be9 100644 --- a/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj +++ b/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj @@ -246,6 +246,7 @@ TargetAttributes = { 8D1107260486CEB800E47090 = { LastSwiftMigration = 1020; + ProvisioningStyle = Automatic; }; }; }; @@ -390,8 +391,10 @@ CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; + DEVELOPMENT_TEAM = ""; GCC_DYNAMIC_NO_PIC = NO; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -402,6 +405,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = DatePlot; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; }; @@ -416,8 +420,10 @@ CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = ""; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = DatePlot_Prefix.pch; @@ -427,6 +433,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = DatePlot; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 5.0; }; diff --git a/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj b/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj index c6af8cd8a..61229c614 100644 --- a/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj +++ b/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj @@ -253,6 +253,11 @@ isa = PBXProject; attributes = { LastUpgradeCheck = 1100; + TargetAttributes = { + 8D15AC270486D014006FF6A4 = { + ProvisioningStyle = Automatic; + }; + }; }; buildConfigurationList = C05733CB08A9546B00998B17 /* Build configuration list for PBXProject "DropPlot" */; compatibilityVersion = "Xcode 6.3"; @@ -413,8 +418,10 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; + DEVELOPMENT_TEAM = ""; GCC_DYNAMIC_NO_PIC = NO; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -424,6 +431,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = DropPlot; + PROVISIONING_PROFILE_SPECIFIER = ""; }; name = Debug; }; @@ -435,8 +443,10 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = ""; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = DropPlot_Prefix.pch; @@ -446,6 +456,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = DropPlot; + PROVISIONING_PROFILE_SPECIFIER = ""; }; name = Release; }; diff --git a/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj b/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj index b5fc3f27e..56ef1886c 100644 --- a/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj +++ b/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj @@ -246,6 +246,11 @@ isa = PBXProject; attributes = { LastUpgradeCheck = 1100; + TargetAttributes = { + 8D1107260486CEB800E47090 = { + ProvisioningStyle = Automatic; + }; + }; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "minorTickFormatter" */; compatibilityVersion = "Xcode 6.3"; @@ -387,8 +392,10 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; + DEVELOPMENT_TEAM = ""; GCC_DYNAMIC_NO_PIC = NO; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -399,6 +406,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = minorTickFormatter; + PROVISIONING_PROFILE_SPECIFIER = ""; }; name = Debug; }; @@ -410,8 +418,10 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = ""; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = minorTickFormatter_Prefix.pch; @@ -421,6 +431,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = minorTickFormatter; + PROVISIONING_PROFILE_SPECIFIER = ""; }; name = Release; }; diff --git a/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj b/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj index 30f630ef6..ce9c89114 100644 --- a/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj +++ b/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj @@ -246,6 +246,11 @@ isa = PBXProject; attributes = { LastUpgradeCheck = 1100; + TargetAttributes = { + 8D1107260486CEB800E47090 = { + ProvisioningStyle = Automatic; + }; + }; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "RangePlot" */; compatibilityVersion = "Xcode 6.3"; @@ -387,8 +392,10 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; + DEVELOPMENT_TEAM = ""; GCC_DYNAMIC_NO_PIC = NO; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -399,6 +406,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = RangePlot; + PROVISIONING_PROFILE_SPECIFIER = ""; }; name = Debug; }; @@ -410,8 +418,10 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = ""; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = RangePlot_Prefix.pch; @@ -421,6 +431,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = RangePlot; + PROVISIONING_PROFILE_SPECIFIER = ""; }; name = Release; }; diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 5d23ce5fe..0ea2ad814 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -2209,11 +2209,19 @@ attributes = { LastUpgradeCheck = 1100; TargetAttributes = { + 0730F5FF109492D800E95162 = { + ProvisioningStyle = Automatic; + }; 8DC2EF4F0486A6940098B216 = { DevelopmentTeam = 28ZA45DE7D; + ProvisioningStyle = Automatic; + }; + C37EA5C91BC83F2A0091C8F7 = { + ProvisioningStyle = Automatic; }; C38A09771A46185200D45436 = { CreatedOnToolsVersion = 6.1.1; + ProvisioningStyle = Automatic; }; C38A09811A46185300D45436 = { CreatedOnToolsVersion = 6.1.1; @@ -2889,9 +2897,14 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlotTests-Info.plist"; INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles"; PRODUCT_NAME = UnitTests; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; SDKROOT = macosx; USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/MacOnly $(SRCROOT)/PlatformSpecific"; }; @@ -2901,9 +2914,14 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlotTests-Info.plist"; INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles"; PRODUCT_NAME = UnitTests; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; SDKROOT = macosx; USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/MacOnly $(SRCROOT)/PlatformSpecific"; }; @@ -2913,7 +2931,10 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; FRAMEWORK_VERSION = A; @@ -2921,6 +2942,8 @@ INSTALL_PATH = "@rpath"; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; SDKROOT = macosx; USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/MacOnly $(SRCROOT)/PlatformSpecific"; WRAPPER_EXTENSION = framework; @@ -2931,7 +2954,10 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; FRAMEWORK_VERSION = A; @@ -2939,6 +2965,8 @@ INSTALL_PATH = "@rpath"; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; SDKROOT = macosx; USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/MacOnly $(SRCROOT)/PlatformSpecific"; WRAPPER_EXTENSION = framework; @@ -3025,9 +3053,12 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = ""; + CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; + CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -3037,6 +3068,8 @@ MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; SDKROOT = appletvos; USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; }; @@ -3046,9 +3079,12 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = ""; + CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; + CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -3058,6 +3094,8 @@ MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; SDKROOT = appletvos; USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; }; @@ -3068,6 +3106,7 @@ baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-tvOSTests-Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; @@ -3083,6 +3122,7 @@ baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-tvOSTests-Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; @@ -3097,9 +3137,12 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = ""; + CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; + CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -3109,6 +3152,8 @@ MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; @@ -3119,9 +3164,12 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = ""; + CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; + CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -3131,6 +3179,8 @@ MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; @@ -3142,6 +3192,7 @@ baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-iOSTests-Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; @@ -3158,6 +3209,7 @@ baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-iOSTests-Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; From 352bc3f45779eca92c6d4bc0b88b3bae16cb38b9 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Fri, 5 Feb 2021 12:34:15 -0500 Subject: [PATCH 062/245] Revert "Enabled automatic code signing in all projects." This reverts commit 9bc374ce902106668eb029a289d84994cf681791. --- .../CPTTestApp-iPad.xcodeproj/project.pbxproj | 9 ++- .../project.pbxproj | 5 +- .../CPTTestApp.xcodeproj/project.pbxproj | 11 ---- .../Plot_Gallery.xcodeproj/project.pbxproj | 14 +---- .../DatePlot.xcodeproj/project.pbxproj | 7 --- .../DropPlot.xcodeproj/project.pbxproj | 11 ---- .../project.pbxproj | 11 ---- .../RangePlot.xcodeproj/project.pbxproj | 11 ---- framework/CorePlot.xcodeproj/project.pbxproj | 60 ++----------------- 9 files changed, 16 insertions(+), 123 deletions(-) diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj index 95ffb2568..11141835d 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj @@ -243,6 +243,11 @@ isa = PBXProject; attributes = { LastUpgradeCheck = 1230; + TargetAttributes = { + 1D6058900D05DD3D006BFB54 = { + DevelopmentTeam = 28ZA45DE7D; + }; + }; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "CPTTestApp-iPad" */; compatibilityVersion = "Xcode 6.3"; @@ -399,7 +404,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; - DEVELOPMENT_TEAM = ""; + DEVELOPMENT_TEAM = 28ZA45DE7D; GCC_DYNAMIC_NO_PIC = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = CPTTestApp_iPad_Prefix.pch; @@ -421,7 +426,7 @@ CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=*]" = "iPhone Distribution"; COPY_PHASE_STRIP = YES; - DEVELOPMENT_TEAM = ""; + DEVELOPMENT_TEAM = 28ZA45DE7D; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = CPTTestApp_iPad_Prefix.pch; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/CPTTestApp_iPad-Info.plist"; diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj index 1cf760b70..36f4eb662 100644 --- a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj @@ -257,6 +257,7 @@ LastUpgradeCheck = 0930; TargetAttributes = { 1D6058900D05DD3D006BFB54 = { + DevelopmentTeam = 28ZA45DE7D; LastSwiftMigration = 1020; }; }; @@ -435,7 +436,7 @@ CLANG_ENABLE_OBJC_ARC = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; - DEVELOPMENT_TEAM = ""; + DEVELOPMENT_TEAM = 28ZA45DE7D; GCC_DYNAMIC_NO_PIC = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = CPTTestApp_iPhone_Prefix.pch; @@ -463,7 +464,7 @@ CLANG_ENABLE_OBJC_ARC = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; COPY_PHASE_STRIP = YES; - DEVELOPMENT_TEAM = ""; + DEVELOPMENT_TEAM = 28ZA45DE7D; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = CPTTestApp_iPhone_Prefix.pch; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; diff --git a/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj b/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj index 5df9c9999..ce2072c38 100644 --- a/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj @@ -273,11 +273,6 @@ isa = PBXProject; attributes = { LastUpgradeCheck = 1100; - TargetAttributes = { - 8D1107260486CEB800E47090 = { - ProvisioningStyle = Automatic; - }; - }; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "CPTTestApp" */; compatibilityVersion = "Xcode 6.3"; @@ -454,10 +449,8 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - DEVELOPMENT_TEAM = ""; GCC_DYNAMIC_NO_PIC = NO; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -469,7 +462,6 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks @executable_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = CPTTestApp; - PROVISIONING_PROFILE_SPECIFIER = ""; }; name = Debug; }; @@ -481,10 +473,8 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = ""; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = CPTTestApp_Prefix.pch; @@ -494,7 +484,6 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks @executable_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = CPTTestApp; - PROVISIONING_PROFILE_SPECIFIER = ""; }; name = Release; }; diff --git a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj index 440a5dfa4..8f88aa883 100644 --- a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj +++ b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj @@ -673,14 +673,13 @@ attributes = { LastUpgradeCheck = 1230; TargetAttributes = { - 8D1107260486CEB800E47090 = { - ProvisioningStyle = Automatic; - }; C30D8AF51BCAF99D0003BB70 = { CreatedOnToolsVersion = 7.1; + DevelopmentTeam = 28ZA45DE7D; }; C34CB52D1BC9A76A009270A0 = { CreatedOnToolsVersion = 7.0.1; + DevelopmentTeam = 28ZA45DE7D; }; }; }; @@ -1004,10 +1003,8 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - DEVELOPMENT_TEAM = ""; GCC_DYNAMIC_NO_PIC = NO; GCC_MODEL_TUNING = G5; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Plot_Gallery_Mac-Info.plist"; @@ -1020,7 +1017,6 @@ ); PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.Plot-Gallery-Mac"; PRODUCT_NAME = "Plot Gallery"; - PROVISIONING_PROFILE_SPECIFIER = ""; RUN_CLANG_STATIC_ANALYZER = YES; SDKROOT = macosx; }; @@ -1033,10 +1029,8 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = ""; GCC_MODEL_TUNING = G5; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Plot_Gallery_Mac-Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; @@ -1048,7 +1042,6 @@ ); PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.Plot-Gallery-Mac"; PRODUCT_NAME = "Plot Gallery"; - PROVISIONING_PROFILE_SPECIFIER = ""; RUN_CLANG_STATIC_ANALYZER = YES; SDKROOT = macosx; }; @@ -1105,7 +1098,6 @@ CLANG_ENABLE_OBJC_ARC = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = ""; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = ( @@ -1134,7 +1126,6 @@ CLANG_ENABLE_OBJC_ARC = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = ""; ENABLE_NS_ASSERTIONS = NO; GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Plot_Gallery_tvOS-Info.plist"; @@ -1160,7 +1151,6 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = ""; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = ( diff --git a/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj b/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj index 704bb2be9..bf3b6f9bc 100644 --- a/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj +++ b/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj @@ -246,7 +246,6 @@ TargetAttributes = { 8D1107260486CEB800E47090 = { LastSwiftMigration = 1020; - ProvisioningStyle = Automatic; }; }; }; @@ -391,10 +390,8 @@ CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - DEVELOPMENT_TEAM = ""; GCC_DYNAMIC_NO_PIC = NO; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -405,7 +402,6 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = DatePlot; - PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; }; @@ -420,10 +416,8 @@ CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = ""; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = DatePlot_Prefix.pch; @@ -433,7 +427,6 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = DatePlot; - PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 5.0; }; diff --git a/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj b/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj index 61229c614..c6af8cd8a 100644 --- a/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj +++ b/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj @@ -253,11 +253,6 @@ isa = PBXProject; attributes = { LastUpgradeCheck = 1100; - TargetAttributes = { - 8D15AC270486D014006FF6A4 = { - ProvisioningStyle = Automatic; - }; - }; }; buildConfigurationList = C05733CB08A9546B00998B17 /* Build configuration list for PBXProject "DropPlot" */; compatibilityVersion = "Xcode 6.3"; @@ -418,10 +413,8 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - DEVELOPMENT_TEAM = ""; GCC_DYNAMIC_NO_PIC = NO; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -431,7 +424,6 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = DropPlot; - PROVISIONING_PROFILE_SPECIFIER = ""; }; name = Debug; }; @@ -443,10 +435,8 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = ""; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = DropPlot_Prefix.pch; @@ -456,7 +446,6 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = DropPlot; - PROVISIONING_PROFILE_SPECIFIER = ""; }; name = Release; }; diff --git a/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj b/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj index 56ef1886c..b5fc3f27e 100644 --- a/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj +++ b/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj @@ -246,11 +246,6 @@ isa = PBXProject; attributes = { LastUpgradeCheck = 1100; - TargetAttributes = { - 8D1107260486CEB800E47090 = { - ProvisioningStyle = Automatic; - }; - }; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "minorTickFormatter" */; compatibilityVersion = "Xcode 6.3"; @@ -392,10 +387,8 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - DEVELOPMENT_TEAM = ""; GCC_DYNAMIC_NO_PIC = NO; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -406,7 +399,6 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = minorTickFormatter; - PROVISIONING_PROFILE_SPECIFIER = ""; }; name = Debug; }; @@ -418,10 +410,8 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = ""; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = minorTickFormatter_Prefix.pch; @@ -431,7 +421,6 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = minorTickFormatter; - PROVISIONING_PROFILE_SPECIFIER = ""; }; name = Release; }; diff --git a/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj b/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj index ce9c89114..30f630ef6 100644 --- a/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj +++ b/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj @@ -246,11 +246,6 @@ isa = PBXProject; attributes = { LastUpgradeCheck = 1100; - TargetAttributes = { - 8D1107260486CEB800E47090 = { - ProvisioningStyle = Automatic; - }; - }; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "RangePlot" */; compatibilityVersion = "Xcode 6.3"; @@ -392,10 +387,8 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - DEVELOPMENT_TEAM = ""; GCC_DYNAMIC_NO_PIC = NO; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -406,7 +399,6 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = RangePlot; - PROVISIONING_PROFILE_SPECIFIER = ""; }; name = Debug; }; @@ -418,10 +410,8 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = ""; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = RangePlot_Prefix.pch; @@ -431,7 +421,6 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = RangePlot; - PROVISIONING_PROFILE_SPECIFIER = ""; }; name = Release; }; diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 0ea2ad814..5d23ce5fe 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -2209,19 +2209,11 @@ attributes = { LastUpgradeCheck = 1100; TargetAttributes = { - 0730F5FF109492D800E95162 = { - ProvisioningStyle = Automatic; - }; 8DC2EF4F0486A6940098B216 = { DevelopmentTeam = 28ZA45DE7D; - ProvisioningStyle = Automatic; - }; - C37EA5C91BC83F2A0091C8F7 = { - ProvisioningStyle = Automatic; }; C38A09771A46185200D45436 = { CreatedOnToolsVersion = 6.1.1; - ProvisioningStyle = Automatic; }; C38A09811A46185300D45436 = { CreatedOnToolsVersion = 6.1.1; @@ -2897,14 +2889,9 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlotTests-Info.plist"; INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles"; PRODUCT_NAME = UnitTests; - PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; SDKROOT = macosx; USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/MacOnly $(SRCROOT)/PlatformSpecific"; }; @@ -2914,14 +2901,9 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlotTests-Info.plist"; INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles"; PRODUCT_NAME = UnitTests; - PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; SDKROOT = macosx; USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/MacOnly $(SRCROOT)/PlatformSpecific"; }; @@ -2931,10 +2913,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; FRAMEWORK_VERSION = A; @@ -2942,8 +2921,6 @@ INSTALL_PATH = "@rpath"; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; - PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; SDKROOT = macosx; USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/MacOnly $(SRCROOT)/PlatformSpecific"; WRAPPER_EXTENSION = framework; @@ -2954,10 +2931,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; FRAMEWORK_VERSION = A; @@ -2965,8 +2939,6 @@ INSTALL_PATH = "@rpath"; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; - PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; SDKROOT = macosx; USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/MacOnly $(SRCROOT)/PlatformSpecific"; WRAPPER_EXTENSION = framework; @@ -3053,12 +3025,9 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; - CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -3068,8 +3037,6 @@ MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; - PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; SDKROOT = appletvos; USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; }; @@ -3079,12 +3046,9 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; - CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -3094,8 +3058,6 @@ MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; - PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; SDKROOT = appletvos; USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; }; @@ -3106,7 +3068,6 @@ baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-tvOSTests-Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; @@ -3122,7 +3083,6 @@ baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-tvOSTests-Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; @@ -3137,12 +3097,9 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; - CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -3152,8 +3109,6 @@ MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; - PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; @@ -3164,12 +3119,9 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; - CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -3179,8 +3131,6 @@ MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; - PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; @@ -3192,7 +3142,6 @@ baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-iOSTests-Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; @@ -3209,7 +3158,6 @@ baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-iOSTests-Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; From 9cc942f7ebed2e0e5e8cd7d3d5a3b1503f870bae Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 6 Feb 2021 11:41:45 -0500 Subject: [PATCH 063/245] Fixed typos in the Swift Package Manager script. --- scripts/generate_spm_sources_layout.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/generate_spm_sources_layout.sh b/scripts/generate_spm_sources_layout.sh index e2d1c9b81..ea6c16212 100755 --- a/scripts/generate_spm_sources_layout.sh +++ b/scripts/generate_spm_sources_layout.sh @@ -12,7 +12,7 @@ function cleanup() { } function generate_spm_public_headers() { - echo "Generate symbolic links for all public heders. *.h" + echo "Generate symbolic links for all public headers. *.h" echo "Generated under ./spm/Sources/core-plot/include" public_headers_list=$( @@ -39,7 +39,7 @@ function generate_spm_public_headers() { } function generate_spm_private_sources() { - echo "Generate symbolic links for all private heders/implementations. _*.h && _*.m" + echo "Generate symbolic links for all private headers/implementations. _*.h && _*.m" echo "Generated under ./spm/Sources/core-plot" private_sources_list=$(find "framework" \ From 6e6ee0770d61c472b94825549c2812e071d10988 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 6 Feb 2021 11:43:25 -0500 Subject: [PATCH 064/245] Fixed another typo in the Swift Package Manager script. --- scripts/generate_spm_sources_layout.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/generate_spm_sources_layout.sh b/scripts/generate_spm_sources_layout.sh index ea6c16212..1361f00bd 100755 --- a/scripts/generate_spm_sources_layout.sh +++ b/scripts/generate_spm_sources_layout.sh @@ -62,7 +62,7 @@ function generate_spm_private_sources() { } function generate_spm_public_sources() { - echo "Generate symbolic links for all public implementtions. *.m" + echo "Generate symbolic links for all public implementations. *.m" echo "Generated under ./spm/Sources/core-plot" public_sources_list=$(find "framework" -name "*.[m]" \ From 1e6afadef586c8c5d9c8db64e287f0bb81fe5c1b Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 6 Feb 2021 12:12:17 -0500 Subject: [PATCH 065/245] Added quotes in the Swift Package Manager script to accommodate spaces in file paths. --- scripts/generate_spm_sources_layout.sh | 48 +++++++++++++++----------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/scripts/generate_spm_sources_layout.sh b/scripts/generate_spm_sources_layout.sh index 1361f00bd..529809b5d 100755 --- a/scripts/generate_spm_sources_layout.sh +++ b/scripts/generate_spm_sources_layout.sh @@ -2,18 +2,18 @@ set -e -SPM_PUBLIC_HEADERS_PATH="spm/Sources/core-plot/include" SPM_SOURCES_PATH="spm/Sources/core-plot" +SPM_PUBLIC_HEADERS_PATH="$SPM_SOURCES_PATH/include" # Delete all symbolik links from `spm` folder function cleanup() { - rm -rf $SPM_PUBLIC_HEADERS_PATH/*.[hm] - rm -rf $SPM_SOURCES_PATH/*.[hm] + rm -rf "$SPM_PUBLIC_HEADERS_PATH"/*.[hm] + rm -rf "$SPM_SOURCES_PATH"/*.[hm] } function generate_spm_public_headers() { echo "Generate symbolic links for all public headers. *.h" - echo "Generated under ./spm/Sources/core-plot/include" + echo "Generated under $SPM_PUBLIC_HEADERS_PATH" public_headers_list=$( find "framework" -name "*.[h]" \ @@ -25,37 +25,42 @@ function generate_spm_public_headers() { -not -path "framework/CorePlot.h" | sed "s| \([^/]\)|:\1|g" ) - SRC_ROOT=$(pwd) - cd $SPM_PUBLIC_HEADERS_PATH + SRC_ROOT="$(pwd)" + + cd "$SPM_PUBLIC_HEADERS_PATH" + for public_file in $public_headers_list; do - file_to_link=$(echo $public_file | sed "s|:| |g") - ln -s ../../../../$file_to_link + file_to_link=$(echo "$public_file" | sed "s|:| |g") + ln -s "../../../../$file_to_link" done - cd $SRC_ROOT + cd "$SRC_ROOT" + echo " Done" echo "" } function generate_spm_private_sources() { echo "Generate symbolic links for all private headers/implementations. _*.h && _*.m" - echo "Generated under ./spm/Sources/core-plot" + echo "Generated under $SPM_SOURCES_PATH" private_sources_list=$(find "framework" \ -name "_*.[mh]" \ -type f | sed "s| \([^/]\)|:\1|g") - SRC_ROOT=$(pwd) - cd $SPM_SOURCES_PATH + SRC_ROOT="$(pwd)" + + cd "$SPM_SOURCES_PATH" + for private_file in $private_sources_list; do - file_to_link=$(echo $private_file | sed "s|:| |g") + file_to_link=$(echo "$private_file" | sed "s|:| |g") - ln -s ../../../$file_to_link + ln -s "../../../$file_to_link" done - cd $SRC_ROOT + cd "$SRC_ROOT" echo " Done" echo "" @@ -63,23 +68,24 @@ function generate_spm_private_sources() { function generate_spm_public_sources() { echo "Generate symbolic links for all public implementations. *.m" - echo "Generated under ./spm/Sources/core-plot" + echo "Generated under $SPM_SOURCES_PATH" public_sources_list=$(find "framework" -name "*.[m]" \ \! -name "*Test*.[hm]" \ \! -name "_*.[hm]" \ -type f -not -path "*/MacOnly/*" | sed "s| \([^/]\)|:\1|g") - SRC_ROOT=$(pwd) - cd $SPM_SOURCES_PATH + SRC_ROOT="$(pwd)" + + cd "$SPM_SOURCES_PATH" for public_file in $public_sources_list; do - file_to_link=$(echo $public_file | sed "s|:| |g") - ln -s ../../../$file_to_link + file_to_link=$(echo "$public_file" | sed "s|:| |g") + ln -s "../../../$file_to_link" done - cd $SRC_ROOT + cd "$SRC_ROOT" echo " Done" echo "" From ce8995ce27900d95bc9f02ee7a4b69a4385fa61c Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 6 Feb 2021 12:25:18 -0500 Subject: [PATCH 066/245] Added a run script build phase to automatically update the Swift Package Manager (spm) folder structure. --- framework/CorePlot.xcodeproj/project.pbxproj | 54 +++++++++++++++++++ ... Swift Package Manager layout generator.md | 4 +- scripts/generate_spm_sources_layout.sh | 2 + 3 files changed, 58 insertions(+), 2 deletions(-) diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 5d23ce5fe..e268a10a0 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -2118,6 +2118,7 @@ 8DC2EF520486A6940098B216 /* Resources */, 8DC2EF540486A6940098B216 /* Sources */, 8DC2EF560486A6940098B216 /* Frameworks */, + C3E0731F25CF059A009B3E2B /* ShellScript */, ); buildRules = ( ); @@ -2137,6 +2138,7 @@ C37EA6291BC83F2A0091C8F7 /* Frameworks */, C37EA62E1BC83F2A0091C8F7 /* Headers */, C37EA68E1BC83F2A0091C8F7 /* Resources */, + C3E0738125CF07C8009B3E2B /* ShellScript */, ); buildRules = ( ); @@ -2173,6 +2175,7 @@ C38A09741A46185200D45436 /* Frameworks */, C38A09751A46185200D45436 /* Headers */, C38A09761A46185200D45436 /* Resources */, + C3E0738025CF07B6009B3E2B /* ShellScript */, ); buildRules = ( ); @@ -2378,6 +2381,57 @@ shellPath = /bin/sh; shellScript = "UFW_MAC_TARGET=\"CorePlot Mac\"\nUFW_IOS_TARGET=\"CorePlot iOS\"\nUFW_TVOS_TARGET=\"CorePlot tvOS\"\n\nUFW_BUILD_DIR=\"${PROJECT_DIR}/../build\"\n\n# Mac SDK\n# Use the latest macOS SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"[^.]macosx.*$\")\nwhile read -r line; do\nUFW_MAC_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_MAC_SDK_VERSION=$(echo \"${UFW_MAC_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\n# iOS SDK\n# Use the latest iOS SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"iphoneos.*$\")\nwhile read -r line; do\nUFW_IOS_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_IOS_SDK_VERSION=$(echo \"${UFW_IOS_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\n# tvOS SDK\n# Use the latest tvOS SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"appletvos.*$\")\nwhile read -r line; do\nUFW_TVOS_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_TVOS_SDK_VERSION=$(echo \"${UFW_TVOS_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\nFRAMEWORK_NAME=\"${PROJECT_NAME}\"\n\nUFW_MAC_PATH=\"${UFW_BUILD_DIR}/Release/${FRAMEWORK_NAME}.framework\"\nUFW_CATALYST_PATH=\"${UFW_BUILD_DIR}/Release-maccatalyst/${FRAMEWORK_NAME}.framework\"\nUFW_IOS_PATH=\"${UFW_BUILD_DIR}/Release-iphoneos/${FRAMEWORK_NAME}.framework\"\nUFW_IOS_SIMULATOR_PATH=\"${UFW_BUILD_DIR}/Release-iphonesimulator/${FRAMEWORK_NAME}.framework\"\nUFW_TVOS_PATH=\"${UFW_BUILD_DIR}/Release-appletvos/${FRAMEWORK_NAME}.framework\"\nUFW_TVOS_SIMULATOR_PATH=\"${UFW_BUILD_DIR}/Release-appletvsimulator/${FRAMEWORK_NAME}.framework\"\n\nUFW_UNIVERSAL_DIR=\"${UFW_BUILD_DIR}/Release-universal\"\nUFW_FRAMEWORK=\"${UFW_UNIVERSAL_DIR}/${FRAMEWORK_NAME}.xcframework\"\n\n# Build Framework\n\nrm -rf \"${UFW_UNIVERSAL_DIR}\"\n\n# macOS\nxcodebuild -scheme \"${UFW_MAC_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk macosx${UFW_MAC_SDK_VERSION} clean build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n# Mac Catalyst\nxcodebuild -scheme \"${UFW_IOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphoneos${UFW_IOS_SDK_VERSION} -destination \"platform=macOS,variant=Mac Catalyst\" build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n# iOS\nxcodebuild -scheme \"${UFW_IOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphoneos${UFW_IOS_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -scheme \"${UFW_IOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphonesimulator${UFW_IOS_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n#tvOS\nxcodebuild -scheme \"${UFW_TVOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk appletvos${UFW_TVOS_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -scheme \"${UFW_TVOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk appletvsimulator${UFW_TVOS_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n\nmkdir -p \"${UFW_UNIVERSAL_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\nxcodebuild -create-xcframework -output \"${UFW_FRAMEWORK}\" \\\n -framework \"${UFW_MAC_PATH}\" \\\n -framework \"${UFW_CATALYST_PATH}\" \\\n -framework \"${UFW_IOS_PATH}\" \\\n -framework \"${UFW_IOS_SIMULATOR_PATH}\" \\\n -framework \"${UFW_TVOS_PATH}\" \\\n -framework \"${UFW_TVOS_SIMULATOR_PATH}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: create XCFramework failed\"; exit 1; fi\n\n"; }; + C3E0731F25CF059A009B3E2B /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/bash; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${SOURCE_ROOT}/../scripts/generate_spm_sources_layout.sh\"\n"; + }; + C3E0738025CF07B6009B3E2B /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/bash; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${SOURCE_ROOT}/../scripts/generate_spm_sources_layout.sh\"\n"; + }; + C3E0738125CF07C8009B3E2B /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${SOURCE_ROOT}/../scripts/generate_spm_sources_layout.sh\"\n"; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/scripts/README Automatic Swift Package Manager layout generator.md b/scripts/README Automatic Swift Package Manager layout generator.md index dabed58a9..7ade41b19 100644 --- a/scripts/README Automatic Swift Package Manager layout generator.md +++ b/scripts/README Automatic Swift Package Manager layout generator.md @@ -2,10 +2,10 @@ Swift Package Manager [has some strict requirements] (https://github.com/apple/s ### Generate SPM layout for core-plot -1. From **project's root** run: +1. From the **scripts** folder under **project's root** run: `bash scripts/generate_spm_sources_layout.sh` 2. Commit Changes -Repeate those steps each time you modify/add project's files. **Make sure** to have this CI step which will check that `generate_spm_sources_layout.sh` is not broken. +This script is run automatically when building the Core Plot project for any platform. diff --git a/scripts/generate_spm_sources_layout.sh b/scripts/generate_spm_sources_layout.sh index 529809b5d..234a41178 100755 --- a/scripts/generate_spm_sources_layout.sh +++ b/scripts/generate_spm_sources_layout.sh @@ -92,6 +92,8 @@ function generate_spm_public_sources() { } ########## SPM generator pipeline ############# +#0 +cd .. #1 cleanup #2 From 413d9ec11734222068df5f37643272e90ead7553 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 6 Feb 2021 14:02:41 -0500 Subject: [PATCH 067/245] Enabled Mac Catalyst builds for all iOS example apps. --- .../CPTTestApp-iPad.xcodeproj/project.pbxproj | 8 ++++++-- .../CPTTestApp-iPad/CPTTestApp-iPad.entitlements | 10 ++++++++++ .../CPTTestApp-iPhone.xcodeproj/project.pbxproj | 8 ++++++-- .../CPTTestApp-iPhone/CPTTestApp-iPhone.entitlements | 10 ++++++++++ .../Plot Gallery-iOS/Plot Gallery-iOS.entitlements | 10 ++++++++++ .../Plot_Gallery.xcodeproj/project.pbxproj | 8 ++++++-- examples/CorePlotGallery/src/shared/PlotItem.m | 2 +- 7 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 examples/CPTTestApp-iPad/CPTTestApp-iPad/CPTTestApp-iPad.entitlements create mode 100644 examples/CPTTestApp-iPhone/CPTTestApp-iPhone/CPTTestApp-iPhone.entitlements create mode 100644 examples/CorePlotGallery/Plot Gallery-iOS/Plot Gallery-iOS.entitlements diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj index 11141835d..497145986 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj @@ -401,6 +401,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CLANG_ENABLE_OBJC_ARC = YES; + CODE_SIGN_ENTITLEMENTS = "CPTTestApp-iPad/CPTTestApp-iPad.entitlements"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; @@ -412,6 +413,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = org.CorePlot.CPTTestAppiPad; PRODUCT_NAME = "CPTTestApp-iPad"; + SUPPORTS_MACCATALYST = YES; }; name = Debug; }; @@ -423,6 +425,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CLANG_ENABLE_OBJC_ARC = YES; + CODE_SIGN_ENTITLEMENTS = "CPTTestApp-iPad/CPTTestApp-iPad.entitlements"; CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=*]" = "iPhone Distribution"; COPY_PHASE_STRIP = YES; @@ -433,6 +436,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = org.CorePlot.CPTTestAppiPad; PRODUCT_NAME = "CPTTestApp-iPad"; + SUPPORTS_MACCATALYST = YES; VALIDATE_PRODUCT = YES; }; name = Release; @@ -455,7 +459,7 @@ ); SDKROOT = iphoneos; SYMROOT = "$(SRCROOT)/../../build"; - TARGETED_DEVICE_FAMILY = 2; + TARGETED_DEVICE_FAMILY = "2,6"; }; name = Debug; }; @@ -476,7 +480,7 @@ ); SDKROOT = iphoneos; SYMROOT = "$(SRCROOT)/../../build"; - TARGETED_DEVICE_FAMILY = 2; + TARGETED_DEVICE_FAMILY = "2,6"; }; name = Release; }; diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad/CPTTestApp-iPad.entitlements b/examples/CPTTestApp-iPad/CPTTestApp-iPad/CPTTestApp-iPad.entitlements new file mode 100644 index 000000000..ee95ab7e5 --- /dev/null +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad/CPTTestApp-iPad.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.network.client + + + diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj index 36f4eb662..0b8781327 100644 --- a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj @@ -434,6 +434,7 @@ ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; + CODE_SIGN_ENTITLEMENTS = "CPTTestApp-iPhone/CPTTestApp-iPhone.entitlements"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEVELOPMENT_TEAM = 28ZA45DE7D; @@ -450,6 +451,7 @@ PRODUCT_BUNDLE_IDENTIFIER = org.CorePlot.CPTTestAppiPhone; PRODUCT_NAME = "CPTTestApp-iPhone"; "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; + SUPPORTS_MACCATALYST = YES; SWIFT_OBJC_BRIDGING_HEADER = "CPTTestApp-iPhone-Bridging-Header.h"; SWIFT_VERSION = 5.0; }; @@ -462,6 +464,7 @@ ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; + CODE_SIGN_ENTITLEMENTS = "CPTTestApp-iPhone/CPTTestApp-iPhone.entitlements"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; COPY_PHASE_STRIP = YES; DEVELOPMENT_TEAM = 28ZA45DE7D; @@ -477,6 +480,7 @@ PRODUCT_BUNDLE_IDENTIFIER = org.CorePlot.CPTTestAppiPhone; PRODUCT_NAME = "CPTTestApp-iPhone"; "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; + SUPPORTS_MACCATALYST = YES; SWIFT_OBJC_BRIDGING_HEADER = "CPTTestApp-iPhone-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 5.0; @@ -504,7 +508,7 @@ "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; SDKROOT = iphoneos; SYMROOT = "$(SRCROOT)/../../build"; - TARGETED_DEVICE_FAMILY = 1; + TARGETED_DEVICE_FAMILY = "1,2,6"; }; name = Debug; }; @@ -528,7 +532,7 @@ "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; SDKROOT = iphoneos; SYMROOT = "$(SRCROOT)/../../build"; - TARGETED_DEVICE_FAMILY = 1; + TARGETED_DEVICE_FAMILY = "1,2,6"; }; name = Release; }; diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/CPTTestApp-iPhone.entitlements b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/CPTTestApp-iPhone.entitlements new file mode 100644 index 000000000..ee95ab7e5 --- /dev/null +++ b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/CPTTestApp-iPhone.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.network.client + + + diff --git a/examples/CorePlotGallery/Plot Gallery-iOS/Plot Gallery-iOS.entitlements b/examples/CorePlotGallery/Plot Gallery-iOS/Plot Gallery-iOS.entitlements new file mode 100644 index 000000000..ee95ab7e5 --- /dev/null +++ b/examples/CorePlotGallery/Plot Gallery-iOS/Plot Gallery-iOS.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.network.client + + + diff --git a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj index 8f88aa883..1de79a1b1 100644 --- a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj +++ b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj @@ -1148,6 +1148,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; + CODE_SIGN_ENTITLEMENTS = "Plot Gallery-iOS/Plot Gallery-iOS.entitlements"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; @@ -1164,7 +1165,8 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.Plot-Gallery-iOS"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; + SUPPORTS_MACCATALYST = YES; + TARGETED_DEVICE_FAMILY = "1,2,6"; }; name = Debug; }; @@ -1176,6 +1178,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; + CODE_SIGN_ENTITLEMENTS = "Plot Gallery-iOS/Plot Gallery-iOS.entitlements"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; @@ -1188,7 +1191,8 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.Plot-Gallery-iOS"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; + SUPPORTS_MACCATALYST = YES; + TARGETED_DEVICE_FAMILY = "1,2,6"; VALIDATE_PRODUCT = YES; }; name = Release; diff --git a/examples/CorePlotGallery/src/shared/PlotItem.m b/examples/CorePlotGallery/src/shared/PlotItem.m index 166d5a625..e9ee9da41 100644 --- a/examples/CorePlotGallery/src/shared/PlotItem.m +++ b/examples/CorePlotGallery/src/shared/PlotItem.m @@ -125,7 +125,7 @@ -(CGFloat)titleSize #if TARGET_OS_TV size = 36.0; #elif TARGET_OS_SIMULATOR || TARGET_OS_IPHONE - switch ( UI_USER_INTERFACE_IDIOM()) { + switch ( [UIDevice currentDevice].userInterfaceIdiom ) { case UIUserInterfaceIdiomPad: size = 24.0; break; From dd5bae9874288df6029d1f79c2081e97b413f5c2 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 6 Feb 2021 14:23:02 -0500 Subject: [PATCH 068/245] Disabled automatic code signing in all example apps. --- .../CPTTestApp-iPad.xcodeproj/project.pbxproj | 16 +++++++++++--- .../CPTTestApp-iPad.entitlements | 7 +----- .../project.pbxproj | 16 +++++++++++--- .../CPTTestApp-iPhone.entitlements | 7 +----- .../Plot Gallery-iOS.entitlements | 7 +----- .../Plot_Gallery.xcodeproj/project.pbxproj | 22 +++++++++++++++++-- 6 files changed, 49 insertions(+), 26 deletions(-) diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj index 497145986..2274447aa 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj @@ -245,7 +245,7 @@ LastUpgradeCheck = 1230; TargetAttributes = { 1D6058900D05DD3D006BFB54 = { - DevelopmentTeam = 28ZA45DE7D; + ProvisioningStyle = Manual; }; }; }; @@ -404,8 +404,11 @@ CODE_SIGN_ENTITLEMENTS = "CPTTestApp-iPad/CPTTestApp-iPad.entitlements"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; - DEVELOPMENT_TEAM = 28ZA45DE7D; + DEVELOPMENT_TEAM = ""; + "ENABLE_HARDENED_RUNTIME[sdk=macosx*]" = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = CPTTestApp_iPad_Prefix.pch; @@ -413,6 +416,8 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = org.CorePlot.CPTTestAppiPad; PRODUCT_NAME = "CPTTestApp-iPad"; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; SUPPORTS_MACCATALYST = YES; }; name = Debug; @@ -428,14 +433,19 @@ CODE_SIGN_ENTITLEMENTS = "CPTTestApp-iPad/CPTTestApp-iPad.entitlements"; CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=*]" = "iPhone Distribution"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = YES; - DEVELOPMENT_TEAM = 28ZA45DE7D; + DEVELOPMENT_TEAM = ""; + "ENABLE_HARDENED_RUNTIME[sdk=macosx*]" = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = CPTTestApp_iPad_Prefix.pch; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/CPTTestApp_iPad-Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = org.CorePlot.CPTTestAppiPad; PRODUCT_NAME = "CPTTestApp-iPad"; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; SUPPORTS_MACCATALYST = YES; VALIDATE_PRODUCT = YES; }; diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad/CPTTestApp-iPad.entitlements b/examples/CPTTestApp-iPad/CPTTestApp-iPad/CPTTestApp-iPad.entitlements index ee95ab7e5..0c67376eb 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad/CPTTestApp-iPad.entitlements +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad/CPTTestApp-iPad.entitlements @@ -1,10 +1,5 @@ - - com.apple.security.app-sandbox - - com.apple.security.network.client - - + diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj index 0b8781327..ab6e73a01 100644 --- a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj @@ -257,8 +257,8 @@ LastUpgradeCheck = 0930; TargetAttributes = { 1D6058900D05DD3D006BFB54 = { - DevelopmentTeam = 28ZA45DE7D; LastSwiftMigration = 1020; + ProvisioningStyle = Manual; }; }; }; @@ -436,8 +436,11 @@ CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_ENTITLEMENTS = "CPTTestApp-iPhone/CPTTestApp-iPhone.entitlements"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; - DEVELOPMENT_TEAM = 28ZA45DE7D; + DEVELOPMENT_TEAM = ""; + "ENABLE_HARDENED_RUNTIME[sdk=macosx*]" = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = CPTTestApp_iPhone_Prefix.pch; @@ -451,6 +454,8 @@ PRODUCT_BUNDLE_IDENTIFIER = org.CorePlot.CPTTestAppiPhone; PRODUCT_NAME = "CPTTestApp-iPhone"; "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; SUPPORTS_MACCATALYST = YES; SWIFT_OBJC_BRIDGING_HEADER = "CPTTestApp-iPhone-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -466,8 +471,11 @@ CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_ENTITLEMENTS = "CPTTestApp-iPhone/CPTTestApp-iPhone.entitlements"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = YES; - DEVELOPMENT_TEAM = 28ZA45DE7D; + DEVELOPMENT_TEAM = ""; + "ENABLE_HARDENED_RUNTIME[sdk=macosx*]" = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = CPTTestApp_iPhone_Prefix.pch; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; @@ -480,6 +488,8 @@ PRODUCT_BUNDLE_IDENTIFIER = org.CorePlot.CPTTestAppiPhone; PRODUCT_NAME = "CPTTestApp-iPhone"; "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; SUPPORTS_MACCATALYST = YES; SWIFT_OBJC_BRIDGING_HEADER = "CPTTestApp-iPhone-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/CPTTestApp-iPhone.entitlements b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/CPTTestApp-iPhone.entitlements index ee95ab7e5..0c67376eb 100644 --- a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/CPTTestApp-iPhone.entitlements +++ b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/CPTTestApp-iPhone.entitlements @@ -1,10 +1,5 @@ - - com.apple.security.app-sandbox - - com.apple.security.network.client - - + diff --git a/examples/CorePlotGallery/Plot Gallery-iOS/Plot Gallery-iOS.entitlements b/examples/CorePlotGallery/Plot Gallery-iOS/Plot Gallery-iOS.entitlements index ee95ab7e5..0c67376eb 100644 --- a/examples/CorePlotGallery/Plot Gallery-iOS/Plot Gallery-iOS.entitlements +++ b/examples/CorePlotGallery/Plot Gallery-iOS/Plot Gallery-iOS.entitlements @@ -1,10 +1,5 @@ - - com.apple.security.app-sandbox - - com.apple.security.network.client - - + diff --git a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj index 1de79a1b1..d65709bc5 100644 --- a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj +++ b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj @@ -675,11 +675,11 @@ TargetAttributes = { C30D8AF51BCAF99D0003BB70 = { CreatedOnToolsVersion = 7.1; - DevelopmentTeam = 28ZA45DE7D; + ProvisioningStyle = Manual; }; C34CB52D1BC9A76A009270A0 = { CreatedOnToolsVersion = 7.0.1; - DevelopmentTeam = 28ZA45DE7D; + ProvisioningStyle = Manual; }; }; }; @@ -1096,8 +1096,10 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = ""; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = ( @@ -1109,6 +1111,7 @@ MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.Plot-Gallery-tvOS"; PRODUCT_NAME = "Plot Gallery-tvOS"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = appletvos; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 12.0; @@ -1124,8 +1127,10 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = ""; ENABLE_NS_ASSERTIONS = NO; GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Plot_Gallery_tvOS-Info.plist"; @@ -1133,6 +1138,7 @@ MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.Plot-Gallery-tvOS"; PRODUCT_NAME = "Plot Gallery-tvOS"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = appletvos; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 12.0; @@ -1150,8 +1156,12 @@ CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_ENTITLEMENTS = "Plot Gallery-iOS/Plot Gallery-iOS.entitlements"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = ""; + "ENABLE_HARDENED_RUNTIME[sdk=macosx*]" = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = ( @@ -1164,6 +1174,8 @@ MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.Plot-Gallery-iOS"; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; SDKROOT = iphoneos; SUPPORTS_MACCATALYST = YES; TARGETED_DEVICE_FAMILY = "1,2,6"; @@ -1180,8 +1192,12 @@ CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_ENTITLEMENTS = "Plot Gallery-iOS/Plot Gallery-iOS.entitlements"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = ""; + "ENABLE_HARDENED_RUNTIME[sdk=macosx*]" = NO; ENABLE_NS_ASSERTIONS = NO; GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Plot_Gallery_iOS-Info.plist"; @@ -1190,6 +1206,8 @@ MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.Plot-Gallery-iOS"; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; SDKROOT = iphoneos; SUPPORTS_MACCATALYST = YES; TARGETED_DEVICE_FAMILY = "1,2,6"; From b4cf7a7b468c9601e2d4ae9f3a355ee26269978d Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Fri, 19 Feb 2021 12:56:07 -0500 Subject: [PATCH 069/245] Fixed a compiler warning in CPTAnimation. --- framework/Source/CPTAnimation.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/Source/CPTAnimation.m b/framework/Source/CPTAnimation.m index 3843bb0f7..00b051d73 100644 --- a/framework/Source/CPTAnimation.m +++ b/framework/Source/CPTAnimation.m @@ -336,7 +336,7 @@ -(void)update CPTDictionary *parameters = @{ CPTAnimationOperationKey: animationOperation, CPTAnimationValueKey: [period tweenedValueForProgress:progress], - CPTAnimationValueClassKey: valueClass ? valueClass : [NSNull null], + CPTAnimationValueClassKey: valueClass ? valueClass : [NSNull class], CPTAnimationStartedKey: @(started), CPTAnimationFinishedKey: @(currentTime >= endTime) }; @@ -379,7 +379,7 @@ -(void)updateOnMainThreadWithParameters:(nonnull CPTDictionary *)parameters if ( !canceled ) { @try { Class valueClass = parameters[CPTAnimationValueClassKey]; - if ( [valueClass isKindOfClass:[NSNull class]] ) { + if ( [valueClass isEqual:[NSNull class]] ) { valueClass = Nil; } From 74b130285687baec05e4f528ada623f2a63009b0 Mon Sep 17 00:00:00 2001 From: Pascal Freiburghaus Date: Sat, 20 Mar 2021 21:28:32 +0100 Subject: [PATCH 070/245] Implemented a heuristic to find the hostingView for any CPTLayer to switch to the correct appearance/traitCollection. For Layer operations it is not guaranteed that the current trait collection is correct. The need arised when the app is using UIActivityViewController. After using this controller, the current traitCollection on iOS is wrong, when changing the color. And then the graph was not drawn correctly anymore. --- framework/Source/CPTLayer.m | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/framework/Source/CPTLayer.m b/framework/Source/CPTLayer.m index 3dad0e600..f17050b28 100644 --- a/framework/Source/CPTLayer.m +++ b/framework/Source/CPTLayer.m @@ -329,8 +329,9 @@ -(void)display // Workaround since @available macro is not there if ( [NSView instancesRespondToSelector:@selector(effectiveAppearance)] ) { + CPTGraphHostingView *hostingView = [self findHostingView]; NSAppearance *oldAppearance = NSAppearance.currentAppearance; - NSAppearance.currentAppearance = ((NSView *)self.graph.hostingView).effectiveAppearance; + NSAppearance.currentAppearance = ((NSView *)hostingView).effectiveAppearance; [super display]; NSAppearance.currentAppearance = oldAppearance; } @@ -341,7 +342,8 @@ -(void)display #ifdef __IPHONE_13_0 if ( @available(iOS 13, *)) { if ( [UITraitCollection instancesRespondToSelector:@selector(performAsCurrentTraitCollection:)] ) { - UITraitCollection *traitCollection = ((UIView *)self.graph.hostingView).traitCollection; + CPTGraphHostingView *hostingView = [self findHostingView]; + UITraitCollection *traitCollection = ((UIView *)hostingView).traitCollection; if ( traitCollection ) { [traitCollection performAsCurrentTraitCollection: ^{ [super display]; @@ -366,6 +368,29 @@ -(void)display } } +- (CPTGraphHostingView *)findHostingView { + + CPTGraphHostingView *hostingView = self.graph.hostingView; + if (!hostingView && + [self respondsToSelector:@selector(hostingView)]) { + hostingView = [self performSelector:@selector(hostingView)]; + } + + CALayer *superlayer = self.superlayer; + while (superlayer && !hostingView) { + if ([superlayer isKindOfClass:CPTLayer.class]) { + CPTLayer *curLayer = (CPTLayer *)superlayer; + hostingView = curLayer.graph.hostingView; + if (!hostingView && + [superlayer respondsToSelector:@selector(hostingView)]) { + hostingView = [superlayer performSelector:@selector(hostingView)]; + } + } + superlayer = superlayer.superlayer; + } + return hostingView; +} + -(void)drawInContext:(nonnull CGContextRef)context { if ( context ) { From 4baf96ec29bb8c1aaf2927f28eab3a106a799edb Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 27 Mar 2021 11:15:20 -0400 Subject: [PATCH 071/245] Ensure Swift Package Manager folders exist before trying to copy files. --- framework/CorePlot.xcodeproj/project.pbxproj | 4 ++-- scripts/generate_spm_sources_layout.sh | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index e268a10a0..32bfed7d5 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -2395,7 +2395,7 @@ outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/bash; + shellPath = /bin/sh; shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${SOURCE_ROOT}/../scripts/generate_spm_sources_layout.sh\"\n"; }; C3E0738025CF07B6009B3E2B /* ShellScript */ = { @@ -2412,7 +2412,7 @@ outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/bash; + shellPath = /bin/sh; shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${SOURCE_ROOT}/../scripts/generate_spm_sources_layout.sh\"\n"; }; C3E0738125CF07C8009B3E2B /* ShellScript */ = { diff --git a/scripts/generate_spm_sources_layout.sh b/scripts/generate_spm_sources_layout.sh index 234a41178..d85cda065 100755 --- a/scripts/generate_spm_sources_layout.sh +++ b/scripts/generate_spm_sources_layout.sh @@ -27,6 +27,7 @@ function generate_spm_public_headers() { SRC_ROOT="$(pwd)" + mkdir -p "$SPM_PUBLIC_HEADERS_PATH" cd "$SPM_PUBLIC_HEADERS_PATH" for public_file in $public_headers_list; do @@ -51,6 +52,7 @@ function generate_spm_private_sources() { SRC_ROOT="$(pwd)" + mkdir -p "$SPM_SOURCES_PATH" cd "$SPM_SOURCES_PATH" for private_file in $private_sources_list; do @@ -77,6 +79,7 @@ function generate_spm_public_sources() { SRC_ROOT="$(pwd)" + mkdir -p "$SPM_SOURCES_PATH" cd "$SPM_SOURCES_PATH" for public_file in $public_sources_list; do From 8d8b6b8c078a1d6803208c0d418e04608aaa749a Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 27 Mar 2021 13:21:46 -0400 Subject: [PATCH 072/245] Run the CI script on push to the release-2.4 branch. --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bd1ac0609..5a658244a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,6 +4,7 @@ on: push: branches: - master + - "release-2.4" pull_request: branches: - "*" From 7d3f4269caea702f1bd3143fdb3af490a6e20e06 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 28 Mar 2021 08:22:32 -0400 Subject: [PATCH 073/245] Set "Build for Distribution" to YES on all framework builds. Fixed issue #442. --- framework/xcconfig/CorePlot.xcconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/framework/xcconfig/CorePlot.xcconfig b/framework/xcconfig/CorePlot.xcconfig index 48f608e4d..fa927aa53 100644 --- a/framework/xcconfig/CorePlot.xcconfig +++ b/framework/xcconfig/CorePlot.xcconfig @@ -9,6 +9,7 @@ TVOS_DEPLOYMENT_TARGET = 12.0 SYMROOT = $(PROJECT_DIR)/../build ALWAYS_SEARCH_USER_PATHS = NO +BUILD_LIBRARY_FOR_DISTRIBUTION = YES CLANG_ENABLE_OBJC_ARC = YES CLANG_STATIC_ANALYZER_MODE = shallow CLANG_STATIC_ANALYZER_MODE_ON_ANALYZE_ACTION = deep From 997f695f801c3292d8d4619855879e71df2d7fb4 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 28 Mar 2021 08:28:43 -0400 Subject: [PATCH 074/245] Standardized code formatting. --- framework/Source/CPTLayer.m | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/framework/Source/CPTLayer.m b/framework/Source/CPTLayer.m index f17050b28..dd469350e 100644 --- a/framework/Source/CPTLayer.m +++ b/framework/Source/CPTLayer.m @@ -330,7 +330,7 @@ -(void)display if ( [NSView instancesRespondToSelector:@selector(effectiveAppearance)] ) { CPTGraphHostingView *hostingView = [self findHostingView]; - NSAppearance *oldAppearance = NSAppearance.currentAppearance; + NSAppearance *oldAppearance = NSAppearance.currentAppearance; NSAppearance.currentAppearance = ((NSView *)hostingView).effectiveAppearance; [super display]; NSAppearance.currentAppearance = oldAppearance; @@ -342,7 +342,7 @@ -(void)display #ifdef __IPHONE_13_0 if ( @available(iOS 13, *)) { if ( [UITraitCollection instancesRespondToSelector:@selector(performAsCurrentTraitCollection:)] ) { - CPTGraphHostingView *hostingView = [self findHostingView]; + CPTGraphHostingView *hostingView = [self findHostingView]; UITraitCollection *traitCollection = ((UIView *)hostingView).traitCollection; if ( traitCollection ) { [traitCollection performAsCurrentTraitCollection: ^{ @@ -368,21 +368,23 @@ -(void)display } } -- (CPTGraphHostingView *)findHostingView { - +-(CPTGraphHostingView *)findHostingView +{ CPTGraphHostingView *hostingView = self.graph.hostingView; - if (!hostingView && - [self respondsToSelector:@selector(hostingView)]) { + + if ( !hostingView && + [self respondsToSelector:@selector(hostingView)] ) { hostingView = [self performSelector:@selector(hostingView)]; } - + CALayer *superlayer = self.superlayer; - while (superlayer && !hostingView) { - if ([superlayer isKindOfClass:CPTLayer.class]) { + + while ( superlayer && !hostingView ) { + if ( [superlayer isKindOfClass:CPTLayer.class] ) { CPTLayer *curLayer = (CPTLayer *)superlayer; hostingView = curLayer.graph.hostingView; - if (!hostingView && - [superlayer respondsToSelector:@selector(hostingView)]) { + if ( !hostingView && + [superlayer respondsToSelector:@selector(hostingView)] ) { hostingView = [superlayer performSelector:@selector(hostingView)]; } } From fc46c4a59f25152d64d23f26a8185fe531a84acd Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 28 Mar 2021 08:40:50 -0400 Subject: [PATCH 075/245] Added method declaration for -findHostingView and import the required header file. --- framework/Source/CPTLayer.m | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/framework/Source/CPTLayer.m b/framework/Source/CPTLayer.m index dd469350e..ef3af1887 100644 --- a/framework/Source/CPTLayer.m +++ b/framework/Source/CPTLayer.m @@ -1,6 +1,7 @@ #import "CPTLayer.h" #import "CPTGraph.h" +#import "CPTGraphHostingView.h" #import "CPTPathExtensions.h" #import "CPTPlatformSpecificCategories.h" #import "CPTPlatformSpecificFunctions.h" @@ -33,6 +34,8 @@ @interface CPTLayer() -(void)applyTransform:(CATransform3D)transform toContext:(nonnull CGContextRef)context; -(nonnull NSString *)subLayersAtIndex:(NSUInteger)idx; +-(CPTGraphHostingView *)findHostingView; + @end /// @endcond @@ -331,7 +334,7 @@ -(void)display if ( [NSView instancesRespondToSelector:@selector(effectiveAppearance)] ) { CPTGraphHostingView *hostingView = [self findHostingView]; NSAppearance *oldAppearance = NSAppearance.currentAppearance; - NSAppearance.currentAppearance = ((NSView *)hostingView).effectiveAppearance; + NSAppearance.currentAppearance = hostingView.effectiveAppearance; [super display]; NSAppearance.currentAppearance = oldAppearance; } @@ -343,7 +346,7 @@ -(void)display if ( @available(iOS 13, *)) { if ( [UITraitCollection instancesRespondToSelector:@selector(performAsCurrentTraitCollection:)] ) { CPTGraphHostingView *hostingView = [self findHostingView]; - UITraitCollection *traitCollection = ((UIView *)hostingView).traitCollection; + UITraitCollection *traitCollection = hostingView.traitCollection; if ( traitCollection ) { [traitCollection performAsCurrentTraitCollection: ^{ [super display]; From de228014df18be63e3fd009eb07c3b1ee0c20a4e Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Fri, 23 Jul 2021 12:39:02 -0400 Subject: [PATCH 076/245] Updated the change log. --- documentation/changelog.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/documentation/changelog.markdown b/documentation/changelog.markdown index 2794963d6..5bc6e0e8e 100644 --- a/documentation/changelog.markdown +++ b/documentation/changelog.markdown @@ -2,7 +2,7 @@ ## Release Notes -This release updates Core Plot to be compatible with Xcode 12, Mac Catalyst, and the Swift Package Manager. +This release updates Core Plot to be compatible with Xcode 12, Mac Catalyst, and the Swift Package Manager. It adds support for the Swift Package Manager and Mac Catalyst. The Mac deployment target is now macOS 10.10. The iOS deployment target has changed to iOS 12.0. The tvOS deployment target has changed to tvOS 12.0. The iOS static library is obsolete and has been removed. @@ -11,6 +11,7 @@ The Mac deployment target is now macOS 10.10. The iOS deployment target has chan - **New**: Mac Catalyst support - **New**: Swift Package Manager support - **Changed**: Updated the deployment targets for all supported operating systems for the minimums required by Xcode 12. The Mac deployment target is now macOS 10.10. The iOS deployment target is now iOS 12.0. The tvOS deployment target is now tvOS 12.0. +- **Changed**: Miscellaneous bug fixes and cleanup. - **Removed**: Removed the iOS static library. # Release 2.3 (January 10, 2020) From d4bf3e5dc0041b933613db193ee9c4d9271a1977 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Wed, 22 Sep 2021 19:14:48 -0400 Subject: [PATCH 077/245] Remove the spm/ directory from git tracking since these files are regenerated on each build. --- .gitignore | 1 + spm/Sources/core-plot/CPTAnimation.m | 1 - spm/Sources/core-plot/CPTAnimationOperation.m | 1 - spm/Sources/core-plot/CPTAnimationPeriod.m | 1 - spm/Sources/core-plot/CPTAnnotation.m | 1 - spm/Sources/core-plot/CPTAnnotationHostLayer.m | 1 - spm/Sources/core-plot/CPTAxis.m | 1 - spm/Sources/core-plot/CPTAxisLabel.m | 1 - spm/Sources/core-plot/CPTAxisLabelGroup.m | 1 - spm/Sources/core-plot/CPTAxisSet.m | 1 - spm/Sources/core-plot/CPTAxisTitle.m | 1 - spm/Sources/core-plot/CPTBarPlot.m | 1 - spm/Sources/core-plot/CPTBorderedLayer.m | 1 - spm/Sources/core-plot/CPTCalendarFormatter.m | 1 - spm/Sources/core-plot/CPTColor.m | 1 - spm/Sources/core-plot/CPTColorSpace.m | 1 - spm/Sources/core-plot/CPTConstraints.m | 1 - spm/Sources/core-plot/CPTDefinitions.m | 1 - spm/Sources/core-plot/CPTDerivedXYGraph.m | 1 - spm/Sources/core-plot/CPTExceptions.m | 1 - spm/Sources/core-plot/CPTFill.m | 1 - spm/Sources/core-plot/CPTFunctionDataSource.m | 1 - spm/Sources/core-plot/CPTGradient.m | 1 - spm/Sources/core-plot/CPTGraph.m | 1 - spm/Sources/core-plot/CPTGraphHostingView.m | 1 - spm/Sources/core-plot/CPTGridLineGroup.m | 1 - spm/Sources/core-plot/CPTGridLines.m | 1 - spm/Sources/core-plot/CPTImage.m | 1 - spm/Sources/core-plot/CPTImagePlatformSpecific.m | 1 - spm/Sources/core-plot/CPTLayer.m | 1 - spm/Sources/core-plot/CPTLayerAnnotation.m | 1 - spm/Sources/core-plot/CPTLegend.m | 1 - spm/Sources/core-plot/CPTLegendEntry.m | 1 - spm/Sources/core-plot/CPTLimitBand.m | 1 - spm/Sources/core-plot/CPTLineCap.m | 1 - spm/Sources/core-plot/CPTLineStyle.m | 1 - spm/Sources/core-plot/CPTMutableLineStyle.m | 1 - spm/Sources/core-plot/CPTMutableNumericData+TypeConversion.m | 1 - spm/Sources/core-plot/CPTMutableNumericData.m | 1 - spm/Sources/core-plot/CPTMutablePlotRange.m | 1 - spm/Sources/core-plot/CPTMutableShadow.m | 1 - spm/Sources/core-plot/CPTMutableTextStyle.m | 1 - spm/Sources/core-plot/CPTNumericData+TypeConversion.m | 1 - spm/Sources/core-plot/CPTNumericData.m | 1 - spm/Sources/core-plot/CPTNumericDataType.m | 1 - spm/Sources/core-plot/CPTPathExtensions.m | 1 - spm/Sources/core-plot/CPTPieChart.m | 1 - spm/Sources/core-plot/CPTPlatformSpecificCategories.m | 1 - spm/Sources/core-plot/CPTPlatformSpecificDefines.m | 1 - spm/Sources/core-plot/CPTPlatformSpecificFunctions.m | 1 - spm/Sources/core-plot/CPTPlot.m | 1 - spm/Sources/core-plot/CPTPlotArea.m | 1 - spm/Sources/core-plot/CPTPlotAreaFrame.m | 1 - spm/Sources/core-plot/CPTPlotGroup.m | 1 - spm/Sources/core-plot/CPTPlotRange.m | 1 - spm/Sources/core-plot/CPTPlotSpace.m | 1 - spm/Sources/core-plot/CPTPlotSpaceAnnotation.m | 1 - spm/Sources/core-plot/CPTPlotSymbol.m | 1 - spm/Sources/core-plot/CPTRangePlot.m | 1 - spm/Sources/core-plot/CPTScatterPlot.m | 1 - spm/Sources/core-plot/CPTShadow.m | 1 - spm/Sources/core-plot/CPTTextLayer.m | 1 - spm/Sources/core-plot/CPTTextStyle.m | 1 - spm/Sources/core-plot/CPTTextStylePlatformSpecific.m | 1 - spm/Sources/core-plot/CPTTheme.m | 1 - spm/Sources/core-plot/CPTTimeFormatter.m | 1 - spm/Sources/core-plot/CPTTradingRangePlot.m | 1 - spm/Sources/core-plot/CPTUtilities.m | 1 - spm/Sources/core-plot/CPTXYAxis.m | 1 - spm/Sources/core-plot/CPTXYAxisSet.m | 1 - spm/Sources/core-plot/CPTXYGraph.m | 1 - spm/Sources/core-plot/CPTXYPlotSpace.m | 1 - spm/Sources/core-plot/NSCoderExtensions.m | 1 - spm/Sources/core-plot/NSDecimalNumberExtensions.m | 1 - spm/Sources/core-plot/NSNumberExtensions.m | 1 - spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.h | 1 - spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.m | 1 - spm/Sources/core-plot/_CPTAnimationCGPointPeriod.h | 1 - spm/Sources/core-plot/_CPTAnimationCGPointPeriod.m | 1 - spm/Sources/core-plot/_CPTAnimationCGRectPeriod.h | 1 - spm/Sources/core-plot/_CPTAnimationCGRectPeriod.m | 1 - spm/Sources/core-plot/_CPTAnimationCGSizePeriod.h | 1 - spm/Sources/core-plot/_CPTAnimationCGSizePeriod.m | 1 - spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.h | 1 - spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.m | 1 - spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.h | 1 - spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.m | 1 - spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.h | 1 - spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.m | 1 - spm/Sources/core-plot/_CPTAnimationTimingFunctions.h | 1 - spm/Sources/core-plot/_CPTAnimationTimingFunctions.m | 1 - spm/Sources/core-plot/_CPTBorderLayer.h | 1 - spm/Sources/core-plot/_CPTBorderLayer.m | 1 - spm/Sources/core-plot/_CPTConstraintsFixed.h | 1 - spm/Sources/core-plot/_CPTConstraintsFixed.m | 1 - spm/Sources/core-plot/_CPTConstraintsRelative.h | 1 - spm/Sources/core-plot/_CPTConstraintsRelative.m | 1 - spm/Sources/core-plot/_CPTDarkGradientTheme.h | 1 - spm/Sources/core-plot/_CPTDarkGradientTheme.m | 1 - spm/Sources/core-plot/_CPTFillColor.h | 1 - spm/Sources/core-plot/_CPTFillColor.m | 1 - spm/Sources/core-plot/_CPTFillGradient.h | 1 - spm/Sources/core-plot/_CPTFillGradient.m | 1 - spm/Sources/core-plot/_CPTFillImage.h | 1 - spm/Sources/core-plot/_CPTFillImage.m | 1 - spm/Sources/core-plot/_CPTMaskLayer.h | 1 - spm/Sources/core-plot/_CPTMaskLayer.m | 1 - spm/Sources/core-plot/_CPTPlainBlackTheme.h | 1 - spm/Sources/core-plot/_CPTPlainBlackTheme.m | 1 - spm/Sources/core-plot/_CPTPlainWhiteTheme.h | 1 - spm/Sources/core-plot/_CPTPlainWhiteTheme.m | 1 - spm/Sources/core-plot/_CPTSlateTheme.h | 1 - spm/Sources/core-plot/_CPTSlateTheme.m | 1 - spm/Sources/core-plot/_CPTStocksTheme.h | 1 - spm/Sources/core-plot/_CPTStocksTheme.m | 1 - spm/Sources/core-plot/_CPTXYTheme.h | 1 - spm/Sources/core-plot/_CPTXYTheme.m | 1 - spm/Sources/core-plot/include/CPTAnimation.h | 1 - spm/Sources/core-plot/include/CPTAnimationOperation.h | 1 - spm/Sources/core-plot/include/CPTAnimationPeriod.h | 1 - spm/Sources/core-plot/include/CPTAnnotation.h | 1 - spm/Sources/core-plot/include/CPTAnnotationHostLayer.h | 1 - spm/Sources/core-plot/include/CPTAxis.h | 1 - spm/Sources/core-plot/include/CPTAxisLabel.h | 1 - spm/Sources/core-plot/include/CPTAxisLabelGroup.h | 1 - spm/Sources/core-plot/include/CPTAxisSet.h | 1 - spm/Sources/core-plot/include/CPTAxisTitle.h | 1 - spm/Sources/core-plot/include/CPTBarPlot.h | 1 - spm/Sources/core-plot/include/CPTBorderedLayer.h | 1 - spm/Sources/core-plot/include/CPTCalendarFormatter.h | 1 - spm/Sources/core-plot/include/CPTColor.h | 1 - spm/Sources/core-plot/include/CPTColorSpace.h | 1 - spm/Sources/core-plot/include/CPTConstraints.h | 1 - spm/Sources/core-plot/include/CPTDebugQuickLook.h | 1 - spm/Sources/core-plot/include/CPTDefinitions.h | 1 - spm/Sources/core-plot/include/CPTDerivedXYGraph.h | 1 - spm/Sources/core-plot/include/CPTExceptions.h | 1 - spm/Sources/core-plot/include/CPTFill.h | 1 - spm/Sources/core-plot/include/CPTFunctionDataSource.h | 1 - spm/Sources/core-plot/include/CPTGradient.h | 1 - spm/Sources/core-plot/include/CPTGraph.h | 1 - spm/Sources/core-plot/include/CPTGraphHostingView.h | 1 - spm/Sources/core-plot/include/CPTGridLineGroup.h | 1 - spm/Sources/core-plot/include/CPTGridLines.h | 1 - spm/Sources/core-plot/include/CPTImage.h | 1 - spm/Sources/core-plot/include/CPTLayer.h | 1 - spm/Sources/core-plot/include/CPTLayerAnnotation.h | 1 - spm/Sources/core-plot/include/CPTLegend.h | 1 - spm/Sources/core-plot/include/CPTLegendEntry.h | 1 - spm/Sources/core-plot/include/CPTLimitBand.h | 1 - spm/Sources/core-plot/include/CPTLineCap.h | 1 - spm/Sources/core-plot/include/CPTLineStyle.h | 1 - spm/Sources/core-plot/include/CPTMutableLineStyle.h | 1 - .../core-plot/include/CPTMutableNumericData+TypeConversion.h | 1 - spm/Sources/core-plot/include/CPTMutableNumericData.h | 1 - spm/Sources/core-plot/include/CPTMutablePlotRange.h | 1 - spm/Sources/core-plot/include/CPTMutableShadow.h | 1 - spm/Sources/core-plot/include/CPTMutableTextStyle.h | 1 - spm/Sources/core-plot/include/CPTNumericData+TypeConversion.h | 1 - spm/Sources/core-plot/include/CPTNumericData.h | 1 - spm/Sources/core-plot/include/CPTNumericDataType.h | 1 - spm/Sources/core-plot/include/CPTPathExtensions.h | 1 - spm/Sources/core-plot/include/CPTPieChart.h | 1 - spm/Sources/core-plot/include/CPTPlatformSpecificCategories.h | 1 - spm/Sources/core-plot/include/CPTPlatformSpecificDefines.h | 1 - spm/Sources/core-plot/include/CPTPlatformSpecificFunctions.h | 1 - spm/Sources/core-plot/include/CPTPlot.h | 1 - spm/Sources/core-plot/include/CPTPlotArea.h | 1 - spm/Sources/core-plot/include/CPTPlotAreaFrame.h | 1 - spm/Sources/core-plot/include/CPTPlotGroup.h | 1 - spm/Sources/core-plot/include/CPTPlotRange.h | 1 - spm/Sources/core-plot/include/CPTPlotSpace.h | 1 - spm/Sources/core-plot/include/CPTPlotSpaceAnnotation.h | 1 - spm/Sources/core-plot/include/CPTPlotSymbol.h | 1 - spm/Sources/core-plot/include/CPTRangePlot.h | 1 - spm/Sources/core-plot/include/CPTResponder.h | 1 - spm/Sources/core-plot/include/CPTScatterPlot.h | 1 - spm/Sources/core-plot/include/CPTShadow.h | 1 - spm/Sources/core-plot/include/CPTTextLayer.h | 1 - spm/Sources/core-plot/include/CPTTextStyle.h | 1 - spm/Sources/core-plot/include/CPTTextStylePlatformSpecific.h | 1 - spm/Sources/core-plot/include/CPTTheme.h | 1 - spm/Sources/core-plot/include/CPTTimeFormatter.h | 1 - spm/Sources/core-plot/include/CPTTradingRangePlot.h | 1 - spm/Sources/core-plot/include/CPTUtilities.h | 1 - spm/Sources/core-plot/include/CPTXYAxis.h | 1 - spm/Sources/core-plot/include/CPTXYAxisSet.h | 1 - spm/Sources/core-plot/include/CPTXYGraph.h | 1 - spm/Sources/core-plot/include/CPTXYPlotSpace.h | 1 - spm/Sources/core-plot/include/CorePlot.h | 1 - spm/Sources/core-plot/include/NSCoderExtensions.h | 1 - spm/Sources/core-plot/include/NSDecimalNumberExtensions.h | 1 - spm/Sources/core-plot/include/NSNumberExtensions.h | 1 - 193 files changed, 1 insertion(+), 192 deletions(-) delete mode 120000 spm/Sources/core-plot/CPTAnimation.m delete mode 120000 spm/Sources/core-plot/CPTAnimationOperation.m delete mode 120000 spm/Sources/core-plot/CPTAnimationPeriod.m delete mode 120000 spm/Sources/core-plot/CPTAnnotation.m delete mode 120000 spm/Sources/core-plot/CPTAnnotationHostLayer.m delete mode 120000 spm/Sources/core-plot/CPTAxis.m delete mode 120000 spm/Sources/core-plot/CPTAxisLabel.m delete mode 120000 spm/Sources/core-plot/CPTAxisLabelGroup.m delete mode 120000 spm/Sources/core-plot/CPTAxisSet.m delete mode 120000 spm/Sources/core-plot/CPTAxisTitle.m delete mode 120000 spm/Sources/core-plot/CPTBarPlot.m delete mode 120000 spm/Sources/core-plot/CPTBorderedLayer.m delete mode 120000 spm/Sources/core-plot/CPTCalendarFormatter.m delete mode 120000 spm/Sources/core-plot/CPTColor.m delete mode 120000 spm/Sources/core-plot/CPTColorSpace.m delete mode 120000 spm/Sources/core-plot/CPTConstraints.m delete mode 120000 spm/Sources/core-plot/CPTDefinitions.m delete mode 120000 spm/Sources/core-plot/CPTDerivedXYGraph.m delete mode 120000 spm/Sources/core-plot/CPTExceptions.m delete mode 120000 spm/Sources/core-plot/CPTFill.m delete mode 120000 spm/Sources/core-plot/CPTFunctionDataSource.m delete mode 120000 spm/Sources/core-plot/CPTGradient.m delete mode 120000 spm/Sources/core-plot/CPTGraph.m delete mode 120000 spm/Sources/core-plot/CPTGraphHostingView.m delete mode 120000 spm/Sources/core-plot/CPTGridLineGroup.m delete mode 120000 spm/Sources/core-plot/CPTGridLines.m delete mode 120000 spm/Sources/core-plot/CPTImage.m delete mode 120000 spm/Sources/core-plot/CPTImagePlatformSpecific.m delete mode 120000 spm/Sources/core-plot/CPTLayer.m delete mode 120000 spm/Sources/core-plot/CPTLayerAnnotation.m delete mode 120000 spm/Sources/core-plot/CPTLegend.m delete mode 120000 spm/Sources/core-plot/CPTLegendEntry.m delete mode 120000 spm/Sources/core-plot/CPTLimitBand.m delete mode 120000 spm/Sources/core-plot/CPTLineCap.m delete mode 120000 spm/Sources/core-plot/CPTLineStyle.m delete mode 120000 spm/Sources/core-plot/CPTMutableLineStyle.m delete mode 120000 spm/Sources/core-plot/CPTMutableNumericData+TypeConversion.m delete mode 120000 spm/Sources/core-plot/CPTMutableNumericData.m delete mode 120000 spm/Sources/core-plot/CPTMutablePlotRange.m delete mode 120000 spm/Sources/core-plot/CPTMutableShadow.m delete mode 120000 spm/Sources/core-plot/CPTMutableTextStyle.m delete mode 120000 spm/Sources/core-plot/CPTNumericData+TypeConversion.m delete mode 120000 spm/Sources/core-plot/CPTNumericData.m delete mode 120000 spm/Sources/core-plot/CPTNumericDataType.m delete mode 120000 spm/Sources/core-plot/CPTPathExtensions.m delete mode 120000 spm/Sources/core-plot/CPTPieChart.m delete mode 120000 spm/Sources/core-plot/CPTPlatformSpecificCategories.m delete mode 120000 spm/Sources/core-plot/CPTPlatformSpecificDefines.m delete mode 120000 spm/Sources/core-plot/CPTPlatformSpecificFunctions.m delete mode 120000 spm/Sources/core-plot/CPTPlot.m delete mode 120000 spm/Sources/core-plot/CPTPlotArea.m delete mode 120000 spm/Sources/core-plot/CPTPlotAreaFrame.m delete mode 120000 spm/Sources/core-plot/CPTPlotGroup.m delete mode 120000 spm/Sources/core-plot/CPTPlotRange.m delete mode 120000 spm/Sources/core-plot/CPTPlotSpace.m delete mode 120000 spm/Sources/core-plot/CPTPlotSpaceAnnotation.m delete mode 120000 spm/Sources/core-plot/CPTPlotSymbol.m delete mode 120000 spm/Sources/core-plot/CPTRangePlot.m delete mode 120000 spm/Sources/core-plot/CPTScatterPlot.m delete mode 120000 spm/Sources/core-plot/CPTShadow.m delete mode 120000 spm/Sources/core-plot/CPTTextLayer.m delete mode 120000 spm/Sources/core-plot/CPTTextStyle.m delete mode 120000 spm/Sources/core-plot/CPTTextStylePlatformSpecific.m delete mode 120000 spm/Sources/core-plot/CPTTheme.m delete mode 120000 spm/Sources/core-plot/CPTTimeFormatter.m delete mode 120000 spm/Sources/core-plot/CPTTradingRangePlot.m delete mode 120000 spm/Sources/core-plot/CPTUtilities.m delete mode 120000 spm/Sources/core-plot/CPTXYAxis.m delete mode 120000 spm/Sources/core-plot/CPTXYAxisSet.m delete mode 120000 spm/Sources/core-plot/CPTXYGraph.m delete mode 120000 spm/Sources/core-plot/CPTXYPlotSpace.m delete mode 120000 spm/Sources/core-plot/NSCoderExtensions.m delete mode 120000 spm/Sources/core-plot/NSDecimalNumberExtensions.m delete mode 120000 spm/Sources/core-plot/NSNumberExtensions.m delete mode 120000 spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.h delete mode 120000 spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.m delete mode 120000 spm/Sources/core-plot/_CPTAnimationCGPointPeriod.h delete mode 120000 spm/Sources/core-plot/_CPTAnimationCGPointPeriod.m delete mode 120000 spm/Sources/core-plot/_CPTAnimationCGRectPeriod.h delete mode 120000 spm/Sources/core-plot/_CPTAnimationCGRectPeriod.m delete mode 120000 spm/Sources/core-plot/_CPTAnimationCGSizePeriod.h delete mode 120000 spm/Sources/core-plot/_CPTAnimationCGSizePeriod.m delete mode 120000 spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.h delete mode 120000 spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.m delete mode 120000 spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.h delete mode 120000 spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.m delete mode 120000 spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.h delete mode 120000 spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.m delete mode 120000 spm/Sources/core-plot/_CPTAnimationTimingFunctions.h delete mode 120000 spm/Sources/core-plot/_CPTAnimationTimingFunctions.m delete mode 120000 spm/Sources/core-plot/_CPTBorderLayer.h delete mode 120000 spm/Sources/core-plot/_CPTBorderLayer.m delete mode 120000 spm/Sources/core-plot/_CPTConstraintsFixed.h delete mode 120000 spm/Sources/core-plot/_CPTConstraintsFixed.m delete mode 120000 spm/Sources/core-plot/_CPTConstraintsRelative.h delete mode 120000 spm/Sources/core-plot/_CPTConstraintsRelative.m delete mode 120000 spm/Sources/core-plot/_CPTDarkGradientTheme.h delete mode 120000 spm/Sources/core-plot/_CPTDarkGradientTheme.m delete mode 120000 spm/Sources/core-plot/_CPTFillColor.h delete mode 120000 spm/Sources/core-plot/_CPTFillColor.m delete mode 120000 spm/Sources/core-plot/_CPTFillGradient.h delete mode 120000 spm/Sources/core-plot/_CPTFillGradient.m delete mode 120000 spm/Sources/core-plot/_CPTFillImage.h delete mode 120000 spm/Sources/core-plot/_CPTFillImage.m delete mode 120000 spm/Sources/core-plot/_CPTMaskLayer.h delete mode 120000 spm/Sources/core-plot/_CPTMaskLayer.m delete mode 120000 spm/Sources/core-plot/_CPTPlainBlackTheme.h delete mode 120000 spm/Sources/core-plot/_CPTPlainBlackTheme.m delete mode 120000 spm/Sources/core-plot/_CPTPlainWhiteTheme.h delete mode 120000 spm/Sources/core-plot/_CPTPlainWhiteTheme.m delete mode 120000 spm/Sources/core-plot/_CPTSlateTheme.h delete mode 120000 spm/Sources/core-plot/_CPTSlateTheme.m delete mode 120000 spm/Sources/core-plot/_CPTStocksTheme.h delete mode 120000 spm/Sources/core-plot/_CPTStocksTheme.m delete mode 120000 spm/Sources/core-plot/_CPTXYTheme.h delete mode 120000 spm/Sources/core-plot/_CPTXYTheme.m delete mode 120000 spm/Sources/core-plot/include/CPTAnimation.h delete mode 120000 spm/Sources/core-plot/include/CPTAnimationOperation.h delete mode 120000 spm/Sources/core-plot/include/CPTAnimationPeriod.h delete mode 120000 spm/Sources/core-plot/include/CPTAnnotation.h delete mode 120000 spm/Sources/core-plot/include/CPTAnnotationHostLayer.h delete mode 120000 spm/Sources/core-plot/include/CPTAxis.h delete mode 120000 spm/Sources/core-plot/include/CPTAxisLabel.h delete mode 120000 spm/Sources/core-plot/include/CPTAxisLabelGroup.h delete mode 120000 spm/Sources/core-plot/include/CPTAxisSet.h delete mode 120000 spm/Sources/core-plot/include/CPTAxisTitle.h delete mode 120000 spm/Sources/core-plot/include/CPTBarPlot.h delete mode 120000 spm/Sources/core-plot/include/CPTBorderedLayer.h delete mode 120000 spm/Sources/core-plot/include/CPTCalendarFormatter.h delete mode 120000 spm/Sources/core-plot/include/CPTColor.h delete mode 120000 spm/Sources/core-plot/include/CPTColorSpace.h delete mode 120000 spm/Sources/core-plot/include/CPTConstraints.h delete mode 120000 spm/Sources/core-plot/include/CPTDebugQuickLook.h delete mode 120000 spm/Sources/core-plot/include/CPTDefinitions.h delete mode 120000 spm/Sources/core-plot/include/CPTDerivedXYGraph.h delete mode 120000 spm/Sources/core-plot/include/CPTExceptions.h delete mode 120000 spm/Sources/core-plot/include/CPTFill.h delete mode 120000 spm/Sources/core-plot/include/CPTFunctionDataSource.h delete mode 120000 spm/Sources/core-plot/include/CPTGradient.h delete mode 120000 spm/Sources/core-plot/include/CPTGraph.h delete mode 120000 spm/Sources/core-plot/include/CPTGraphHostingView.h delete mode 120000 spm/Sources/core-plot/include/CPTGridLineGroup.h delete mode 120000 spm/Sources/core-plot/include/CPTGridLines.h delete mode 120000 spm/Sources/core-plot/include/CPTImage.h delete mode 120000 spm/Sources/core-plot/include/CPTLayer.h delete mode 120000 spm/Sources/core-plot/include/CPTLayerAnnotation.h delete mode 120000 spm/Sources/core-plot/include/CPTLegend.h delete mode 120000 spm/Sources/core-plot/include/CPTLegendEntry.h delete mode 120000 spm/Sources/core-plot/include/CPTLimitBand.h delete mode 120000 spm/Sources/core-plot/include/CPTLineCap.h delete mode 120000 spm/Sources/core-plot/include/CPTLineStyle.h delete mode 120000 spm/Sources/core-plot/include/CPTMutableLineStyle.h delete mode 120000 spm/Sources/core-plot/include/CPTMutableNumericData+TypeConversion.h delete mode 120000 spm/Sources/core-plot/include/CPTMutableNumericData.h delete mode 120000 spm/Sources/core-plot/include/CPTMutablePlotRange.h delete mode 120000 spm/Sources/core-plot/include/CPTMutableShadow.h delete mode 120000 spm/Sources/core-plot/include/CPTMutableTextStyle.h delete mode 120000 spm/Sources/core-plot/include/CPTNumericData+TypeConversion.h delete mode 120000 spm/Sources/core-plot/include/CPTNumericData.h delete mode 120000 spm/Sources/core-plot/include/CPTNumericDataType.h delete mode 120000 spm/Sources/core-plot/include/CPTPathExtensions.h delete mode 120000 spm/Sources/core-plot/include/CPTPieChart.h delete mode 120000 spm/Sources/core-plot/include/CPTPlatformSpecificCategories.h delete mode 120000 spm/Sources/core-plot/include/CPTPlatformSpecificDefines.h delete mode 120000 spm/Sources/core-plot/include/CPTPlatformSpecificFunctions.h delete mode 120000 spm/Sources/core-plot/include/CPTPlot.h delete mode 120000 spm/Sources/core-plot/include/CPTPlotArea.h delete mode 120000 spm/Sources/core-plot/include/CPTPlotAreaFrame.h delete mode 120000 spm/Sources/core-plot/include/CPTPlotGroup.h delete mode 120000 spm/Sources/core-plot/include/CPTPlotRange.h delete mode 120000 spm/Sources/core-plot/include/CPTPlotSpace.h delete mode 120000 spm/Sources/core-plot/include/CPTPlotSpaceAnnotation.h delete mode 120000 spm/Sources/core-plot/include/CPTPlotSymbol.h delete mode 120000 spm/Sources/core-plot/include/CPTRangePlot.h delete mode 120000 spm/Sources/core-plot/include/CPTResponder.h delete mode 120000 spm/Sources/core-plot/include/CPTScatterPlot.h delete mode 120000 spm/Sources/core-plot/include/CPTShadow.h delete mode 120000 spm/Sources/core-plot/include/CPTTextLayer.h delete mode 120000 spm/Sources/core-plot/include/CPTTextStyle.h delete mode 120000 spm/Sources/core-plot/include/CPTTextStylePlatformSpecific.h delete mode 120000 spm/Sources/core-plot/include/CPTTheme.h delete mode 120000 spm/Sources/core-plot/include/CPTTimeFormatter.h delete mode 120000 spm/Sources/core-plot/include/CPTTradingRangePlot.h delete mode 120000 spm/Sources/core-plot/include/CPTUtilities.h delete mode 120000 spm/Sources/core-plot/include/CPTXYAxis.h delete mode 120000 spm/Sources/core-plot/include/CPTXYAxisSet.h delete mode 120000 spm/Sources/core-plot/include/CPTXYGraph.h delete mode 120000 spm/Sources/core-plot/include/CPTXYPlotSpace.h delete mode 120000 spm/Sources/core-plot/include/CorePlot.h delete mode 120000 spm/Sources/core-plot/include/NSCoderExtensions.h delete mode 120000 spm/Sources/core-plot/include/NSDecimalNumberExtensions.h delete mode 120000 spm/Sources/core-plot/include/NSNumberExtensions.h diff --git a/.gitignore b/.gitignore index 151bf7def..d8c03ce24 100644 --- a/.gitignore +++ b/.gitignore @@ -49,3 +49,4 @@ build/* # SwiftPM .build .swiftpm +spm/ diff --git a/spm/Sources/core-plot/CPTAnimation.m b/spm/Sources/core-plot/CPTAnimation.m deleted file mode 120000 index 337918f89..000000000 --- a/spm/Sources/core-plot/CPTAnimation.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTAnimation.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAnimationOperation.m b/spm/Sources/core-plot/CPTAnimationOperation.m deleted file mode 120000 index fc2132df0..000000000 --- a/spm/Sources/core-plot/CPTAnimationOperation.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTAnimationOperation.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAnimationPeriod.m b/spm/Sources/core-plot/CPTAnimationPeriod.m deleted file mode 120000 index ada3019bc..000000000 --- a/spm/Sources/core-plot/CPTAnimationPeriod.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTAnimationPeriod.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAnnotation.m b/spm/Sources/core-plot/CPTAnnotation.m deleted file mode 120000 index b9fe84bfe..000000000 --- a/spm/Sources/core-plot/CPTAnnotation.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTAnnotation.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAnnotationHostLayer.m b/spm/Sources/core-plot/CPTAnnotationHostLayer.m deleted file mode 120000 index 75530b843..000000000 --- a/spm/Sources/core-plot/CPTAnnotationHostLayer.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTAnnotationHostLayer.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAxis.m b/spm/Sources/core-plot/CPTAxis.m deleted file mode 120000 index 1aa6b7103..000000000 --- a/spm/Sources/core-plot/CPTAxis.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTAxis.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAxisLabel.m b/spm/Sources/core-plot/CPTAxisLabel.m deleted file mode 120000 index da47a6c72..000000000 --- a/spm/Sources/core-plot/CPTAxisLabel.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTAxisLabel.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAxisLabelGroup.m b/spm/Sources/core-plot/CPTAxisLabelGroup.m deleted file mode 120000 index 47052e27a..000000000 --- a/spm/Sources/core-plot/CPTAxisLabelGroup.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTAxisLabelGroup.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAxisSet.m b/spm/Sources/core-plot/CPTAxisSet.m deleted file mode 120000 index 1005973dd..000000000 --- a/spm/Sources/core-plot/CPTAxisSet.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTAxisSet.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAxisTitle.m b/spm/Sources/core-plot/CPTAxisTitle.m deleted file mode 120000 index ed4fdfa19..000000000 --- a/spm/Sources/core-plot/CPTAxisTitle.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTAxisTitle.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTBarPlot.m b/spm/Sources/core-plot/CPTBarPlot.m deleted file mode 120000 index 96416886c..000000000 --- a/spm/Sources/core-plot/CPTBarPlot.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTBarPlot.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTBorderedLayer.m b/spm/Sources/core-plot/CPTBorderedLayer.m deleted file mode 120000 index 7f8e0fc21..000000000 --- a/spm/Sources/core-plot/CPTBorderedLayer.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTBorderedLayer.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTCalendarFormatter.m b/spm/Sources/core-plot/CPTCalendarFormatter.m deleted file mode 120000 index f2d434828..000000000 --- a/spm/Sources/core-plot/CPTCalendarFormatter.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTCalendarFormatter.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTColor.m b/spm/Sources/core-plot/CPTColor.m deleted file mode 120000 index 80d47ac9e..000000000 --- a/spm/Sources/core-plot/CPTColor.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTColor.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTColorSpace.m b/spm/Sources/core-plot/CPTColorSpace.m deleted file mode 120000 index c075ca4bd..000000000 --- a/spm/Sources/core-plot/CPTColorSpace.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTColorSpace.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTConstraints.m b/spm/Sources/core-plot/CPTConstraints.m deleted file mode 120000 index 2f8f0b4f3..000000000 --- a/spm/Sources/core-plot/CPTConstraints.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTConstraints.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTDefinitions.m b/spm/Sources/core-plot/CPTDefinitions.m deleted file mode 120000 index 2d93bb41d..000000000 --- a/spm/Sources/core-plot/CPTDefinitions.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTDefinitions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTDerivedXYGraph.m b/spm/Sources/core-plot/CPTDerivedXYGraph.m deleted file mode 120000 index e712248ad..000000000 --- a/spm/Sources/core-plot/CPTDerivedXYGraph.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTDerivedXYGraph.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTExceptions.m b/spm/Sources/core-plot/CPTExceptions.m deleted file mode 120000 index 7edfd7fc1..000000000 --- a/spm/Sources/core-plot/CPTExceptions.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTExceptions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTFill.m b/spm/Sources/core-plot/CPTFill.m deleted file mode 120000 index 5059faeda..000000000 --- a/spm/Sources/core-plot/CPTFill.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTFill.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTFunctionDataSource.m b/spm/Sources/core-plot/CPTFunctionDataSource.m deleted file mode 120000 index 9c584fabc..000000000 --- a/spm/Sources/core-plot/CPTFunctionDataSource.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTFunctionDataSource.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTGradient.m b/spm/Sources/core-plot/CPTGradient.m deleted file mode 120000 index 8949b1c68..000000000 --- a/spm/Sources/core-plot/CPTGradient.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTGradient.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTGraph.m b/spm/Sources/core-plot/CPTGraph.m deleted file mode 120000 index 01c721f42..000000000 --- a/spm/Sources/core-plot/CPTGraph.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTGraph.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTGraphHostingView.m b/spm/Sources/core-plot/CPTGraphHostingView.m deleted file mode 120000 index aed7567ed..000000000 --- a/spm/Sources/core-plot/CPTGraphHostingView.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/PlatformSpecific/CPTGraphHostingView.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTGridLineGroup.m b/spm/Sources/core-plot/CPTGridLineGroup.m deleted file mode 120000 index 172c1c944..000000000 --- a/spm/Sources/core-plot/CPTGridLineGroup.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTGridLineGroup.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTGridLines.m b/spm/Sources/core-plot/CPTGridLines.m deleted file mode 120000 index 1cf83743b..000000000 --- a/spm/Sources/core-plot/CPTGridLines.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTGridLines.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTImage.m b/spm/Sources/core-plot/CPTImage.m deleted file mode 120000 index 3001d970e..000000000 --- a/spm/Sources/core-plot/CPTImage.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTImage.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTImagePlatformSpecific.m b/spm/Sources/core-plot/CPTImagePlatformSpecific.m deleted file mode 120000 index 589c983de..000000000 --- a/spm/Sources/core-plot/CPTImagePlatformSpecific.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/PlatformSpecific/CPTImagePlatformSpecific.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTLayer.m b/spm/Sources/core-plot/CPTLayer.m deleted file mode 120000 index 8c84d5971..000000000 --- a/spm/Sources/core-plot/CPTLayer.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTLayer.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTLayerAnnotation.m b/spm/Sources/core-plot/CPTLayerAnnotation.m deleted file mode 120000 index 37f86e4d6..000000000 --- a/spm/Sources/core-plot/CPTLayerAnnotation.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTLayerAnnotation.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTLegend.m b/spm/Sources/core-plot/CPTLegend.m deleted file mode 120000 index d8dee9348..000000000 --- a/spm/Sources/core-plot/CPTLegend.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTLegend.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTLegendEntry.m b/spm/Sources/core-plot/CPTLegendEntry.m deleted file mode 120000 index 81301d318..000000000 --- a/spm/Sources/core-plot/CPTLegendEntry.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTLegendEntry.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTLimitBand.m b/spm/Sources/core-plot/CPTLimitBand.m deleted file mode 120000 index c8a8a5d65..000000000 --- a/spm/Sources/core-plot/CPTLimitBand.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTLimitBand.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTLineCap.m b/spm/Sources/core-plot/CPTLineCap.m deleted file mode 120000 index 41d7f0103..000000000 --- a/spm/Sources/core-plot/CPTLineCap.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTLineCap.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTLineStyle.m b/spm/Sources/core-plot/CPTLineStyle.m deleted file mode 120000 index dd6e51794..000000000 --- a/spm/Sources/core-plot/CPTLineStyle.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTLineStyle.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTMutableLineStyle.m b/spm/Sources/core-plot/CPTMutableLineStyle.m deleted file mode 120000 index f52200079..000000000 --- a/spm/Sources/core-plot/CPTMutableLineStyle.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTMutableLineStyle.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTMutableNumericData+TypeConversion.m b/spm/Sources/core-plot/CPTMutableNumericData+TypeConversion.m deleted file mode 120000 index 892e81926..000000000 --- a/spm/Sources/core-plot/CPTMutableNumericData+TypeConversion.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTMutableNumericData+TypeConversion.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTMutableNumericData.m b/spm/Sources/core-plot/CPTMutableNumericData.m deleted file mode 120000 index fcddc44b6..000000000 --- a/spm/Sources/core-plot/CPTMutableNumericData.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTMutableNumericData.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTMutablePlotRange.m b/spm/Sources/core-plot/CPTMutablePlotRange.m deleted file mode 120000 index ba573d97b..000000000 --- a/spm/Sources/core-plot/CPTMutablePlotRange.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTMutablePlotRange.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTMutableShadow.m b/spm/Sources/core-plot/CPTMutableShadow.m deleted file mode 120000 index 6789a820a..000000000 --- a/spm/Sources/core-plot/CPTMutableShadow.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTMutableShadow.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTMutableTextStyle.m b/spm/Sources/core-plot/CPTMutableTextStyle.m deleted file mode 120000 index 128907a10..000000000 --- a/spm/Sources/core-plot/CPTMutableTextStyle.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTMutableTextStyle.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTNumericData+TypeConversion.m b/spm/Sources/core-plot/CPTNumericData+TypeConversion.m deleted file mode 120000 index 4f9f960e5..000000000 --- a/spm/Sources/core-plot/CPTNumericData+TypeConversion.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTNumericData+TypeConversion.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTNumericData.m b/spm/Sources/core-plot/CPTNumericData.m deleted file mode 120000 index 0a95c83f9..000000000 --- a/spm/Sources/core-plot/CPTNumericData.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTNumericData.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTNumericDataType.m b/spm/Sources/core-plot/CPTNumericDataType.m deleted file mode 120000 index 187d3f0c0..000000000 --- a/spm/Sources/core-plot/CPTNumericDataType.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTNumericDataType.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPathExtensions.m b/spm/Sources/core-plot/CPTPathExtensions.m deleted file mode 120000 index 635a3ff2b..000000000 --- a/spm/Sources/core-plot/CPTPathExtensions.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTPathExtensions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPieChart.m b/spm/Sources/core-plot/CPTPieChart.m deleted file mode 120000 index e6337e1e7..000000000 --- a/spm/Sources/core-plot/CPTPieChart.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTPieChart.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlatformSpecificCategories.m b/spm/Sources/core-plot/CPTPlatformSpecificCategories.m deleted file mode 120000 index 5938ca9de..000000000 --- a/spm/Sources/core-plot/CPTPlatformSpecificCategories.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/PlatformSpecific/CPTPlatformSpecificCategories.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlatformSpecificDefines.m b/spm/Sources/core-plot/CPTPlatformSpecificDefines.m deleted file mode 120000 index a45be5581..000000000 --- a/spm/Sources/core-plot/CPTPlatformSpecificDefines.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/PlatformSpecific/CPTPlatformSpecificDefines.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlatformSpecificFunctions.m b/spm/Sources/core-plot/CPTPlatformSpecificFunctions.m deleted file mode 120000 index c8671612f..000000000 --- a/spm/Sources/core-plot/CPTPlatformSpecificFunctions.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/PlatformSpecific/CPTPlatformSpecificFunctions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlot.m b/spm/Sources/core-plot/CPTPlot.m deleted file mode 120000 index fa92ce8cc..000000000 --- a/spm/Sources/core-plot/CPTPlot.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTPlot.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlotArea.m b/spm/Sources/core-plot/CPTPlotArea.m deleted file mode 120000 index 297cfc628..000000000 --- a/spm/Sources/core-plot/CPTPlotArea.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTPlotArea.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlotAreaFrame.m b/spm/Sources/core-plot/CPTPlotAreaFrame.m deleted file mode 120000 index b751436bd..000000000 --- a/spm/Sources/core-plot/CPTPlotAreaFrame.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTPlotAreaFrame.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlotGroup.m b/spm/Sources/core-plot/CPTPlotGroup.m deleted file mode 120000 index 820c6ddd6..000000000 --- a/spm/Sources/core-plot/CPTPlotGroup.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTPlotGroup.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlotRange.m b/spm/Sources/core-plot/CPTPlotRange.m deleted file mode 120000 index 344bb8b96..000000000 --- a/spm/Sources/core-plot/CPTPlotRange.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTPlotRange.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlotSpace.m b/spm/Sources/core-plot/CPTPlotSpace.m deleted file mode 120000 index a981e9981..000000000 --- a/spm/Sources/core-plot/CPTPlotSpace.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTPlotSpace.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlotSpaceAnnotation.m b/spm/Sources/core-plot/CPTPlotSpaceAnnotation.m deleted file mode 120000 index f8e5911b7..000000000 --- a/spm/Sources/core-plot/CPTPlotSpaceAnnotation.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTPlotSpaceAnnotation.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlotSymbol.m b/spm/Sources/core-plot/CPTPlotSymbol.m deleted file mode 120000 index 05243cdf0..000000000 --- a/spm/Sources/core-plot/CPTPlotSymbol.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTPlotSymbol.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTRangePlot.m b/spm/Sources/core-plot/CPTRangePlot.m deleted file mode 120000 index 1a49ad72e..000000000 --- a/spm/Sources/core-plot/CPTRangePlot.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTRangePlot.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTScatterPlot.m b/spm/Sources/core-plot/CPTScatterPlot.m deleted file mode 120000 index 2d1ff16e3..000000000 --- a/spm/Sources/core-plot/CPTScatterPlot.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTScatterPlot.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTShadow.m b/spm/Sources/core-plot/CPTShadow.m deleted file mode 120000 index 2173efbfe..000000000 --- a/spm/Sources/core-plot/CPTShadow.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTShadow.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTTextLayer.m b/spm/Sources/core-plot/CPTTextLayer.m deleted file mode 120000 index 47e0aff04..000000000 --- a/spm/Sources/core-plot/CPTTextLayer.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTTextLayer.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTTextStyle.m b/spm/Sources/core-plot/CPTTextStyle.m deleted file mode 120000 index edffa0d87..000000000 --- a/spm/Sources/core-plot/CPTTextStyle.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTTextStyle.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTTextStylePlatformSpecific.m b/spm/Sources/core-plot/CPTTextStylePlatformSpecific.m deleted file mode 120000 index 9fdc1b86c..000000000 --- a/spm/Sources/core-plot/CPTTextStylePlatformSpecific.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/PlatformSpecific/CPTTextStylePlatformSpecific.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTTheme.m b/spm/Sources/core-plot/CPTTheme.m deleted file mode 120000 index 047560078..000000000 --- a/spm/Sources/core-plot/CPTTheme.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTTheme.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTTimeFormatter.m b/spm/Sources/core-plot/CPTTimeFormatter.m deleted file mode 120000 index 21d893f90..000000000 --- a/spm/Sources/core-plot/CPTTimeFormatter.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTTimeFormatter.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTTradingRangePlot.m b/spm/Sources/core-plot/CPTTradingRangePlot.m deleted file mode 120000 index 6f7331366..000000000 --- a/spm/Sources/core-plot/CPTTradingRangePlot.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTTradingRangePlot.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTUtilities.m b/spm/Sources/core-plot/CPTUtilities.m deleted file mode 120000 index 193ace357..000000000 --- a/spm/Sources/core-plot/CPTUtilities.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTUtilities.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTXYAxis.m b/spm/Sources/core-plot/CPTXYAxis.m deleted file mode 120000 index dfde4fab8..000000000 --- a/spm/Sources/core-plot/CPTXYAxis.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTXYAxis.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTXYAxisSet.m b/spm/Sources/core-plot/CPTXYAxisSet.m deleted file mode 120000 index 697c1d56d..000000000 --- a/spm/Sources/core-plot/CPTXYAxisSet.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTXYAxisSet.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTXYGraph.m b/spm/Sources/core-plot/CPTXYGraph.m deleted file mode 120000 index 006eb518b..000000000 --- a/spm/Sources/core-plot/CPTXYGraph.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTXYGraph.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTXYPlotSpace.m b/spm/Sources/core-plot/CPTXYPlotSpace.m deleted file mode 120000 index e1143e1db..000000000 --- a/spm/Sources/core-plot/CPTXYPlotSpace.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTXYPlotSpace.m \ No newline at end of file diff --git a/spm/Sources/core-plot/NSCoderExtensions.m b/spm/Sources/core-plot/NSCoderExtensions.m deleted file mode 120000 index f214ee254..000000000 --- a/spm/Sources/core-plot/NSCoderExtensions.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/NSCoderExtensions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/NSDecimalNumberExtensions.m b/spm/Sources/core-plot/NSDecimalNumberExtensions.m deleted file mode 120000 index c4ee7f4f9..000000000 --- a/spm/Sources/core-plot/NSDecimalNumberExtensions.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/NSDecimalNumberExtensions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/NSNumberExtensions.m b/spm/Sources/core-plot/NSNumberExtensions.m deleted file mode 120000 index 0bc3e12de..000000000 --- a/spm/Sources/core-plot/NSNumberExtensions.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/NSNumberExtensions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.h b/spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.h deleted file mode 120000 index 2c387bcad..000000000 --- a/spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.h +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTAnimationCGFloatPeriod.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.m b/spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.m deleted file mode 120000 index 711cecc2a..000000000 --- a/spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTAnimationCGFloatPeriod.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationCGPointPeriod.h b/spm/Sources/core-plot/_CPTAnimationCGPointPeriod.h deleted file mode 120000 index a8a2a1099..000000000 --- a/spm/Sources/core-plot/_CPTAnimationCGPointPeriod.h +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTAnimationCGPointPeriod.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationCGPointPeriod.m b/spm/Sources/core-plot/_CPTAnimationCGPointPeriod.m deleted file mode 120000 index 91a1e8bce..000000000 --- a/spm/Sources/core-plot/_CPTAnimationCGPointPeriod.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTAnimationCGPointPeriod.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationCGRectPeriod.h b/spm/Sources/core-plot/_CPTAnimationCGRectPeriod.h deleted file mode 120000 index bfbfb50ad..000000000 --- a/spm/Sources/core-plot/_CPTAnimationCGRectPeriod.h +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTAnimationCGRectPeriod.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationCGRectPeriod.m b/spm/Sources/core-plot/_CPTAnimationCGRectPeriod.m deleted file mode 120000 index 36ba199b9..000000000 --- a/spm/Sources/core-plot/_CPTAnimationCGRectPeriod.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTAnimationCGRectPeriod.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationCGSizePeriod.h b/spm/Sources/core-plot/_CPTAnimationCGSizePeriod.h deleted file mode 120000 index f527f2f00..000000000 --- a/spm/Sources/core-plot/_CPTAnimationCGSizePeriod.h +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTAnimationCGSizePeriod.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationCGSizePeriod.m b/spm/Sources/core-plot/_CPTAnimationCGSizePeriod.m deleted file mode 120000 index 2414600b5..000000000 --- a/spm/Sources/core-plot/_CPTAnimationCGSizePeriod.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTAnimationCGSizePeriod.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.h b/spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.h deleted file mode 120000 index 9864b5caf..000000000 --- a/spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.h +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTAnimationNSDecimalPeriod.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.m b/spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.m deleted file mode 120000 index 3ad5013c7..000000000 --- a/spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTAnimationNSDecimalPeriod.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.h b/spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.h deleted file mode 120000 index 7d2309ba4..000000000 --- a/spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.h +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTAnimationNSNumberPeriod.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.m b/spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.m deleted file mode 120000 index e384d8444..000000000 --- a/spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTAnimationNSNumberPeriod.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.h b/spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.h deleted file mode 120000 index a9ef5b7a9..000000000 --- a/spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.h +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTAnimationPlotRangePeriod.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.m b/spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.m deleted file mode 120000 index 82fa1465e..000000000 --- a/spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTAnimationPlotRangePeriod.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationTimingFunctions.h b/spm/Sources/core-plot/_CPTAnimationTimingFunctions.h deleted file mode 120000 index 1770c9279..000000000 --- a/spm/Sources/core-plot/_CPTAnimationTimingFunctions.h +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTAnimationTimingFunctions.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationTimingFunctions.m b/spm/Sources/core-plot/_CPTAnimationTimingFunctions.m deleted file mode 120000 index 65b4266af..000000000 --- a/spm/Sources/core-plot/_CPTAnimationTimingFunctions.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTAnimationTimingFunctions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTBorderLayer.h b/spm/Sources/core-plot/_CPTBorderLayer.h deleted file mode 120000 index 3afc6c1e3..000000000 --- a/spm/Sources/core-plot/_CPTBorderLayer.h +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTBorderLayer.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTBorderLayer.m b/spm/Sources/core-plot/_CPTBorderLayer.m deleted file mode 120000 index 00443260c..000000000 --- a/spm/Sources/core-plot/_CPTBorderLayer.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTBorderLayer.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTConstraintsFixed.h b/spm/Sources/core-plot/_CPTConstraintsFixed.h deleted file mode 120000 index 86d5a2165..000000000 --- a/spm/Sources/core-plot/_CPTConstraintsFixed.h +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTConstraintsFixed.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTConstraintsFixed.m b/spm/Sources/core-plot/_CPTConstraintsFixed.m deleted file mode 120000 index 62b705311..000000000 --- a/spm/Sources/core-plot/_CPTConstraintsFixed.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTConstraintsFixed.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTConstraintsRelative.h b/spm/Sources/core-plot/_CPTConstraintsRelative.h deleted file mode 120000 index 7af0d22db..000000000 --- a/spm/Sources/core-plot/_CPTConstraintsRelative.h +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTConstraintsRelative.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTConstraintsRelative.m b/spm/Sources/core-plot/_CPTConstraintsRelative.m deleted file mode 120000 index 634e9a690..000000000 --- a/spm/Sources/core-plot/_CPTConstraintsRelative.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTConstraintsRelative.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTDarkGradientTheme.h b/spm/Sources/core-plot/_CPTDarkGradientTheme.h deleted file mode 120000 index c37ae8a09..000000000 --- a/spm/Sources/core-plot/_CPTDarkGradientTheme.h +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTDarkGradientTheme.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTDarkGradientTheme.m b/spm/Sources/core-plot/_CPTDarkGradientTheme.m deleted file mode 120000 index 5c0cce515..000000000 --- a/spm/Sources/core-plot/_CPTDarkGradientTheme.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTDarkGradientTheme.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTFillColor.h b/spm/Sources/core-plot/_CPTFillColor.h deleted file mode 120000 index 8729abd32..000000000 --- a/spm/Sources/core-plot/_CPTFillColor.h +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTFillColor.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTFillColor.m b/spm/Sources/core-plot/_CPTFillColor.m deleted file mode 120000 index 45972cddd..000000000 --- a/spm/Sources/core-plot/_CPTFillColor.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTFillColor.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTFillGradient.h b/spm/Sources/core-plot/_CPTFillGradient.h deleted file mode 120000 index e4bc0b777..000000000 --- a/spm/Sources/core-plot/_CPTFillGradient.h +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTFillGradient.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTFillGradient.m b/spm/Sources/core-plot/_CPTFillGradient.m deleted file mode 120000 index eee6c6e01..000000000 --- a/spm/Sources/core-plot/_CPTFillGradient.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTFillGradient.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTFillImage.h b/spm/Sources/core-plot/_CPTFillImage.h deleted file mode 120000 index 0c3352876..000000000 --- a/spm/Sources/core-plot/_CPTFillImage.h +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTFillImage.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTFillImage.m b/spm/Sources/core-plot/_CPTFillImage.m deleted file mode 120000 index e9093df88..000000000 --- a/spm/Sources/core-plot/_CPTFillImage.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTFillImage.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTMaskLayer.h b/spm/Sources/core-plot/_CPTMaskLayer.h deleted file mode 120000 index 360e39661..000000000 --- a/spm/Sources/core-plot/_CPTMaskLayer.h +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTMaskLayer.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTMaskLayer.m b/spm/Sources/core-plot/_CPTMaskLayer.m deleted file mode 120000 index 15060d9eb..000000000 --- a/spm/Sources/core-plot/_CPTMaskLayer.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTMaskLayer.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTPlainBlackTheme.h b/spm/Sources/core-plot/_CPTPlainBlackTheme.h deleted file mode 120000 index 4a6661adf..000000000 --- a/spm/Sources/core-plot/_CPTPlainBlackTheme.h +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTPlainBlackTheme.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTPlainBlackTheme.m b/spm/Sources/core-plot/_CPTPlainBlackTheme.m deleted file mode 120000 index 3b175c6e4..000000000 --- a/spm/Sources/core-plot/_CPTPlainBlackTheme.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTPlainBlackTheme.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTPlainWhiteTheme.h b/spm/Sources/core-plot/_CPTPlainWhiteTheme.h deleted file mode 120000 index c596aee7c..000000000 --- a/spm/Sources/core-plot/_CPTPlainWhiteTheme.h +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTPlainWhiteTheme.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTPlainWhiteTheme.m b/spm/Sources/core-plot/_CPTPlainWhiteTheme.m deleted file mode 120000 index b478bf193..000000000 --- a/spm/Sources/core-plot/_CPTPlainWhiteTheme.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTPlainWhiteTheme.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTSlateTheme.h b/spm/Sources/core-plot/_CPTSlateTheme.h deleted file mode 120000 index be824d643..000000000 --- a/spm/Sources/core-plot/_CPTSlateTheme.h +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTSlateTheme.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTSlateTheme.m b/spm/Sources/core-plot/_CPTSlateTheme.m deleted file mode 120000 index 41da25ebc..000000000 --- a/spm/Sources/core-plot/_CPTSlateTheme.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTSlateTheme.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTStocksTheme.h b/spm/Sources/core-plot/_CPTStocksTheme.h deleted file mode 120000 index 9f51d7930..000000000 --- a/spm/Sources/core-plot/_CPTStocksTheme.h +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTStocksTheme.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTStocksTheme.m b/spm/Sources/core-plot/_CPTStocksTheme.m deleted file mode 120000 index 97e996679..000000000 --- a/spm/Sources/core-plot/_CPTStocksTheme.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTStocksTheme.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTXYTheme.h b/spm/Sources/core-plot/_CPTXYTheme.h deleted file mode 120000 index 225ce8713..000000000 --- a/spm/Sources/core-plot/_CPTXYTheme.h +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTXYTheme.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTXYTheme.m b/spm/Sources/core-plot/_CPTXYTheme.m deleted file mode 120000 index 750641fe5..000000000 --- a/spm/Sources/core-plot/_CPTXYTheme.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/_CPTXYTheme.m \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAnimation.h b/spm/Sources/core-plot/include/CPTAnimation.h deleted file mode 120000 index d2c87b5e2..000000000 --- a/spm/Sources/core-plot/include/CPTAnimation.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTAnimation.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAnimationOperation.h b/spm/Sources/core-plot/include/CPTAnimationOperation.h deleted file mode 120000 index 070d475e1..000000000 --- a/spm/Sources/core-plot/include/CPTAnimationOperation.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTAnimationOperation.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAnimationPeriod.h b/spm/Sources/core-plot/include/CPTAnimationPeriod.h deleted file mode 120000 index 99855620c..000000000 --- a/spm/Sources/core-plot/include/CPTAnimationPeriod.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTAnimationPeriod.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAnnotation.h b/spm/Sources/core-plot/include/CPTAnnotation.h deleted file mode 120000 index 7a396b2d0..000000000 --- a/spm/Sources/core-plot/include/CPTAnnotation.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTAnnotation.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAnnotationHostLayer.h b/spm/Sources/core-plot/include/CPTAnnotationHostLayer.h deleted file mode 120000 index 404703b3d..000000000 --- a/spm/Sources/core-plot/include/CPTAnnotationHostLayer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTAnnotationHostLayer.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAxis.h b/spm/Sources/core-plot/include/CPTAxis.h deleted file mode 120000 index 1603ef430..000000000 --- a/spm/Sources/core-plot/include/CPTAxis.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTAxis.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAxisLabel.h b/spm/Sources/core-plot/include/CPTAxisLabel.h deleted file mode 120000 index 8e7bb2152..000000000 --- a/spm/Sources/core-plot/include/CPTAxisLabel.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTAxisLabel.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAxisLabelGroup.h b/spm/Sources/core-plot/include/CPTAxisLabelGroup.h deleted file mode 120000 index 40d7b4fd4..000000000 --- a/spm/Sources/core-plot/include/CPTAxisLabelGroup.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTAxisLabelGroup.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAxisSet.h b/spm/Sources/core-plot/include/CPTAxisSet.h deleted file mode 120000 index 8445d7388..000000000 --- a/spm/Sources/core-plot/include/CPTAxisSet.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTAxisSet.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAxisTitle.h b/spm/Sources/core-plot/include/CPTAxisTitle.h deleted file mode 120000 index f03866501..000000000 --- a/spm/Sources/core-plot/include/CPTAxisTitle.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTAxisTitle.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTBarPlot.h b/spm/Sources/core-plot/include/CPTBarPlot.h deleted file mode 120000 index 818be1d3c..000000000 --- a/spm/Sources/core-plot/include/CPTBarPlot.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTBarPlot.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTBorderedLayer.h b/spm/Sources/core-plot/include/CPTBorderedLayer.h deleted file mode 120000 index 509e957dd..000000000 --- a/spm/Sources/core-plot/include/CPTBorderedLayer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTBorderedLayer.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTCalendarFormatter.h b/spm/Sources/core-plot/include/CPTCalendarFormatter.h deleted file mode 120000 index b649bc595..000000000 --- a/spm/Sources/core-plot/include/CPTCalendarFormatter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTCalendarFormatter.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTColor.h b/spm/Sources/core-plot/include/CPTColor.h deleted file mode 120000 index 89a66a388..000000000 --- a/spm/Sources/core-plot/include/CPTColor.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTColor.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTColorSpace.h b/spm/Sources/core-plot/include/CPTColorSpace.h deleted file mode 120000 index 9a5ec33b3..000000000 --- a/spm/Sources/core-plot/include/CPTColorSpace.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTColorSpace.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTConstraints.h b/spm/Sources/core-plot/include/CPTConstraints.h deleted file mode 120000 index f5dd6b1fa..000000000 --- a/spm/Sources/core-plot/include/CPTConstraints.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTConstraints.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTDebugQuickLook.h b/spm/Sources/core-plot/include/CPTDebugQuickLook.h deleted file mode 120000 index 500301a70..000000000 --- a/spm/Sources/core-plot/include/CPTDebugQuickLook.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTDebugQuickLook.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTDefinitions.h b/spm/Sources/core-plot/include/CPTDefinitions.h deleted file mode 120000 index 77b264637..000000000 --- a/spm/Sources/core-plot/include/CPTDefinitions.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTDefinitions.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTDerivedXYGraph.h b/spm/Sources/core-plot/include/CPTDerivedXYGraph.h deleted file mode 120000 index c3afb6032..000000000 --- a/spm/Sources/core-plot/include/CPTDerivedXYGraph.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTDerivedXYGraph.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTExceptions.h b/spm/Sources/core-plot/include/CPTExceptions.h deleted file mode 120000 index ae845ca0a..000000000 --- a/spm/Sources/core-plot/include/CPTExceptions.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTExceptions.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTFill.h b/spm/Sources/core-plot/include/CPTFill.h deleted file mode 120000 index 0cb9177a9..000000000 --- a/spm/Sources/core-plot/include/CPTFill.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTFill.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTFunctionDataSource.h b/spm/Sources/core-plot/include/CPTFunctionDataSource.h deleted file mode 120000 index 9e661ae0b..000000000 --- a/spm/Sources/core-plot/include/CPTFunctionDataSource.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTFunctionDataSource.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTGradient.h b/spm/Sources/core-plot/include/CPTGradient.h deleted file mode 120000 index 2a97c2614..000000000 --- a/spm/Sources/core-plot/include/CPTGradient.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTGradient.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTGraph.h b/spm/Sources/core-plot/include/CPTGraph.h deleted file mode 120000 index e1f85034f..000000000 --- a/spm/Sources/core-plot/include/CPTGraph.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTGraph.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTGraphHostingView.h b/spm/Sources/core-plot/include/CPTGraphHostingView.h deleted file mode 120000 index 8bd643aaa..000000000 --- a/spm/Sources/core-plot/include/CPTGraphHostingView.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/PlatformSpecific/CPTGraphHostingView.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTGridLineGroup.h b/spm/Sources/core-plot/include/CPTGridLineGroup.h deleted file mode 120000 index 644db825f..000000000 --- a/spm/Sources/core-plot/include/CPTGridLineGroup.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTGridLineGroup.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTGridLines.h b/spm/Sources/core-plot/include/CPTGridLines.h deleted file mode 120000 index fcf64c697..000000000 --- a/spm/Sources/core-plot/include/CPTGridLines.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTGridLines.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTImage.h b/spm/Sources/core-plot/include/CPTImage.h deleted file mode 120000 index fdf4b866e..000000000 --- a/spm/Sources/core-plot/include/CPTImage.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTImage.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTLayer.h b/spm/Sources/core-plot/include/CPTLayer.h deleted file mode 120000 index 1e16ba274..000000000 --- a/spm/Sources/core-plot/include/CPTLayer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTLayer.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTLayerAnnotation.h b/spm/Sources/core-plot/include/CPTLayerAnnotation.h deleted file mode 120000 index 4d31a6c35..000000000 --- a/spm/Sources/core-plot/include/CPTLayerAnnotation.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTLayerAnnotation.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTLegend.h b/spm/Sources/core-plot/include/CPTLegend.h deleted file mode 120000 index a881d49fc..000000000 --- a/spm/Sources/core-plot/include/CPTLegend.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTLegend.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTLegendEntry.h b/spm/Sources/core-plot/include/CPTLegendEntry.h deleted file mode 120000 index 4657685f3..000000000 --- a/spm/Sources/core-plot/include/CPTLegendEntry.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTLegendEntry.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTLimitBand.h b/spm/Sources/core-plot/include/CPTLimitBand.h deleted file mode 120000 index 8d1481db0..000000000 --- a/spm/Sources/core-plot/include/CPTLimitBand.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTLimitBand.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTLineCap.h b/spm/Sources/core-plot/include/CPTLineCap.h deleted file mode 120000 index 5ef3aeb2f..000000000 --- a/spm/Sources/core-plot/include/CPTLineCap.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTLineCap.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTLineStyle.h b/spm/Sources/core-plot/include/CPTLineStyle.h deleted file mode 120000 index 61d12117a..000000000 --- a/spm/Sources/core-plot/include/CPTLineStyle.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTLineStyle.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTMutableLineStyle.h b/spm/Sources/core-plot/include/CPTMutableLineStyle.h deleted file mode 120000 index e40949230..000000000 --- a/spm/Sources/core-plot/include/CPTMutableLineStyle.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTMutableLineStyle.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTMutableNumericData+TypeConversion.h b/spm/Sources/core-plot/include/CPTMutableNumericData+TypeConversion.h deleted file mode 120000 index 2e15c93df..000000000 --- a/spm/Sources/core-plot/include/CPTMutableNumericData+TypeConversion.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTMutableNumericData+TypeConversion.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTMutableNumericData.h b/spm/Sources/core-plot/include/CPTMutableNumericData.h deleted file mode 120000 index 1d7742957..000000000 --- a/spm/Sources/core-plot/include/CPTMutableNumericData.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTMutableNumericData.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTMutablePlotRange.h b/spm/Sources/core-plot/include/CPTMutablePlotRange.h deleted file mode 120000 index 2f19b9034..000000000 --- a/spm/Sources/core-plot/include/CPTMutablePlotRange.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTMutablePlotRange.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTMutableShadow.h b/spm/Sources/core-plot/include/CPTMutableShadow.h deleted file mode 120000 index 30b520124..000000000 --- a/spm/Sources/core-plot/include/CPTMutableShadow.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTMutableShadow.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTMutableTextStyle.h b/spm/Sources/core-plot/include/CPTMutableTextStyle.h deleted file mode 120000 index 8224b9808..000000000 --- a/spm/Sources/core-plot/include/CPTMutableTextStyle.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTMutableTextStyle.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTNumericData+TypeConversion.h b/spm/Sources/core-plot/include/CPTNumericData+TypeConversion.h deleted file mode 120000 index c4a513584..000000000 --- a/spm/Sources/core-plot/include/CPTNumericData+TypeConversion.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTNumericData+TypeConversion.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTNumericData.h b/spm/Sources/core-plot/include/CPTNumericData.h deleted file mode 120000 index 4578ef225..000000000 --- a/spm/Sources/core-plot/include/CPTNumericData.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTNumericData.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTNumericDataType.h b/spm/Sources/core-plot/include/CPTNumericDataType.h deleted file mode 120000 index d819981db..000000000 --- a/spm/Sources/core-plot/include/CPTNumericDataType.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTNumericDataType.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPathExtensions.h b/spm/Sources/core-plot/include/CPTPathExtensions.h deleted file mode 120000 index 9963958d0..000000000 --- a/spm/Sources/core-plot/include/CPTPathExtensions.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTPathExtensions.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPieChart.h b/spm/Sources/core-plot/include/CPTPieChart.h deleted file mode 120000 index 1efa1afcf..000000000 --- a/spm/Sources/core-plot/include/CPTPieChart.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTPieChart.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlatformSpecificCategories.h b/spm/Sources/core-plot/include/CPTPlatformSpecificCategories.h deleted file mode 120000 index bb322f194..000000000 --- a/spm/Sources/core-plot/include/CPTPlatformSpecificCategories.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/PlatformSpecific/CPTPlatformSpecificCategories.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlatformSpecificDefines.h b/spm/Sources/core-plot/include/CPTPlatformSpecificDefines.h deleted file mode 120000 index 1eedcf545..000000000 --- a/spm/Sources/core-plot/include/CPTPlatformSpecificDefines.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/PlatformSpecific/CPTPlatformSpecificDefines.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlatformSpecificFunctions.h b/spm/Sources/core-plot/include/CPTPlatformSpecificFunctions.h deleted file mode 120000 index a3ebbb9a3..000000000 --- a/spm/Sources/core-plot/include/CPTPlatformSpecificFunctions.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/PlatformSpecific/CPTPlatformSpecificFunctions.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlot.h b/spm/Sources/core-plot/include/CPTPlot.h deleted file mode 120000 index ff1e6cc48..000000000 --- a/spm/Sources/core-plot/include/CPTPlot.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTPlot.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlotArea.h b/spm/Sources/core-plot/include/CPTPlotArea.h deleted file mode 120000 index 63394b35b..000000000 --- a/spm/Sources/core-plot/include/CPTPlotArea.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTPlotArea.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlotAreaFrame.h b/spm/Sources/core-plot/include/CPTPlotAreaFrame.h deleted file mode 120000 index f6a99186b..000000000 --- a/spm/Sources/core-plot/include/CPTPlotAreaFrame.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTPlotAreaFrame.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlotGroup.h b/spm/Sources/core-plot/include/CPTPlotGroup.h deleted file mode 120000 index 6833290a6..000000000 --- a/spm/Sources/core-plot/include/CPTPlotGroup.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTPlotGroup.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlotRange.h b/spm/Sources/core-plot/include/CPTPlotRange.h deleted file mode 120000 index 76fee2c4a..000000000 --- a/spm/Sources/core-plot/include/CPTPlotRange.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTPlotRange.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlotSpace.h b/spm/Sources/core-plot/include/CPTPlotSpace.h deleted file mode 120000 index c36e29379..000000000 --- a/spm/Sources/core-plot/include/CPTPlotSpace.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTPlotSpace.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlotSpaceAnnotation.h b/spm/Sources/core-plot/include/CPTPlotSpaceAnnotation.h deleted file mode 120000 index ed18e5ea8..000000000 --- a/spm/Sources/core-plot/include/CPTPlotSpaceAnnotation.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTPlotSpaceAnnotation.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlotSymbol.h b/spm/Sources/core-plot/include/CPTPlotSymbol.h deleted file mode 120000 index 3cfc7530b..000000000 --- a/spm/Sources/core-plot/include/CPTPlotSymbol.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTPlotSymbol.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTRangePlot.h b/spm/Sources/core-plot/include/CPTRangePlot.h deleted file mode 120000 index 5d6d9e79f..000000000 --- a/spm/Sources/core-plot/include/CPTRangePlot.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTRangePlot.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTResponder.h b/spm/Sources/core-plot/include/CPTResponder.h deleted file mode 120000 index 34f94f9d8..000000000 --- a/spm/Sources/core-plot/include/CPTResponder.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTResponder.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTScatterPlot.h b/spm/Sources/core-plot/include/CPTScatterPlot.h deleted file mode 120000 index e0c15a810..000000000 --- a/spm/Sources/core-plot/include/CPTScatterPlot.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTScatterPlot.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTShadow.h b/spm/Sources/core-plot/include/CPTShadow.h deleted file mode 120000 index 0ad2a6f44..000000000 --- a/spm/Sources/core-plot/include/CPTShadow.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTShadow.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTTextLayer.h b/spm/Sources/core-plot/include/CPTTextLayer.h deleted file mode 120000 index 540905494..000000000 --- a/spm/Sources/core-plot/include/CPTTextLayer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTTextLayer.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTTextStyle.h b/spm/Sources/core-plot/include/CPTTextStyle.h deleted file mode 120000 index ec8f72331..000000000 --- a/spm/Sources/core-plot/include/CPTTextStyle.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTTextStyle.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTTextStylePlatformSpecific.h b/spm/Sources/core-plot/include/CPTTextStylePlatformSpecific.h deleted file mode 120000 index 91aadb45f..000000000 --- a/spm/Sources/core-plot/include/CPTTextStylePlatformSpecific.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/PlatformSpecific/CPTTextStylePlatformSpecific.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTTheme.h b/spm/Sources/core-plot/include/CPTTheme.h deleted file mode 120000 index 9786dc61d..000000000 --- a/spm/Sources/core-plot/include/CPTTheme.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTTheme.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTTimeFormatter.h b/spm/Sources/core-plot/include/CPTTimeFormatter.h deleted file mode 120000 index be4371ba1..000000000 --- a/spm/Sources/core-plot/include/CPTTimeFormatter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTTimeFormatter.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTTradingRangePlot.h b/spm/Sources/core-plot/include/CPTTradingRangePlot.h deleted file mode 120000 index d861e6f43..000000000 --- a/spm/Sources/core-plot/include/CPTTradingRangePlot.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTTradingRangePlot.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTUtilities.h b/spm/Sources/core-plot/include/CPTUtilities.h deleted file mode 120000 index a14adfa4b..000000000 --- a/spm/Sources/core-plot/include/CPTUtilities.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTUtilities.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTXYAxis.h b/spm/Sources/core-plot/include/CPTXYAxis.h deleted file mode 120000 index 309f67620..000000000 --- a/spm/Sources/core-plot/include/CPTXYAxis.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTXYAxis.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTXYAxisSet.h b/spm/Sources/core-plot/include/CPTXYAxisSet.h deleted file mode 120000 index 842a4abff..000000000 --- a/spm/Sources/core-plot/include/CPTXYAxisSet.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTXYAxisSet.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTXYGraph.h b/spm/Sources/core-plot/include/CPTXYGraph.h deleted file mode 120000 index af004a251..000000000 --- a/spm/Sources/core-plot/include/CPTXYGraph.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTXYGraph.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTXYPlotSpace.h b/spm/Sources/core-plot/include/CPTXYPlotSpace.h deleted file mode 120000 index 42852d175..000000000 --- a/spm/Sources/core-plot/include/CPTXYPlotSpace.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTXYPlotSpace.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CorePlot.h b/spm/Sources/core-plot/include/CorePlot.h deleted file mode 120000 index c0d510e52..000000000 --- a/spm/Sources/core-plot/include/CorePlot.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/CocoaPods/CorePlot.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/NSCoderExtensions.h b/spm/Sources/core-plot/include/NSCoderExtensions.h deleted file mode 120000 index 1f38f0542..000000000 --- a/spm/Sources/core-plot/include/NSCoderExtensions.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/NSCoderExtensions.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/NSDecimalNumberExtensions.h b/spm/Sources/core-plot/include/NSDecimalNumberExtensions.h deleted file mode 120000 index 82fed29ca..000000000 --- a/spm/Sources/core-plot/include/NSDecimalNumberExtensions.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/NSDecimalNumberExtensions.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/NSNumberExtensions.h b/spm/Sources/core-plot/include/NSNumberExtensions.h deleted file mode 120000 index a775b31b9..000000000 --- a/spm/Sources/core-plot/include/NSNumberExtensions.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/NSNumberExtensions.h \ No newline at end of file From e7bd92402ee650c82c35f38fed2dc22a0bcfa61a Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Thu, 23 Sep 2021 17:50:55 -0400 Subject: [PATCH 078/245] Revert "Remove the spm/ directory from git tracking since these files are regenerated on each build." This reverts commit d4bf3e5dc0041b933613db193ee9c4d9271a1977. --- .gitignore | 1 - spm/Sources/core-plot/CPTAnimation.m | 1 + spm/Sources/core-plot/CPTAnimationOperation.m | 1 + spm/Sources/core-plot/CPTAnimationPeriod.m | 1 + spm/Sources/core-plot/CPTAnnotation.m | 1 + spm/Sources/core-plot/CPTAnnotationHostLayer.m | 1 + spm/Sources/core-plot/CPTAxis.m | 1 + spm/Sources/core-plot/CPTAxisLabel.m | 1 + spm/Sources/core-plot/CPTAxisLabelGroup.m | 1 + spm/Sources/core-plot/CPTAxisSet.m | 1 + spm/Sources/core-plot/CPTAxisTitle.m | 1 + spm/Sources/core-plot/CPTBarPlot.m | 1 + spm/Sources/core-plot/CPTBorderedLayer.m | 1 + spm/Sources/core-plot/CPTCalendarFormatter.m | 1 + spm/Sources/core-plot/CPTColor.m | 1 + spm/Sources/core-plot/CPTColorSpace.m | 1 + spm/Sources/core-plot/CPTConstraints.m | 1 + spm/Sources/core-plot/CPTDefinitions.m | 1 + spm/Sources/core-plot/CPTDerivedXYGraph.m | 1 + spm/Sources/core-plot/CPTExceptions.m | 1 + spm/Sources/core-plot/CPTFill.m | 1 + spm/Sources/core-plot/CPTFunctionDataSource.m | 1 + spm/Sources/core-plot/CPTGradient.m | 1 + spm/Sources/core-plot/CPTGraph.m | 1 + spm/Sources/core-plot/CPTGraphHostingView.m | 1 + spm/Sources/core-plot/CPTGridLineGroup.m | 1 + spm/Sources/core-plot/CPTGridLines.m | 1 + spm/Sources/core-plot/CPTImage.m | 1 + spm/Sources/core-plot/CPTImagePlatformSpecific.m | 1 + spm/Sources/core-plot/CPTLayer.m | 1 + spm/Sources/core-plot/CPTLayerAnnotation.m | 1 + spm/Sources/core-plot/CPTLegend.m | 1 + spm/Sources/core-plot/CPTLegendEntry.m | 1 + spm/Sources/core-plot/CPTLimitBand.m | 1 + spm/Sources/core-plot/CPTLineCap.m | 1 + spm/Sources/core-plot/CPTLineStyle.m | 1 + spm/Sources/core-plot/CPTMutableLineStyle.m | 1 + spm/Sources/core-plot/CPTMutableNumericData+TypeConversion.m | 1 + spm/Sources/core-plot/CPTMutableNumericData.m | 1 + spm/Sources/core-plot/CPTMutablePlotRange.m | 1 + spm/Sources/core-plot/CPTMutableShadow.m | 1 + spm/Sources/core-plot/CPTMutableTextStyle.m | 1 + spm/Sources/core-plot/CPTNumericData+TypeConversion.m | 1 + spm/Sources/core-plot/CPTNumericData.m | 1 + spm/Sources/core-plot/CPTNumericDataType.m | 1 + spm/Sources/core-plot/CPTPathExtensions.m | 1 + spm/Sources/core-plot/CPTPieChart.m | 1 + spm/Sources/core-plot/CPTPlatformSpecificCategories.m | 1 + spm/Sources/core-plot/CPTPlatformSpecificDefines.m | 1 + spm/Sources/core-plot/CPTPlatformSpecificFunctions.m | 1 + spm/Sources/core-plot/CPTPlot.m | 1 + spm/Sources/core-plot/CPTPlotArea.m | 1 + spm/Sources/core-plot/CPTPlotAreaFrame.m | 1 + spm/Sources/core-plot/CPTPlotGroup.m | 1 + spm/Sources/core-plot/CPTPlotRange.m | 1 + spm/Sources/core-plot/CPTPlotSpace.m | 1 + spm/Sources/core-plot/CPTPlotSpaceAnnotation.m | 1 + spm/Sources/core-plot/CPTPlotSymbol.m | 1 + spm/Sources/core-plot/CPTRangePlot.m | 1 + spm/Sources/core-plot/CPTScatterPlot.m | 1 + spm/Sources/core-plot/CPTShadow.m | 1 + spm/Sources/core-plot/CPTTextLayer.m | 1 + spm/Sources/core-plot/CPTTextStyle.m | 1 + spm/Sources/core-plot/CPTTextStylePlatformSpecific.m | 1 + spm/Sources/core-plot/CPTTheme.m | 1 + spm/Sources/core-plot/CPTTimeFormatter.m | 1 + spm/Sources/core-plot/CPTTradingRangePlot.m | 1 + spm/Sources/core-plot/CPTUtilities.m | 1 + spm/Sources/core-plot/CPTXYAxis.m | 1 + spm/Sources/core-plot/CPTXYAxisSet.m | 1 + spm/Sources/core-plot/CPTXYGraph.m | 1 + spm/Sources/core-plot/CPTXYPlotSpace.m | 1 + spm/Sources/core-plot/NSCoderExtensions.m | 1 + spm/Sources/core-plot/NSDecimalNumberExtensions.m | 1 + spm/Sources/core-plot/NSNumberExtensions.m | 1 + spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.h | 1 + spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.m | 1 + spm/Sources/core-plot/_CPTAnimationCGPointPeriod.h | 1 + spm/Sources/core-plot/_CPTAnimationCGPointPeriod.m | 1 + spm/Sources/core-plot/_CPTAnimationCGRectPeriod.h | 1 + spm/Sources/core-plot/_CPTAnimationCGRectPeriod.m | 1 + spm/Sources/core-plot/_CPTAnimationCGSizePeriod.h | 1 + spm/Sources/core-plot/_CPTAnimationCGSizePeriod.m | 1 + spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.h | 1 + spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.m | 1 + spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.h | 1 + spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.m | 1 + spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.h | 1 + spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.m | 1 + spm/Sources/core-plot/_CPTAnimationTimingFunctions.h | 1 + spm/Sources/core-plot/_CPTAnimationTimingFunctions.m | 1 + spm/Sources/core-plot/_CPTBorderLayer.h | 1 + spm/Sources/core-plot/_CPTBorderLayer.m | 1 + spm/Sources/core-plot/_CPTConstraintsFixed.h | 1 + spm/Sources/core-plot/_CPTConstraintsFixed.m | 1 + spm/Sources/core-plot/_CPTConstraintsRelative.h | 1 + spm/Sources/core-plot/_CPTConstraintsRelative.m | 1 + spm/Sources/core-plot/_CPTDarkGradientTheme.h | 1 + spm/Sources/core-plot/_CPTDarkGradientTheme.m | 1 + spm/Sources/core-plot/_CPTFillColor.h | 1 + spm/Sources/core-plot/_CPTFillColor.m | 1 + spm/Sources/core-plot/_CPTFillGradient.h | 1 + spm/Sources/core-plot/_CPTFillGradient.m | 1 + spm/Sources/core-plot/_CPTFillImage.h | 1 + spm/Sources/core-plot/_CPTFillImage.m | 1 + spm/Sources/core-plot/_CPTMaskLayer.h | 1 + spm/Sources/core-plot/_CPTMaskLayer.m | 1 + spm/Sources/core-plot/_CPTPlainBlackTheme.h | 1 + spm/Sources/core-plot/_CPTPlainBlackTheme.m | 1 + spm/Sources/core-plot/_CPTPlainWhiteTheme.h | 1 + spm/Sources/core-plot/_CPTPlainWhiteTheme.m | 1 + spm/Sources/core-plot/_CPTSlateTheme.h | 1 + spm/Sources/core-plot/_CPTSlateTheme.m | 1 + spm/Sources/core-plot/_CPTStocksTheme.h | 1 + spm/Sources/core-plot/_CPTStocksTheme.m | 1 + spm/Sources/core-plot/_CPTXYTheme.h | 1 + spm/Sources/core-plot/_CPTXYTheme.m | 1 + spm/Sources/core-plot/include/CPTAnimation.h | 1 + spm/Sources/core-plot/include/CPTAnimationOperation.h | 1 + spm/Sources/core-plot/include/CPTAnimationPeriod.h | 1 + spm/Sources/core-plot/include/CPTAnnotation.h | 1 + spm/Sources/core-plot/include/CPTAnnotationHostLayer.h | 1 + spm/Sources/core-plot/include/CPTAxis.h | 1 + spm/Sources/core-plot/include/CPTAxisLabel.h | 1 + spm/Sources/core-plot/include/CPTAxisLabelGroup.h | 1 + spm/Sources/core-plot/include/CPTAxisSet.h | 1 + spm/Sources/core-plot/include/CPTAxisTitle.h | 1 + spm/Sources/core-plot/include/CPTBarPlot.h | 1 + spm/Sources/core-plot/include/CPTBorderedLayer.h | 1 + spm/Sources/core-plot/include/CPTCalendarFormatter.h | 1 + spm/Sources/core-plot/include/CPTColor.h | 1 + spm/Sources/core-plot/include/CPTColorSpace.h | 1 + spm/Sources/core-plot/include/CPTConstraints.h | 1 + spm/Sources/core-plot/include/CPTDebugQuickLook.h | 1 + spm/Sources/core-plot/include/CPTDefinitions.h | 1 + spm/Sources/core-plot/include/CPTDerivedXYGraph.h | 1 + spm/Sources/core-plot/include/CPTExceptions.h | 1 + spm/Sources/core-plot/include/CPTFill.h | 1 + spm/Sources/core-plot/include/CPTFunctionDataSource.h | 1 + spm/Sources/core-plot/include/CPTGradient.h | 1 + spm/Sources/core-plot/include/CPTGraph.h | 1 + spm/Sources/core-plot/include/CPTGraphHostingView.h | 1 + spm/Sources/core-plot/include/CPTGridLineGroup.h | 1 + spm/Sources/core-plot/include/CPTGridLines.h | 1 + spm/Sources/core-plot/include/CPTImage.h | 1 + spm/Sources/core-plot/include/CPTLayer.h | 1 + spm/Sources/core-plot/include/CPTLayerAnnotation.h | 1 + spm/Sources/core-plot/include/CPTLegend.h | 1 + spm/Sources/core-plot/include/CPTLegendEntry.h | 1 + spm/Sources/core-plot/include/CPTLimitBand.h | 1 + spm/Sources/core-plot/include/CPTLineCap.h | 1 + spm/Sources/core-plot/include/CPTLineStyle.h | 1 + spm/Sources/core-plot/include/CPTMutableLineStyle.h | 1 + .../core-plot/include/CPTMutableNumericData+TypeConversion.h | 1 + spm/Sources/core-plot/include/CPTMutableNumericData.h | 1 + spm/Sources/core-plot/include/CPTMutablePlotRange.h | 1 + spm/Sources/core-plot/include/CPTMutableShadow.h | 1 + spm/Sources/core-plot/include/CPTMutableTextStyle.h | 1 + spm/Sources/core-plot/include/CPTNumericData+TypeConversion.h | 1 + spm/Sources/core-plot/include/CPTNumericData.h | 1 + spm/Sources/core-plot/include/CPTNumericDataType.h | 1 + spm/Sources/core-plot/include/CPTPathExtensions.h | 1 + spm/Sources/core-plot/include/CPTPieChart.h | 1 + spm/Sources/core-plot/include/CPTPlatformSpecificCategories.h | 1 + spm/Sources/core-plot/include/CPTPlatformSpecificDefines.h | 1 + spm/Sources/core-plot/include/CPTPlatformSpecificFunctions.h | 1 + spm/Sources/core-plot/include/CPTPlot.h | 1 + spm/Sources/core-plot/include/CPTPlotArea.h | 1 + spm/Sources/core-plot/include/CPTPlotAreaFrame.h | 1 + spm/Sources/core-plot/include/CPTPlotGroup.h | 1 + spm/Sources/core-plot/include/CPTPlotRange.h | 1 + spm/Sources/core-plot/include/CPTPlotSpace.h | 1 + spm/Sources/core-plot/include/CPTPlotSpaceAnnotation.h | 1 + spm/Sources/core-plot/include/CPTPlotSymbol.h | 1 + spm/Sources/core-plot/include/CPTRangePlot.h | 1 + spm/Sources/core-plot/include/CPTResponder.h | 1 + spm/Sources/core-plot/include/CPTScatterPlot.h | 1 + spm/Sources/core-plot/include/CPTShadow.h | 1 + spm/Sources/core-plot/include/CPTTextLayer.h | 1 + spm/Sources/core-plot/include/CPTTextStyle.h | 1 + spm/Sources/core-plot/include/CPTTextStylePlatformSpecific.h | 1 + spm/Sources/core-plot/include/CPTTheme.h | 1 + spm/Sources/core-plot/include/CPTTimeFormatter.h | 1 + spm/Sources/core-plot/include/CPTTradingRangePlot.h | 1 + spm/Sources/core-plot/include/CPTUtilities.h | 1 + spm/Sources/core-plot/include/CPTXYAxis.h | 1 + spm/Sources/core-plot/include/CPTXYAxisSet.h | 1 + spm/Sources/core-plot/include/CPTXYGraph.h | 1 + spm/Sources/core-plot/include/CPTXYPlotSpace.h | 1 + spm/Sources/core-plot/include/CorePlot.h | 1 + spm/Sources/core-plot/include/NSCoderExtensions.h | 1 + spm/Sources/core-plot/include/NSDecimalNumberExtensions.h | 1 + spm/Sources/core-plot/include/NSNumberExtensions.h | 1 + 193 files changed, 192 insertions(+), 1 deletion(-) create mode 120000 spm/Sources/core-plot/CPTAnimation.m create mode 120000 spm/Sources/core-plot/CPTAnimationOperation.m create mode 120000 spm/Sources/core-plot/CPTAnimationPeriod.m create mode 120000 spm/Sources/core-plot/CPTAnnotation.m create mode 120000 spm/Sources/core-plot/CPTAnnotationHostLayer.m create mode 120000 spm/Sources/core-plot/CPTAxis.m create mode 120000 spm/Sources/core-plot/CPTAxisLabel.m create mode 120000 spm/Sources/core-plot/CPTAxisLabelGroup.m create mode 120000 spm/Sources/core-plot/CPTAxisSet.m create mode 120000 spm/Sources/core-plot/CPTAxisTitle.m create mode 120000 spm/Sources/core-plot/CPTBarPlot.m create mode 120000 spm/Sources/core-plot/CPTBorderedLayer.m create mode 120000 spm/Sources/core-plot/CPTCalendarFormatter.m create mode 120000 spm/Sources/core-plot/CPTColor.m create mode 120000 spm/Sources/core-plot/CPTColorSpace.m create mode 120000 spm/Sources/core-plot/CPTConstraints.m create mode 120000 spm/Sources/core-plot/CPTDefinitions.m create mode 120000 spm/Sources/core-plot/CPTDerivedXYGraph.m create mode 120000 spm/Sources/core-plot/CPTExceptions.m create mode 120000 spm/Sources/core-plot/CPTFill.m create mode 120000 spm/Sources/core-plot/CPTFunctionDataSource.m create mode 120000 spm/Sources/core-plot/CPTGradient.m create mode 120000 spm/Sources/core-plot/CPTGraph.m create mode 120000 spm/Sources/core-plot/CPTGraphHostingView.m create mode 120000 spm/Sources/core-plot/CPTGridLineGroup.m create mode 120000 spm/Sources/core-plot/CPTGridLines.m create mode 120000 spm/Sources/core-plot/CPTImage.m create mode 120000 spm/Sources/core-plot/CPTImagePlatformSpecific.m create mode 120000 spm/Sources/core-plot/CPTLayer.m create mode 120000 spm/Sources/core-plot/CPTLayerAnnotation.m create mode 120000 spm/Sources/core-plot/CPTLegend.m create mode 120000 spm/Sources/core-plot/CPTLegendEntry.m create mode 120000 spm/Sources/core-plot/CPTLimitBand.m create mode 120000 spm/Sources/core-plot/CPTLineCap.m create mode 120000 spm/Sources/core-plot/CPTLineStyle.m create mode 120000 spm/Sources/core-plot/CPTMutableLineStyle.m create mode 120000 spm/Sources/core-plot/CPTMutableNumericData+TypeConversion.m create mode 120000 spm/Sources/core-plot/CPTMutableNumericData.m create mode 120000 spm/Sources/core-plot/CPTMutablePlotRange.m create mode 120000 spm/Sources/core-plot/CPTMutableShadow.m create mode 120000 spm/Sources/core-plot/CPTMutableTextStyle.m create mode 120000 spm/Sources/core-plot/CPTNumericData+TypeConversion.m create mode 120000 spm/Sources/core-plot/CPTNumericData.m create mode 120000 spm/Sources/core-plot/CPTNumericDataType.m create mode 120000 spm/Sources/core-plot/CPTPathExtensions.m create mode 120000 spm/Sources/core-plot/CPTPieChart.m create mode 120000 spm/Sources/core-plot/CPTPlatformSpecificCategories.m create mode 120000 spm/Sources/core-plot/CPTPlatformSpecificDefines.m create mode 120000 spm/Sources/core-plot/CPTPlatformSpecificFunctions.m create mode 120000 spm/Sources/core-plot/CPTPlot.m create mode 120000 spm/Sources/core-plot/CPTPlotArea.m create mode 120000 spm/Sources/core-plot/CPTPlotAreaFrame.m create mode 120000 spm/Sources/core-plot/CPTPlotGroup.m create mode 120000 spm/Sources/core-plot/CPTPlotRange.m create mode 120000 spm/Sources/core-plot/CPTPlotSpace.m create mode 120000 spm/Sources/core-plot/CPTPlotSpaceAnnotation.m create mode 120000 spm/Sources/core-plot/CPTPlotSymbol.m create mode 120000 spm/Sources/core-plot/CPTRangePlot.m create mode 120000 spm/Sources/core-plot/CPTScatterPlot.m create mode 120000 spm/Sources/core-plot/CPTShadow.m create mode 120000 spm/Sources/core-plot/CPTTextLayer.m create mode 120000 spm/Sources/core-plot/CPTTextStyle.m create mode 120000 spm/Sources/core-plot/CPTTextStylePlatformSpecific.m create mode 120000 spm/Sources/core-plot/CPTTheme.m create mode 120000 spm/Sources/core-plot/CPTTimeFormatter.m create mode 120000 spm/Sources/core-plot/CPTTradingRangePlot.m create mode 120000 spm/Sources/core-plot/CPTUtilities.m create mode 120000 spm/Sources/core-plot/CPTXYAxis.m create mode 120000 spm/Sources/core-plot/CPTXYAxisSet.m create mode 120000 spm/Sources/core-plot/CPTXYGraph.m create mode 120000 spm/Sources/core-plot/CPTXYPlotSpace.m create mode 120000 spm/Sources/core-plot/NSCoderExtensions.m create mode 120000 spm/Sources/core-plot/NSDecimalNumberExtensions.m create mode 120000 spm/Sources/core-plot/NSNumberExtensions.m create mode 120000 spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.h create mode 120000 spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.m create mode 120000 spm/Sources/core-plot/_CPTAnimationCGPointPeriod.h create mode 120000 spm/Sources/core-plot/_CPTAnimationCGPointPeriod.m create mode 120000 spm/Sources/core-plot/_CPTAnimationCGRectPeriod.h create mode 120000 spm/Sources/core-plot/_CPTAnimationCGRectPeriod.m create mode 120000 spm/Sources/core-plot/_CPTAnimationCGSizePeriod.h create mode 120000 spm/Sources/core-plot/_CPTAnimationCGSizePeriod.m create mode 120000 spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.h create mode 120000 spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.m create mode 120000 spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.h create mode 120000 spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.m create mode 120000 spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.h create mode 120000 spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.m create mode 120000 spm/Sources/core-plot/_CPTAnimationTimingFunctions.h create mode 120000 spm/Sources/core-plot/_CPTAnimationTimingFunctions.m create mode 120000 spm/Sources/core-plot/_CPTBorderLayer.h create mode 120000 spm/Sources/core-plot/_CPTBorderLayer.m create mode 120000 spm/Sources/core-plot/_CPTConstraintsFixed.h create mode 120000 spm/Sources/core-plot/_CPTConstraintsFixed.m create mode 120000 spm/Sources/core-plot/_CPTConstraintsRelative.h create mode 120000 spm/Sources/core-plot/_CPTConstraintsRelative.m create mode 120000 spm/Sources/core-plot/_CPTDarkGradientTheme.h create mode 120000 spm/Sources/core-plot/_CPTDarkGradientTheme.m create mode 120000 spm/Sources/core-plot/_CPTFillColor.h create mode 120000 spm/Sources/core-plot/_CPTFillColor.m create mode 120000 spm/Sources/core-plot/_CPTFillGradient.h create mode 120000 spm/Sources/core-plot/_CPTFillGradient.m create mode 120000 spm/Sources/core-plot/_CPTFillImage.h create mode 120000 spm/Sources/core-plot/_CPTFillImage.m create mode 120000 spm/Sources/core-plot/_CPTMaskLayer.h create mode 120000 spm/Sources/core-plot/_CPTMaskLayer.m create mode 120000 spm/Sources/core-plot/_CPTPlainBlackTheme.h create mode 120000 spm/Sources/core-plot/_CPTPlainBlackTheme.m create mode 120000 spm/Sources/core-plot/_CPTPlainWhiteTheme.h create mode 120000 spm/Sources/core-plot/_CPTPlainWhiteTheme.m create mode 120000 spm/Sources/core-plot/_CPTSlateTheme.h create mode 120000 spm/Sources/core-plot/_CPTSlateTheme.m create mode 120000 spm/Sources/core-plot/_CPTStocksTheme.h create mode 120000 spm/Sources/core-plot/_CPTStocksTheme.m create mode 120000 spm/Sources/core-plot/_CPTXYTheme.h create mode 120000 spm/Sources/core-plot/_CPTXYTheme.m create mode 120000 spm/Sources/core-plot/include/CPTAnimation.h create mode 120000 spm/Sources/core-plot/include/CPTAnimationOperation.h create mode 120000 spm/Sources/core-plot/include/CPTAnimationPeriod.h create mode 120000 spm/Sources/core-plot/include/CPTAnnotation.h create mode 120000 spm/Sources/core-plot/include/CPTAnnotationHostLayer.h create mode 120000 spm/Sources/core-plot/include/CPTAxis.h create mode 120000 spm/Sources/core-plot/include/CPTAxisLabel.h create mode 120000 spm/Sources/core-plot/include/CPTAxisLabelGroup.h create mode 120000 spm/Sources/core-plot/include/CPTAxisSet.h create mode 120000 spm/Sources/core-plot/include/CPTAxisTitle.h create mode 120000 spm/Sources/core-plot/include/CPTBarPlot.h create mode 120000 spm/Sources/core-plot/include/CPTBorderedLayer.h create mode 120000 spm/Sources/core-plot/include/CPTCalendarFormatter.h create mode 120000 spm/Sources/core-plot/include/CPTColor.h create mode 120000 spm/Sources/core-plot/include/CPTColorSpace.h create mode 120000 spm/Sources/core-plot/include/CPTConstraints.h create mode 120000 spm/Sources/core-plot/include/CPTDebugQuickLook.h create mode 120000 spm/Sources/core-plot/include/CPTDefinitions.h create mode 120000 spm/Sources/core-plot/include/CPTDerivedXYGraph.h create mode 120000 spm/Sources/core-plot/include/CPTExceptions.h create mode 120000 spm/Sources/core-plot/include/CPTFill.h create mode 120000 spm/Sources/core-plot/include/CPTFunctionDataSource.h create mode 120000 spm/Sources/core-plot/include/CPTGradient.h create mode 120000 spm/Sources/core-plot/include/CPTGraph.h create mode 120000 spm/Sources/core-plot/include/CPTGraphHostingView.h create mode 120000 spm/Sources/core-plot/include/CPTGridLineGroup.h create mode 120000 spm/Sources/core-plot/include/CPTGridLines.h create mode 120000 spm/Sources/core-plot/include/CPTImage.h create mode 120000 spm/Sources/core-plot/include/CPTLayer.h create mode 120000 spm/Sources/core-plot/include/CPTLayerAnnotation.h create mode 120000 spm/Sources/core-plot/include/CPTLegend.h create mode 120000 spm/Sources/core-plot/include/CPTLegendEntry.h create mode 120000 spm/Sources/core-plot/include/CPTLimitBand.h create mode 120000 spm/Sources/core-plot/include/CPTLineCap.h create mode 120000 spm/Sources/core-plot/include/CPTLineStyle.h create mode 120000 spm/Sources/core-plot/include/CPTMutableLineStyle.h create mode 120000 spm/Sources/core-plot/include/CPTMutableNumericData+TypeConversion.h create mode 120000 spm/Sources/core-plot/include/CPTMutableNumericData.h create mode 120000 spm/Sources/core-plot/include/CPTMutablePlotRange.h create mode 120000 spm/Sources/core-plot/include/CPTMutableShadow.h create mode 120000 spm/Sources/core-plot/include/CPTMutableTextStyle.h create mode 120000 spm/Sources/core-plot/include/CPTNumericData+TypeConversion.h create mode 120000 spm/Sources/core-plot/include/CPTNumericData.h create mode 120000 spm/Sources/core-plot/include/CPTNumericDataType.h create mode 120000 spm/Sources/core-plot/include/CPTPathExtensions.h create mode 120000 spm/Sources/core-plot/include/CPTPieChart.h create mode 120000 spm/Sources/core-plot/include/CPTPlatformSpecificCategories.h create mode 120000 spm/Sources/core-plot/include/CPTPlatformSpecificDefines.h create mode 120000 spm/Sources/core-plot/include/CPTPlatformSpecificFunctions.h create mode 120000 spm/Sources/core-plot/include/CPTPlot.h create mode 120000 spm/Sources/core-plot/include/CPTPlotArea.h create mode 120000 spm/Sources/core-plot/include/CPTPlotAreaFrame.h create mode 120000 spm/Sources/core-plot/include/CPTPlotGroup.h create mode 120000 spm/Sources/core-plot/include/CPTPlotRange.h create mode 120000 spm/Sources/core-plot/include/CPTPlotSpace.h create mode 120000 spm/Sources/core-plot/include/CPTPlotSpaceAnnotation.h create mode 120000 spm/Sources/core-plot/include/CPTPlotSymbol.h create mode 120000 spm/Sources/core-plot/include/CPTRangePlot.h create mode 120000 spm/Sources/core-plot/include/CPTResponder.h create mode 120000 spm/Sources/core-plot/include/CPTScatterPlot.h create mode 120000 spm/Sources/core-plot/include/CPTShadow.h create mode 120000 spm/Sources/core-plot/include/CPTTextLayer.h create mode 120000 spm/Sources/core-plot/include/CPTTextStyle.h create mode 120000 spm/Sources/core-plot/include/CPTTextStylePlatformSpecific.h create mode 120000 spm/Sources/core-plot/include/CPTTheme.h create mode 120000 spm/Sources/core-plot/include/CPTTimeFormatter.h create mode 120000 spm/Sources/core-plot/include/CPTTradingRangePlot.h create mode 120000 spm/Sources/core-plot/include/CPTUtilities.h create mode 120000 spm/Sources/core-plot/include/CPTXYAxis.h create mode 120000 spm/Sources/core-plot/include/CPTXYAxisSet.h create mode 120000 spm/Sources/core-plot/include/CPTXYGraph.h create mode 120000 spm/Sources/core-plot/include/CPTXYPlotSpace.h create mode 120000 spm/Sources/core-plot/include/CorePlot.h create mode 120000 spm/Sources/core-plot/include/NSCoderExtensions.h create mode 120000 spm/Sources/core-plot/include/NSDecimalNumberExtensions.h create mode 120000 spm/Sources/core-plot/include/NSNumberExtensions.h diff --git a/.gitignore b/.gitignore index d8c03ce24..151bf7def 100644 --- a/.gitignore +++ b/.gitignore @@ -49,4 +49,3 @@ build/* # SwiftPM .build .swiftpm -spm/ diff --git a/spm/Sources/core-plot/CPTAnimation.m b/spm/Sources/core-plot/CPTAnimation.m new file mode 120000 index 000000000..337918f89 --- /dev/null +++ b/spm/Sources/core-plot/CPTAnimation.m @@ -0,0 +1 @@ +../../../framework/Source/CPTAnimation.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAnimationOperation.m b/spm/Sources/core-plot/CPTAnimationOperation.m new file mode 120000 index 000000000..fc2132df0 --- /dev/null +++ b/spm/Sources/core-plot/CPTAnimationOperation.m @@ -0,0 +1 @@ +../../../framework/Source/CPTAnimationOperation.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAnimationPeriod.m b/spm/Sources/core-plot/CPTAnimationPeriod.m new file mode 120000 index 000000000..ada3019bc --- /dev/null +++ b/spm/Sources/core-plot/CPTAnimationPeriod.m @@ -0,0 +1 @@ +../../../framework/Source/CPTAnimationPeriod.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAnnotation.m b/spm/Sources/core-plot/CPTAnnotation.m new file mode 120000 index 000000000..b9fe84bfe --- /dev/null +++ b/spm/Sources/core-plot/CPTAnnotation.m @@ -0,0 +1 @@ +../../../framework/Source/CPTAnnotation.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAnnotationHostLayer.m b/spm/Sources/core-plot/CPTAnnotationHostLayer.m new file mode 120000 index 000000000..75530b843 --- /dev/null +++ b/spm/Sources/core-plot/CPTAnnotationHostLayer.m @@ -0,0 +1 @@ +../../../framework/Source/CPTAnnotationHostLayer.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAxis.m b/spm/Sources/core-plot/CPTAxis.m new file mode 120000 index 000000000..1aa6b7103 --- /dev/null +++ b/spm/Sources/core-plot/CPTAxis.m @@ -0,0 +1 @@ +../../../framework/Source/CPTAxis.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAxisLabel.m b/spm/Sources/core-plot/CPTAxisLabel.m new file mode 120000 index 000000000..da47a6c72 --- /dev/null +++ b/spm/Sources/core-plot/CPTAxisLabel.m @@ -0,0 +1 @@ +../../../framework/Source/CPTAxisLabel.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAxisLabelGroup.m b/spm/Sources/core-plot/CPTAxisLabelGroup.m new file mode 120000 index 000000000..47052e27a --- /dev/null +++ b/spm/Sources/core-plot/CPTAxisLabelGroup.m @@ -0,0 +1 @@ +../../../framework/Source/CPTAxisLabelGroup.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAxisSet.m b/spm/Sources/core-plot/CPTAxisSet.m new file mode 120000 index 000000000..1005973dd --- /dev/null +++ b/spm/Sources/core-plot/CPTAxisSet.m @@ -0,0 +1 @@ +../../../framework/Source/CPTAxisSet.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTAxisTitle.m b/spm/Sources/core-plot/CPTAxisTitle.m new file mode 120000 index 000000000..ed4fdfa19 --- /dev/null +++ b/spm/Sources/core-plot/CPTAxisTitle.m @@ -0,0 +1 @@ +../../../framework/Source/CPTAxisTitle.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTBarPlot.m b/spm/Sources/core-plot/CPTBarPlot.m new file mode 120000 index 000000000..96416886c --- /dev/null +++ b/spm/Sources/core-plot/CPTBarPlot.m @@ -0,0 +1 @@ +../../../framework/Source/CPTBarPlot.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTBorderedLayer.m b/spm/Sources/core-plot/CPTBorderedLayer.m new file mode 120000 index 000000000..7f8e0fc21 --- /dev/null +++ b/spm/Sources/core-plot/CPTBorderedLayer.m @@ -0,0 +1 @@ +../../../framework/Source/CPTBorderedLayer.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTCalendarFormatter.m b/spm/Sources/core-plot/CPTCalendarFormatter.m new file mode 120000 index 000000000..f2d434828 --- /dev/null +++ b/spm/Sources/core-plot/CPTCalendarFormatter.m @@ -0,0 +1 @@ +../../../framework/Source/CPTCalendarFormatter.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTColor.m b/spm/Sources/core-plot/CPTColor.m new file mode 120000 index 000000000..80d47ac9e --- /dev/null +++ b/spm/Sources/core-plot/CPTColor.m @@ -0,0 +1 @@ +../../../framework/Source/CPTColor.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTColorSpace.m b/spm/Sources/core-plot/CPTColorSpace.m new file mode 120000 index 000000000..c075ca4bd --- /dev/null +++ b/spm/Sources/core-plot/CPTColorSpace.m @@ -0,0 +1 @@ +../../../framework/Source/CPTColorSpace.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTConstraints.m b/spm/Sources/core-plot/CPTConstraints.m new file mode 120000 index 000000000..2f8f0b4f3 --- /dev/null +++ b/spm/Sources/core-plot/CPTConstraints.m @@ -0,0 +1 @@ +../../../framework/Source/CPTConstraints.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTDefinitions.m b/spm/Sources/core-plot/CPTDefinitions.m new file mode 120000 index 000000000..2d93bb41d --- /dev/null +++ b/spm/Sources/core-plot/CPTDefinitions.m @@ -0,0 +1 @@ +../../../framework/Source/CPTDefinitions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTDerivedXYGraph.m b/spm/Sources/core-plot/CPTDerivedXYGraph.m new file mode 120000 index 000000000..e712248ad --- /dev/null +++ b/spm/Sources/core-plot/CPTDerivedXYGraph.m @@ -0,0 +1 @@ +../../../framework/Source/CPTDerivedXYGraph.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTExceptions.m b/spm/Sources/core-plot/CPTExceptions.m new file mode 120000 index 000000000..7edfd7fc1 --- /dev/null +++ b/spm/Sources/core-plot/CPTExceptions.m @@ -0,0 +1 @@ +../../../framework/Source/CPTExceptions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTFill.m b/spm/Sources/core-plot/CPTFill.m new file mode 120000 index 000000000..5059faeda --- /dev/null +++ b/spm/Sources/core-plot/CPTFill.m @@ -0,0 +1 @@ +../../../framework/Source/CPTFill.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTFunctionDataSource.m b/spm/Sources/core-plot/CPTFunctionDataSource.m new file mode 120000 index 000000000..9c584fabc --- /dev/null +++ b/spm/Sources/core-plot/CPTFunctionDataSource.m @@ -0,0 +1 @@ +../../../framework/Source/CPTFunctionDataSource.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTGradient.m b/spm/Sources/core-plot/CPTGradient.m new file mode 120000 index 000000000..8949b1c68 --- /dev/null +++ b/spm/Sources/core-plot/CPTGradient.m @@ -0,0 +1 @@ +../../../framework/Source/CPTGradient.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTGraph.m b/spm/Sources/core-plot/CPTGraph.m new file mode 120000 index 000000000..01c721f42 --- /dev/null +++ b/spm/Sources/core-plot/CPTGraph.m @@ -0,0 +1 @@ +../../../framework/Source/CPTGraph.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTGraphHostingView.m b/spm/Sources/core-plot/CPTGraphHostingView.m new file mode 120000 index 000000000..aed7567ed --- /dev/null +++ b/spm/Sources/core-plot/CPTGraphHostingView.m @@ -0,0 +1 @@ +../../../framework/PlatformSpecific/CPTGraphHostingView.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTGridLineGroup.m b/spm/Sources/core-plot/CPTGridLineGroup.m new file mode 120000 index 000000000..172c1c944 --- /dev/null +++ b/spm/Sources/core-plot/CPTGridLineGroup.m @@ -0,0 +1 @@ +../../../framework/Source/CPTGridLineGroup.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTGridLines.m b/spm/Sources/core-plot/CPTGridLines.m new file mode 120000 index 000000000..1cf83743b --- /dev/null +++ b/spm/Sources/core-plot/CPTGridLines.m @@ -0,0 +1 @@ +../../../framework/Source/CPTGridLines.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTImage.m b/spm/Sources/core-plot/CPTImage.m new file mode 120000 index 000000000..3001d970e --- /dev/null +++ b/spm/Sources/core-plot/CPTImage.m @@ -0,0 +1 @@ +../../../framework/Source/CPTImage.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTImagePlatformSpecific.m b/spm/Sources/core-plot/CPTImagePlatformSpecific.m new file mode 120000 index 000000000..589c983de --- /dev/null +++ b/spm/Sources/core-plot/CPTImagePlatformSpecific.m @@ -0,0 +1 @@ +../../../framework/PlatformSpecific/CPTImagePlatformSpecific.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTLayer.m b/spm/Sources/core-plot/CPTLayer.m new file mode 120000 index 000000000..8c84d5971 --- /dev/null +++ b/spm/Sources/core-plot/CPTLayer.m @@ -0,0 +1 @@ +../../../framework/Source/CPTLayer.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTLayerAnnotation.m b/spm/Sources/core-plot/CPTLayerAnnotation.m new file mode 120000 index 000000000..37f86e4d6 --- /dev/null +++ b/spm/Sources/core-plot/CPTLayerAnnotation.m @@ -0,0 +1 @@ +../../../framework/Source/CPTLayerAnnotation.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTLegend.m b/spm/Sources/core-plot/CPTLegend.m new file mode 120000 index 000000000..d8dee9348 --- /dev/null +++ b/spm/Sources/core-plot/CPTLegend.m @@ -0,0 +1 @@ +../../../framework/Source/CPTLegend.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTLegendEntry.m b/spm/Sources/core-plot/CPTLegendEntry.m new file mode 120000 index 000000000..81301d318 --- /dev/null +++ b/spm/Sources/core-plot/CPTLegendEntry.m @@ -0,0 +1 @@ +../../../framework/Source/CPTLegendEntry.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTLimitBand.m b/spm/Sources/core-plot/CPTLimitBand.m new file mode 120000 index 000000000..c8a8a5d65 --- /dev/null +++ b/spm/Sources/core-plot/CPTLimitBand.m @@ -0,0 +1 @@ +../../../framework/Source/CPTLimitBand.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTLineCap.m b/spm/Sources/core-plot/CPTLineCap.m new file mode 120000 index 000000000..41d7f0103 --- /dev/null +++ b/spm/Sources/core-plot/CPTLineCap.m @@ -0,0 +1 @@ +../../../framework/Source/CPTLineCap.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTLineStyle.m b/spm/Sources/core-plot/CPTLineStyle.m new file mode 120000 index 000000000..dd6e51794 --- /dev/null +++ b/spm/Sources/core-plot/CPTLineStyle.m @@ -0,0 +1 @@ +../../../framework/Source/CPTLineStyle.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTMutableLineStyle.m b/spm/Sources/core-plot/CPTMutableLineStyle.m new file mode 120000 index 000000000..f52200079 --- /dev/null +++ b/spm/Sources/core-plot/CPTMutableLineStyle.m @@ -0,0 +1 @@ +../../../framework/Source/CPTMutableLineStyle.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTMutableNumericData+TypeConversion.m b/spm/Sources/core-plot/CPTMutableNumericData+TypeConversion.m new file mode 120000 index 000000000..892e81926 --- /dev/null +++ b/spm/Sources/core-plot/CPTMutableNumericData+TypeConversion.m @@ -0,0 +1 @@ +../../../framework/Source/CPTMutableNumericData+TypeConversion.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTMutableNumericData.m b/spm/Sources/core-plot/CPTMutableNumericData.m new file mode 120000 index 000000000..fcddc44b6 --- /dev/null +++ b/spm/Sources/core-plot/CPTMutableNumericData.m @@ -0,0 +1 @@ +../../../framework/Source/CPTMutableNumericData.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTMutablePlotRange.m b/spm/Sources/core-plot/CPTMutablePlotRange.m new file mode 120000 index 000000000..ba573d97b --- /dev/null +++ b/spm/Sources/core-plot/CPTMutablePlotRange.m @@ -0,0 +1 @@ +../../../framework/Source/CPTMutablePlotRange.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTMutableShadow.m b/spm/Sources/core-plot/CPTMutableShadow.m new file mode 120000 index 000000000..6789a820a --- /dev/null +++ b/spm/Sources/core-plot/CPTMutableShadow.m @@ -0,0 +1 @@ +../../../framework/Source/CPTMutableShadow.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTMutableTextStyle.m b/spm/Sources/core-plot/CPTMutableTextStyle.m new file mode 120000 index 000000000..128907a10 --- /dev/null +++ b/spm/Sources/core-plot/CPTMutableTextStyle.m @@ -0,0 +1 @@ +../../../framework/Source/CPTMutableTextStyle.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTNumericData+TypeConversion.m b/spm/Sources/core-plot/CPTNumericData+TypeConversion.m new file mode 120000 index 000000000..4f9f960e5 --- /dev/null +++ b/spm/Sources/core-plot/CPTNumericData+TypeConversion.m @@ -0,0 +1 @@ +../../../framework/Source/CPTNumericData+TypeConversion.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTNumericData.m b/spm/Sources/core-plot/CPTNumericData.m new file mode 120000 index 000000000..0a95c83f9 --- /dev/null +++ b/spm/Sources/core-plot/CPTNumericData.m @@ -0,0 +1 @@ +../../../framework/Source/CPTNumericData.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTNumericDataType.m b/spm/Sources/core-plot/CPTNumericDataType.m new file mode 120000 index 000000000..187d3f0c0 --- /dev/null +++ b/spm/Sources/core-plot/CPTNumericDataType.m @@ -0,0 +1 @@ +../../../framework/Source/CPTNumericDataType.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPathExtensions.m b/spm/Sources/core-plot/CPTPathExtensions.m new file mode 120000 index 000000000..635a3ff2b --- /dev/null +++ b/spm/Sources/core-plot/CPTPathExtensions.m @@ -0,0 +1 @@ +../../../framework/Source/CPTPathExtensions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPieChart.m b/spm/Sources/core-plot/CPTPieChart.m new file mode 120000 index 000000000..e6337e1e7 --- /dev/null +++ b/spm/Sources/core-plot/CPTPieChart.m @@ -0,0 +1 @@ +../../../framework/Source/CPTPieChart.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlatformSpecificCategories.m b/spm/Sources/core-plot/CPTPlatformSpecificCategories.m new file mode 120000 index 000000000..5938ca9de --- /dev/null +++ b/spm/Sources/core-plot/CPTPlatformSpecificCategories.m @@ -0,0 +1 @@ +../../../framework/PlatformSpecific/CPTPlatformSpecificCategories.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlatformSpecificDefines.m b/spm/Sources/core-plot/CPTPlatformSpecificDefines.m new file mode 120000 index 000000000..a45be5581 --- /dev/null +++ b/spm/Sources/core-plot/CPTPlatformSpecificDefines.m @@ -0,0 +1 @@ +../../../framework/PlatformSpecific/CPTPlatformSpecificDefines.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlatformSpecificFunctions.m b/spm/Sources/core-plot/CPTPlatformSpecificFunctions.m new file mode 120000 index 000000000..c8671612f --- /dev/null +++ b/spm/Sources/core-plot/CPTPlatformSpecificFunctions.m @@ -0,0 +1 @@ +../../../framework/PlatformSpecific/CPTPlatformSpecificFunctions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlot.m b/spm/Sources/core-plot/CPTPlot.m new file mode 120000 index 000000000..fa92ce8cc --- /dev/null +++ b/spm/Sources/core-plot/CPTPlot.m @@ -0,0 +1 @@ +../../../framework/Source/CPTPlot.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlotArea.m b/spm/Sources/core-plot/CPTPlotArea.m new file mode 120000 index 000000000..297cfc628 --- /dev/null +++ b/spm/Sources/core-plot/CPTPlotArea.m @@ -0,0 +1 @@ +../../../framework/Source/CPTPlotArea.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlotAreaFrame.m b/spm/Sources/core-plot/CPTPlotAreaFrame.m new file mode 120000 index 000000000..b751436bd --- /dev/null +++ b/spm/Sources/core-plot/CPTPlotAreaFrame.m @@ -0,0 +1 @@ +../../../framework/Source/CPTPlotAreaFrame.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlotGroup.m b/spm/Sources/core-plot/CPTPlotGroup.m new file mode 120000 index 000000000..820c6ddd6 --- /dev/null +++ b/spm/Sources/core-plot/CPTPlotGroup.m @@ -0,0 +1 @@ +../../../framework/Source/CPTPlotGroup.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlotRange.m b/spm/Sources/core-plot/CPTPlotRange.m new file mode 120000 index 000000000..344bb8b96 --- /dev/null +++ b/spm/Sources/core-plot/CPTPlotRange.m @@ -0,0 +1 @@ +../../../framework/Source/CPTPlotRange.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlotSpace.m b/spm/Sources/core-plot/CPTPlotSpace.m new file mode 120000 index 000000000..a981e9981 --- /dev/null +++ b/spm/Sources/core-plot/CPTPlotSpace.m @@ -0,0 +1 @@ +../../../framework/Source/CPTPlotSpace.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlotSpaceAnnotation.m b/spm/Sources/core-plot/CPTPlotSpaceAnnotation.m new file mode 120000 index 000000000..f8e5911b7 --- /dev/null +++ b/spm/Sources/core-plot/CPTPlotSpaceAnnotation.m @@ -0,0 +1 @@ +../../../framework/Source/CPTPlotSpaceAnnotation.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlotSymbol.m b/spm/Sources/core-plot/CPTPlotSymbol.m new file mode 120000 index 000000000..05243cdf0 --- /dev/null +++ b/spm/Sources/core-plot/CPTPlotSymbol.m @@ -0,0 +1 @@ +../../../framework/Source/CPTPlotSymbol.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTRangePlot.m b/spm/Sources/core-plot/CPTRangePlot.m new file mode 120000 index 000000000..1a49ad72e --- /dev/null +++ b/spm/Sources/core-plot/CPTRangePlot.m @@ -0,0 +1 @@ +../../../framework/Source/CPTRangePlot.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTScatterPlot.m b/spm/Sources/core-plot/CPTScatterPlot.m new file mode 120000 index 000000000..2d1ff16e3 --- /dev/null +++ b/spm/Sources/core-plot/CPTScatterPlot.m @@ -0,0 +1 @@ +../../../framework/Source/CPTScatterPlot.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTShadow.m b/spm/Sources/core-plot/CPTShadow.m new file mode 120000 index 000000000..2173efbfe --- /dev/null +++ b/spm/Sources/core-plot/CPTShadow.m @@ -0,0 +1 @@ +../../../framework/Source/CPTShadow.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTTextLayer.m b/spm/Sources/core-plot/CPTTextLayer.m new file mode 120000 index 000000000..47e0aff04 --- /dev/null +++ b/spm/Sources/core-plot/CPTTextLayer.m @@ -0,0 +1 @@ +../../../framework/Source/CPTTextLayer.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTTextStyle.m b/spm/Sources/core-plot/CPTTextStyle.m new file mode 120000 index 000000000..edffa0d87 --- /dev/null +++ b/spm/Sources/core-plot/CPTTextStyle.m @@ -0,0 +1 @@ +../../../framework/Source/CPTTextStyle.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTTextStylePlatformSpecific.m b/spm/Sources/core-plot/CPTTextStylePlatformSpecific.m new file mode 120000 index 000000000..9fdc1b86c --- /dev/null +++ b/spm/Sources/core-plot/CPTTextStylePlatformSpecific.m @@ -0,0 +1 @@ +../../../framework/PlatformSpecific/CPTTextStylePlatformSpecific.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTTheme.m b/spm/Sources/core-plot/CPTTheme.m new file mode 120000 index 000000000..047560078 --- /dev/null +++ b/spm/Sources/core-plot/CPTTheme.m @@ -0,0 +1 @@ +../../../framework/Source/CPTTheme.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTTimeFormatter.m b/spm/Sources/core-plot/CPTTimeFormatter.m new file mode 120000 index 000000000..21d893f90 --- /dev/null +++ b/spm/Sources/core-plot/CPTTimeFormatter.m @@ -0,0 +1 @@ +../../../framework/Source/CPTTimeFormatter.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTTradingRangePlot.m b/spm/Sources/core-plot/CPTTradingRangePlot.m new file mode 120000 index 000000000..6f7331366 --- /dev/null +++ b/spm/Sources/core-plot/CPTTradingRangePlot.m @@ -0,0 +1 @@ +../../../framework/Source/CPTTradingRangePlot.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTUtilities.m b/spm/Sources/core-plot/CPTUtilities.m new file mode 120000 index 000000000..193ace357 --- /dev/null +++ b/spm/Sources/core-plot/CPTUtilities.m @@ -0,0 +1 @@ +../../../framework/Source/CPTUtilities.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTXYAxis.m b/spm/Sources/core-plot/CPTXYAxis.m new file mode 120000 index 000000000..dfde4fab8 --- /dev/null +++ b/spm/Sources/core-plot/CPTXYAxis.m @@ -0,0 +1 @@ +../../../framework/Source/CPTXYAxis.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTXYAxisSet.m b/spm/Sources/core-plot/CPTXYAxisSet.m new file mode 120000 index 000000000..697c1d56d --- /dev/null +++ b/spm/Sources/core-plot/CPTXYAxisSet.m @@ -0,0 +1 @@ +../../../framework/Source/CPTXYAxisSet.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTXYGraph.m b/spm/Sources/core-plot/CPTXYGraph.m new file mode 120000 index 000000000..006eb518b --- /dev/null +++ b/spm/Sources/core-plot/CPTXYGraph.m @@ -0,0 +1 @@ +../../../framework/Source/CPTXYGraph.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTXYPlotSpace.m b/spm/Sources/core-plot/CPTXYPlotSpace.m new file mode 120000 index 000000000..e1143e1db --- /dev/null +++ b/spm/Sources/core-plot/CPTXYPlotSpace.m @@ -0,0 +1 @@ +../../../framework/Source/CPTXYPlotSpace.m \ No newline at end of file diff --git a/spm/Sources/core-plot/NSCoderExtensions.m b/spm/Sources/core-plot/NSCoderExtensions.m new file mode 120000 index 000000000..f214ee254 --- /dev/null +++ b/spm/Sources/core-plot/NSCoderExtensions.m @@ -0,0 +1 @@ +../../../framework/Source/NSCoderExtensions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/NSDecimalNumberExtensions.m b/spm/Sources/core-plot/NSDecimalNumberExtensions.m new file mode 120000 index 000000000..c4ee7f4f9 --- /dev/null +++ b/spm/Sources/core-plot/NSDecimalNumberExtensions.m @@ -0,0 +1 @@ +../../../framework/Source/NSDecimalNumberExtensions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/NSNumberExtensions.m b/spm/Sources/core-plot/NSNumberExtensions.m new file mode 120000 index 000000000..0bc3e12de --- /dev/null +++ b/spm/Sources/core-plot/NSNumberExtensions.m @@ -0,0 +1 @@ +../../../framework/Source/NSNumberExtensions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.h b/spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.h new file mode 120000 index 000000000..2c387bcad --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationCGFloatPeriod.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.m b/spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.m new file mode 120000 index 000000000..711cecc2a --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationCGFloatPeriod.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationCGFloatPeriod.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationCGPointPeriod.h b/spm/Sources/core-plot/_CPTAnimationCGPointPeriod.h new file mode 120000 index 000000000..a8a2a1099 --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationCGPointPeriod.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationCGPointPeriod.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationCGPointPeriod.m b/spm/Sources/core-plot/_CPTAnimationCGPointPeriod.m new file mode 120000 index 000000000..91a1e8bce --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationCGPointPeriod.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationCGPointPeriod.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationCGRectPeriod.h b/spm/Sources/core-plot/_CPTAnimationCGRectPeriod.h new file mode 120000 index 000000000..bfbfb50ad --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationCGRectPeriod.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationCGRectPeriod.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationCGRectPeriod.m b/spm/Sources/core-plot/_CPTAnimationCGRectPeriod.m new file mode 120000 index 000000000..36ba199b9 --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationCGRectPeriod.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationCGRectPeriod.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationCGSizePeriod.h b/spm/Sources/core-plot/_CPTAnimationCGSizePeriod.h new file mode 120000 index 000000000..f527f2f00 --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationCGSizePeriod.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationCGSizePeriod.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationCGSizePeriod.m b/spm/Sources/core-plot/_CPTAnimationCGSizePeriod.m new file mode 120000 index 000000000..2414600b5 --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationCGSizePeriod.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationCGSizePeriod.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.h b/spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.h new file mode 120000 index 000000000..9864b5caf --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationNSDecimalPeriod.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.m b/spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.m new file mode 120000 index 000000000..3ad5013c7 --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationNSDecimalPeriod.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationNSDecimalPeriod.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.h b/spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.h new file mode 120000 index 000000000..7d2309ba4 --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationNSNumberPeriod.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.m b/spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.m new file mode 120000 index 000000000..e384d8444 --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationNSNumberPeriod.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationNSNumberPeriod.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.h b/spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.h new file mode 120000 index 000000000..a9ef5b7a9 --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationPlotRangePeriod.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.m b/spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.m new file mode 120000 index 000000000..82fa1465e --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationPlotRangePeriod.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationPlotRangePeriod.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationTimingFunctions.h b/spm/Sources/core-plot/_CPTAnimationTimingFunctions.h new file mode 120000 index 000000000..1770c9279 --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationTimingFunctions.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationTimingFunctions.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAnimationTimingFunctions.m b/spm/Sources/core-plot/_CPTAnimationTimingFunctions.m new file mode 120000 index 000000000..65b4266af --- /dev/null +++ b/spm/Sources/core-plot/_CPTAnimationTimingFunctions.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTAnimationTimingFunctions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTBorderLayer.h b/spm/Sources/core-plot/_CPTBorderLayer.h new file mode 120000 index 000000000..3afc6c1e3 --- /dev/null +++ b/spm/Sources/core-plot/_CPTBorderLayer.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTBorderLayer.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTBorderLayer.m b/spm/Sources/core-plot/_CPTBorderLayer.m new file mode 120000 index 000000000..00443260c --- /dev/null +++ b/spm/Sources/core-plot/_CPTBorderLayer.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTBorderLayer.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTConstraintsFixed.h b/spm/Sources/core-plot/_CPTConstraintsFixed.h new file mode 120000 index 000000000..86d5a2165 --- /dev/null +++ b/spm/Sources/core-plot/_CPTConstraintsFixed.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTConstraintsFixed.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTConstraintsFixed.m b/spm/Sources/core-plot/_CPTConstraintsFixed.m new file mode 120000 index 000000000..62b705311 --- /dev/null +++ b/spm/Sources/core-plot/_CPTConstraintsFixed.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTConstraintsFixed.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTConstraintsRelative.h b/spm/Sources/core-plot/_CPTConstraintsRelative.h new file mode 120000 index 000000000..7af0d22db --- /dev/null +++ b/spm/Sources/core-plot/_CPTConstraintsRelative.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTConstraintsRelative.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTConstraintsRelative.m b/spm/Sources/core-plot/_CPTConstraintsRelative.m new file mode 120000 index 000000000..634e9a690 --- /dev/null +++ b/spm/Sources/core-plot/_CPTConstraintsRelative.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTConstraintsRelative.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTDarkGradientTheme.h b/spm/Sources/core-plot/_CPTDarkGradientTheme.h new file mode 120000 index 000000000..c37ae8a09 --- /dev/null +++ b/spm/Sources/core-plot/_CPTDarkGradientTheme.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTDarkGradientTheme.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTDarkGradientTheme.m b/spm/Sources/core-plot/_CPTDarkGradientTheme.m new file mode 120000 index 000000000..5c0cce515 --- /dev/null +++ b/spm/Sources/core-plot/_CPTDarkGradientTheme.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTDarkGradientTheme.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTFillColor.h b/spm/Sources/core-plot/_CPTFillColor.h new file mode 120000 index 000000000..8729abd32 --- /dev/null +++ b/spm/Sources/core-plot/_CPTFillColor.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTFillColor.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTFillColor.m b/spm/Sources/core-plot/_CPTFillColor.m new file mode 120000 index 000000000..45972cddd --- /dev/null +++ b/spm/Sources/core-plot/_CPTFillColor.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTFillColor.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTFillGradient.h b/spm/Sources/core-plot/_CPTFillGradient.h new file mode 120000 index 000000000..e4bc0b777 --- /dev/null +++ b/spm/Sources/core-plot/_CPTFillGradient.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTFillGradient.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTFillGradient.m b/spm/Sources/core-plot/_CPTFillGradient.m new file mode 120000 index 000000000..eee6c6e01 --- /dev/null +++ b/spm/Sources/core-plot/_CPTFillGradient.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTFillGradient.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTFillImage.h b/spm/Sources/core-plot/_CPTFillImage.h new file mode 120000 index 000000000..0c3352876 --- /dev/null +++ b/spm/Sources/core-plot/_CPTFillImage.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTFillImage.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTFillImage.m b/spm/Sources/core-plot/_CPTFillImage.m new file mode 120000 index 000000000..e9093df88 --- /dev/null +++ b/spm/Sources/core-plot/_CPTFillImage.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTFillImage.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTMaskLayer.h b/spm/Sources/core-plot/_CPTMaskLayer.h new file mode 120000 index 000000000..360e39661 --- /dev/null +++ b/spm/Sources/core-plot/_CPTMaskLayer.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTMaskLayer.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTMaskLayer.m b/spm/Sources/core-plot/_CPTMaskLayer.m new file mode 120000 index 000000000..15060d9eb --- /dev/null +++ b/spm/Sources/core-plot/_CPTMaskLayer.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTMaskLayer.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTPlainBlackTheme.h b/spm/Sources/core-plot/_CPTPlainBlackTheme.h new file mode 120000 index 000000000..4a6661adf --- /dev/null +++ b/spm/Sources/core-plot/_CPTPlainBlackTheme.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTPlainBlackTheme.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTPlainBlackTheme.m b/spm/Sources/core-plot/_CPTPlainBlackTheme.m new file mode 120000 index 000000000..3b175c6e4 --- /dev/null +++ b/spm/Sources/core-plot/_CPTPlainBlackTheme.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTPlainBlackTheme.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTPlainWhiteTheme.h b/spm/Sources/core-plot/_CPTPlainWhiteTheme.h new file mode 120000 index 000000000..c596aee7c --- /dev/null +++ b/spm/Sources/core-plot/_CPTPlainWhiteTheme.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTPlainWhiteTheme.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTPlainWhiteTheme.m b/spm/Sources/core-plot/_CPTPlainWhiteTheme.m new file mode 120000 index 000000000..b478bf193 --- /dev/null +++ b/spm/Sources/core-plot/_CPTPlainWhiteTheme.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTPlainWhiteTheme.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTSlateTheme.h b/spm/Sources/core-plot/_CPTSlateTheme.h new file mode 120000 index 000000000..be824d643 --- /dev/null +++ b/spm/Sources/core-plot/_CPTSlateTheme.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTSlateTheme.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTSlateTheme.m b/spm/Sources/core-plot/_CPTSlateTheme.m new file mode 120000 index 000000000..41da25ebc --- /dev/null +++ b/spm/Sources/core-plot/_CPTSlateTheme.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTSlateTheme.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTStocksTheme.h b/spm/Sources/core-plot/_CPTStocksTheme.h new file mode 120000 index 000000000..9f51d7930 --- /dev/null +++ b/spm/Sources/core-plot/_CPTStocksTheme.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTStocksTheme.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTStocksTheme.m b/spm/Sources/core-plot/_CPTStocksTheme.m new file mode 120000 index 000000000..97e996679 --- /dev/null +++ b/spm/Sources/core-plot/_CPTStocksTheme.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTStocksTheme.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTXYTheme.h b/spm/Sources/core-plot/_CPTXYTheme.h new file mode 120000 index 000000000..225ce8713 --- /dev/null +++ b/spm/Sources/core-plot/_CPTXYTheme.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTXYTheme.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTXYTheme.m b/spm/Sources/core-plot/_CPTXYTheme.m new file mode 120000 index 000000000..750641fe5 --- /dev/null +++ b/spm/Sources/core-plot/_CPTXYTheme.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTXYTheme.m \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAnimation.h b/spm/Sources/core-plot/include/CPTAnimation.h new file mode 120000 index 000000000..d2c87b5e2 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTAnimation.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTAnimation.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAnimationOperation.h b/spm/Sources/core-plot/include/CPTAnimationOperation.h new file mode 120000 index 000000000..070d475e1 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTAnimationOperation.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTAnimationOperation.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAnimationPeriod.h b/spm/Sources/core-plot/include/CPTAnimationPeriod.h new file mode 120000 index 000000000..99855620c --- /dev/null +++ b/spm/Sources/core-plot/include/CPTAnimationPeriod.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTAnimationPeriod.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAnnotation.h b/spm/Sources/core-plot/include/CPTAnnotation.h new file mode 120000 index 000000000..7a396b2d0 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTAnnotation.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTAnnotation.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAnnotationHostLayer.h b/spm/Sources/core-plot/include/CPTAnnotationHostLayer.h new file mode 120000 index 000000000..404703b3d --- /dev/null +++ b/spm/Sources/core-plot/include/CPTAnnotationHostLayer.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTAnnotationHostLayer.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAxis.h b/spm/Sources/core-plot/include/CPTAxis.h new file mode 120000 index 000000000..1603ef430 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTAxis.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTAxis.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAxisLabel.h b/spm/Sources/core-plot/include/CPTAxisLabel.h new file mode 120000 index 000000000..8e7bb2152 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTAxisLabel.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTAxisLabel.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAxisLabelGroup.h b/spm/Sources/core-plot/include/CPTAxisLabelGroup.h new file mode 120000 index 000000000..40d7b4fd4 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTAxisLabelGroup.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTAxisLabelGroup.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAxisSet.h b/spm/Sources/core-plot/include/CPTAxisSet.h new file mode 120000 index 000000000..8445d7388 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTAxisSet.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTAxisSet.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAxisTitle.h b/spm/Sources/core-plot/include/CPTAxisTitle.h new file mode 120000 index 000000000..f03866501 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTAxisTitle.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTAxisTitle.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTBarPlot.h b/spm/Sources/core-plot/include/CPTBarPlot.h new file mode 120000 index 000000000..818be1d3c --- /dev/null +++ b/spm/Sources/core-plot/include/CPTBarPlot.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTBarPlot.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTBorderedLayer.h b/spm/Sources/core-plot/include/CPTBorderedLayer.h new file mode 120000 index 000000000..509e957dd --- /dev/null +++ b/spm/Sources/core-plot/include/CPTBorderedLayer.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTBorderedLayer.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTCalendarFormatter.h b/spm/Sources/core-plot/include/CPTCalendarFormatter.h new file mode 120000 index 000000000..b649bc595 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTCalendarFormatter.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTCalendarFormatter.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTColor.h b/spm/Sources/core-plot/include/CPTColor.h new file mode 120000 index 000000000..89a66a388 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTColor.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTColor.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTColorSpace.h b/spm/Sources/core-plot/include/CPTColorSpace.h new file mode 120000 index 000000000..9a5ec33b3 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTColorSpace.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTColorSpace.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTConstraints.h b/spm/Sources/core-plot/include/CPTConstraints.h new file mode 120000 index 000000000..f5dd6b1fa --- /dev/null +++ b/spm/Sources/core-plot/include/CPTConstraints.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTConstraints.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTDebugQuickLook.h b/spm/Sources/core-plot/include/CPTDebugQuickLook.h new file mode 120000 index 000000000..500301a70 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTDebugQuickLook.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTDebugQuickLook.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTDefinitions.h b/spm/Sources/core-plot/include/CPTDefinitions.h new file mode 120000 index 000000000..77b264637 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTDefinitions.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTDefinitions.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTDerivedXYGraph.h b/spm/Sources/core-plot/include/CPTDerivedXYGraph.h new file mode 120000 index 000000000..c3afb6032 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTDerivedXYGraph.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTDerivedXYGraph.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTExceptions.h b/spm/Sources/core-plot/include/CPTExceptions.h new file mode 120000 index 000000000..ae845ca0a --- /dev/null +++ b/spm/Sources/core-plot/include/CPTExceptions.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTExceptions.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTFill.h b/spm/Sources/core-plot/include/CPTFill.h new file mode 120000 index 000000000..0cb9177a9 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTFill.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTFill.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTFunctionDataSource.h b/spm/Sources/core-plot/include/CPTFunctionDataSource.h new file mode 120000 index 000000000..9e661ae0b --- /dev/null +++ b/spm/Sources/core-plot/include/CPTFunctionDataSource.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTFunctionDataSource.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTGradient.h b/spm/Sources/core-plot/include/CPTGradient.h new file mode 120000 index 000000000..2a97c2614 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTGradient.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTGradient.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTGraph.h b/spm/Sources/core-plot/include/CPTGraph.h new file mode 120000 index 000000000..e1f85034f --- /dev/null +++ b/spm/Sources/core-plot/include/CPTGraph.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTGraph.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTGraphHostingView.h b/spm/Sources/core-plot/include/CPTGraphHostingView.h new file mode 120000 index 000000000..8bd643aaa --- /dev/null +++ b/spm/Sources/core-plot/include/CPTGraphHostingView.h @@ -0,0 +1 @@ +../../../../framework/PlatformSpecific/CPTGraphHostingView.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTGridLineGroup.h b/spm/Sources/core-plot/include/CPTGridLineGroup.h new file mode 120000 index 000000000..644db825f --- /dev/null +++ b/spm/Sources/core-plot/include/CPTGridLineGroup.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTGridLineGroup.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTGridLines.h b/spm/Sources/core-plot/include/CPTGridLines.h new file mode 120000 index 000000000..fcf64c697 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTGridLines.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTGridLines.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTImage.h b/spm/Sources/core-plot/include/CPTImage.h new file mode 120000 index 000000000..fdf4b866e --- /dev/null +++ b/spm/Sources/core-plot/include/CPTImage.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTImage.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTLayer.h b/spm/Sources/core-plot/include/CPTLayer.h new file mode 120000 index 000000000..1e16ba274 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTLayer.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTLayer.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTLayerAnnotation.h b/spm/Sources/core-plot/include/CPTLayerAnnotation.h new file mode 120000 index 000000000..4d31a6c35 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTLayerAnnotation.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTLayerAnnotation.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTLegend.h b/spm/Sources/core-plot/include/CPTLegend.h new file mode 120000 index 000000000..a881d49fc --- /dev/null +++ b/spm/Sources/core-plot/include/CPTLegend.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTLegend.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTLegendEntry.h b/spm/Sources/core-plot/include/CPTLegendEntry.h new file mode 120000 index 000000000..4657685f3 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTLegendEntry.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTLegendEntry.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTLimitBand.h b/spm/Sources/core-plot/include/CPTLimitBand.h new file mode 120000 index 000000000..8d1481db0 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTLimitBand.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTLimitBand.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTLineCap.h b/spm/Sources/core-plot/include/CPTLineCap.h new file mode 120000 index 000000000..5ef3aeb2f --- /dev/null +++ b/spm/Sources/core-plot/include/CPTLineCap.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTLineCap.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTLineStyle.h b/spm/Sources/core-plot/include/CPTLineStyle.h new file mode 120000 index 000000000..61d12117a --- /dev/null +++ b/spm/Sources/core-plot/include/CPTLineStyle.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTLineStyle.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTMutableLineStyle.h b/spm/Sources/core-plot/include/CPTMutableLineStyle.h new file mode 120000 index 000000000..e40949230 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTMutableLineStyle.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTMutableLineStyle.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTMutableNumericData+TypeConversion.h b/spm/Sources/core-plot/include/CPTMutableNumericData+TypeConversion.h new file mode 120000 index 000000000..2e15c93df --- /dev/null +++ b/spm/Sources/core-plot/include/CPTMutableNumericData+TypeConversion.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTMutableNumericData+TypeConversion.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTMutableNumericData.h b/spm/Sources/core-plot/include/CPTMutableNumericData.h new file mode 120000 index 000000000..1d7742957 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTMutableNumericData.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTMutableNumericData.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTMutablePlotRange.h b/spm/Sources/core-plot/include/CPTMutablePlotRange.h new file mode 120000 index 000000000..2f19b9034 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTMutablePlotRange.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTMutablePlotRange.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTMutableShadow.h b/spm/Sources/core-plot/include/CPTMutableShadow.h new file mode 120000 index 000000000..30b520124 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTMutableShadow.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTMutableShadow.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTMutableTextStyle.h b/spm/Sources/core-plot/include/CPTMutableTextStyle.h new file mode 120000 index 000000000..8224b9808 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTMutableTextStyle.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTMutableTextStyle.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTNumericData+TypeConversion.h b/spm/Sources/core-plot/include/CPTNumericData+TypeConversion.h new file mode 120000 index 000000000..c4a513584 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTNumericData+TypeConversion.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTNumericData+TypeConversion.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTNumericData.h b/spm/Sources/core-plot/include/CPTNumericData.h new file mode 120000 index 000000000..4578ef225 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTNumericData.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTNumericData.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTNumericDataType.h b/spm/Sources/core-plot/include/CPTNumericDataType.h new file mode 120000 index 000000000..d819981db --- /dev/null +++ b/spm/Sources/core-plot/include/CPTNumericDataType.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTNumericDataType.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPathExtensions.h b/spm/Sources/core-plot/include/CPTPathExtensions.h new file mode 120000 index 000000000..9963958d0 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTPathExtensions.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTPathExtensions.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPieChart.h b/spm/Sources/core-plot/include/CPTPieChart.h new file mode 120000 index 000000000..1efa1afcf --- /dev/null +++ b/spm/Sources/core-plot/include/CPTPieChart.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTPieChart.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlatformSpecificCategories.h b/spm/Sources/core-plot/include/CPTPlatformSpecificCategories.h new file mode 120000 index 000000000..bb322f194 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTPlatformSpecificCategories.h @@ -0,0 +1 @@ +../../../../framework/PlatformSpecific/CPTPlatformSpecificCategories.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlatformSpecificDefines.h b/spm/Sources/core-plot/include/CPTPlatformSpecificDefines.h new file mode 120000 index 000000000..1eedcf545 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTPlatformSpecificDefines.h @@ -0,0 +1 @@ +../../../../framework/PlatformSpecific/CPTPlatformSpecificDefines.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlatformSpecificFunctions.h b/spm/Sources/core-plot/include/CPTPlatformSpecificFunctions.h new file mode 120000 index 000000000..a3ebbb9a3 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTPlatformSpecificFunctions.h @@ -0,0 +1 @@ +../../../../framework/PlatformSpecific/CPTPlatformSpecificFunctions.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlot.h b/spm/Sources/core-plot/include/CPTPlot.h new file mode 120000 index 000000000..ff1e6cc48 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTPlot.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTPlot.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlotArea.h b/spm/Sources/core-plot/include/CPTPlotArea.h new file mode 120000 index 000000000..63394b35b --- /dev/null +++ b/spm/Sources/core-plot/include/CPTPlotArea.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTPlotArea.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlotAreaFrame.h b/spm/Sources/core-plot/include/CPTPlotAreaFrame.h new file mode 120000 index 000000000..f6a99186b --- /dev/null +++ b/spm/Sources/core-plot/include/CPTPlotAreaFrame.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTPlotAreaFrame.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlotGroup.h b/spm/Sources/core-plot/include/CPTPlotGroup.h new file mode 120000 index 000000000..6833290a6 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTPlotGroup.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTPlotGroup.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlotRange.h b/spm/Sources/core-plot/include/CPTPlotRange.h new file mode 120000 index 000000000..76fee2c4a --- /dev/null +++ b/spm/Sources/core-plot/include/CPTPlotRange.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTPlotRange.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlotSpace.h b/spm/Sources/core-plot/include/CPTPlotSpace.h new file mode 120000 index 000000000..c36e29379 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTPlotSpace.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTPlotSpace.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlotSpaceAnnotation.h b/spm/Sources/core-plot/include/CPTPlotSpaceAnnotation.h new file mode 120000 index 000000000..ed18e5ea8 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTPlotSpaceAnnotation.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTPlotSpaceAnnotation.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlotSymbol.h b/spm/Sources/core-plot/include/CPTPlotSymbol.h new file mode 120000 index 000000000..3cfc7530b --- /dev/null +++ b/spm/Sources/core-plot/include/CPTPlotSymbol.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTPlotSymbol.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTRangePlot.h b/spm/Sources/core-plot/include/CPTRangePlot.h new file mode 120000 index 000000000..5d6d9e79f --- /dev/null +++ b/spm/Sources/core-plot/include/CPTRangePlot.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTRangePlot.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTResponder.h b/spm/Sources/core-plot/include/CPTResponder.h new file mode 120000 index 000000000..34f94f9d8 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTResponder.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTResponder.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTScatterPlot.h b/spm/Sources/core-plot/include/CPTScatterPlot.h new file mode 120000 index 000000000..e0c15a810 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTScatterPlot.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTScatterPlot.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTShadow.h b/spm/Sources/core-plot/include/CPTShadow.h new file mode 120000 index 000000000..0ad2a6f44 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTShadow.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTShadow.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTTextLayer.h b/spm/Sources/core-plot/include/CPTTextLayer.h new file mode 120000 index 000000000..540905494 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTTextLayer.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTTextLayer.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTTextStyle.h b/spm/Sources/core-plot/include/CPTTextStyle.h new file mode 120000 index 000000000..ec8f72331 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTTextStyle.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTTextStyle.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTTextStylePlatformSpecific.h b/spm/Sources/core-plot/include/CPTTextStylePlatformSpecific.h new file mode 120000 index 000000000..91aadb45f --- /dev/null +++ b/spm/Sources/core-plot/include/CPTTextStylePlatformSpecific.h @@ -0,0 +1 @@ +../../../../framework/PlatformSpecific/CPTTextStylePlatformSpecific.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTTheme.h b/spm/Sources/core-plot/include/CPTTheme.h new file mode 120000 index 000000000..9786dc61d --- /dev/null +++ b/spm/Sources/core-plot/include/CPTTheme.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTTheme.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTTimeFormatter.h b/spm/Sources/core-plot/include/CPTTimeFormatter.h new file mode 120000 index 000000000..be4371ba1 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTTimeFormatter.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTTimeFormatter.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTTradingRangePlot.h b/spm/Sources/core-plot/include/CPTTradingRangePlot.h new file mode 120000 index 000000000..d861e6f43 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTTradingRangePlot.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTTradingRangePlot.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTUtilities.h b/spm/Sources/core-plot/include/CPTUtilities.h new file mode 120000 index 000000000..a14adfa4b --- /dev/null +++ b/spm/Sources/core-plot/include/CPTUtilities.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTUtilities.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTXYAxis.h b/spm/Sources/core-plot/include/CPTXYAxis.h new file mode 120000 index 000000000..309f67620 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTXYAxis.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTXYAxis.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTXYAxisSet.h b/spm/Sources/core-plot/include/CPTXYAxisSet.h new file mode 120000 index 000000000..842a4abff --- /dev/null +++ b/spm/Sources/core-plot/include/CPTXYAxisSet.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTXYAxisSet.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTXYGraph.h b/spm/Sources/core-plot/include/CPTXYGraph.h new file mode 120000 index 000000000..af004a251 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTXYGraph.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTXYGraph.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTXYPlotSpace.h b/spm/Sources/core-plot/include/CPTXYPlotSpace.h new file mode 120000 index 000000000..42852d175 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTXYPlotSpace.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTXYPlotSpace.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CorePlot.h b/spm/Sources/core-plot/include/CorePlot.h new file mode 120000 index 000000000..c0d510e52 --- /dev/null +++ b/spm/Sources/core-plot/include/CorePlot.h @@ -0,0 +1 @@ +../../../../framework/CocoaPods/CorePlot.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/NSCoderExtensions.h b/spm/Sources/core-plot/include/NSCoderExtensions.h new file mode 120000 index 000000000..1f38f0542 --- /dev/null +++ b/spm/Sources/core-plot/include/NSCoderExtensions.h @@ -0,0 +1 @@ +../../../../framework/Source/NSCoderExtensions.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/NSDecimalNumberExtensions.h b/spm/Sources/core-plot/include/NSDecimalNumberExtensions.h new file mode 120000 index 000000000..82fed29ca --- /dev/null +++ b/spm/Sources/core-plot/include/NSDecimalNumberExtensions.h @@ -0,0 +1 @@ +../../../../framework/Source/NSDecimalNumberExtensions.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/NSNumberExtensions.h b/spm/Sources/core-plot/include/NSNumberExtensions.h new file mode 120000 index 000000000..a775b31b9 --- /dev/null +++ b/spm/Sources/core-plot/include/NSNumberExtensions.h @@ -0,0 +1 @@ +../../../../framework/Source/NSNumberExtensions.h \ No newline at end of file From 84120148c0bc9e496688ad5ba5788bc43cac0bdd Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Thu, 23 Sep 2021 18:15:44 -0400 Subject: [PATCH 079/245] Added explicit root path to the Swift Package Manager source directory build script. --- scripts/generate_spm_sources_layout.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/generate_spm_sources_layout.sh b/scripts/generate_spm_sources_layout.sh index d85cda065..a817e767e 100755 --- a/scripts/generate_spm_sources_layout.sh +++ b/scripts/generate_spm_sources_layout.sh @@ -2,7 +2,7 @@ set -e -SPM_SOURCES_PATH="spm/Sources/core-plot" +SPM_SOURCES_PATH="$SOURCE_ROOT/../spm/Sources/core-plot" SPM_PUBLIC_HEADERS_PATH="$SPM_SOURCES_PATH/include" # Delete all symbolik links from `spm` folder From 71ce62d7adc8828937fb64127e91b6a4db0dc393 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Thu, 23 Sep 2021 18:36:10 -0400 Subject: [PATCH 080/245] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 63ba16d7d..3a62ea449 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ *Cocoa plotting framework for macOS, iOS, and tvOS.* -[![Build Status](https://secure.travis-ci.org/core-plot/core-plot.svg)](https://travis-ci.org/core-plot/core-plot) [![Platform](https://img.shields.io/cocoapods/p/CorePlot.svg)](https://core-plot.github.io) [![license MIT](https://img.shields.io/cocoapods/l/CorePlot.svg)](https://opensource.org/licenses/BSD-3-Clause) [![Version Status](https://img.shields.io/cocoapods/v/CorePlot.svg)](https://cocoapods.org/pods/CorePlot) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![Swift Package Manager compatible](https://img.shields.io/badge/SPM-compatible-brightgreen.svg)](https://github.com/apple/swift-package-manager) +[![Build Status](https://secure.travis-ci.com/core-plot/core-plot.svg)](https://travis-ci.com/core-plot/core-plot) [![Platform](https://img.shields.io/cocoapods/p/CorePlot.svg)](https://core-plot.github.io) [![license MIT](https://img.shields.io/cocoapods/l/CorePlot.svg)](https://opensource.org/licenses/BSD-3-Clause) [![Version Status](https://img.shields.io/cocoapods/v/CorePlot.svg)](https://cocoapods.org/pods/CorePlot) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![Swift Package Manager compatible](https://img.shields.io/badge/SPM-compatible-brightgreen.svg)](https://github.com/apple/swift-package-manager) # Introduction From fbe5888531e516b0cb8f51c5dd20c242c91d5818 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Thu, 23 Sep 2021 18:41:22 -0400 Subject: [PATCH 081/245] Revert "Update README.md" This reverts commit 71ce62d7adc8828937fb64127e91b6a4db0dc393. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3a62ea449..63ba16d7d 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ *Cocoa plotting framework for macOS, iOS, and tvOS.* -[![Build Status](https://secure.travis-ci.com/core-plot/core-plot.svg)](https://travis-ci.com/core-plot/core-plot) [![Platform](https://img.shields.io/cocoapods/p/CorePlot.svg)](https://core-plot.github.io) [![license MIT](https://img.shields.io/cocoapods/l/CorePlot.svg)](https://opensource.org/licenses/BSD-3-Clause) [![Version Status](https://img.shields.io/cocoapods/v/CorePlot.svg)](https://cocoapods.org/pods/CorePlot) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![Swift Package Manager compatible](https://img.shields.io/badge/SPM-compatible-brightgreen.svg)](https://github.com/apple/swift-package-manager) +[![Build Status](https://secure.travis-ci.org/core-plot/core-plot.svg)](https://travis-ci.org/core-plot/core-plot) [![Platform](https://img.shields.io/cocoapods/p/CorePlot.svg)](https://core-plot.github.io) [![license MIT](https://img.shields.io/cocoapods/l/CorePlot.svg)](https://opensource.org/licenses/BSD-3-Clause) [![Version Status](https://img.shields.io/cocoapods/v/CorePlot.svg)](https://cocoapods.org/pods/CorePlot) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![Swift Package Manager compatible](https://img.shields.io/badge/SPM-compatible-brightgreen.svg)](https://github.com/apple/swift-package-manager) # Introduction From 07fa47a488a2ea7edeecec2dc0e9b05f54947349 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 25 Sep 2021 10:30:35 -0400 Subject: [PATCH 082/245] Moved the Swift Package Manager update script to its own build target and scheme to prevent build errors in environments where the SPM directory is not writable. --- framework/CorePlot.xcodeproj/project.pbxproj | 109 ++++++++++-------- .../xcschemes/Update SPM Files.xcscheme | 67 +++++++++++ 2 files changed, 125 insertions(+), 51 deletions(-) create mode 100644 framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Update SPM Files.xcscheme diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 32bfed7d5..5be38d175 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -18,6 +18,17 @@ name = "Documentation-Mac"; productName = Documentation; }; + C36BE54226FF6857004287F2 /* Update SPM Files */ = { + isa = PBXAggregateTarget; + buildConfigurationList = C36BE54526FF6857004287F2 /* Build configuration list for PBXAggregateTarget "Update SPM Files" */; + buildPhases = ( + C36BE54626FF6865004287F2 /* ShellScript */, + ); + dependencies = ( + ); + name = "Update SPM Files"; + productName = "Update SPM Files"; + }; C37EA5C41BC83E900091C8F7 /* Universal tvOS Framework */ = { isa = PBXAggregateTarget; buildConfigurationList = C37EA5C61BC83E900091C8F7 /* Build configuration list for PBXAggregateTarget "Universal tvOS Framework" */; @@ -2118,7 +2129,6 @@ 8DC2EF520486A6940098B216 /* Resources */, 8DC2EF540486A6940098B216 /* Sources */, 8DC2EF560486A6940098B216 /* Frameworks */, - C3E0731F25CF059A009B3E2B /* ShellScript */, ); buildRules = ( ); @@ -2138,7 +2148,6 @@ C37EA6291BC83F2A0091C8F7 /* Frameworks */, C37EA62E1BC83F2A0091C8F7 /* Headers */, C37EA68E1BC83F2A0091C8F7 /* Resources */, - C3E0738125CF07C8009B3E2B /* ShellScript */, ); buildRules = ( ); @@ -2175,7 +2184,6 @@ C38A09741A46185200D45436 /* Frameworks */, C38A09751A46185200D45436 /* Headers */, C38A09761A46185200D45436 /* Resources */, - C3E0738025CF07B6009B3E2B /* ShellScript */, ); buildRules = ( ); @@ -2215,6 +2223,11 @@ 8DC2EF4F0486A6940098B216 = { DevelopmentTeam = 28ZA45DE7D; }; + C36BE54226FF6857004287F2 = { + CreatedOnToolsVersion = 13.0; + DevelopmentTeam = 28ZA45DE7D; + ProvisioningStyle = Automatic; + }; C38A09771A46185200D45436 = { CreatedOnToolsVersion = 6.1.1; }; @@ -2245,6 +2258,7 @@ C38A09811A46185300D45436 /* UnitTests iOS */, C37EA5C91BC83F2A0091C8F7 /* CorePlot tvOS */, C37EA6941BC83F2D0091C8F7 /* UnitTests tvOS */, + C36BE54226FF6857004287F2 /* Update SPM Files */, 9021E49E0FC5C9DC00443472 /* Documentation-Mac */, C38A09911A4618B600D45436 /* Documentation-iOS */, C38A09961A46193F00D45436 /* Universal Library */, @@ -2316,46 +2330,24 @@ shellPath = /bin/sh; shellScript = "# Build the doxygen documentation for the project and load the docset into Xcode.\n\n# Use the following to adjust the value of the $DOXYGEN_PATH User-Defined Setting:\n# Binary install location: /Applications/Doxygen.app/Contents/Resources/doxygen\n# Source build install location: /usr/local/bin/doxygen\n\n# Graphical class diagrams require Graphviz.\n# Graphviz.app is available free online\n# http://www.graphviz.org/Download_macos.php\n\n# If the config file doesn't exist, run 'doxygen -g \"${SOURCE_ROOT}/../documentation/doxygen/doxygen.config\"' to \n# a get default file.\n\nDOXYGEN_FOLDER=\"${SOURCE_ROOT}/../documentation/doxygen\"\n\nif ! [ -f \"${DOXYGEN_FOLDER}/doxygen.config\" ] \nthen \n echo doxygen config file does not exist\n ${DOXYGEN_PATH} -g \"${DOXYGEN_FOLDER}/doxygen.config\"\nfi\n\n# Run doxygen on the updated config file.\n# Note: doxygen creates a Makefile that does most of the heavy lifting.\n${DOXYGEN_PATH} \"${DOXYGEN_FOLDER}/doxygen.config\"\n\n# make a copy of the html docs\nDOCS_FOLDER=\"${SOURCE_ROOT}/../documentation/html/MacOS\"\nmkdir -p \"${DOCS_FOLDER}\"\ncp -R \"${SOURCE_ROOT}/CorePlotDocs.docset/html/\" \"${DOCS_FOLDER}\"\nrm -Rf \"${SOURCE_ROOT}/CorePlotDocs.docset\"\nrm -f \"${DOCS_FOLDER}/Info.plist\"\nrm -f \"${DOCS_FOLDER}/Makefile\"\nrm -f \"${DOCS_FOLDER}/Nodes.xml\"\nrm -f \"${DOCS_FOLDER}/Tokens.xml\"\n\n# Fix capitalization for GitHub pages\ncd \"${DOCS_FOLDER}\"\nls _*.* | while read a; do n=$(echo $a | sed -e 's/^_//'); mv \"$a\" \"$n\"; done\nls *.html | xargs sed -i '' 's/\\\"_/\\\"/g'\nls *.js | xargs sed -i '' 's/\\\"_/\\\"/g'\nls *.map | xargs sed -i '' 's/\\\"$_/\\\"$/g'\n\nexit 0\n"; }; - C37EA5C51BC83E900091C8F7 /* ShellScript */ = { + C36BE54626FF6865004287F2 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\nUFW_TARGET=\"CorePlot tvOS\"\nUFW_BUILD_DIR=\"${PROJECT_DIR}/../build\"\n\n# Use the latest tvOS SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"appletvos.*$\")\nwhile read -r line; do\nUFW_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_SDK_VERSION=$(echo \"${UFW_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\nFRAMEWORK_NAME=\"${PROJECT_NAME}\"\n\nUFW_IPHONE_PATH=\"${UFW_BUILD_DIR}/Release-appletvos/${FRAMEWORK_NAME}.framework\"\nUFW_SIMULATOR_PATH=\"${UFW_BUILD_DIR}/Release-appletvsimulator/${FRAMEWORK_NAME}.framework\"\nUFW_UNIVERSAL_DIR=\"${UFW_BUILD_DIR}/Release-appletvuniversal\"\nUFW_FRAMEWORK=\"${UFW_UNIVERSAL_DIR}/${FRAMEWORK_NAME}.framework\"\n\n# Build Framework\n\nrm -rf \"${UFW_UNIVERSAL_DIR}\"\n\nxcodebuild -scheme \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk appletvos${UFW_SDK_VERSION} clean build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -scheme \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk appletvsimulator${UFW_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n\nmkdir -p \"${UFW_UNIVERSAL_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\ncp -r \"${UFW_IPHONE_PATH}/.\" \"${UFW_FRAMEWORK}\"\n\nlipo -create -output \"${UFW_FRAMEWORK}/${FRAMEWORK_NAME}\" \"${UFW_SIMULATOR_PATH}/${FRAMEWORK_NAME}\" \"${UFW_IPHONE_PATH}/${FRAMEWORK_NAME}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: lipo failed\"; exit 1; fi\n"; - }; - C38A09921A4618B600D45436 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( + inputFileListPaths = ( ); inputPaths = ( ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "# Build the doxygen documentation for the project and load the docset into Xcode.\n\n# Use the following to adjust the value of the $DOXYGEN_PATH User-Defined Setting:\n# Binary install location: /Applications/Doxygen.app/Contents/Resources/doxygen\n# Source build install location: /usr/local/bin/doxygen\n\n# Graphical class diagrams require Graphviz.\n# Graphviz.app is available free online\n# http://www.graphviz.org/Download_macos.php\n\n# If the config file doesn't exist, run 'doxygen -g \"${SOURCE_ROOT}/../documentation/doxygen/doxygen touch.config\"' to\n# a get default file.\n\nDOXYGEN_FOLDER=\"${SOURCE_ROOT}/../documentation/doxygen\"\n\nif ! [ -f \"${DOXYGEN_FOLDER}/doxygen.config\" ]\nthen\necho doxygen config file does not exist\n${DOXYGEN_PATH} -g \"${DOXYGEN_FOLDER}/doxygen.config\"\nfi\n\n# Run doxygen on the updated config file.\n# Note: doxygen creates a Makefile that does most of the heavy lifting.\n${DOXYGEN_PATH} \"${SOURCE_ROOT}/../documentation/doxygen/doxygen touch.config\"\n\n# make a copy of the html docs\nDOCS_FOLDER=\"${SOURCE_ROOT}/../documentation/html/iOS\"\nmkdir -p \"${DOCS_FOLDER}\"\ncp -R \"${SOURCE_ROOT}/CorePlotTouchDocs.docset/html/\" \"${DOCS_FOLDER}\"\nrm -Rf \"${SOURCE_ROOT}/CorePlotTouchDocs.docset\"\nrm -f \"${DOCS_FOLDER}/Info.plist\"\nrm -f \"${DOCS_FOLDER}/Makefile\"\nrm -f \"${DOCS_FOLDER}/Nodes.xml\"\nrm -f \"${DOCS_FOLDER}/Tokens.xml\"\n\n# Fix capitalization for GitHub pages\ncd \"${DOCS_FOLDER}\"\nls _*.* | while read a; do n=$(echo $a | sed -e 's/^_//'); mv \"$a\" \"$n\"; done\nls *.html | xargs sed -i '' 's/\\\"_/\\\"/g'\nls *.js | xargs sed -i '' 's/\\\"_/\\\"/g'\nls *.map | xargs sed -i '' 's/\\\"$_/\\\"$/g'\n\nexit 0\n"; - }; - C38A09971A46193F00D45436 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( + outputFileListPaths = ( ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\nUFW_TARGET=\"CorePlot-CocoaTouch\"\nUFW_BUILD_DIR=\"${PROJECT_DIR}/../build\"\n\n# Use the latest iphoneos SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"iphoneos.*$\")\nwhile read -r line; do\nUFW_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_SDK_VERSION=$(echo \"${UFW_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\nUFW_IPHONE_DIR=\"${UFW_BUILD_DIR}/Release-iphoneos\"\nUFW_SIMULATOR_DIR=\"${UFW_BUILD_DIR}/Release-iphonesimulator\"\nUFW_UNIVERSAL_DIR=\"${UFW_BUILD_DIR}/Release-universal\"\nUFW_HEADER_DIR=\"${UFW_UNIVERSAL_DIR}/CorePlotHeaders\"\nUFW_EXE_PATH=\"libCorePlot-CocoaTouch.a\"\n\n# Build Framework\n\nrm -rf \"${UFW_UNIVERSAL_DIR}\"\n\nxcodebuild -scheme \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphoneos${UFW_SDK_VERSION} clean build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -scheme \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphonesimulator${UFW_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n\nmkdir -p \"${UFW_UNIVERSAL_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\nlipo -create -output \"${UFW_UNIVERSAL_DIR}/${UFW_EXE_PATH}\" \"${UFW_IPHONE_DIR}/${UFW_EXE_PATH}\" \"${UFW_SIMULATOR_DIR}/${UFW_EXE_PATH}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: lipo failed\"; exit 1; fi\n\n# copy header files\nmkdir -p \"${UFW_HEADER_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\ncp \"${SOURCE_ROOT}/CorePlot-CocoaTouch.h\" \"${UFW_HEADER_DIR}\"\ncp \"${SOURCE_ROOT}/iPhoneOnly/\"[!_]*.h \"${UFW_HEADER_DIR}/\"\ncp \"${SOURCE_ROOT}/Source/\"[!_]*.h \"${UFW_HEADER_DIR}/\"\n\nrm \"${UFW_HEADER_DIR}/\"*Tests.*\n"; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${SOURCE_ROOT}/../scripts/generate_spm_sources_layout.sh\"\n"; }; - C3A546801BC1A817005C1BBC /* ShellScript */ = { + C37EA5C51BC83E900091C8F7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -2366,9 +2358,9 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\nUFW_TARGET=\"CorePlot iOS\"\nUFW_BUILD_DIR=\"${PROJECT_DIR}/../build\"\n\n# Use the latest iphoneos SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"iphoneos.*$\")\nwhile read -r line; do\nUFW_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_SDK_VERSION=$(echo \"${UFW_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\nFRAMEWORK_NAME=\"${PROJECT_NAME}\"\n\nUFW_IPHONE_PATH=\"${UFW_BUILD_DIR}/Release-iphoneos/${FRAMEWORK_NAME}.framework\"\nUFW_SIMULATOR_PATH=\"${UFW_BUILD_DIR}/Release-iphonesimulator/${FRAMEWORK_NAME}.framework\"\nUFW_UNIVERSAL_DIR=\"${UFW_BUILD_DIR}/Release-iphoneuniversal\"\nUFW_FRAMEWORK=\"${UFW_UNIVERSAL_DIR}/${FRAMEWORK_NAME}.framework\"\n\n# Build Framework\n\nrm -rf \"${UFW_UNIVERSAL_DIR}\"\n\nxcodebuild -scheme \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphoneos${UFW_SDK_VERSION} clean build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -scheme \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphonesimulator${UFW_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n\nmkdir -p \"${UFW_UNIVERSAL_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\ncp -r \"${UFW_IPHONE_PATH}/.\" \"${UFW_FRAMEWORK}\"\n\nlipo -create -output \"${UFW_FRAMEWORK}/${FRAMEWORK_NAME}\" \"${UFW_SIMULATOR_PATH}/${FRAMEWORK_NAME}\" \"${UFW_IPHONE_PATH}/${FRAMEWORK_NAME}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: lipo failed\"; exit 1; fi\n"; + shellScript = "\nUFW_TARGET=\"CorePlot tvOS\"\nUFW_BUILD_DIR=\"${PROJECT_DIR}/../build\"\n\n# Use the latest tvOS SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"appletvos.*$\")\nwhile read -r line; do\nUFW_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_SDK_VERSION=$(echo \"${UFW_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\nFRAMEWORK_NAME=\"${PROJECT_NAME}\"\n\nUFW_IPHONE_PATH=\"${UFW_BUILD_DIR}/Release-appletvos/${FRAMEWORK_NAME}.framework\"\nUFW_SIMULATOR_PATH=\"${UFW_BUILD_DIR}/Release-appletvsimulator/${FRAMEWORK_NAME}.framework\"\nUFW_UNIVERSAL_DIR=\"${UFW_BUILD_DIR}/Release-appletvuniversal\"\nUFW_FRAMEWORK=\"${UFW_UNIVERSAL_DIR}/${FRAMEWORK_NAME}.framework\"\n\n# Build Framework\n\nrm -rf \"${UFW_UNIVERSAL_DIR}\"\n\nxcodebuild -scheme \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk appletvos${UFW_SDK_VERSION} clean build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -scheme \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk appletvsimulator${UFW_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n\nmkdir -p \"${UFW_UNIVERSAL_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\ncp -r \"${UFW_IPHONE_PATH}/.\" \"${UFW_FRAMEWORK}\"\n\nlipo -create -output \"${UFW_FRAMEWORK}/${FRAMEWORK_NAME}\" \"${UFW_SIMULATOR_PATH}/${FRAMEWORK_NAME}\" \"${UFW_IPHONE_PATH}/${FRAMEWORK_NAME}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: lipo failed\"; exit 1; fi\n"; }; - C3AC175C244B594800E7380C /* ShellScript */ = { + C38A09921A4618B600D45436 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -2379,58 +2371,46 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "UFW_MAC_TARGET=\"CorePlot Mac\"\nUFW_IOS_TARGET=\"CorePlot iOS\"\nUFW_TVOS_TARGET=\"CorePlot tvOS\"\n\nUFW_BUILD_DIR=\"${PROJECT_DIR}/../build\"\n\n# Mac SDK\n# Use the latest macOS SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"[^.]macosx.*$\")\nwhile read -r line; do\nUFW_MAC_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_MAC_SDK_VERSION=$(echo \"${UFW_MAC_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\n# iOS SDK\n# Use the latest iOS SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"iphoneos.*$\")\nwhile read -r line; do\nUFW_IOS_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_IOS_SDK_VERSION=$(echo \"${UFW_IOS_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\n# tvOS SDK\n# Use the latest tvOS SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"appletvos.*$\")\nwhile read -r line; do\nUFW_TVOS_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_TVOS_SDK_VERSION=$(echo \"${UFW_TVOS_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\nFRAMEWORK_NAME=\"${PROJECT_NAME}\"\n\nUFW_MAC_PATH=\"${UFW_BUILD_DIR}/Release/${FRAMEWORK_NAME}.framework\"\nUFW_CATALYST_PATH=\"${UFW_BUILD_DIR}/Release-maccatalyst/${FRAMEWORK_NAME}.framework\"\nUFW_IOS_PATH=\"${UFW_BUILD_DIR}/Release-iphoneos/${FRAMEWORK_NAME}.framework\"\nUFW_IOS_SIMULATOR_PATH=\"${UFW_BUILD_DIR}/Release-iphonesimulator/${FRAMEWORK_NAME}.framework\"\nUFW_TVOS_PATH=\"${UFW_BUILD_DIR}/Release-appletvos/${FRAMEWORK_NAME}.framework\"\nUFW_TVOS_SIMULATOR_PATH=\"${UFW_BUILD_DIR}/Release-appletvsimulator/${FRAMEWORK_NAME}.framework\"\n\nUFW_UNIVERSAL_DIR=\"${UFW_BUILD_DIR}/Release-universal\"\nUFW_FRAMEWORK=\"${UFW_UNIVERSAL_DIR}/${FRAMEWORK_NAME}.xcframework\"\n\n# Build Framework\n\nrm -rf \"${UFW_UNIVERSAL_DIR}\"\n\n# macOS\nxcodebuild -scheme \"${UFW_MAC_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk macosx${UFW_MAC_SDK_VERSION} clean build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n# Mac Catalyst\nxcodebuild -scheme \"${UFW_IOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphoneos${UFW_IOS_SDK_VERSION} -destination \"platform=macOS,variant=Mac Catalyst\" build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n# iOS\nxcodebuild -scheme \"${UFW_IOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphoneos${UFW_IOS_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -scheme \"${UFW_IOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphonesimulator${UFW_IOS_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n#tvOS\nxcodebuild -scheme \"${UFW_TVOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk appletvos${UFW_TVOS_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -scheme \"${UFW_TVOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk appletvsimulator${UFW_TVOS_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n\nmkdir -p \"${UFW_UNIVERSAL_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\nxcodebuild -create-xcframework -output \"${UFW_FRAMEWORK}\" \\\n -framework \"${UFW_MAC_PATH}\" \\\n -framework \"${UFW_CATALYST_PATH}\" \\\n -framework \"${UFW_IOS_PATH}\" \\\n -framework \"${UFW_IOS_SIMULATOR_PATH}\" \\\n -framework \"${UFW_TVOS_PATH}\" \\\n -framework \"${UFW_TVOS_SIMULATOR_PATH}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: create XCFramework failed\"; exit 1; fi\n\n"; + shellScript = "# Build the doxygen documentation for the project and load the docset into Xcode.\n\n# Use the following to adjust the value of the $DOXYGEN_PATH User-Defined Setting:\n# Binary install location: /Applications/Doxygen.app/Contents/Resources/doxygen\n# Source build install location: /usr/local/bin/doxygen\n\n# Graphical class diagrams require Graphviz.\n# Graphviz.app is available free online\n# http://www.graphviz.org/Download_macos.php\n\n# If the config file doesn't exist, run 'doxygen -g \"${SOURCE_ROOT}/../documentation/doxygen/doxygen touch.config\"' to\n# a get default file.\n\nDOXYGEN_FOLDER=\"${SOURCE_ROOT}/../documentation/doxygen\"\n\nif ! [ -f \"${DOXYGEN_FOLDER}/doxygen.config\" ]\nthen\necho doxygen config file does not exist\n${DOXYGEN_PATH} -g \"${DOXYGEN_FOLDER}/doxygen.config\"\nfi\n\n# Run doxygen on the updated config file.\n# Note: doxygen creates a Makefile that does most of the heavy lifting.\n${DOXYGEN_PATH} \"${SOURCE_ROOT}/../documentation/doxygen/doxygen touch.config\"\n\n# make a copy of the html docs\nDOCS_FOLDER=\"${SOURCE_ROOT}/../documentation/html/iOS\"\nmkdir -p \"${DOCS_FOLDER}\"\ncp -R \"${SOURCE_ROOT}/CorePlotTouchDocs.docset/html/\" \"${DOCS_FOLDER}\"\nrm -Rf \"${SOURCE_ROOT}/CorePlotTouchDocs.docset\"\nrm -f \"${DOCS_FOLDER}/Info.plist\"\nrm -f \"${DOCS_FOLDER}/Makefile\"\nrm -f \"${DOCS_FOLDER}/Nodes.xml\"\nrm -f \"${DOCS_FOLDER}/Tokens.xml\"\n\n# Fix capitalization for GitHub pages\ncd \"${DOCS_FOLDER}\"\nls _*.* | while read a; do n=$(echo $a | sed -e 's/^_//'); mv \"$a\" \"$n\"; done\nls *.html | xargs sed -i '' 's/\\\"_/\\\"/g'\nls *.js | xargs sed -i '' 's/\\\"_/\\\"/g'\nls *.map | xargs sed -i '' 's/\\\"$_/\\\"$/g'\n\nexit 0\n"; }; - C3E0731F25CF059A009B3E2B /* ShellScript */ = { + C38A09971A46193F00D45436 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( ); - outputFileListPaths = ( - ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${SOURCE_ROOT}/../scripts/generate_spm_sources_layout.sh\"\n"; + shellScript = "\nUFW_TARGET=\"CorePlot-CocoaTouch\"\nUFW_BUILD_DIR=\"${PROJECT_DIR}/../build\"\n\n# Use the latest iphoneos SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"iphoneos.*$\")\nwhile read -r line; do\nUFW_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_SDK_VERSION=$(echo \"${UFW_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\nUFW_IPHONE_DIR=\"${UFW_BUILD_DIR}/Release-iphoneos\"\nUFW_SIMULATOR_DIR=\"${UFW_BUILD_DIR}/Release-iphonesimulator\"\nUFW_UNIVERSAL_DIR=\"${UFW_BUILD_DIR}/Release-universal\"\nUFW_HEADER_DIR=\"${UFW_UNIVERSAL_DIR}/CorePlotHeaders\"\nUFW_EXE_PATH=\"libCorePlot-CocoaTouch.a\"\n\n# Build Framework\n\nrm -rf \"${UFW_UNIVERSAL_DIR}\"\n\nxcodebuild -scheme \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphoneos${UFW_SDK_VERSION} clean build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -scheme \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphonesimulator${UFW_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n\nmkdir -p \"${UFW_UNIVERSAL_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\nlipo -create -output \"${UFW_UNIVERSAL_DIR}/${UFW_EXE_PATH}\" \"${UFW_IPHONE_DIR}/${UFW_EXE_PATH}\" \"${UFW_SIMULATOR_DIR}/${UFW_EXE_PATH}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: lipo failed\"; exit 1; fi\n\n# copy header files\nmkdir -p \"${UFW_HEADER_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\ncp \"${SOURCE_ROOT}/CorePlot-CocoaTouch.h\" \"${UFW_HEADER_DIR}\"\ncp \"${SOURCE_ROOT}/iPhoneOnly/\"[!_]*.h \"${UFW_HEADER_DIR}/\"\ncp \"${SOURCE_ROOT}/Source/\"[!_]*.h \"${UFW_HEADER_DIR}/\"\n\nrm \"${UFW_HEADER_DIR}/\"*Tests.*\n"; }; - C3E0738025CF07B6009B3E2B /* ShellScript */ = { + C3A546801BC1A817005C1BBC /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( ); - outputFileListPaths = ( - ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${SOURCE_ROOT}/../scripts/generate_spm_sources_layout.sh\"\n"; + shellScript = "\nUFW_TARGET=\"CorePlot iOS\"\nUFW_BUILD_DIR=\"${PROJECT_DIR}/../build\"\n\n# Use the latest iphoneos SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"iphoneos.*$\")\nwhile read -r line; do\nUFW_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_SDK_VERSION=$(echo \"${UFW_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\nFRAMEWORK_NAME=\"${PROJECT_NAME}\"\n\nUFW_IPHONE_PATH=\"${UFW_BUILD_DIR}/Release-iphoneos/${FRAMEWORK_NAME}.framework\"\nUFW_SIMULATOR_PATH=\"${UFW_BUILD_DIR}/Release-iphonesimulator/${FRAMEWORK_NAME}.framework\"\nUFW_UNIVERSAL_DIR=\"${UFW_BUILD_DIR}/Release-iphoneuniversal\"\nUFW_FRAMEWORK=\"${UFW_UNIVERSAL_DIR}/${FRAMEWORK_NAME}.framework\"\n\n# Build Framework\n\nrm -rf \"${UFW_UNIVERSAL_DIR}\"\n\nxcodebuild -scheme \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphoneos${UFW_SDK_VERSION} clean build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -scheme \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphonesimulator${UFW_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n\nmkdir -p \"${UFW_UNIVERSAL_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\ncp -r \"${UFW_IPHONE_PATH}/.\" \"${UFW_FRAMEWORK}\"\n\nlipo -create -output \"${UFW_FRAMEWORK}/${FRAMEWORK_NAME}\" \"${UFW_SIMULATOR_PATH}/${FRAMEWORK_NAME}\" \"${UFW_IPHONE_PATH}/${FRAMEWORK_NAME}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: lipo failed\"; exit 1; fi\n"; }; - C3E0738125CF07C8009B3E2B /* ShellScript */ = { + C3AC175C244B594800E7380C /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( ); - outputFileListPaths = ( - ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${SOURCE_ROOT}/../scripts/generate_spm_sources_layout.sh\"\n"; + shellScript = "UFW_MAC_TARGET=\"CorePlot Mac\"\nUFW_IOS_TARGET=\"CorePlot iOS\"\nUFW_TVOS_TARGET=\"CorePlot tvOS\"\n\nUFW_BUILD_DIR=\"${PROJECT_DIR}/../build\"\n\n# Mac SDK\n# Use the latest macOS SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"[^.]macosx.*$\")\nwhile read -r line; do\nUFW_MAC_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_MAC_SDK_VERSION=$(echo \"${UFW_MAC_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\n# iOS SDK\n# Use the latest iOS SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"iphoneos.*$\")\nwhile read -r line; do\nUFW_IOS_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_IOS_SDK_VERSION=$(echo \"${UFW_IOS_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\n# tvOS SDK\n# Use the latest tvOS SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"appletvos.*$\")\nwhile read -r line; do\nUFW_TVOS_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_TVOS_SDK_VERSION=$(echo \"${UFW_TVOS_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\nFRAMEWORK_NAME=\"${PROJECT_NAME}\"\n\nUFW_MAC_PATH=\"${UFW_BUILD_DIR}/Release/${FRAMEWORK_NAME}.framework\"\nUFW_CATALYST_PATH=\"${UFW_BUILD_DIR}/Release-maccatalyst/${FRAMEWORK_NAME}.framework\"\nUFW_IOS_PATH=\"${UFW_BUILD_DIR}/Release-iphoneos/${FRAMEWORK_NAME}.framework\"\nUFW_IOS_SIMULATOR_PATH=\"${UFW_BUILD_DIR}/Release-iphonesimulator/${FRAMEWORK_NAME}.framework\"\nUFW_TVOS_PATH=\"${UFW_BUILD_DIR}/Release-appletvos/${FRAMEWORK_NAME}.framework\"\nUFW_TVOS_SIMULATOR_PATH=\"${UFW_BUILD_DIR}/Release-appletvsimulator/${FRAMEWORK_NAME}.framework\"\n\nUFW_UNIVERSAL_DIR=\"${UFW_BUILD_DIR}/Release-universal\"\nUFW_FRAMEWORK=\"${UFW_UNIVERSAL_DIR}/${FRAMEWORK_NAME}.xcframework\"\n\n# Build Framework\n\nrm -rf \"${UFW_UNIVERSAL_DIR}\"\n\n# macOS\nxcodebuild -scheme \"${UFW_MAC_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk macosx${UFW_MAC_SDK_VERSION} clean build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n# Mac Catalyst\nxcodebuild -scheme \"${UFW_IOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphoneos${UFW_IOS_SDK_VERSION} -destination \"platform=macOS,variant=Mac Catalyst\" build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n# iOS\nxcodebuild -scheme \"${UFW_IOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphoneos${UFW_IOS_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -scheme \"${UFW_IOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphonesimulator${UFW_IOS_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n#tvOS\nxcodebuild -scheme \"${UFW_TVOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk appletvos${UFW_TVOS_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -scheme \"${UFW_TVOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk appletvsimulator${UFW_TVOS_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n\nmkdir -p \"${UFW_UNIVERSAL_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\nxcodebuild -create-xcframework -output \"${UFW_FRAMEWORK}\" \\\n -framework \"${UFW_MAC_PATH}\" \\\n -framework \"${UFW_CATALYST_PATH}\" \\\n -framework \"${UFW_IOS_PATH}\" \\\n -framework \"${UFW_IOS_SIMULATOR_PATH}\" \\\n -framework \"${UFW_TVOS_PATH}\" \\\n -framework \"${UFW_TVOS_SIMULATOR_PATH}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: create XCFramework failed\"; exit 1; fi\n\n"; }; /* End PBXShellScriptBuildPhase section */ @@ -3046,6 +3026,24 @@ }; name = Release; }; + C36BE54326FF6857004287F2 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 28ZA45DE7D; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + C36BE54426FF6857004287F2 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 28ZA45DE7D; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; C37EA5C71BC83E900091C8F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3374,6 +3372,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + C36BE54526FF6857004287F2 /* Build configuration list for PBXAggregateTarget "Update SPM Files" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C36BE54326FF6857004287F2 /* Debug */, + C36BE54426FF6857004287F2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; C37EA5C61BC83E900091C8F7 /* Build configuration list for PBXAggregateTarget "Universal tvOS Framework" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Update SPM Files.xcscheme b/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Update SPM Files.xcscheme new file mode 100644 index 000000000..3e156a97d --- /dev/null +++ b/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Update SPM Files.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + From 896b7a56ed081595d889318f9bb70885eab50091 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 25 Sep 2021 10:32:48 -0400 Subject: [PATCH 083/245] Put the status badges in the readme file on one line. --- README.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/README.md b/README.md index cee5e178a..caae8bf23 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,7 @@ *Cocoa plotting framework for macOS, iOS, and tvOS.* -[![Build Status](https://secure.travis-ci.org/core-plot/core-plot.svg)](http://travis-ci.org/core-plot/core-plot) -[![core-plot CI](https://github.com/core-plot/core-plot/actions/workflows/ci.yml/badge.svg)](https://github.com/core-plot/core-plot/actions/workflows/ci.yml) -[![Version Status](https://img.shields.io/cocoapods/v/CorePlot.svg)](https://cocoapods.org/pods/CorePlot) -[![license MIT](https://img.shields.io/cocoapods/l/CorePlot.svg)](http://opensource.org/licenses/BSD-3-Clause) -[![Platform](https://img.shields.io/cocoapods/p/CorePlot.svg)](http://core-plot.github.io) -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) -[![Swift Package Manager compatible](https://img.shields.io/badge/SPM-compatible-brightgreen.svg)](https://github.com/apple/swift-package-manager) +[![Build Status](https://secure.travis-ci.org/core-plot/core-plot.svg)](http://travis-ci.org/core-plot/core-plot) [![core-plot CI](https://github.com/core-plot/core-plot/actions/workflows/ci.yml/badge.svg)](https://github.com/core-plot/core-plot/actions/workflows/ci.yml) [![Version Status](https://img.shields.io/cocoapods/v/CorePlot.svg)](https://cocoapods.org/pods/CorePlot) [![license MIT](https://img.shields.io/cocoapods/l/CorePlot.svg)](http://opensource.org/licenses/BSD-3-Clause) [![Platform](https://img.shields.io/cocoapods/p/CorePlot.svg)](http://core-plot.github.io) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![Swift Package Manager compatible](https://img.shields.io/badge/SPM-compatible-brightgreen.svg)](https://github.com/apple/swift-package-manager) # Introduction From f05984502a43e2a457cda7df7717e1ef2df0bcdf Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 25 Sep 2021 10:42:07 -0400 Subject: [PATCH 084/245] Update ci.yml Run this workflow on all branches. Don't run the update SPM script since it won't work on the read-only file system provided by the build system. --- .github/workflows/ci.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5a658244a..d94c4399d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,8 +3,7 @@ name: "core-plot CI" on: push: branches: - - master - - "release-2.4" + - "*" pull_request: branches: - "*" @@ -47,8 +46,5 @@ jobs: - name: Checkout uses: actions/checkout@v2 - - name: Generate SPM layout - run: ./scripts/generate_spm_sources_layout.sh - - name: spm's xcodebuild - ${{ matrix.destination }} run: xcodebuild clean build -scheme "${{ matrix.scheme }}" -destination "${{ matrix.destination }}" -configuration Release From 5a78d7e550f52833bdf855156eef29cdfd426d6f Mon Sep 17 00:00:00 2001 From: keltonhalbert Date: Tue, 5 Oct 2021 16:29:17 -0700 Subject: [PATCH 085/245] implemented a fix to properly constrain the range when the range is in descending order. This was causing problems in log plot space with inverted Y axis. --- framework/Source/CPTXYPlotSpace.m | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/framework/Source/CPTXYPlotSpace.m b/framework/Source/CPTXYPlotSpace.m index 3b2750488..55eb81af8 100644 --- a/framework/Source/CPTXYPlotSpace.m +++ b/framework/Source/CPTXYPlotSpace.m @@ -531,15 +531,29 @@ -(nonnull CPTPlotRange *)constrainRange:(nonnull CPTPlotRange *)existingRange to CPTPlotRange *theGlobalRange = globalRange; - if ( CPTDecimalGreaterThanOrEqualTo(existingRange.lengthDecimal, theGlobalRange.lengthDecimal)) { - return [theGlobalRange copy]; + if (CPTDecimalGreaterThanOrEqualTo(existingRange.lengthDecimal, CPTDecimalFromInteger(0))) { + if ( CPTDecimalGreaterThanOrEqualTo(existingRange.lengthDecimal, theGlobalRange.lengthDecimal)) { + return [theGlobalRange copy]; + } + else { + CPTMutablePlotRange *newRange = [existingRange mutableCopy]; + [newRange shiftEndToFitInRange:theGlobalRange]; + [newRange shiftLocationToFitInRange:theGlobalRange]; + return newRange; + } } else { - CPTMutablePlotRange *newRange = [existingRange mutableCopy]; - [newRange shiftEndToFitInRange:theGlobalRange]; - [newRange shiftLocationToFitInRange:theGlobalRange]; - return newRange; + if ( CPTDecimalLessThanOrEqualTo(existingRange.lengthDecimal, theGlobalRange.lengthDecimal)) { + return [theGlobalRange copy]; + } + else { + CPTMutablePlotRange *newRange = [existingRange mutableCopy]; + [newRange shiftEndToFitInRange:theGlobalRange]; + [newRange shiftLocationToFitInRange:theGlobalRange]; + return newRange; + } } + } -(void)animateRangeForCoordinate:(CPTCoordinate)coordinate shift:(NSDecimal)shift momentumTime:(CGFloat)momentumTime speed:(CGFloat)speed acceleration:(CGFloat)acceleration From 8d6e3a71eeb9dfdeba02f27b761450b7a501c8f6 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 9 Oct 2021 16:46:58 -0400 Subject: [PATCH 086/245] Updated Uncrustify config file to version 0.73.0. --- scripts/uncrustify.cfg | 65 +++++++++++++++++++++++++++++++++--------- 1 file changed, 52 insertions(+), 13 deletions(-) diff --git a/scripts/uncrustify.cfg b/scripts/uncrustify.cfg index 55f9b6673..19d43c2e6 100644 --- a/scripts/uncrustify.cfg +++ b/scripts/uncrustify.cfg @@ -1,4 +1,4 @@ -# Uncrustify_d-0.71.0 +# Uncrustify_d-0.73.0 newlines = auto input_tab_size = 4 output_tab_size = 4 @@ -10,18 +10,17 @@ disable_processing_nl_cont = false disable_processing_cmt = "" enable_processing_cmt = "" enable_digraphs = false +processing_cmt_as_regex = false utf8_bom = remove utf8_byte = false utf8_force = false -sp_do_brace_open = ignore -sp_brace_close_while = ignore -sp_while_paren_open = ignore sp_arith = force sp_arith_additive = ignore sp_assign = force sp_cpp_lambda_assign = ignore sp_cpp_lambda_square_paren = ignore sp_cpp_lambda_square_brace = ignore +sp_cpp_lambda_argument_list = ignore sp_cpp_lambda_paren_brace = ignore sp_cpp_lambda_fparen = ignore sp_assign_default = force @@ -50,8 +49,10 @@ sp_after_ptr_star = remove sp_after_ptr_block_caret = remove sp_after_ptr_star_qualifier = remove sp_after_ptr_star_func = remove +sp_after_ptr_star_trailing = remove sp_ptr_star_paren = remove sp_before_ptr_star_func = force +sp_before_ptr_star_trailing = force sp_before_byref = force sp_before_unnamed_byref = force sp_after_byref = remove @@ -75,14 +76,19 @@ sp_before_sparen = force sp_inside_sparen = force sp_inside_sparen_open = ignore sp_inside_sparen_close = ignore +sp_sparen_paren = remove sp_after_sparen = force sp_sparen_brace = force +sp_do_brace_open = force +sp_brace_close_while = force +sp_while_paren_open = force sp_invariant_paren = ignore sp_after_invariant_paren = ignore sp_special_semi = force sp_before_semi = remove sp_before_semi_for = remove -sp_before_semi_for_empty = remove +sp_before_semi_for_empty = force +sp_between_semi_for_empty = force sp_after_semi = force sp_after_semi_for = force sp_after_semi_for_empty = force @@ -92,6 +98,7 @@ sp_before_square_asm_block = ignore sp_before_squares = remove sp_cpp_before_struct_binding = remove sp_inside_square = remove +sp_inside_square_empty = remove sp_inside_square_oc_array = remove sp_after_comma = force sp_before_comma = remove @@ -99,10 +106,13 @@ sp_after_mdatype_commas = remove sp_before_mdatype_commas = remove sp_between_mdatype_commas = remove sp_paren_comma = force +sp_after_ellipsis = remove sp_before_ellipsis = remove sp_type_ellipsis = remove +sp_ptr_type_ellipsis = remove sp_type_question = remove sp_paren_ellipsis = remove +sp_byref_ellipsis = remove sp_paren_qualifier = remove sp_paren_noexcept = remove sp_after_class_colon = force @@ -119,6 +129,8 @@ sp_cpp_cast_paren = remove sp_sizeof_paren = remove sp_sizeof_ellipsis = remove sp_sizeof_ellipsis_paren = remove +sp_ellipsis_parameter_pack = remove +sp_parameter_pack_ellipsis = remove sp_decltype_paren = remove sp_after_tag = remove sp_inside_braces_enum = remove @@ -222,17 +234,22 @@ sp_after_for_colon = ignore sp_before_for_colon = ignore sp_extern_paren = remove sp_cmt_cpp_start = force +sp_cmt_cpp_region = force sp_cmt_cpp_doxygen = true sp_cmt_cpp_qttr = false sp_endif_cmt = force sp_after_new = force -sp_between_new_paren = ignore -sp_after_newop_paren = ignore -sp_inside_newop_paren = ignore +sp_between_new_paren = remove +sp_after_newop_paren = force +sp_inside_newop_paren = remove sp_inside_newop_paren_open = ignore sp_inside_newop_paren_close = ignore -sp_before_tr_emb_cmt = force -sp_num_before_tr_emb_cmt = 1 +sp_before_tr_cmt = force +sp_num_before_tr_cmt = 1 +sp_before_emb_cmt = force +sp_num_before_emb_cmt = 1 +sp_after_emb_cmt = force +sp_num_after_emb_cmt = 1 sp_annotation_paren = ignore sp_skip_vbrace_tokens = false sp_after_noexcept = ignore @@ -262,10 +279,12 @@ indent_namespace_level = 0 indent_namespace_limit = 0 indent_extern = false indent_class = true +indent_before_class_colon = 0 indent_class_colon = false indent_class_on_colon = false indent_constr_colon = false indent_ctor_init_leading = 2 +indent_ctor_init_following = 2 indent_ctor_init = 0 indent_else_if = false indent_var_def_blk = 0 @@ -285,14 +304,15 @@ indent_func_throw = 1 indent_macro_brace = true indent_member = 1 indent_member_single = false -indent_sing_line_comments = 0 +indent_single_line_comments_before = 0 +indent_single_line_comments_after = 0 indent_sparen_extra = 0 indent_relative_single_line_comments = true indent_switch_case = 4 +indent_case_brace = 0 indent_switch_break_with_case = false indent_switch_pp = true indent_case_shift = 0 -indent_case_brace = 0 indent_col1_comment = false indent_col1_multi_string_literal = false indent_label = 1 @@ -303,6 +323,7 @@ indent_paren_close = 1 indent_paren_after_func_def = false indent_paren_after_func_decl = false indent_paren_after_func_call = false +indent_comma_brace = false indent_comma_paren = false indent_bool_paren = false indent_semicolon_for_paren = false @@ -335,6 +356,7 @@ indent_off_after_return = false indent_off_after_return_new = false indent_single_after_return = false indent_ignore_asm_block = false +donot_indent_func_def_close_paren = false nl_collapse_empty_body = false nl_assign_leave_one_liners = true nl_class_leave_one_liners = false @@ -345,6 +367,7 @@ nl_func_leave_one_liners = true nl_cpp_lambda_leave_one_liners = false nl_if_leave_one_liners = false nl_while_leave_one_liners = false +nl_do_leave_one_liners = false nl_for_leave_one_liners = false nl_oc_msg_leave_one_liner = false nl_oc_mdef_brace = force @@ -473,6 +496,7 @@ nl_paren_dbrace_open = ignore nl_type_brace_init_lst = ignore nl_type_brace_init_lst_open = ignore nl_type_brace_init_lst_close = ignore +nl_before_brace_open = false nl_after_brace_open = true nl_after_brace_open_cmt = false nl_after_vbrace_open = true @@ -496,6 +520,7 @@ nl_before_synchronized = ignore nl_after_synchronized = ignore nl_before_do = ignore nl_after_do = ignore +nl_before_ignore_after_case = false nl_before_return = false nl_after_return = true nl_before_member = ignore @@ -513,8 +538,10 @@ nl_create_list_one_liner = false nl_split_if_one_liner = false nl_split_for_one_liner = false nl_split_while_one_liner = false +donot_add_nl_before_cpp_comment = false nl_max = 2 nl_max_blank_in_func = 0 +nl_inside_empty_func = 0 nl_before_func_body_proto = 0 nl_before_func_body_def = 0 nl_before_func_class_proto = 0 @@ -539,6 +566,7 @@ nl_before_c_comment = 2 nl_before_cpp_comment = 1 nl_after_multiline_comment = false nl_after_label_colon = false +nl_before_struct = 0 nl_after_struct = 0 nl_before_class = 0 nl_after_class = 0 @@ -572,6 +600,7 @@ pos_class_comma = trail pos_constr_comma = ignore pos_class_colon = trail pos_constr_colon = ignore +pos_shift = ignore code_width = 0 ls_for_split_full = true ls_func_split_full = true @@ -637,6 +666,7 @@ align_pp_define_together = false align_pp_define_span = 2 align_pp_define_gap = 1 align_left_shift = true +align_eigen_comma_init = false align_asm_colon = false align_oc_msg_colon_span = 16 align_oc_msg_colon_first = false @@ -644,8 +674,13 @@ align_oc_decl_colon = true align_oc_msg_colon_xcode_like = false cmt_width = 0 cmt_reflow_mode = 0 +cmt_reflow_fold_regex_file = "" +cmt_reflow_indent_to_paragraph_start = false cmt_convert_tab_to_spaces = true cmt_indent_multi = true +cmt_align_doxygen_javadoc_tags = true +cmt_sp_before_doxygen_javadoc_tags = 2 +cmt_trailing_single_line_c_to_cpp = false cmt_c_group = true cmt_c_nl_start = true cmt_c_nl_end = true @@ -680,6 +715,7 @@ mod_paren_on_return = remove mod_pawn_semicolon = true mod_full_paren_if_bool = true mod_remove_extra_semicolon = true +mod_remove_duplicate_include = true mod_add_long_function_closebrace_comment = 0 mod_add_long_namespace_closebrace_comment = 0 mod_add_long_class_closebrace_comment = 0 @@ -716,6 +752,7 @@ pp_indent_region = 0 pp_region_indent_code = false pp_indent_if = 0 pp_if_indent_code = false +pp_indent_in_guard = true pp_define_at_level = false pp_ignore_define_body = false pp_indent_case = true @@ -734,5 +771,7 @@ use_form_feed_no_more_as_whitespace_character = false warn_level_tabs_found_in_verbatim_string_literals = 2 debug_max_number_of_loops = 0 debug_line_number_to_protocol = 0 -# option(s) with 'not default' value: 332 +debug_timeout = 0 +debug_truncate = 0 +# option(s) with 'not default' value: 334 # From e02535bbea9e0cfc3ce6be969c34183eb6d27e8d Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 9 Oct 2021 16:48:19 -0400 Subject: [PATCH 087/245] Reformatted Doxygen comments using the new Uncrustify settings. --- .../src/shared/PiNumberFormatter.m | 4 +- .../CPTImagePlatformSpecific.m | 16 +- .../CPTPlatformSpecificCategories.m | 22 +- .../CPTPlatformSpecificFunctions.m | 8 +- .../CPTTextStylePlatformSpecific.m | 32 +- framework/Source/CPTAnimation.m | 20 +- framework/Source/CPTAnimationOperation.m | 12 +- framework/Source/CPTAnimationPeriod.m | 496 +++++++++--------- framework/Source/CPTAnnotationHostLayer.m | 26 +- framework/Source/CPTAxis.h | 40 +- framework/Source/CPTAxis.m | 38 +- framework/Source/CPTAxisLabel.m | 28 +- framework/Source/CPTAxisSet.m | 22 +- framework/Source/CPTAxisTitle.m | 4 +- framework/Source/CPTBarPlot.h | 66 +-- framework/Source/CPTBarPlot.m | 30 +- framework/Source/CPTBorderedLayer.m | 10 +- framework/Source/CPTCalendarFormatter.m | 12 +- framework/Source/CPTColor.m | 68 +-- framework/Source/CPTColorSpace.m | 8 +- framework/Source/CPTConstraints.m | 34 +- framework/Source/CPTDefinitions.h | 4 +- framework/Source/CPTFill.m | 26 +- framework/Source/CPTFunctionDataSource.m | 24 +- framework/Source/CPTGradient.m | 54 +- framework/Source/CPTGraph.m | 58 +- framework/Source/CPTGridLineGroup.m | 4 +- framework/Source/CPTGridLines.m | 4 +- framework/Source/CPTImage.m | 50 +- framework/Source/CPTLayer.m | 22 +- framework/Source/CPTLayerAnnotation.m | 8 +- framework/Source/CPTLegend.h | 74 +-- framework/Source/CPTLegend.m | 42 +- framework/Source/CPTLegendEntry.m | 4 +- framework/Source/CPTLimitBand.m | 16 +- framework/Source/CPTLineCap.m | 8 +- framework/Source/CPTLineStyle.m | 6 +- .../CPTMutableNumericData+TypeConversion.m | 4 +- framework/Source/CPTMutableNumericData.m | 8 +- .../Source/CPTNumericData+TypeConversion.m | 18 +- framework/Source/CPTNumericData.m | 174 +++--- framework/Source/CPTNumericDataType.m | 26 +- framework/Source/CPTPathExtensions.m | 10 +- framework/Source/CPTPieChart.h | 54 +- framework/Source/CPTPieChart.m | 36 +- framework/Source/CPTPlot.h | 80 +-- framework/Source/CPTPlot.m | 118 ++--- framework/Source/CPTPlotArea.h | 6 +- framework/Source/CPTPlotArea.m | 22 +- framework/Source/CPTPlotAreaFrame.m | 26 +- framework/Source/CPTPlotGroup.m | 2 +- framework/Source/CPTPlotRange.m | 64 +-- framework/Source/CPTPlotSpace.h | 64 +-- framework/Source/CPTPlotSpace.m | 124 ++--- framework/Source/CPTPlotSpaceAnnotation.m | 10 +- framework/Source/CPTPlotSymbol.m | 14 +- framework/Source/CPTRangePlot.h | 42 +- framework/Source/CPTRangePlot.m | 16 +- framework/Source/CPTResponder.h | 30 +- framework/Source/CPTScatterPlot.h | 40 +- framework/Source/CPTScatterPlot.m | 44 +- framework/Source/CPTTextLayer.m | 18 +- framework/Source/CPTTextStyle.m | 4 +- framework/Source/CPTTheme.m | 6 +- framework/Source/CPTTimeFormatter.m | 12 +- framework/Source/CPTTradingRangePlot.h | 86 +-- framework/Source/CPTTradingRangePlot.m | 16 +- framework/Source/CPTUtilities.m | 290 +++++----- framework/Source/CPTXYAxis.m | 4 +- framework/Source/CPTXYAxisSet.m | 4 +- framework/Source/CPTXYGraph.m | 14 +- framework/Source/CPTXYPlotSpace.m | 26 +- framework/Source/NSCoderExtensions.m | 50 +- framework/Source/NSNumberExtensions.m | 8 +- .../Source/_CPTAnimationTimingFunctions.m | 186 +++---- framework/Source/_CPTBorderLayer.m | 4 +- framework/Source/_CPTConstraintsFixed.m | 18 +- framework/Source/_CPTConstraintsRelative.m | 14 +- framework/Source/_CPTFillColor.m | 10 +- framework/Source/_CPTFillGradient.m | 10 +- framework/Source/_CPTFillImage.m | 10 +- framework/Source/_CPTMaskLayer.m | 4 +- 82 files changed, 1613 insertions(+), 1613 deletions(-) diff --git a/examples/CorePlotGallery/src/shared/PiNumberFormatter.m b/examples/CorePlotGallery/src/shared/PiNumberFormatter.m index 8b1f1fdfb..c0123d641 100644 --- a/examples/CorePlotGallery/src/shared/PiNumberFormatter.m +++ b/examples/CorePlotGallery/src/shared/PiNumberFormatter.m @@ -16,8 +16,8 @@ @implementation PiNumberFormatter /** * @brief Converts a number into multiples of π. Use the @link NSNumberFormatter::multiplier multiplier @endlink to control the maximum fraction denominator. - * @param coordinateValue The numeric value. - * @return The formatted string. + * @param coordinateValue The numeric value. + * @return The formatted string. **/ -(nullable NSString *)stringForObjectValue:(nullable id)coordinateValue { diff --git a/framework/PlatformSpecific/CPTImagePlatformSpecific.m b/framework/PlatformSpecific/CPTImagePlatformSpecific.m index 6e25f05f5..270a50216 100644 --- a/framework/PlatformSpecific/CPTImagePlatformSpecific.m +++ b/framework/PlatformSpecific/CPTImagePlatformSpecific.m @@ -13,8 +13,8 @@ @implementation CPTImage(CPTPlatformSpecificImageExtensions) /** @brief Initializes a CPTImage instance with the provided platform-native image. * - * @param anImage The platform-native image. - * @return A CPTImage instance initialized with the provided image. + * @param anImage The platform-native image. + * @return A CPTImage instance initialized with the provided image. **/ -(nonnull instancetype)initWithNativeImage:(nullable CPTNativeImage *)anImage { @@ -31,8 +31,8 @@ -(nonnull instancetype)initWithNativeImage:(nullable CPTNativeImage *)anImage * double-resolution image with the given name followed by @quote{@2x}. If the @quote{@2x} image * is not available, the named image file will be loaded. * - * @param path The file system path of the file. - * @return A CPTImage instance initialized with the contents of the PNG file. + * @param path The file system path of the file. + * @return A CPTImage instance initialized with the contents of the PNG file. **/ -(nonnull instancetype)initForPNGFile:(nonnull NSString *)path { @@ -85,8 +85,8 @@ @implementation CPTImage(CPTPlatformSpecificImageExtensions) /** @brief Initializes a CPTImage instance with the provided platform-native image. * - * @param anImage The platform-native image. - * @return A CPTImage instance initialized with the provided image. + * @param anImage The platform-native image. + * @return A CPTImage instance initialized with the provided image. **/ -(nonnull instancetype)initWithNativeImage:(nullable CPTNativeImage *)anImage { @@ -106,8 +106,8 @@ -(nonnull instancetype)initWithNativeImage:(nullable CPTNativeImage *)anImage * double-resolution image with the given name followed by @quote{@2x}. If the @quote{@2x} image * is not available, the named image file will be loaded. * - * @param path The file system path of the file. - * @return A CPTImage instance initialized with the contents of the PNG file. + * @param path The file system path of the file. + * @return A CPTImage instance initialized with the contents of the PNG file. **/ -(nonnull instancetype)initForPNGFile:(nonnull NSString *)path { diff --git a/framework/PlatformSpecific/CPTPlatformSpecificCategories.m b/framework/PlatformSpecific/CPTPlatformSpecificCategories.m index 0e02d8d6b..84770246a 100644 --- a/framework/PlatformSpecific/CPTPlatformSpecificCategories.m +++ b/framework/PlatformSpecific/CPTPlatformSpecificCategories.m @@ -81,7 +81,7 @@ -(nonnull CPTNativeImage *)imageOfLayer @implementation NSAttributedString(CPTPlatformSpecificAttributedStringExtensions) /** @brief Draws the styled text into the given graphics context. - * @param rect The bounding rectangle in which to draw the text. + * @param rect The bounding rectangle in which to draw the text. * @param context The graphics context to draw into. **/ -(void)drawInRect:(CGRect)rect inContext:(nonnull CGContextRef)context @@ -166,8 +166,8 @@ -(nullable CPTNativeImage *)imageOfLayer @implementation NSNumber(CPTPlatformSpecificNumberExtensions) /** @brief Returns a Boolean value that indicates whether the receiver is less than another given number. - * @param other The other number to compare to the receiver. - * @return @YES if the receiver is less than other, otherwise @NO. + * @param other The other number to compare to the receiver. + * @return @YES if the receiver is less than other, otherwise @NO. **/ -(BOOL)isLessThan:(nonnull NSNumber *)other { @@ -175,8 +175,8 @@ -(BOOL)isLessThan:(nonnull NSNumber *)other } /** @brief Returns a Boolean value that indicates whether the receiver is less than or equal to another given number. - * @param other The other number to compare to the receiver. - * @return @YES if the receiver is less than or equal to other, otherwise @NO. + * @param other The other number to compare to the receiver. + * @return @YES if the receiver is less than or equal to other, otherwise @NO. **/ -(BOOL)isLessThanOrEqualTo:(nonnull NSNumber *)other { @@ -184,8 +184,8 @@ -(BOOL)isLessThanOrEqualTo:(nonnull NSNumber *)other } /** @brief Returns a Boolean value that indicates whether the receiver is greater than another given number. - * @param other The other number to compare to the receiver. - * @return @YES if the receiver is greater than other, otherwise @NO. + * @param other The other number to compare to the receiver. + * @return @YES if the receiver is greater than other, otherwise @NO. **/ -(BOOL)isGreaterThan:(nonnull NSNumber *)other { @@ -193,8 +193,8 @@ -(BOOL)isGreaterThan:(nonnull NSNumber *)other } /** @brief Returns a Boolean value that indicates whether the receiver is greater than or equal to another given number. - * @param other The other number to compare to the receiver. - * @return @YES if the receiver is greater than or equal to other, otherwise @NO. + * @param other The other number to compare to the receiver. + * @return @YES if the receiver is greater than or equal to other, otherwise @NO. **/ -(BOOL)isGreaterThanOrEqualTo:(nonnull NSNumber *)other { @@ -208,9 +208,9 @@ -(BOOL)isGreaterThanOrEqualTo:(nonnull NSNumber *)other @implementation NSAttributedString(CPTPlatformSpecificAttributedStringExtensions) /** @brief Draws the styled text into the given graphics context. - * @param rect The bounding rectangle in which to draw the text. + * @param rect The bounding rectangle in which to draw the text. * @param context The graphics context to draw into. - * @since Available on iOS 6.0 and later. Does nothing on earlier versions. + * @since Available on iOS 6.0 and later. Does nothing on earlier versions. **/ -(void)drawInRect:(CGRect)rect inContext:(nonnull CGContextRef)context { diff --git a/framework/PlatformSpecific/CPTPlatformSpecificFunctions.m b/framework/PlatformSpecific/CPTPlatformSpecificFunctions.m index a1c57fd00..121f5261f 100644 --- a/framework/PlatformSpecific/CPTPlatformSpecificFunctions.m +++ b/framework/PlatformSpecific/CPTPlatformSpecificFunctions.m @@ -77,8 +77,8 @@ void CPTPopCGContext(void) * * The caller must release the returned @ref CGColorRef. Pattern colors are not supported. * - * @param nsColor The NSColor. - * @return The @ref CGColorRef. + * @param nsColor The NSColor. + * @return The @ref CGColorRef. **/ __nonnull CGColorRef CPTCreateCGColorFromNSColor(NSColor *__nonnull nsColor) { @@ -93,8 +93,8 @@ __nonnull CGColorRef CPTCreateCGColorFromNSColor(NSColor *__nonnull nsColor) * * Pattern colors are not supported. * - * @param nsColor The NSColor. - * @return The CPTRGBAColor. + * @param nsColor The NSColor. + * @return The CPTRGBAColor. **/ CPTRGBAColor CPTRGBAColorFromNSColor(NSColor *__nonnull nsColor) { diff --git a/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m b/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m index 3f1b47cbc..80d0303f6 100644 --- a/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m +++ b/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m @@ -34,8 +34,8 @@ @implementation CPTTextStyle(CPTPlatformSpecificTextStyleExtensions) * * Properties associated with missing keys will be inialized to their default values. * - * @param attributes A dictionary of standard text attributes. - * @return A new CPTTextStyle instance. + * @param attributes A dictionary of standard text attributes. + * @return A new CPTTextStyle instance. **/ +(nonnull instancetype)textStyleWithAttributes:(nullable CPTDictionary *)attributes { @@ -145,8 +145,8 @@ @implementation CPTMutableTextStyle(CPTPlatformSpecificMutableTextStyleExtension * * Properties associated with missing keys will be inialized to their default values. * - * @param attributes A dictionary of standard text attributes. - * @return A new CPTMutableTextStyle instance. + * @param attributes A dictionary of standard text attributes. + * @return A new CPTMutableTextStyle instance. **/ +(nonnull instancetype)textStyleWithAttributes:(nullable CPTDictionary *)attributes { @@ -206,8 +206,8 @@ @implementation NSString(CPTTextStyleExtensions) #pragma mark Layout /** @brief Determines the size of text drawn with the given style. - * @param style The text style. - * @return The size of the text when drawn with the given style. + * @param style The text style. + * @return The size of the text when drawn with the given style. **/ -(CGSize)sizeWithTextStyle:(nullable CPTTextStyle *)style { @@ -237,8 +237,8 @@ -(CGSize)sizeWithTextStyle:(nullable CPTTextStyle *)style #pragma mark Drawing /** @brief Draws the text into the given graphics context using the given style. - * @param rect The bounding rectangle in which to draw the text. - * @param style The text style. + * @param rect The bounding rectangle in which to draw the text. + * @param style The text style. * @param context The graphics context to draw into. **/ -(void)drawInRect:(CGRect)rect withTextStyle:(nullable CPTTextStyle *)style inContext:(nonnull CGContextRef)context @@ -314,8 +314,8 @@ @implementation CPTTextStyle(CPTPlatformSpecificTextStyleExtensions) * * Properties associated with missing keys will be inialized to their default values. * - * @param attributes A dictionary of standard text attributes. - * @return A new CPTTextStyle instance. + * @param attributes A dictionary of standard text attributes. + * @return A new CPTTextStyle instance. **/ +(nonnull instancetype)textStyleWithAttributes:(nullable CPTDictionary *)attributes { @@ -408,8 +408,8 @@ @implementation CPTMutableTextStyle(CPTPlatformSpecificMutableTextStyleExtension * * Properties associated with missing keys will be inialized to their default values. * - * @param attributes A dictionary of standard text attributes. - * @return A new CPTMutableTextStyle instance. + * @param attributes A dictionary of standard text attributes. + * @return A new CPTMutableTextStyle instance. **/ +(nonnull instancetype)textStyleWithAttributes:(nullable CPTDictionary *)attributes { @@ -452,8 +452,8 @@ @implementation NSString(CPTTextStyleExtensions) #pragma mark Layout /** @brief Determines the size of text drawn with the given style. - * @param style The text style. - * @return The size of the text when drawn with the given style. + * @param style The text style. + * @return The size of the text when drawn with the given style. **/ -(CGSize)sizeWithTextStyle:(nullable CPTTextStyle *)style { @@ -474,8 +474,8 @@ -(CGSize)sizeWithTextStyle:(nullable CPTTextStyle *)style #pragma mark Drawing /** @brief Draws the text into the given graphics context using the given style. - * @param rect The bounding rectangle in which to draw the text. - * @param style The text style. + * @param rect The bounding rectangle in which to draw the text. + * @param style The text style. * @param context The graphics context to draw into. **/ -(void)drawInRect:(CGRect)rect withTextStyle:(nullable CPTTextStyle *)style inContext:(nonnull CGContextRef)context diff --git a/framework/Source/CPTAnimation.m b/framework/Source/CPTAnimation.m index 00b051d73..46a88cd8b 100644 --- a/framework/Source/CPTAnimation.m +++ b/framework/Source/CPTAnimation.m @@ -156,12 +156,12 @@ +(nonnull instancetype)sharedInstance #pragma mark - Property Animation /** @brief Creates an animation operation with the given properties and adds it to the animation queue. - * @param object The object to animate. - * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. - * @param period The animation period. - * @param animationCurve The animation curve used to animate the new operation. - * @param delegate The animation delegate (can be @nil). - * @return The queued animation operation. + * @param object The object to animate. + * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. + * @param period The animation period. + * @param animationCurve The animation curve used to animate the new operation. + * @param delegate The animation delegate (can be @nil). + * @return The queued animation operation. **/ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull NSString *)property period:(nonnull CPTAnimationPeriod *)period animationCurve:(CPTAnimationCurve)animationCurve delegate:(nullable id)delegate { @@ -192,8 +192,8 @@ +(nonnull SEL)setterFromProperty:(nonnull NSString *)property #pragma mark - Animation Management /** @brief Adds an animation operation to the animation queue. - * @param animationOperation The animation operation to add. - * @return The queued animation operation. + * @param animationOperation The animation operation to add. + * @return The queued animation operation. **/ -(CPTAnimationOperation *)addAnimationOperation:(nonnull CPTAnimationOperation *)animationOperation { @@ -238,8 +238,8 @@ -(void)removeAllAnimationOperations #pragma mark - Retrieving Animation Operations /** @brief Gets the animation operation with the given identifier from the animation operation array. - * @param identifier An animation operation identifier. - * @return The animation operation with the given identifier or @nil if it was not found. + * @param identifier An animation operation identifier. + * @return The animation operation with the given identifier or @nil if it was not found. **/ -(nullable CPTAnimationOperation *)operationWithIdentifier:(nullable id)identifier { diff --git a/framework/Source/CPTAnimationOperation.m b/framework/Source/CPTAnimationOperation.m index e7047abc5..e304bec76 100644 --- a/framework/Source/CPTAnimationOperation.m +++ b/framework/Source/CPTAnimationOperation.m @@ -67,13 +67,13 @@ @implementation CPTAnimationOperation * - @ref identifier = @nil * - @ref userInfo = @nil * - * @param animationPeriod The animation period. - * @param curve The animation curve. - * @param object The object to update for each animation frame. - * @param getter The @ref boundObject getter method for the property to update for each animation frame. - * @param setter The @ref boundObject setter method for the property to update for each animation frame. + * @param animationPeriod The animation period. + * @param curve The animation curve. + * @param object The object to update for each animation frame. + * @param getter The @ref boundObject getter method for the property to update for each animation frame. + * @param setter The @ref boundObject setter method for the property to update for each animation frame. * - * @return The initialized object. + * @return The initialized object. **/ -(nonnull instancetype)initWithAnimationPeriod:(nonnull CPTAnimationPeriod *)animationPeriod animationCurve:(CPTAnimationCurve)curve object:(nonnull id)object getter:(nonnull SEL)getter setter:(nonnull SEL)setter { diff --git a/framework/Source/CPTAnimationPeriod.m b/framework/Source/CPTAnimationPeriod.m index 3d781b79c..6dcb72350 100644 --- a/framework/Source/CPTAnimationPeriod.m +++ b/framework/Source/CPTAnimationPeriod.m @@ -80,12 +80,12 @@ @implementation CPTAnimationPeriod /** @internal * @brief Creates and returns a new CPTAnimationPeriod instance initialized with the provided start and end values and duration. - * @param aStartValue The starting value. If @nil, the animation starts from the current value of the animated property. - * @param anEndValue The ending value. - * @param class The Objective-C class of the animated object. If @Nil, the value is a scalar or struct wrapped in an NSValue object. - * @param aDuration The animation duration in seconds. - * @param aDelay The starting delay in seconds. - * @return The initialized object. + * @param aStartValue The starting value. If @nil, the animation starts from the current value of the animated property. + * @param anEndValue The ending value. + * @param class The Objective-C class of the animated object. If @Nil, the value is a scalar or struct wrapped in an NSValue object. + * @param aDuration The animation duration in seconds. + * @param aDelay The starting delay in seconds. + * @return The initialized object. **/ +(instancetype)periodWithStartValue:(NSValue *)aStartValue endValue:(NSValue *)anEndValue ofClass:(Class)class duration:(CGFloat)aDuration withDelay:(CGFloat)aDelay { @@ -96,11 +96,11 @@ +(instancetype)periodWithStartValue:(NSValue *)aStartValue endValue:(NSValue *)a /** * @brief Creates and returns a new CPTAnimationPeriod instance initialized with the provided start and end values and duration. - * @param aStart The starting value. If @NAN, the animation starts from the current value of the animated property. - * @param anEnd The ending value. - * @param aDuration The animation duration in seconds. - * @param aDelay The starting delay in seconds. - * @return The initialized object. + * @param aStart The starting value. If @NAN, the animation starts from the current value of the animated property. + * @param anEnd The ending value. + * @param aDuration The animation duration in seconds. + * @param aDelay The starting delay in seconds. + * @return The initialized object. **/ +(nonnull instancetype)periodWithStart:(CGFloat)aStart end:(CGFloat)anEnd duration:(CGFloat)aDuration withDelay:(CGFloat)aDelay { @@ -115,11 +115,11 @@ +(nonnull instancetype)periodWithStart:(CGFloat)aStart end:(CGFloat)anEnd durati /** * @brief Creates and returns a new CPTAnimationPeriod instance initialized with the provided start and end points and duration. - * @param aStartPoint The starting point. If either coordinate is @NAN, the animation starts from the current value of the animated property. - * @param anEndPoint The ending point. - * @param aDuration The animation duration in seconds. - * @param aDelay The starting delay in seconds. - * @return The initialized object. + * @param aStartPoint The starting point. If either coordinate is @NAN, the animation starts from the current value of the animated property. + * @param anEndPoint The ending point. + * @param aDuration The animation duration in seconds. + * @param aDelay The starting delay in seconds. + * @return The initialized object. **/ +(nonnull instancetype)periodWithStartPoint:(CGPoint)aStartPoint endPoint:(CGPoint)anEndPoint duration:(CGFloat)aDuration withDelay:(CGFloat)aDelay { @@ -138,11 +138,11 @@ +(nonnull instancetype)periodWithStartPoint:(CGPoint)aStartPoint endPoint:(CGPoi /** * @brief Creates and returns a new CPTAnimationPeriod instance initialized with the provided start and end sizes and duration. - * @param aStartSize The starting size. If either coordinate is @NAN, the animation starts from the current value of the animated property. - * @param anEndSize The ending size. - * @param aDuration The animation duration in seconds. - * @param aDelay The starting delay in seconds. - * @return The initialized object. + * @param aStartSize The starting size. If either coordinate is @NAN, the animation starts from the current value of the animated property. + * @param anEndSize The ending size. + * @param aDuration The animation duration in seconds. + * @param aDelay The starting delay in seconds. + * @return The initialized object. **/ +(nonnull instancetype)periodWithStartSize:(CGSize)aStartSize endSize:(CGSize)anEndSize duration:(CGFloat)aDuration withDelay:(CGFloat)aDelay { @@ -161,11 +161,11 @@ +(nonnull instancetype)periodWithStartSize:(CGSize)aStartSize endSize:(CGSize)an /** * @brief Creates and returns a new CPTAnimationPeriod instance initialized with the provided start and end rectangles and duration. - * @param aStartRect The starting rectangle. If @ref CGRectNull or any field is @NAN, the animation starts from the current value of the animated property. - * @param anEndRect The ending rectangle. - * @param aDuration The animation duration in seconds. - * @param aDelay The starting delay in seconds. - * @return The initialized object. + * @param aStartRect The starting rectangle. If @ref CGRectNull or any field is @NAN, the animation starts from the current value of the animated property. + * @param anEndRect The ending rectangle. + * @param aDuration The animation duration in seconds. + * @param aDelay The starting delay in seconds. + * @return The initialized object. **/ +(nonnull instancetype)periodWithStartRect:(CGRect)aStartRect endRect:(CGRect)anEndRect duration:(CGFloat)aDuration withDelay:(CGFloat)aDelay { @@ -184,11 +184,11 @@ +(nonnull instancetype)periodWithStartRect:(CGRect)aStartRect endRect:(CGRect)an /** * @brief Creates and returns a new CPTAnimationPeriod instance initialized with the provided start and end values and duration. - * @param aStartDecimal The starting value. If @NAN, the animation starts from the current value of the animated property. - * @param anEndDecimal The ending value. - * @param aDuration The animation duration in seconds. - * @param aDelay The starting delay in seconds. - * @return The initialized object. + * @param aStartDecimal The starting value. If @NAN, the animation starts from the current value of the animated property. + * @param anEndDecimal The ending value. + * @param aDuration The animation duration in seconds. + * @param aDelay The starting delay in seconds. + * @return The initialized object. **/ +(nonnull instancetype)periodWithStartDecimal:(NSDecimal)aStartDecimal endDecimal:(NSDecimal)anEndDecimal duration:(CGFloat)aDuration withDelay:(CGFloat)aDelay { @@ -203,11 +203,11 @@ +(nonnull instancetype)periodWithStartDecimal:(NSDecimal)aStartDecimal endDecima /** * @brief Creates and returns a new CPTAnimationPeriod instance initialized with the provided start and end values and duration. - * @param aStartNumber The starting value. If @NAN or @nil, the animation starts from the current value of the animated property. - * @param anEndNumber The ending value. - * @param aDuration The animation duration in seconds. - * @param aDelay The starting delay in seconds. - * @return The initialized object. + * @param aStartNumber The starting value. If @NAN or @nil, the animation starts from the current value of the animated property. + * @param anEndNumber The ending value. + * @param aDuration The animation duration in seconds. + * @param aDelay The starting delay in seconds. + * @return The initialized object. **/ +(nonnull instancetype)periodWithStartNumber:(nullable NSNumber *)aStartNumber endNumber:(nonnull NSNumber *)anEndNumber duration:(CGFloat)aDuration withDelay:(CGFloat)aDelay { @@ -220,11 +220,11 @@ +(nonnull instancetype)periodWithStartNumber:(nullable NSNumber *)aStartNumber e /** * @brief Creates and returns a new CPTAnimationPeriod instance initialized with the provided start and end plot ranges and duration. - * @param aStartPlotRange The starting plot range. If @nil or any component of the range is @NAN, the animation starts from the current value of the animated property. - * @param anEndPlotRange The ending plot range. - * @param aDuration The animation duration in seconds. - * @param aDelay The starting delay in seconds. - * @return The initialized object. + * @param aStartPlotRange The starting plot range. If @nil or any component of the range is @NAN, the animation starts from the current value of the animated property. + * @param anEndPlotRange The ending plot range. + * @param aDuration The animation duration in seconds. + * @param aDelay The starting delay in seconds. + * @return The initialized object. **/ +(nonnull instancetype)periodWithStartPlotRange:(nonnull CPTPlotRange *)aStartPlotRange endPlotRange:(nonnull CPTPlotRange *)anEndPlotRange duration:(CGFloat)aDuration withDelay:(CGFloat)aDelay { @@ -254,12 +254,12 @@ +(nonnull instancetype)periodWithStartPlotRange:(nonnull CPTPlotRange *)aStartPl * - @ref delay = @par{aDelay} * - @ref startOffset = The animation time clock offset when this method is called. * - * @param aStartValue The starting value. If @nil, the animation starts from the current value of the animated property. - * @param anEndValue The ending value. - * @param class The Objective-C class of the animated object. If @Nil, the value is a scalar or struct wrapped in an NSValue object. - * @param aDuration The animation duration in seconds. - * @param aDelay The starting delay in seconds. - * @return The initialized object. + * @param aStartValue The starting value. If @nil, the animation starts from the current value of the animated property. + * @param anEndValue The ending value. + * @param class The Objective-C class of the animated object. If @Nil, the value is a scalar or struct wrapped in an NSValue object. + * @param aDuration The animation duration in seconds. + * @param aDelay The starting delay in seconds. + * @return The initialized object. **/ -(instancetype)initWithStartValue:(NSValue *)aStartValue endValue:(NSValue *)anEndValue ofClass:(Class)class duration:(CGFloat)aDuration withDelay:(CGFloat)aDelay { @@ -279,11 +279,11 @@ -(instancetype)initWithStartValue:(NSValue *)aStartValue endValue:(NSValue *)anE /** * @brief Initializes a newly allocated CPTAnimationPeriod object with the provided start and end values and duration. - * @param aStart The starting value. If @NAN, the animation starts from the current value of the animated property. - * @param anEnd The ending value. - * @param aDuration The animation duration in seconds. - * @param aDelay The starting delay in seconds. - * @return The initialized object. + * @param aStart The starting value. If @NAN, the animation starts from the current value of the animated property. + * @param anEnd The ending value. + * @param aDuration The animation duration in seconds. + * @param aDelay The starting delay in seconds. + * @return The initialized object. **/ -(nonnull instancetype)initWithStart:(CGFloat)aStart end:(CGFloat)anEnd duration:(CGFloat)aDuration withDelay:(CGFloat)aDelay { @@ -300,11 +300,11 @@ -(nonnull instancetype)initWithStart:(CGFloat)aStart end:(CGFloat)anEnd duration /** * @brief Initializes a newly allocated CPTAnimationPeriod object with the provided start and end points and duration. - * @param aStartPoint The starting point. If either coordinate is @NAN, the animation starts from the current value of the animated property. - * @param anEndPoint The ending point. - * @param aDuration The animation duration in seconds. - * @param aDelay The starting delay in seconds. - * @return The initialized object. + * @param aStartPoint The starting point. If either coordinate is @NAN, the animation starts from the current value of the animated property. + * @param anEndPoint The ending point. + * @param aDuration The animation duration in seconds. + * @param aDelay The starting delay in seconds. + * @return The initialized object. **/ -(nonnull instancetype)initWithStartPoint:(CGPoint)aStartPoint endPoint:(CGPoint)anEndPoint duration:(CGFloat)aDuration withDelay:(CGFloat)aDelay { @@ -325,11 +325,11 @@ -(nonnull instancetype)initWithStartPoint:(CGPoint)aStartPoint endPoint:(CGPoint /** * @brief Initializes a newly allocated CPTAnimationPeriod object with the provided start and end sizes and duration. - * @param aStartSize The starting size. If either coordinate is @NAN, the animation starts from the current value of the animated property. - * @param anEndSize The ending size. - * @param aDuration The animation duration in seconds. - * @param aDelay The starting delay in seconds. - * @return The initialized object. + * @param aStartSize The starting size. If either coordinate is @NAN, the animation starts from the current value of the animated property. + * @param anEndSize The ending size. + * @param aDuration The animation duration in seconds. + * @param aDelay The starting delay in seconds. + * @return The initialized object. **/ -(nonnull instancetype)initWithStartSize:(CGSize)aStartSize endSize:(CGSize)anEndSize duration:(CGFloat)aDuration withDelay:(CGFloat)aDelay { @@ -350,11 +350,11 @@ -(nonnull instancetype)initWithStartSize:(CGSize)aStartSize endSize:(CGSize)anEn /** * @brief Initializes a newly allocated CPTAnimationPeriod object with the provided start and end rectangles and duration. - * @param aStartRect The starting rectangle. If @ref CGRectNull or any field is @NAN, the animation starts from the current value of the animated property. - * @param anEndRect The ending rectangle. - * @param aDuration The animation duration in seconds. - * @param aDelay The starting delay in seconds. - * @return The initialized object. + * @param aStartRect The starting rectangle. If @ref CGRectNull or any field is @NAN, the animation starts from the current value of the animated property. + * @param anEndRect The ending rectangle. + * @param aDuration The animation duration in seconds. + * @param aDelay The starting delay in seconds. + * @return The initialized object. **/ -(nonnull instancetype)initWithStartRect:(CGRect)aStartRect endRect:(CGRect)anEndRect duration:(CGFloat)aDuration withDelay:(CGFloat)aDelay { @@ -375,11 +375,11 @@ -(nonnull instancetype)initWithStartRect:(CGRect)aStartRect endRect:(CGRect)anEn /** * @brief Initializes a newly allocated CPTAnimationPeriod object with the provided start and end values and duration. - * @param aStartDecimal The starting value. If @NAN, the animation starts from the current value of the animated property. - * @param anEndDecimal The ending value. - * @param aDuration The animation duration in seconds. - * @param aDelay The starting delay in seconds. - * @return The initialized object. + * @param aStartDecimal The starting value. If @NAN, the animation starts from the current value of the animated property. + * @param anEndDecimal The ending value. + * @param aDuration The animation duration in seconds. + * @param aDelay The starting delay in seconds. + * @return The initialized object. **/ -(nonnull instancetype)initWithStartDecimal:(NSDecimal)aStartDecimal endDecimal:(NSDecimal)anEndDecimal duration:(CGFloat)aDuration withDelay:(CGFloat)aDelay { @@ -396,11 +396,11 @@ -(nonnull instancetype)initWithStartDecimal:(NSDecimal)aStartDecimal endDecimal: /** * @brief Initializes a newly allocated CPTAnimationPeriod object with the provided start and end values and duration. - * @param aStartNumber The starting value. If @NAN or @nil, the animation starts from the current value of the animated property. - * @param anEndNumber The ending value. - * @param aDuration The animation duration in seconds. - * @param aDelay The starting delay in seconds. - * @return The initialized object. + * @param aStartNumber The starting value. If @NAN or @nil, the animation starts from the current value of the animated property. + * @param anEndNumber The ending value. + * @param aDuration The animation duration in seconds. + * @param aDelay The starting delay in seconds. + * @return The initialized object. **/ -(nonnull instancetype)initWithStartNumber:(nullable NSNumber *)aStartNumber endNumber:(nonnull NSNumber *)anEndNumber duration:(CGFloat)aDuration withDelay:(CGFloat)aDelay { @@ -415,11 +415,11 @@ -(nonnull instancetype)initWithStartNumber:(nullable NSNumber *)aStartNumber end /** * @brief Initializes a newly allocated CPTAnimationPeriod object with the provided start and end plot ranges and duration. - * @param aStartPlotRange The starting plot range. If @nil or any component of the range is @NAN, the animation starts from the current value of the animated property. - * @param anEndPlotRange The ending plot range. - * @param aDuration The animation duration in seconds. - * @param aDelay The starting delay in seconds. - * @return The initialized object. + * @param aStartPlotRange The starting plot range. If @nil or any component of the range is @NAN, the animation starts from the current value of the animated property. + * @param anEndPlotRange The ending plot range. + * @param aDuration The animation duration in seconds. + * @param aDelay The starting delay in seconds. + * @return The initialized object. **/ -(nonnull instancetype)initWithStartPlotRange:(nonnull CPTPlotRange *)aStartPlotRange endPlotRange:(nonnull CPTPlotRange *)anEndPlotRange duration:(CGFloat)aDuration withDelay:(CGFloat)aDelay { @@ -469,8 +469,8 @@ -(void)setStartValueFromObject:(nonnull id __unused)boundObject propertyGetter:( * A @par{progress} value of zero (@num{0}) returns the @link CPTAnimationPeriod::startValue startValue @endlink and * a value of one (@num{1}) returns the @link CPTAnimationPeriod::endValue endValue @endlink. * - * @param progress The fraction of the animation progress. - * @return The computed value. + * @param progress The fraction of the animation progress. + * @return The computed value. **/ -(nonnull NSValue *)tweenedValueForProgress:(CGFloat __unused)progress { @@ -481,9 +481,9 @@ -(nonnull NSValue *)tweenedValueForProgress:(CGFloat __unused)progress /** * @brief Determines if the current value of the bound property is between the start and end value. - * @param boundObject The object to update for each animation frame. - * @param boundGetter The getter method for the property to update. - * @return @YES if the current value of the bound property is between the start and end value. + * @param boundObject The object to update for each animation frame. + * @param boundGetter The getter method for the property to update. + * @return @YES if the current value of the bound property is between the start and end value. **/ -(BOOL)canStartWithValueFromObject:(nonnull id __unused)boundObject propertyGetter:(nonnull SEL __unused)boundGetter { @@ -513,15 +513,15 @@ @implementation CPTAnimation(CPTAnimationPeriodAdditions) // CGFloat /** @brief Creates an animation operation with the given properties and adds it to the animation queue. - * @param object The object to animate. - * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. - * @param from The starting value for the animation. If @NAN, the animation starts from the current value of the animated property. - * @param to The ending value for the animation. - * @param duration The duration of the animation. - * @param delay The starting delay of the animation in seconds. - * @param animationCurve The animation curve used to animate the new operation. - * @param delegate The animation delegate (can be @nil). - * @return The queued animation operation. + * @param object The object to animate. + * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. + * @param from The starting value for the animation. If @NAN, the animation starts from the current value of the animated property. + * @param to The ending value for the animation. + * @param duration The duration of the animation. + * @param delay The starting delay of the animation in seconds. + * @param animationCurve The animation curve used to animate the new operation. + * @param delegate The animation delegate (can be @nil). + * @return The queued animation operation. **/ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull NSString *)property from:(CGFloat)from to:(CGFloat)to duration:(CGFloat)duration withDelay:(CGFloat)delay animationCurve:(CPTAnimationCurve)animationCurve delegate:(nullable id)delegate { @@ -539,14 +539,14 @@ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull N } /** @brief Creates an animation operation with the given properties and adds it to the animation queue. - * @param object The object to animate. - * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. - * @param from The starting value for the animation. If @NAN, the animation starts from the current value of the animated property. - * @param to The ending value for the animation. - * @param duration The duration of the animation. - * @param animationCurve The animation curve used to animate the new operation. - * @param delegate The animation delegate (can be @nil). - * @return The queued animation operation. + * @param object The object to animate. + * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. + * @param from The starting value for the animation. If @NAN, the animation starts from the current value of the animated property. + * @param to The ending value for the animation. + * @param duration The duration of the animation. + * @param animationCurve The animation curve used to animate the new operation. + * @param delegate The animation delegate (can be @nil). + * @return The queued animation operation. **/ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull NSString *)property from:(CGFloat)from to:(CGFloat)to duration:(CGFloat)duration animationCurve:(CPTAnimationCurve)animationCurve delegate:(nullable id)delegate { @@ -564,12 +564,12 @@ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull N } /** @brief Creates an animation operation with the given properties and adds it to the animation queue. - * @param object The object to animate. - * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. - * @param from The starting value for the animation. If @NAN, the animation starts from the current value of the animated property. - * @param to The ending value for the animation. - * @param duration The duration of the animation. - * @return The queued animation operation. + * @param object The object to animate. + * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. + * @param from The starting value for the animation. If @NAN, the animation starts from the current value of the animated property. + * @param to The ending value for the animation. + * @param duration The duration of the animation. + * @return The queued animation operation. **/ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull NSString *)property from:(CGFloat)from to:(CGFloat)to duration:(CGFloat)duration { @@ -588,15 +588,15 @@ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull N // CGPoint /** @brief Creates an animation operation with the given properties and adds it to the animation queue. - * @param object The object to animate. - * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. - * @param from The starting point for the animation. If either coordinate is @NAN, the animation starts from the current value of the animated property. - * @param to The ending point for the animation. - * @param duration The duration of the animation. - * @param delay The starting delay of the animation in seconds. - * @param animationCurve The animation curve used to animate the new operation. - * @param delegate The animation delegate (can be @nil). - * @return The queued animation operation. + * @param object The object to animate. + * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. + * @param from The starting point for the animation. If either coordinate is @NAN, the animation starts from the current value of the animated property. + * @param to The ending point for the animation. + * @param duration The duration of the animation. + * @param delay The starting delay of the animation in seconds. + * @param animationCurve The animation curve used to animate the new operation. + * @param delegate The animation delegate (can be @nil). + * @return The queued animation operation. **/ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull NSString *)property fromPoint:(CGPoint)from toPoint:(CGPoint)to duration:(CGFloat)duration withDelay:(CGFloat)delay animationCurve:(CPTAnimationCurve)animationCurve delegate:(nullable id)delegate { @@ -614,14 +614,14 @@ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull N } /** @brief Creates an animation operation with the given properties and adds it to the animation queue. - * @param object The object to animate. - * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. - * @param from The starting point for the animation. If either coordinate is @NAN, the animation starts from the current value of the animated property. - * @param to The ending point for the animation. - * @param duration The duration of the animation. - * @param animationCurve The animation curve used to animate the new operation. - * @param delegate The animation delegate (can be @nil). - * @return The queued animation operation. + * @param object The object to animate. + * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. + * @param from The starting point for the animation. If either coordinate is @NAN, the animation starts from the current value of the animated property. + * @param to The ending point for the animation. + * @param duration The duration of the animation. + * @param animationCurve The animation curve used to animate the new operation. + * @param delegate The animation delegate (can be @nil). + * @return The queued animation operation. **/ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull NSString *)property fromPoint:(CGPoint)from toPoint:(CGPoint)to duration:(CGFloat)duration animationCurve:(CPTAnimationCurve)animationCurve delegate:(nullable id)delegate { @@ -639,12 +639,12 @@ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull N } /** @brief Creates an animation operation with the given properties and adds it to the animation queue. - * @param object The object to animate. - * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. - * @param from The starting point for the animation. If either coordinate is @NAN, the animation starts from the current value of the animated property. - * @param to The ending point for the animation. - * @param duration The duration of the animation. - * @return The queued animation operation. + * @param object The object to animate. + * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. + * @param from The starting point for the animation. If either coordinate is @NAN, the animation starts from the current value of the animated property. + * @param to The ending point for the animation. + * @param duration The duration of the animation. + * @return The queued animation operation. **/ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull NSString *)property fromPoint:(CGPoint)from toPoint:(CGPoint)to duration:(CGFloat)duration { @@ -663,15 +663,15 @@ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull N // CGSize /** @brief Creates an animation operation with the given properties and adds it to the animation queue. - * @param object The object to animate. - * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. - * @param from The starting size for the animation. If either coordinate is @NAN, the animation starts from the current value of the animated property. - * @param to The ending size for the animation. - * @param duration The duration of the animation. - * @param delay The starting delay of the animation in seconds. - * @param animationCurve The animation curve used to animate the new operation. - * @param delegate The animation delegate (can be @nil). - * @return The queued animation operation. + * @param object The object to animate. + * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. + * @param from The starting size for the animation. If either coordinate is @NAN, the animation starts from the current value of the animated property. + * @param to The ending size for the animation. + * @param duration The duration of the animation. + * @param delay The starting delay of the animation in seconds. + * @param animationCurve The animation curve used to animate the new operation. + * @param delegate The animation delegate (can be @nil). + * @return The queued animation operation. **/ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull NSString *)property fromSize:(CGSize)from toSize:(CGSize)to duration:(CGFloat)duration withDelay:(CGFloat)delay animationCurve:(CPTAnimationCurve)animationCurve delegate:(nullable id)delegate { @@ -689,14 +689,14 @@ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull N } /** @brief Creates an animation operation with the given properties and adds it to the animation queue. - * @param object The object to animate. - * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. - * @param from The starting size for the animation. If either coordinate is @NAN, the animation starts from the current value of the animated property. - * @param to The ending size for the animation. - * @param duration The duration of the animation. - * @param animationCurve The animation curve used to animate the new operation. - * @param delegate The animation delegate (can be @nil). - * @return The queued animation operation. + * @param object The object to animate. + * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. + * @param from The starting size for the animation. If either coordinate is @NAN, the animation starts from the current value of the animated property. + * @param to The ending size for the animation. + * @param duration The duration of the animation. + * @param animationCurve The animation curve used to animate the new operation. + * @param delegate The animation delegate (can be @nil). + * @return The queued animation operation. **/ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull NSString *)property fromSize:(CGSize)from toSize:(CGSize)to duration:(CGFloat)duration animationCurve:(CPTAnimationCurve)animationCurve delegate:(nullable id)delegate { @@ -714,12 +714,12 @@ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull N } /** @brief Creates an animation operation with the given properties and adds it to the animation queue. - * @param object The object to animate. - * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. - * @param from The starting size for the animation. If either coordinate is @NAN, the animation starts from the current value of the animated property. - * @param to The ending size for the animation. - * @param duration The duration of the animation. - * @return The queued animation operation. + * @param object The object to animate. + * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. + * @param from The starting size for the animation. If either coordinate is @NAN, the animation starts from the current value of the animated property. + * @param to The ending size for the animation. + * @param duration The duration of the animation. + * @return The queued animation operation. **/ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull NSString *)property fromSize:(CGSize)from toSize:(CGSize)to duration:(CGFloat)duration { @@ -738,15 +738,15 @@ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull N // CGRect /** @brief Creates an animation operation with the given properties and adds it to the animation queue. - * @param object The object to animate. - * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. - * @param from The starting rectangle for the animation. If @ref CGRectNull or any field is @NAN, the animation starts from the current value of the animated property. - * @param to The ending rectangle for the animation. - * @param duration The duration of the animation. - * @param delay The starting delay of the animation in seconds. - * @param animationCurve The animation curve used to animate the new operation. - * @param delegate The animation delegate (can be @nil). - * @return The queued animation operation. + * @param object The object to animate. + * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. + * @param from The starting rectangle for the animation. If @ref CGRectNull or any field is @NAN, the animation starts from the current value of the animated property. + * @param to The ending rectangle for the animation. + * @param duration The duration of the animation. + * @param delay The starting delay of the animation in seconds. + * @param animationCurve The animation curve used to animate the new operation. + * @param delegate The animation delegate (can be @nil). + * @return The queued animation operation. **/ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull NSString *)property fromRect:(CGRect)from toRect:(CGRect)to duration:(CGFloat)duration withDelay:(CGFloat)delay animationCurve:(CPTAnimationCurve)animationCurve delegate:(nullable id)delegate { @@ -764,14 +764,14 @@ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull N } /** @brief Creates an animation operation with the given properties and adds it to the animation queue. - * @param object The object to animate. - * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. - * @param from The starting rectangle for the animation. If @ref CGRectNull or any field is @NAN, the animation starts from the current value of the animated property. - * @param to The ending rectangle for the animation. - * @param duration The duration of the animation. - * @param animationCurve The animation curve used to animate the new operation. - * @param delegate The animation delegate (can be @nil). - * @return The queued animation operation. + * @param object The object to animate. + * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. + * @param from The starting rectangle for the animation. If @ref CGRectNull or any field is @NAN, the animation starts from the current value of the animated property. + * @param to The ending rectangle for the animation. + * @param duration The duration of the animation. + * @param animationCurve The animation curve used to animate the new operation. + * @param delegate The animation delegate (can be @nil). + * @return The queued animation operation. **/ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull NSString *)property fromRect:(CGRect)from toRect:(CGRect)to duration:(CGFloat)duration animationCurve:(CPTAnimationCurve)animationCurve delegate:(nullable id)delegate { @@ -789,12 +789,12 @@ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull N } /** @brief Creates an animation operation with the given properties and adds it to the animation queue. - * @param object The object to animate. - * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. - * @param from The starting rectangle for the animation. If @ref CGRectNull or any field is @NAN, the animation starts from the current value of the animated property. - * @param to The ending rectangle for the animation. - * @param duration The duration of the animation. - * @return The queued animation operation. + * @param object The object to animate. + * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. + * @param from The starting rectangle for the animation. If @ref CGRectNull or any field is @NAN, the animation starts from the current value of the animated property. + * @param to The ending rectangle for the animation. + * @param duration The duration of the animation. + * @return The queued animation operation. **/ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull NSString *)property fromRect:(CGRect)from toRect:(CGRect)to duration:(CGFloat)duration { @@ -813,15 +813,15 @@ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull N // NSDecimal /** @brief Creates an animation operation with the given properties and adds it to the animation queue. - * @param object The object to animate. - * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. - * @param from The starting value for the animation. If @NAN, the animation starts from the current value of the animated property. - * @param to The ending value for the animation. - * @param duration The duration of the animation. - * @param delay The starting delay of the animation in seconds. - * @param animationCurve The animation curve used to animate the new operation. - * @param delegate The animation delegate (can be @nil). - * @return The queued animation operation. + * @param object The object to animate. + * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. + * @param from The starting value for the animation. If @NAN, the animation starts from the current value of the animated property. + * @param to The ending value for the animation. + * @param duration The duration of the animation. + * @param delay The starting delay of the animation in seconds. + * @param animationCurve The animation curve used to animate the new operation. + * @param delegate The animation delegate (can be @nil). + * @return The queued animation operation. **/ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull NSString *)property fromDecimal:(NSDecimal)from toDecimal:(NSDecimal)to duration:(CGFloat)duration withDelay:(CGFloat)delay animationCurve:(CPTAnimationCurve)animationCurve delegate:(nullable id)delegate { @@ -839,14 +839,14 @@ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull N } /** @brief Creates an animation operation with the given properties and adds it to the animation queue. - * @param object The object to animate. - * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. - * @param from The starting value for the animation. If @NAN, the animation starts from the current value of the animated property. - * @param to The ending value for the animation. - * @param duration The duration of the animation. - * @param animationCurve The animation curve used to animate the new operation. - * @param delegate The animation delegate (can be @nil). - * @return The queued animation operation. + * @param object The object to animate. + * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. + * @param from The starting value for the animation. If @NAN, the animation starts from the current value of the animated property. + * @param to The ending value for the animation. + * @param duration The duration of the animation. + * @param animationCurve The animation curve used to animate the new operation. + * @param delegate The animation delegate (can be @nil). + * @return The queued animation operation. **/ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull NSString *)property fromDecimal:(NSDecimal)from toDecimal:(NSDecimal)to duration:(CGFloat)duration animationCurve:(CPTAnimationCurve)animationCurve delegate:(nullable id)delegate { @@ -864,12 +864,12 @@ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull N } /** @brief Creates an animation operation with the given properties and adds it to the animation queue. - * @param object The object to animate. - * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. - * @param from The starting value for the animation. If @NAN, the animation starts from the current value of the animated property. - * @param to The ending value for the animation. - * @param duration The duration of the animation. - * @return The queued animation operation. + * @param object The object to animate. + * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. + * @param from The starting value for the animation. If @NAN, the animation starts from the current value of the animated property. + * @param to The ending value for the animation. + * @param duration The duration of the animation. + * @return The queued animation operation. **/ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull NSString *)property fromDecimal:(NSDecimal)from toDecimal:(NSDecimal)to duration:(CGFloat)duration { @@ -888,15 +888,15 @@ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull N // NSNumber /** @brief Creates an animation operation with the given properties and adds it to the animation queue. - * @param object The object to animate. - * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. - * @param from The starting value. If @NAN or @nil, the animation starts from the current value of the animated property. - * @param to The ending value. - * @param duration The duration of the animation. - * @param delay The starting delay of the animation in seconds. - * @param animationCurve The animation curve used to animate the new operation. - * @param delegate The animation delegate (can be @nil). - * @return The queued animation operation. + * @param object The object to animate. + * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. + * @param from The starting value. If @NAN or @nil, the animation starts from the current value of the animated property. + * @param to The ending value. + * @param duration The duration of the animation. + * @param delay The starting delay of the animation in seconds. + * @param animationCurve The animation curve used to animate the new operation. + * @param delegate The animation delegate (can be @nil). + * @return The queued animation operation. **/ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull NSString *)property fromNumber:(nullable NSNumber *)from toNumber:(nonnull NSNumber *)to duration:(CGFloat)duration withDelay:(CGFloat)delay animationCurve:(CPTAnimationCurve)animationCurve delegate:(nullable id)delegate { @@ -914,14 +914,14 @@ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull N } /** @brief Creates an animation operation with the given properties and adds it to the animation queue. - * @param object The object to animate. - * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. - * @param from The starting value. If @NAN or @nil, the animation starts from the current value of the animated property. - * @param to The ending value. - * @param duration The duration of the animation. - * @param animationCurve The animation curve used to animate the new operation. - * @param delegate The animation delegate (can be @nil). - * @return The queued animation operation. + * @param object The object to animate. + * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. + * @param from The starting value. If @NAN or @nil, the animation starts from the current value of the animated property. + * @param to The ending value. + * @param duration The duration of the animation. + * @param animationCurve The animation curve used to animate the new operation. + * @param delegate The animation delegate (can be @nil). + * @return The queued animation operation. **/ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull NSString *)property fromNumber:(nullable NSNumber *)from toNumber:(nonnull NSNumber *)to duration:(CGFloat)duration animationCurve:(CPTAnimationCurve)animationCurve delegate:(nullable id)delegate { @@ -939,12 +939,12 @@ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull N } /** @brief Creates an animation operation with the given properties and adds it to the animation queue. - * @param object The object to animate. - * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. - * @param from The starting value. If @NAN or @nil, the animation starts from the current value of the animated property. - * @param to The ending value. - * @param duration The duration of the animation. - * @return The queued animation operation. + * @param object The object to animate. + * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. + * @param from The starting value. If @NAN or @nil, the animation starts from the current value of the animated property. + * @param to The ending value. + * @param duration The duration of the animation. + * @return The queued animation operation. **/ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull NSString *)property fromNumber:(nullable NSNumber *)from toNumber:(nonnull NSNumber *)to duration:(CGFloat)duration { @@ -963,15 +963,15 @@ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull N // CPTPlotRange /** @brief Creates an animation operation with the given properties and adds it to the animation queue. - * @param object The object to animate. - * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. - * @param from The starting plot range for the animation. If @nil or any component of the range is @NAN, the animation starts from the current value of the animated property. - * @param to The ending plot range for the animation. - * @param duration The duration of the animation. - * @param delay The starting delay of the animation in seconds. - * @param animationCurve The animation curve used to animate the new operation. - * @param delegate The animation delegate (can be @nil). - * @return The queued animation operation. + * @param object The object to animate. + * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. + * @param from The starting plot range for the animation. If @nil or any component of the range is @NAN, the animation starts from the current value of the animated property. + * @param to The ending plot range for the animation. + * @param duration The duration of the animation. + * @param delay The starting delay of the animation in seconds. + * @param animationCurve The animation curve used to animate the new operation. + * @param delegate The animation delegate (can be @nil). + * @return The queued animation operation. **/ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull NSString *)property fromPlotRange:(nonnull CPTPlotRange *)from toPlotRange:(nonnull CPTPlotRange *)to duration:(CGFloat)duration withDelay:(CGFloat)delay animationCurve:(CPTAnimationCurve)animationCurve delegate:(nullable id)delegate { @@ -989,14 +989,14 @@ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull N } /** @brief Creates an animation operation with the given properties and adds it to the animation queue. - * @param object The object to animate. - * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. - * @param from The starting plot range for the animation. If @nil or any component of the range is @NAN, the animation starts from the current value of the animated property. - * @param to The ending plot range for the animation. - * @param duration The duration of the animation. - * @param animationCurve The animation curve used to animate the new operation. - * @param delegate The animation delegate (can be @nil). - * @return The queued animation operation. + * @param object The object to animate. + * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. + * @param from The starting plot range for the animation. If @nil or any component of the range is @NAN, the animation starts from the current value of the animated property. + * @param to The ending plot range for the animation. + * @param duration The duration of the animation. + * @param animationCurve The animation curve used to animate the new operation. + * @param delegate The animation delegate (can be @nil). + * @return The queued animation operation. **/ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull NSString *)property fromPlotRange:(nonnull CPTPlotRange *)from toPlotRange:(nonnull CPTPlotRange *)to duration:(CGFloat)duration animationCurve:(CPTAnimationCurve)animationCurve delegate:(nullable id)delegate { @@ -1014,12 +1014,12 @@ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull N } /** @brief Creates an animation operation with the given properties and adds it to the animation queue. - * @param object The object to animate. - * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. - * @param from The starting plot range for the animation. If @nil or any component of the range is @NAN, the animation starts from the current value of the animated property. - * @param to The ending plot range for the animation. - * @param duration The duration of the animation. - * @return The queued animation operation. + * @param object The object to animate. + * @param property The name of the property of @par{object} to animate. The property must have both getter and setter methods. + * @param from The starting plot range for the animation. If @nil or any component of the range is @NAN, the animation starts from the current value of the animated property. + * @param to The ending plot range for the animation. + * @param duration The duration of the animation. + * @return The queued animation operation. **/ +(nonnull CPTAnimationOperation *)animate:(nonnull id)object property:(nonnull NSString *)property fromPlotRange:(nonnull CPTPlotRange *)from toPlotRange:(nonnull CPTPlotRange *)to duration:(CGFloat)duration { diff --git a/framework/Source/CPTAnnotationHostLayer.m b/framework/Source/CPTAnnotationHostLayer.m index 6fa9af69b..f26b454ec 100644 --- a/framework/Source/CPTAnnotationHostLayer.m +++ b/framework/Source/CPTAnnotationHostLayer.m @@ -38,8 +38,8 @@ @implementation CPTAnnotationHostLayer * This is the designated initializer. The initialized layer will have an empty * @ref annotations array. * - * @param newFrame The frame rectangle. - * @return The initialized CPTAnnotationHostLayer object. + * @param newFrame The frame rectangle. + * @return The initialized CPTAnnotationHostLayer object. **/ -(nonnull instancetype)initWithFrame:(CGRect)newFrame { @@ -221,9 +221,9 @@ -(void)layoutSublayers * If any layer handles the event, subsequent layers are not notified and * this method immediately returns @YES. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -252,9 +252,9 @@ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint) * If any layer handles the event, subsequent layers are not notified and * this method immediately returns @YES. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -283,9 +283,9 @@ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)in * If any layer handles the event, subsequent layers are not notified and * this method immediately returns @YES. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceDraggedEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -315,8 +315,8 @@ -(BOOL)pointingDeviceDraggedEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoi * If any layer handles the event, subsequent layers are not notified and * this method immediately returns @YES. * - * @param event The OS event. - * @return Whether the event was handled or not. + * @param event The OS event. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceCancelledEvent:(nonnull CPTNativeEvent *)event { diff --git a/framework/Source/CPTAxis.h b/framework/Source/CPTAxis.h index 65bec6a8a..7c60d2f2e 100644 --- a/framework/Source/CPTAxis.h +++ b/framework/Source/CPTAxis.h @@ -52,8 +52,8 @@ typedef NSMutableArray<__kindof CPTAxis *> CPTMutableAxisArray; /// @{ /** @brief @optional Determines if the axis should relabel itself now. - * @param axis The axis. - * @return @YES if the axis should relabel now. + * @param axis The axis. + * @return @YES if the axis should relabel now. **/ -(BOOL)axisShouldRelabel:(nonnull CPTAxis *)axis; @@ -66,18 +66,18 @@ typedef NSMutableArray<__kindof CPTAxis *> CPTMutableAxisArray; /** @brief @optional This method gives the delegate a chance to create custom labels for each tick. * It can be used with any labeling policy. Returning @NO will cause the axis not * to update the labels. It is then the delegate’s responsibility to do this. - * @param axis The axis. - * @param locations The locations of the major ticks. - * @return @YES if the axis class should proceed with automatic labeling. + * @param axis The axis. + * @param locations The locations of the major ticks. + * @return @YES if the axis class should proceed with automatic labeling. **/ -(BOOL)axis:(nonnull CPTAxis *)axis shouldUpdateAxisLabelsAtLocations:(nonnull CPTNumberSet *)locations; /** @brief @optional This method gives the delegate a chance to create custom labels for each minor tick. * It can be used with any labeling policy. Returning @NO will cause the axis not * to update the labels. It is then the delegate’s responsibility to do this. - * @param axis The axis. - * @param locations The locations of the minor ticks. - * @return @YES if the axis class should proceed with automatic labeling. + * @param axis The axis. + * @param locations The locations of the minor ticks. + * @return @YES if the axis class should proceed with automatic labeling. **/ -(BOOL)axis:(nonnull CPTAxis *)axis shouldUpdateMinorAxisLabelsAtLocations:(nonnull CPTNumberSet *)locations; @@ -89,7 +89,7 @@ typedef NSMutableArray<__kindof CPTAxis *> CPTMutableAxisArray; /** @brief @optional Informs the delegate that an axis label * @if MacOnly was both pressed and released. @endif * @if iOSOnly received both the touch down and up events. @endif - * @param axis The axis. + * @param axis The axis. * @param label The selected axis label. **/ -(void)axis:(nonnull CPTAxis *)axis labelWasSelected:(nonnull CPTAxisLabel *)label; @@ -97,7 +97,7 @@ typedef NSMutableArray<__kindof CPTAxis *> CPTMutableAxisArray; /** @brief @optional Informs the delegate that an axis label * @if MacOnly was both pressed and released. @endif * @if iOSOnly received both the touch down and up events. @endif - * @param axis The axis. + * @param axis The axis. * @param label The selected axis label. * @param event The event that triggered the selection. **/ @@ -106,7 +106,7 @@ typedef NSMutableArray<__kindof CPTAxis *> CPTMutableAxisArray; /** @brief @optional Informs the delegate that a minor tick axis label * @if MacOnly was both pressed and released. @endif * @if iOSOnly received both the touch down and up events. @endif - * @param axis The axis. + * @param axis The axis. * @param label The selected minor tick axis label. **/ -(void)axis:(nonnull CPTAxis *)axis minorTickLabelWasSelected:(nonnull CPTAxisLabel *)label; @@ -114,7 +114,7 @@ typedef NSMutableArray<__kindof CPTAxis *> CPTMutableAxisArray; /** @brief @optional Informs the delegate that a minor tick axis label * @if MacOnly was both pressed and released. @endif * @if iOSOnly received both the touch down and up events. @endif - * @param axis The axis. + * @param axis The axis. * @param label The selected minor tick axis label. * @param event The event that triggered the selection. **/ @@ -123,7 +123,7 @@ typedef NSMutableArray<__kindof CPTAxis *> CPTMutableAxisArray; /** @brief @optional Informs the delegate that an axis label * @if MacOnly was pressed. @endif * @if iOSOnly touch started. @endif - * @param axis The axis. + * @param axis The axis. * @param label The selected axis label. **/ -(void)axis:(nonnull CPTAxis *)axis labelTouchDown:(nonnull CPTAxisLabel *)label; @@ -131,7 +131,7 @@ typedef NSMutableArray<__kindof CPTAxis *> CPTMutableAxisArray; /** @brief @optional Informs the delegate that an axis label * @if MacOnly was pressed. @endif * @if iOSOnly touch started. @endif - * @param axis The axis. + * @param axis The axis. * @param label The selected axis label. * @param event The event that triggered the selection. **/ @@ -140,7 +140,7 @@ typedef NSMutableArray<__kindof CPTAxis *> CPTMutableAxisArray; /** @brief @optional Informs the delegate that an axis label * @if MacOnly was released. @endif * @if iOSOnly touch ended. @endif - * @param axis The axis. + * @param axis The axis. * @param label The selected axis label. **/ -(void)axis:(nonnull CPTAxis *)axis labelTouchUp:(nonnull CPTAxisLabel *)label; @@ -148,7 +148,7 @@ typedef NSMutableArray<__kindof CPTAxis *> CPTMutableAxisArray; /** @brief @optional Informs the delegate that an axis label * @if MacOnly was released. @endif * @if iOSOnly touch ended. @endif - * @param axis The axis. + * @param axis The axis. * @param label The selected axis label. * @param event The event that triggered the selection. **/ @@ -157,7 +157,7 @@ typedef NSMutableArray<__kindof CPTAxis *> CPTMutableAxisArray; /** @brief @optional Informs the delegate that a minor tick axis label * @if MacOnly was pressed. @endif * @if iOSOnly touch started. @endif - * @param axis The axis. + * @param axis The axis. * @param label The selected minor tick axis label. **/ -(void)axis:(nonnull CPTAxis *)axis minorTickTouchDown:(nonnull CPTAxisLabel *)label; @@ -165,7 +165,7 @@ typedef NSMutableArray<__kindof CPTAxis *> CPTMutableAxisArray; /** @brief @optional Informs the delegate that a minor tick axis label * @if MacOnly was pressed. @endif * @if iOSOnly touch started. @endif - * @param axis The axis. + * @param axis The axis. * @param label The selected minor tick axis label. * @param event The event that triggered the selection. **/ @@ -174,7 +174,7 @@ typedef NSMutableArray<__kindof CPTAxis *> CPTMutableAxisArray; /** @brief @optional Informs the delegate that a minor tick axis label * @if MacOnly was released. @endif * @if iOSOnly touch ended. @endif - * @param axis The axis. + * @param axis The axis. * @param label The selected minor tick axis label. **/ -(void)axis:(nonnull CPTAxis *)axis minorTickTouchUp:(nonnull CPTAxisLabel *)label; @@ -182,7 +182,7 @@ typedef NSMutableArray<__kindof CPTAxis *> CPTMutableAxisArray; /** @brief @optional Informs the delegate that a minor tick axis label * @if MacOnly was released. @endif * @if iOSOnly touch ended. @endif - * @param axis The axis. + * @param axis The axis. * @param label The selected minor tick axis label. * @param event The event that triggered the selection. **/ diff --git a/framework/Source/CPTAxis.m b/framework/Source/CPTAxis.m index cd607d047..e85f4edad 100644 --- a/framework/Source/CPTAxis.m +++ b/framework/Source/CPTAxis.m @@ -535,8 +535,8 @@ @implementation CPTAxis * - @ref majorGridLines = @nil * - @ref needsDisplayOnBoundsChange = @YES * - * @param newFrame The frame rectangle. - * @return The initialized CPTAxis object. + * @param newFrame The frame rectangle. + * @return The initialized CPTAxis object. **/ -(nonnull instancetype)initWithFrame:(CGRect)newFrame { @@ -1467,8 +1467,8 @@ NSDecimal CPTNiceLength(NSDecimal length) /** * @internal * @brief Removes any tick locations falling inside the label exclusion ranges from a set of tick locations. - * @param allLocations A set of tick locations. - * @return The filtered set of tick locations. + * @param allLocations A set of tick locations. + * @return The filtered set of tick locations. */ -(nullable CPTNumberSet *)filteredTickLocations:(nullable CPTNumberSet *)allLocations { @@ -1493,8 +1493,8 @@ -(nullable CPTNumberSet *)filteredTickLocations:(nullable CPTNumberSet *)allLoca /// @endcond /** @brief Removes any major ticks falling inside the label exclusion ranges from the set of tick locations. - * @param allLocations A set of major tick locations. - * @return The filtered set. + * @param allLocations A set of major tick locations. + * @return The filtered set. **/ -(nullable CPTNumberSet *)filteredMajorTickLocations:(nullable CPTNumberSet *)allLocations { @@ -1502,8 +1502,8 @@ -(nullable CPTNumberSet *)filteredMajorTickLocations:(nullable CPTNumberSet *)al } /** @brief Removes any minor ticks falling inside the label exclusion ranges from the set of tick locations. - * @param allLocations A set of minor tick locations. - * @return The filtered set. + * @param allLocations A set of minor tick locations. + * @return The filtered set. **/ -(nullable CPTNumberSet *)filteredMinorTickLocations:(nullable CPTNumberSet *)allLocations { @@ -1537,8 +1537,8 @@ -(CGFloat)tickOffset * @internal * @brief Updates the set of axis labels using the given locations. * Existing axis label objects and content layers are reused where possible. - * @param locations A set of NSDecimalNumber label locations. - * @param labeledRange A plot range used to filter the generated labels. If @nil, no filtering is done. + * @param locations A set of NSDecimalNumber label locations. + * @param labeledRange A plot range used to filter the generated labels. If @nil, no filtering is done. * @param useMajorAxisLabels If @YES, label the major ticks, otherwise label the minor ticks. **/ -(void)updateAxisLabelsAtLocations:(nullable CPTNumberSet *)locations inRange:(nullable CPTPlotRange *)labeledRange useMajorAxisLabels:(BOOL)useMajorAxisLabels @@ -2073,9 +2073,9 @@ -(void)removeAllBackgroundLimitBands * * This method returns @NO if the @par{interactionPoint} is outside all of the labels. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -2178,9 +2178,9 @@ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint) * * This method returns @NO if the @par{interactionPoint} is outside all of the labels. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -3269,8 +3269,8 @@ -(void)setHidden:(BOOL)newHidden @implementation CPTAxis(AbstractMethods) /** @brief Converts a position on the axis to drawing coordinates. - * @param coordinateValue The axis value in data coordinate space. - * @return The drawing coordinates of the point. + * @param coordinateValue The axis value in data coordinate space. + * @return The drawing coordinates of the point. **/ -(CGPoint)viewPointForCoordinateValue:(nullable NSNumber *__unused)coordinateValue { @@ -3279,7 +3279,7 @@ -(CGPoint)viewPointForCoordinateValue:(nullable NSNumber *__unused)coordinateVal /** @brief Draws grid lines into the provided graphics context. * @param context The graphics context to draw into. - * @param major Draw the major grid lines If @YES, minor grid lines otherwise. + * @param major Draw the major grid lines If @YES, minor grid lines otherwise. **/ -(void)drawGridLinesInContext:(nonnull CGContextRef __unused)context isMajor:(BOOL __unused)major { diff --git a/framework/Source/CPTAxisLabel.m b/framework/Source/CPTAxisLabel.m index 68d8b1e82..6deba7a21 100644 --- a/framework/Source/CPTAxisLabel.m +++ b/framework/Source/CPTAxisLabel.m @@ -43,9 +43,9 @@ @implementation CPTAxisLabel /** @brief Initializes a newly allocated text-based CPTAxisLabel object with the provided text and style. * - * @param newText The label text. - * @param newStyle The text style for the label. - * @return The initialized CPTAxisLabel object. + * @param newText The label text. + * @param newStyle The text style for the label. + * @return The initialized CPTAxisLabel object. **/ -(nonnull instancetype)initWithText:(nullable NSString *)newText textStyle:(nullable CPTTextStyle *)newStyle { @@ -58,8 +58,8 @@ -(nonnull instancetype)initWithText:(nullable NSString *)newText textStyle:(null /** @brief Initializes a newly allocated CPTAxisLabel object with the provided layer. This is the designated initializer. * - * @param layer The label content. - * @return The initialized CPTAxisLabel object. + * @param layer The label content. + * @return The initialized CPTAxisLabel object. **/ -(nonnull instancetype)initWithContentLayer:(nonnull CPTLayer *)layer { @@ -100,8 +100,8 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /// @endcond /** @brief Returns an object initialized from data in a given unarchiver. - * @param coder An unarchiver object. - * @return An object initialized from data in a given unarchiver. + * @param coder An unarchiver object. + * @return An object initialized from data in a given unarchiver. */ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { @@ -138,9 +138,9 @@ +(BOOL)supportsSecureCoding * When zero, the anchor point is positioned along the closest side of the label. * When non-zero, the anchor point is left at the center. This has consequences for * the value taken by the offset. - * @param point The view point. + * @param point The view point. * @param coordinate The coordinate in which the label is being position. Orthogonal to the axis coordinate. - * @param direction The offset direction. + * @param direction The offset direction. **/ -(void)positionRelativeToViewPoint:(CGPoint)point forCoordinate:(CPTCoordinate)coordinate inDirection:(CPTSign)direction { @@ -289,10 +289,10 @@ -(void)positionRelativeToViewPoint:(CGPoint)point forCoordinate:(CPTCoordinate)c } /** @brief Positions the axis label between two given points. - * @param firstPoint The first view point. + * @param firstPoint The first view point. * @param secondPoint The second view point. - * @param coordinate The axis coordinate. - * @param direction The offset direction. + * @param coordinate The axis coordinate. + * @param direction The offset direction. **/ -(void)positionBetweenViewPoint:(CGPoint)firstPoint andViewPoint:(CGPoint)secondPoint forCoordinate:(CPTCoordinate)coordinate inDirection:(CPTSign)direction { @@ -321,8 +321,8 @@ -(nullable NSString *)description /** @brief Returns a boolean value that indicates whether the received is equal to the given object. * Axis labels are equal if they have the same @ref tickLocation. - * @param object The object to be compared with the receiver. - * @return @YES if @par{object} is equal to the receiver, @NO otherwise. + * @param object The object to be compared with the receiver. + * @return @YES if @par{object} is equal to the receiver, @NO otherwise. **/ -(BOOL)isEqual:(nullable id)object { diff --git a/framework/Source/CPTAxisSet.m b/framework/Source/CPTAxisSet.m index 0f37e6cb5..379c035a9 100644 --- a/framework/Source/CPTAxisSet.m +++ b/framework/Source/CPTAxisSet.m @@ -33,8 +33,8 @@ @implementation CPTAxisSet * - @ref borderLineStyle = @nil * - @ref needsDisplayOnBoundsChange = @YES * - * @param newFrame The frame rectangle. - * @return The initialized CPTAxisSet object. + * @param newFrame The frame rectangle. + * @return The initialized CPTAxisSet object. **/ -(nonnull instancetype)initWithFrame:(CGRect)newFrame { @@ -139,9 +139,9 @@ -(void)relabelAxes * For example, to find the second x-axis, use a @par{coordinate} of #CPTCoordinateX * and @par{idx} of @num{1}. * - * @param coordinate The axis coordinate. - * @param idx The zero-based index. - * @return The axis matching the given coordinate and index, or @nil if no match is found. + * @param coordinate The axis coordinate. + * @param idx The zero-based index. + * @return The axis matching the given coordinate and index, or @nil if no match is found. **/ -(nullable CPTAxis *)axisForCoordinate:(CPTCoordinate)coordinate atIndex:(NSUInteger)idx { @@ -178,9 +178,9 @@ -(nullable CPTAxis *)axisForCoordinate:(CPTCoordinate)coordinate atIndex:(NSUInt * The event will be passed to each axis belonging to the receiver in turn. This method * returns @YES if any of its axes handle the event. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -202,9 +202,9 @@ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint) * The event will be passed to each axis belonging to the receiver in turn. This method * returns @YES if any of its axes handle the event. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { diff --git a/framework/Source/CPTAxisTitle.m b/framework/Source/CPTAxisTitle.m index 99b26a321..c5f37c903 100644 --- a/framework/Source/CPTAxisTitle.m +++ b/framework/Source/CPTAxisTitle.m @@ -38,8 +38,8 @@ -(nonnull instancetype)initWithContentLayer:(nonnull CPTLayer *)layer /** @brief Returns a boolean value that indicates whether the received is equal to the given object. * Axis titles are equal if they have the same @ref tickLocation, @ref rotation, and @ref contentLayer. - * @param object The object to be compared with the receiver. - * @return @YES if @par{object} is equal to the receiver, @NO otherwise. + * @param object The object to be compared with the receiver. + * @return @YES if @par{object} is equal to the receiver, @NO otherwise. **/ -(BOOL)isEqual:(nullable id)object { diff --git a/framework/Source/CPTBarPlot.h b/framework/Source/CPTBarPlot.h index 282fd873d..9e6c6285e 100644 --- a/framework/Source/CPTBarPlot.h +++ b/framework/Source/CPTBarPlot.h @@ -49,9 +49,9 @@ typedef NS_ENUM (NSInteger, CPTBarPlotField) { /// @{ /** @brief @optional Gets an array of bar fills for the given bar plot. - * @param barPlot The bar plot. - * @param indexRange The range of the data indexes of interest. - * @return An array of bar fills. + * @param barPlot The bar plot. + * @param indexRange The range of the data indexes of interest. + * @return An array of bar fills. **/ -(nullable CPTFillArray *)barFillsForBarPlot:(nonnull CPTBarPlot *)barPlot recordIndexRange:(NSRange)indexRange; @@ -59,17 +59,17 @@ typedef NS_ENUM (NSInteger, CPTBarPlotField) { * This method will not be called if * @link CPTBarPlotDataSource::barFillsForBarPlot:recordIndexRange: -barFillsForBarPlot:recordIndexRange: @endlink * is also implemented in the datasource. - * @param barPlot The bar plot. - * @param idx The data index of interest. - * @return The bar fill for the bar with the given index. If the data source returns @nil, the default fill is used. + * @param barPlot The bar plot. + * @param idx The data index of interest. + * @return The bar fill for the bar with the given index. If the data source returns @nil, the default fill is used. * If the data source returns an NSNull object, no fill is drawn. **/ -(nullable CPTFill *)barFillForBarPlot:(nonnull CPTBarPlot *)barPlot recordIndex:(NSUInteger)idx; /** @brief @optional Gets an array of bar line styles for the given bar plot. - * @param barPlot The bar plot. - * @param indexRange The range of the data indexes of interest. - * @return An array of line styles. + * @param barPlot The bar plot. + * @param indexRange The range of the data indexes of interest. + * @return An array of line styles. **/ -(nullable CPTLineStyleArray *)barLineStylesForBarPlot:(nonnull CPTBarPlot *)barPlot recordIndexRange:(NSRange)indexRange; @@ -77,17 +77,17 @@ typedef NS_ENUM (NSInteger, CPTBarPlotField) { * This method will not be called if * @link CPTBarPlotDataSource::barLineStylesForBarPlot:recordIndexRange: -barLineStylesForBarPlot:recordIndexRange: @endlink * is also implemented in the datasource. - * @param barPlot The bar plot. - * @param idx The data index of interest. - * @return The bar line style for the bar with the given index. If the data source returns @nil, the default line style is used. + * @param barPlot The bar plot. + * @param idx The data index of interest. + * @return The bar line style for the bar with the given index. If the data source returns @nil, the default line style is used. * If the data source returns an NSNull object, no line is drawn. **/ -(nullable CPTLineStyle *)barLineStyleForBarPlot:(nonnull CPTBarPlot *)barPlot recordIndex:(NSUInteger)idx; /** @brief @optional Gets an array of bar widths for the given bar plot. - * @param barPlot The bar plot. - * @param indexRange The range of the data indexes of interest. - * @return An array of bar widths. + * @param barPlot The bar plot. + * @param indexRange The range of the data indexes of interest. + * @return An array of bar widths. **/ -(nullable CPTNumberArray *)barWidthsForBarPlot:(nonnull CPTBarPlot *)barPlot recordIndexRange:(NSRange)indexRange; @@ -95,9 +95,9 @@ typedef NS_ENUM (NSInteger, CPTBarPlotField) { * This method will not be called if * @link CPTBarPlotDataSource::barWidthsForBarPlot:recordIndexRange: -barWidthsForBarPlot:recordIndexRange: @endlink * is also implemented in the datasource. - * @param barPlot The bar plot. - * @param idx The data index of interest. - * @return The bar width for the bar with the given index. If the data source returns @nil, the default barWidth is used. + * @param barPlot The bar plot. + * @param idx The data index of interest. + * @return The bar width for the bar with the given index. If the data source returns @nil, the default barWidth is used. **/ -(nullable NSNumber *)barWidthForBarPlot:(nonnull CPTBarPlot *)barPlot recordIndex:(NSUInteger)idx; @@ -107,16 +107,16 @@ typedef NS_ENUM (NSInteger, CPTBarPlotField) { /// @{ /** @brief @optional Gets the legend title for the given bar plot bar. - * @param barPlot The bar plot. - * @param idx The data index of interest. - * @return The title text for the legend entry for the point with the given index. + * @param barPlot The bar plot. + * @param idx The data index of interest. + * @return The title text for the legend entry for the point with the given index. **/ -(nullable NSString *)legendTitleForBarPlot:(nonnull CPTBarPlot *)barPlot recordIndex:(NSUInteger)idx; /** @brief @optional Gets the styled legend title for the given bar plot bar. - * @param barPlot The bar plot. - * @param idx The data index of interest. - * @return The styled title text for the legend entry for the point with the given index. + * @param barPlot The bar plot. + * @param idx The data index of interest. + * @return The styled title text for the legend entry for the point with the given index. **/ -(nullable NSAttributedString *)attributedLegendTitleForBarPlot:(nonnull CPTBarPlot *)barPlot recordIndex:(NSUInteger)idx; @@ -139,7 +139,7 @@ typedef NS_ENUM (NSInteger, CPTBarPlotField) { * @if MacOnly was both pressed and released. @endif * @if iOSOnly received both the touch down and up events. @endif * @param plot The bar plot. - * @param idx The index of the + * @param idx The index of the * * @if MacOnly clicked bar. @endif * @if iOSOnly touched bar. @endif @@ -149,8 +149,8 @@ typedef NS_ENUM (NSInteger, CPTBarPlotField) { /** @brief @optional Informs the delegate that a bar * @if MacOnly was both pressed and released. @endif * @if iOSOnly received both the touch down and up events. @endif - * @param plot The bar plot. - * @param idx The index of the + * @param plot The bar plot. + * @param idx The index of the * * @if MacOnly clicked bar. @endif * @if iOSOnly touched bar. @endif @@ -162,7 +162,7 @@ typedef NS_ENUM (NSInteger, CPTBarPlotField) { * @if MacOnly was pressed. @endif * @if iOSOnly touch started. @endif * @param plot The bar plot. - * @param idx The index of the + * @param idx The index of the * @if MacOnly clicked bar. @endif * @if iOSOnly touched bar. @endif **/ @@ -171,8 +171,8 @@ typedef NS_ENUM (NSInteger, CPTBarPlotField) { /** @brief @optional Informs the delegate that a bar * @if MacOnly was pressed. @endif * @if iOSOnly touch started. @endif - * @param plot The bar plot. - * @param idx The index of the + * @param plot The bar plot. + * @param idx The index of the * @if MacOnly clicked bar. @endif * @if iOSOnly touched bar. @endif * @param event The event that triggered the selection. @@ -183,7 +183,7 @@ typedef NS_ENUM (NSInteger, CPTBarPlotField) { * @if MacOnly was released. @endif * @if iOSOnly touch ended. @endif * @param plot The bar plot. - * @param idx The index of the + * @param idx The index of the * @if MacOnly clicked bar. @endif * @if iOSOnly touched bar. @endif **/ @@ -192,8 +192,8 @@ typedef NS_ENUM (NSInteger, CPTBarPlotField) { /** @brief @optional Informs the delegate that a bar * @if MacOnly was released. @endif * @if iOSOnly touch ended. @endif - * @param plot The bar plot. - * @param idx The index of the + * @param plot The bar plot. + * @param idx The index of the * @if MacOnly clicked bar. @endif * @if iOSOnly touched bar. @endif * @param event The event that triggered the selection. diff --git a/framework/Source/CPTBarPlot.m b/framework/Source/CPTBarPlot.m index d50a0de6d..1fe99f7aa 100644 --- a/framework/Source/CPTBarPlot.m +++ b/framework/Source/CPTBarPlot.m @@ -168,9 +168,9 @@ @implementation CPTBarPlot #pragma mark Convenience Factory Methods /** @brief Creates and returns a new CPTBarPlot instance initialized with a bar fill consisting of a linear gradient between black and the given color. - * @param color The beginning color. - * @param horizontal If @YES, the bars will have a horizontal orientation, otherwise they will be vertical. - * @return A new CPTBarPlot instance initialized with a linear gradient bar fill. + * @param color The beginning color. + * @param horizontal If @YES, the bars will have a horizontal orientation, otherwise they will be vertical. + * @return A new CPTBarPlot instance initialized with a linear gradient bar fill. **/ +(nonnull instancetype)tubularBarPlotWithColor:(nonnull CPTColor *)color horizontalBars:(BOOL)horizontal { @@ -238,8 +238,8 @@ +(void)initialize * - @ref labelOffset = @num{10.0} * - @ref labelField = #CPTBarPlotFieldBarTip * - * @param newFrame The frame rectangle. - * @return The initialized CPTBarPlot object. + * @param newFrame The frame rectangle. + * @return The initialized CPTBarPlot object. **/ -(nonnull instancetype)initWithFrame:(CGRect)newFrame { @@ -1381,8 +1381,8 @@ -(NSUInteger)numberOfLegendEntries /** @internal * @brief The title text of a legend entry. - * @param idx The index of the desired title. - * @return The title of the legend entry at the requested index. + * @param idx The index of the desired title. + * @return The title of the legend entry at the requested index. **/ -(nullable NSString *)titleForLegendEntryAtIndex:(NSUInteger)idx { @@ -1402,8 +1402,8 @@ -(nullable NSString *)titleForLegendEntryAtIndex:(NSUInteger)idx /** @internal * @brief The styled title text of a legend entry. - * @param idx The index of the desired title. - * @return The styled title of the legend entry at the requested index. + * @param idx The index of the desired title. + * @return The styled title of the legend entry at the requested index. **/ -(nullable NSAttributedString *)attributedTitleForLegendEntryAtIndex:(NSUInteger)idx { @@ -1468,9 +1468,9 @@ -(NSUInteger)dataIndexFromInteractionPoint:(CGPoint)point * index where the @par{interactionPoint} is inside a bar. * This method returns @NO if the @par{interactionPoint} is outside all of the bars. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -1534,9 +1534,9 @@ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint) * @link CPTBarPlotDelegate::barPlot:barWasSelectedAtRecordIndex:withEvent: -barPlot:barWasSelectedAtRecordIndex:withEvent: @endlink * methods, these will be called. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { diff --git a/framework/Source/CPTBorderedLayer.m b/framework/Source/CPTBorderedLayer.m index fe96ffe6b..bb5a0d177 100644 --- a/framework/Source/CPTBorderedLayer.m +++ b/framework/Source/CPTBorderedLayer.m @@ -63,8 +63,8 @@ @implementation CPTBorderedLayer * - @ref inLayout = @NO * - @ref needsDisplayOnBoundsChange = @YES * - * @param newFrame The frame rectangle. - * @return The initialized CPTBorderedLayer object. + * @param newFrame The frame rectangle. + * @return The initialized CPTBorderedLayer object. **/ -(nonnull instancetype)initWithFrame:(CGRect)newFrame { @@ -202,9 +202,9 @@ -(void)renderBorderedLayerAsVectorInContext:(nonnull CGContextRef)context /// @{ /** @brief Increases the sublayer margin on all four sides by half the width of the border line style. - * @param left The left margin. - * @param top The top margin. - * @param right The right margin. + * @param left The left margin. + * @param top The top margin. + * @param right The right margin. * @param bottom The bottom margin. **/ -(void)sublayerMarginLeft:(nonnull CGFloat *)left top:(nonnull CGFloat *)top right:(nonnull CGFloat *)right bottom:(nonnull CGFloat *)bottom diff --git a/framework/Source/CPTCalendarFormatter.m b/framework/Source/CPTCalendarFormatter.m index 928263b4e..84b53a4a8 100644 --- a/framework/Source/CPTCalendarFormatter.m +++ b/framework/Source/CPTCalendarFormatter.m @@ -62,8 +62,8 @@ -(nonnull instancetype)init /// @} /** @brief Initializes new instance with the date formatter passed. - * @param aDateFormatter The date formatter. - * @return The new instance. + * @param aDateFormatter The date formatter. + * @return The new instance. **/ -(nonnull instancetype)initWithDateFormatter:(nullable NSDateFormatter *)aDateFormatter { @@ -94,8 +94,8 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /// @endcond /** @brief Returns an object initialized from data in a given unarchiver. - * @param coder An unarchiver object. - * @return An object initialized from data in a given unarchiver. + * @param coder An unarchiver object. + * @return An object initialized from data in a given unarchiver. */ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { @@ -139,8 +139,8 @@ -(nonnull id)copyWithZone:(nullable NSZone *)zone * Uses the date formatter to do the conversion. Conversions are relative to the * reference date, unless it is @nil, in which case the standard reference date * of 1 January 2001, GMT is used. - * @param coordinateValue The time value. - * @return The date string. + * @param coordinateValue The time value. + * @return The date string. **/ -(nullable NSString *)stringForObjectValue:(nullable id)coordinateValue { diff --git a/framework/Source/CPTColor.m b/framework/Source/CPTColor.m index 596a2db98..4a04499c9 100644 --- a/framework/Source/CPTColor.m +++ b/framework/Source/CPTColor.m @@ -385,8 +385,8 @@ +(nonnull instancetype)brownColor #pragma mark Factory Methods /** @brief Creates and returns a new CPTColor instance initialized with the provided @ref CGColorRef. - * @param newCGColor The color to wrap. - * @return A new CPTColor instance initialized with the provided @ref CGColorRef. + * @param newCGColor The color to wrap. + * @return A new CPTColor instance initialized with the provided @ref CGColorRef. **/ +(nonnull instancetype)colorWithCGColor:(nonnull CGColorRef)newCGColor { @@ -394,11 +394,11 @@ +(nonnull instancetype)colorWithCGColor:(nonnull CGColorRef)newCGColor } /** @brief Creates and returns a new CPTColor instance initialized with the provided RGBA color components. - * @param red The red component (@num{0} ≤ @par{red} ≤ @num{1}). - * @param green The green component (@num{0} ≤ @par{green} ≤ @num{1}). - * @param blue The blue component (@num{0} ≤ @par{blue} ≤ @num{1}). - * @param alpha The alpha component (@num{0} ≤ @par{alpha} ≤ @num{1}). - * @return A new CPTColor instance initialized with the provided RGBA color components. + * @param red The red component (@num{0} ≤ @par{red} ≤ @num{1}). + * @param green The green component (@num{0} ≤ @par{green} ≤ @num{1}). + * @param blue The blue component (@num{0} ≤ @par{blue} ≤ @num{1}). + * @param alpha The alpha component (@num{0} ≤ @par{alpha} ≤ @num{1}). + * @return A new CPTColor instance initialized with the provided RGBA color components. **/ +(nonnull instancetype)colorWithComponentRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha { @@ -406,8 +406,8 @@ +(nonnull instancetype)colorWithComponentRed:(CGFloat)red green:(CGFloat)green b } /** @brief Creates and returns a new CPTColor instance initialized with the provided gray level. - * @param gray The gray level (@num{0} ≤ @par{gray} ≤ @num{1}). - * @return A new CPTColor instance initialized with the provided gray level. + * @param gray The gray level (@num{0} ≤ @par{gray} ≤ @num{1}). + * @return A new CPTColor instance initialized with the provided gray level. **/ +(nonnull instancetype)colorWithGenericGray:(CGFloat)gray { @@ -425,8 +425,8 @@ +(nonnull instancetype)colorWithGenericGray:(CGFloat)gray * * The NSColor can be a dynamic system color or catalog color. This adds support for Dark Mode in macOS 10.14. * - * @param newNSColor The color to wrap. - * @return A new CPTColor instance initialized with the provided NSColor. + * @param newNSColor The color to wrap. + * @return A new CPTColor instance initialized with the provided NSColor. **/ +(nonnull instancetype)colorWithNSColor:(nonnull NSColor *)newNSColor { @@ -439,8 +439,8 @@ +(nonnull instancetype)colorWithNSColor:(nonnull NSColor *)newNSColor * * The UIColor can be a dynamic system color or catalog color. This adds support for Dark Mode in iOS 13. * - * @param newUIColor The color to wrap. - * @return A new CPTColor instance initialized with the provided UIColor. + * @param newUIColor The color to wrap. + * @return A new CPTColor instance initialized with the provided UIColor. **/ +(nonnull instancetype)colorWithUIColor:(nonnull UIColor *)newUIColor { @@ -453,8 +453,8 @@ +(nonnull instancetype)colorWithUIColor:(nonnull UIColor *)newUIColor * * The color can be a dynamic system color or catalog color. This adds support for Dark Mode in iOS13. * - * @param newColor The color to wrap. - * @return A new CPTColor instance initialized with the provided platform-native color. + * @param newColor The color to wrap. + * @return A new CPTColor instance initialized with the provided platform-native color. **/ +(nonnull instancetype)colorWithNativeColor:(nonnull CPTNativeColor *)newColor { @@ -470,8 +470,8 @@ +(nonnull instancetype)colorWithNativeColor:(nonnull CPTNativeColor *)newColor /** @brief Initializes a newly allocated CPTColor object with the provided @ref CGColorRef. * - * @param newCGColor The color to wrap. - * @return The initialized CPTColor object. + * @param newCGColor The color to wrap. + * @return The initialized CPTColor object. **/ -(nonnull instancetype)initWithCGColor:(nonnull CGColorRef)newCGColor { @@ -484,11 +484,11 @@ -(nonnull instancetype)initWithCGColor:(nonnull CGColorRef)newCGColor /** @brief Initializes a newly allocated CPTColor object with the provided RGBA color components. * - * @param red The red component (@num{0} ≤ @par{red} ≤ @num{1}). - * @param green The green component (@num{0} ≤ @par{green} ≤ @num{1}). - * @param blue The blue component (@num{0} ≤ @par{blue} ≤ @num{1}). - * @param alpha The alpha component (@num{0} ≤ @par{alpha} ≤ @num{1}). - * @return The initialized CPTColor object. + * @param red The red component (@num{0} ≤ @par{red} ≤ @num{1}). + * @param green The green component (@num{0} ≤ @par{green} ≤ @num{1}). + * @param blue The blue component (@num{0} ≤ @par{blue} ≤ @num{1}). + * @param alpha The alpha component (@num{0} ≤ @par{alpha} ≤ @num{1}). + * @return The initialized CPTColor object. **/ -(nonnull instancetype)initWithComponentRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha { @@ -511,8 +511,8 @@ -(nonnull instancetype)initWithComponentRed:(CGFloat)red green:(CGFloat)green bl * * The NSColor can be a dynamic system color or catalog color. This adds support for Dark Mode in macOS 10.14. * - * @param newNSColor The color to wrap. - * @return The initialized CPTColor object. + * @param newNSColor The color to wrap. + * @return The initialized CPTColor object. **/ -(nonnull instancetype)initWithNSColor:(nonnull NSColor *)newNSColor { @@ -528,8 +528,8 @@ -(nonnull instancetype)initWithNSColor:(nonnull NSColor *)newNSColor * * The UIColor can be a dynamic system color or catalog color. This adds support for Dark Mode in iOS 13. * - * @param newUIColor The color to wrap. - * @return The initialized CPTColor object. + * @param newUIColor The color to wrap. + * @return The initialized CPTColor object. **/ -(nonnull instancetype)initWithUIColor:(nonnull UIColor *)newUIColor { @@ -545,8 +545,8 @@ -(nonnull instancetype)initWithUIColor:(nonnull UIColor *)newUIColor * * The color can be a dynamic system color or catalog color. This adds support for Dark Mode in macOS 10.14 and iOS 13. * - * @param newColor The color to wrap. - * @return The initialized CPTColor object. + * @param newColor The color to wrap. + * @return The initialized CPTColor object. **/ -(nonnull instancetype)initWithNativeColor:(nonnull CPTNativeColor *)newColor { @@ -576,8 +576,8 @@ -(void)dealloc /** @brief Creates and returns a new CPTColor instance having color components identical to the current object * but having the provided alpha component. - * @param alpha The alpha component (@num{0} ≤ @par{alpha} ≤ @num{1}). - * @return A new CPTColor instance having the provided alpha component. + * @param alpha The alpha component (@num{0} ≤ @par{alpha} ≤ @num{1}). + * @return A new CPTColor instance having the provided alpha component. **/ -(nonnull instancetype)colorWithAlphaComponent:(CGFloat)alpha { @@ -644,8 +644,8 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /// @endcond /** @brief Returns an object initialized from data in a given unarchiver. - * @param coder An unarchiver object. - * @return An object initialized from data in a given unarchiver. + * @param coder An unarchiver object. + * @return An object initialized from data in a given unarchiver. */ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { @@ -740,8 +740,8 @@ -(nonnull id)copyWithZone:(nullable NSZone *)zone /** @brief Returns a boolean value that indicates whether the received is equal to the given object. * Colors are equal if they have equal @ref cgColor properties. - * @param object The object to be compared with the receiver. - * @return @YES if @par{object} is equal to the receiver, @NO otherwise. + * @param object The object to be compared with the receiver. + * @return @YES if @par{object} is equal to the receiver, @NO otherwise. **/ -(BOOL)isEqual:(nullable id)object { diff --git a/framework/Source/CPTColorSpace.m b/framework/Source/CPTColorSpace.m index 68e765d01..9c87b6ed4 100644 --- a/framework/Source/CPTColorSpace.m +++ b/framework/Source/CPTColorSpace.m @@ -50,8 +50,8 @@ +(nonnull instancetype)genericRGBSpace /** @brief Initializes a newly allocated colorspace object with the specified color space. * This is the designated initializer. * - * @param colorSpace The color space. - * @return The initialized CPTColorSpace object. + * @param colorSpace The color space. + * @return The initialized CPTColorSpace object. **/ -(nonnull instancetype)initWithCGColorSpace:(nonnull CGColorSpaceRef)colorSpace { @@ -101,8 +101,8 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /// @endcond /** @brief Returns an object initialized from data in a given unarchiver. - * @param coder An unarchiver object. - * @return An object initialized from data in a given unarchiver. + * @param coder An unarchiver object. + * @return An object initialized from data in a given unarchiver. */ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { diff --git a/framework/Source/CPTConstraints.m b/framework/Source/CPTConstraints.m index c9896ea25..292b1e6b9 100644 --- a/framework/Source/CPTConstraints.m +++ b/framework/Source/CPTConstraints.m @@ -15,8 +15,8 @@ @implementation CPTConstraints #pragma mark Factory methods /** @brief Creates and returns a new CPTConstraints instance initialized with a fixed offset from the lower bound. - * @param newOffset The offset. - * @return A new CPTConstraints instance initialized with the given offset. + * @param newOffset The offset. + * @return A new CPTConstraints instance initialized with the given offset. **/ +(nonnull instancetype)constraintWithLowerOffset:(CGFloat)newOffset { @@ -24,8 +24,8 @@ +(nonnull instancetype)constraintWithLowerOffset:(CGFloat)newOffset } /** @brief Creates and returns a new CPTConstraints instance initialized with a fixed offset from the upper bound. - * @param newOffset The offset. - * @return A new CPTConstraints instance initialized with the given offset. + * @param newOffset The offset. + * @return A new CPTConstraints instance initialized with the given offset. **/ +(nonnull instancetype)constraintWithUpperOffset:(CGFloat)newOffset { @@ -37,8 +37,8 @@ +(nonnull instancetype)constraintWithUpperOffset:(CGFloat)newOffset * For example, an offset of @num{0.0} will return a position equal to the lower bound, @num{1.0} will return the upper bound, * and @num{0.5} will return a point midway between the two bounds. * - * @param newOffset The offset. - * @return A new CPTConstraints instance initialized with the given offset. + * @param newOffset The offset. + * @return A new CPTConstraints instance initialized with the given offset. **/ +(nonnull instancetype)constraintWithRelativeOffset:(CGFloat)newOffset { @@ -49,8 +49,8 @@ +(nonnull instancetype)constraintWithRelativeOffset:(CGFloat)newOffset #pragma mark Init/Dealloc /** @brief Initializes a newly allocated CPTConstraints instance initialized with a fixed offset from the lower bound. - * @param newOffset The offset. - * @return The initialized CPTConstraints object. + * @param newOffset The offset. + * @return The initialized CPTConstraints object. **/ -(nonnull instancetype)initWithLowerOffset:(CGFloat)newOffset { @@ -60,8 +60,8 @@ -(nonnull instancetype)initWithLowerOffset:(CGFloat)newOffset } /** @brief Initializes a newly allocated CPTConstraints instance initialized with a fixed offset from the upper bound. - * @param newOffset The offset. - * @return The initialized CPTConstraints object. + * @param newOffset The offset. + * @return The initialized CPTConstraints object. **/ -(nonnull instancetype)initWithUpperOffset:(CGFloat)newOffset { @@ -75,8 +75,8 @@ -(nonnull instancetype)initWithUpperOffset:(CGFloat)newOffset * For example, an offset of @num{0.0} will return a position equal to the lower bound, @num{1.0} will return the upper bound, * and @num{0.5} will return a point midway between the two bounds. * - * @param newOffset The offset. - * @return The initialized CPTConstraints object. + * @param newOffset The offset. + * @return The initialized CPTConstraints object. **/ -(nonnull instancetype)initWithRelativeOffset:(CGFloat)newOffset { @@ -152,8 +152,8 @@ @implementation CPTConstraints(AbstractMethods) #pragma mark Comparison /** @brief Determines whether a given constraint is equal to the receiver. - * @param otherConstraint The constraint to check. - * @return @YES if the constraints are equal. + * @param otherConstraint The constraint to check. + * @return @YES if the constraints are equal. **/ -(BOOL)isEqualToConstraint:(nullable CPTConstraints *)otherConstraint { @@ -165,9 +165,9 @@ -(BOOL)isEqualToConstraint:(nullable CPTConstraints *)otherConstraint #pragma mark Positioning /** @brief Compute the position given a range of values. - * @param lowerBound The lower bound; must be less than or equal to the @par{upperBound}. - * @param upperBound The upper bound; must be greater than or equal to the @par{lowerBound}. - * @return The calculated position. + * @param lowerBound The lower bound; must be less than or equal to the @par{upperBound}. + * @param upperBound The upper bound; must be greater than or equal to the @par{lowerBound}. + * @return The calculated position. **/ -(CGFloat)positionForLowerBound:(CGFloat __unused)lowerBound upperBound:(CGFloat __unused)upperBound { diff --git a/framework/Source/CPTDefinitions.h b/framework/Source/CPTDefinitions.h index 8b35198ef..acb1ffd2a 100644 --- a/framework/Source/CPTDefinitions.h +++ b/framework/Source/CPTDefinitions.h @@ -131,8 +131,8 @@ * @def CPTRectInset * @hideinitializer * @param rect The rectangle to offset. - * @param dx The x-offset. - * @param dy The y-offset. + * @param dx The x-offset. + * @param dy The y-offset. * @brief A replacement for @ref CGRectInset(), casting each offset parameter to @ref CGFloat. **/ #define CPTRectInset(rect, dx, dy) CGRectInset(rect, (CGFloat)(dx), (CGFloat)(dy)) diff --git a/framework/Source/CPTFill.m b/framework/Source/CPTFill.m index 2b952e1f8..5fca3e248 100644 --- a/framework/Source/CPTFill.m +++ b/framework/Source/CPTFill.m @@ -21,8 +21,8 @@ @implementation CPTFill #pragma mark Init/Dealloc /** @brief Creates and returns a new CPTFill instance initialized with a given color. - * @param aColor The color. - * @return A new CPTFill instance initialized with the given color. + * @param aColor The color. + * @return A new CPTFill instance initialized with the given color. **/ +(nonnull instancetype)fillWithColor:(nonnull CPTColor *)aColor { @@ -30,8 +30,8 @@ +(nonnull instancetype)fillWithColor:(nonnull CPTColor *)aColor } /** @brief Creates and returns a new CPTFill instance initialized with a given gradient. - * @param aGradient The gradient. - * @return A new CPTFill instance initialized with the given gradient. + * @param aGradient The gradient. + * @return A new CPTFill instance initialized with the given gradient. **/ +(nonnull instancetype)fillWithGradient:(nonnull CPTGradient *)aGradient { @@ -39,8 +39,8 @@ +(nonnull instancetype)fillWithGradient:(nonnull CPTGradient *)aGradient } /** @brief Creates and returns a new CPTFill instance initialized with a given image. - * @param anImage The image. - * @return A new CPTFill instance initialized with the given image. + * @param anImage The image. + * @return A new CPTFill instance initialized with the given image. **/ +(nonnull instancetype)fillWithImage:(nonnull CPTImage *)anImage { @@ -48,8 +48,8 @@ +(nonnull instancetype)fillWithImage:(nonnull CPTImage *)anImage } /** @brief Initializes a newly allocated CPTFill object with the provided color. - * @param aColor The color. - * @return The initialized CPTFill object. + * @param aColor The color. + * @return The initialized CPTFill object. **/ -(nonnull instancetype)initWithColor:(nonnull CPTColor *)aColor { @@ -59,8 +59,8 @@ -(nonnull instancetype)initWithColor:(nonnull CPTColor *)aColor } /** @brief Initializes a newly allocated CPTFill object with the provided gradient. - * @param aGradient The gradient. - * @return The initialized CPTFill object. + * @param aGradient The gradient. + * @return The initialized CPTFill object. **/ -(nonnull instancetype)initWithGradient:(nonnull CPTGradient *)aGradient { @@ -70,8 +70,8 @@ -(nonnull instancetype)initWithGradient:(nonnull CPTGradient *)aGradient } /** @brief Initializes a newly allocated CPTFill object with the provided image. - * @param anImage The image. - * @return The initialized CPTFill object. + * @param anImage The image. + * @return The initialized CPTFill object. **/ -(nonnull instancetype)initWithImage:(nonnull CPTImage *)anImage { @@ -185,7 +185,7 @@ -(nullable CGColorRef)cgColor #pragma mark Drawing /** @brief Draws the gradient into the given graphics context inside the provided rectangle. - * @param rect The rectangle to draw into. + * @param rect The rectangle to draw into. * @param context The graphics context to draw into. **/ -(void)fillRect:(CGRect __unused)rect inContext:(nonnull CGContextRef __unused)context diff --git a/framework/Source/CPTFunctionDataSource.m b/framework/Source/CPTFunctionDataSource.m index 783f3008b..b7c40dfc7 100644 --- a/framework/Source/CPTFunctionDataSource.m +++ b/framework/Source/CPTFunctionDataSource.m @@ -69,9 +69,9 @@ @implementation CPTFunctionDataSource #pragma mark Init/Dealloc /** @brief Creates and returns a new CPTFunctionDataSource instance initialized with the provided function and plot. - * @param plot The plot that will display the function values. - * @param function The function used to generate plot data. - * @return A new CPTFunctionDataSource instance initialized with the provided function and plot. + * @param plot The plot that will display the function values. + * @param function The function used to generate plot data. + * @return A new CPTFunctionDataSource instance initialized with the provided function and plot. **/ +(nonnull instancetype)dataSourceForPlot:(nonnull CPTPlot *)plot withFunction:(nonnull CPTDataSourceFunction)function { @@ -79,9 +79,9 @@ +(nonnull instancetype)dataSourceForPlot:(nonnull CPTPlot *)plot withFunction:(n } /** @brief Creates and returns a new CPTFunctionDataSource instance initialized with the provided block and plot. - * @param plot The plot that will display the function values. - * @param block The Objective-C block used to generate plot data. - * @return A new CPTFunctionDataSource instance initialized with the provided block and plot. + * @param plot The plot that will display the function values. + * @param block The Objective-C block used to generate plot data. + * @return A new CPTFunctionDataSource instance initialized with the provided block and plot. **/ +(nonnull instancetype)dataSourceForPlot:(nonnull CPTPlot *)plot withBlock:(nonnull CPTDataSourceBlock)block { @@ -89,9 +89,9 @@ +(nonnull instancetype)dataSourceForPlot:(nonnull CPTPlot *)plot withBlock:(nonn } /** @brief Initializes a newly allocated CPTFunctionDataSource object with the provided function and plot. - * @param plot The plot that will display the function values. - * @param function The function used to generate plot data. - * @return The initialized CPTFunctionDataSource object. + * @param plot The plot that will display the function values. + * @param function The function used to generate plot data. + * @return The initialized CPTFunctionDataSource object. **/ -(nonnull instancetype)initForPlot:(nonnull CPTPlot *)plot withFunction:(nonnull CPTDataSourceFunction)function { @@ -106,9 +106,9 @@ -(nonnull instancetype)initForPlot:(nonnull CPTPlot *)plot withFunction:(nonnull } /** @brief Initializes a newly allocated CPTFunctionDataSource object with the provided block and plot. - * @param plot The plot that will display the function values. - * @param block The Objective-C block used to generate plot data. - * @return The initialized CPTFunctionDataSource object. + * @param plot The plot that will display the function values. + * @param block The Objective-C block used to generate plot data. + * @return The initialized CPTFunctionDataSource object. **/ -(nonnull instancetype)initForPlot:(nonnull CPTPlot *)plot withBlock:(nonnull CPTDataSourceBlock)block { diff --git a/framework/Source/CPTGradient.m b/framework/Source/CPTGradient.m index 3e2856e68..e5cb3ccb0 100644 --- a/framework/Source/CPTGradient.m +++ b/framework/Source/CPTGradient.m @@ -251,9 +251,9 @@ +(BOOL)supportsSecureCoding #pragma mark Factory Methods /** @brief Creates and returns a new CPTGradient instance initialized with an axial linear gradient between two given colors. - * @param begin The beginning color. - * @param end The ending color. - * @return A new CPTGradient instance initialized with an axial linear gradient between the two given colors. + * @param begin The beginning color. + * @param end The ending color. + * @return A new CPTGradient instance initialized with an axial linear gradient between the two given colors. **/ +(nonnull instancetype)gradientWithBeginningColor:(nonnull CPTColor *)begin endingColor:(nonnull CPTColor *)end { @@ -261,11 +261,11 @@ +(nonnull instancetype)gradientWithBeginningColor:(nonnull CPTColor *)begin endi } /** @brief Creates and returns a new CPTGradient instance initialized with an axial linear gradient between two given colors, at two given normalized positions. - * @param begin The beginning color. - * @param end The ending color. - * @param beginningPosition The beginning position (@num{0} ≤ @par{beginningPosition} ≤ @num{1}). - * @param endingPosition The ending position (@num{0} ≤ @par{endingPosition} ≤ @num{1}). - * @return A new CPTGradient instance initialized with an axial linear gradient between the two given colors, at two given normalized positions. + * @param begin The beginning color. + * @param end The ending color. + * @param beginningPosition The beginning position (@num{0} ≤ @par{beginningPosition} ≤ @num{1}). + * @param endingPosition The ending position (@num{0} ≤ @par{endingPosition} ≤ @num{1}). + * @return A new CPTGradient instance initialized with an axial linear gradient between the two given colors, at two given normalized positions. **/ +(nonnull instancetype)gradientWithBeginningColor:(nonnull CPTColor *)begin endingColor:(nonnull CPTColor *)end beginningPosition:(CGFloat)beginningPosition endingPosition:(CGFloat)endingPosition { @@ -685,8 +685,8 @@ +(nonnull instancetype)hydrogenSpectrumGradient #pragma mark Modification /** @brief Copies the current gradient and sets a new alpha value. - * @param alpha The alpha component (@num{0} ≤ @par{alpha} ≤ @num{1}). - * @return A copy of the current gradient with the new alpha value. + * @param alpha The alpha component (@num{0} ≤ @par{alpha} ≤ @num{1}). + * @return A copy of the current gradient with the new alpha value. **/ -(CPTGradient *)gradientWithAlphaComponent:(CGFloat)alpha { @@ -711,8 +711,8 @@ -(CPTGradient *)gradientWithAlphaComponent:(CGFloat)alpha } /** @brief Copies the current gradient and sets a new blending mode. - * @param mode The blending mode. - * @return A copy of the current gradient with the new blending mode. + * @param mode The blending mode. + * @return A copy of the current gradient with the new blending mode. **/ -(CPTGradient *)gradientWithBlendingMode:(CPTGradientBlendingMode)mode { @@ -727,9 +727,9 @@ -(CPTGradient *)gradientWithBlendingMode:(CPTGradientBlendingMode)mode * Adds a color stop with @par{color} at @par{position} in the list of color stops. * If two elements are at the same position then it is added immediately after the one that was there already. * - * @param color The color. - * @param position The color stop position (@num{0} ≤ @par{position} ≤ @num{1}). - * @return A copy of the current gradient with the new color stop. + * @param color The color. + * @param position The color stop position (@num{0} ≤ @par{position} ≤ @num{1}). + * @return A copy of the current gradient with the new color stop. **/ -(CPTGradient *)addColorStop:(nonnull CPTColor *)color atPosition:(CGFloat)position { @@ -747,8 +747,8 @@ -(CPTGradient *)addColorStop:(nonnull CPTColor *)color atPosition:(CGFloat)posit } /** @brief Copies the current gradient and removes the color stop at @par{position} from the list of color stops. - * @param position The color stop position (@num{0} ≤ @par{position} ≤ @num{1}). - * @return A copy of the current gradient with the color stop removed. + * @param position The color stop position (@num{0} ≤ @par{position} ≤ @num{1}). + * @return A copy of the current gradient with the color stop removed. **/ -(CPTGradient *)removeColorStopAtPosition:(CGFloat)position { @@ -763,8 +763,8 @@ -(CPTGradient *)removeColorStopAtPosition:(CGFloat)position } /** @brief Copies the current gradient and removes the color stop at @par{idx} from the list of color stops. - * @param idx The color stop index. - * @return A copy of the current gradient with the color stop removed. + * @param idx The color stop index. + * @return A copy of the current gradient with the color stop removed. **/ -(CPTGradient *)removeColorStopAtIndex:(NSUInteger)idx { @@ -782,8 +782,8 @@ -(CPTGradient *)removeColorStopAtIndex:(NSUInteger)idx #pragma mark Information /** @brief Gets the color at color stop @par{idx} from the list of color stops. - * @param idx The color stop index. - * @return The color at color stop @par{idx}. + * @param idx The color stop index. + * @return The color at color stop @par{idx}. **/ -(CGColorRef)newColorStopAtIndex:(NSUInteger)idx { @@ -804,8 +804,8 @@ -(CGColorRef)newColorStopAtIndex:(NSUInteger)idx } /** @brief Gets the color at an arbitrary position in the gradient. - * @param position The color stop position (@num{0} ≤ @par{position} ≤ @num{1}). - * @return The color at @par{position} in gradient. + * @param position The color stop position (@num{0} ≤ @par{position} ≤ @num{1}). + * @return The color at @par{position} in gradient. **/ -(CGColorRef)newColorAtPosition:(CGFloat)position { @@ -840,7 +840,7 @@ -(CGColorRef)newColorAtPosition:(CGFloat)position #pragma mark Drawing /** @brief Draws the gradient into the given graphics context inside the provided rectangle. - * @param rect The rectangle to draw into. + * @param rect The rectangle to draw into. * @param context The graphics context to draw into. **/ -(void)drawSwatchInRect:(CGRect)rect inContext:(nonnull CGContextRef)context @@ -849,7 +849,7 @@ -(void)drawSwatchInRect:(CGRect)rect inContext:(nonnull CGContextRef)context } /** @brief Draws the gradient into the given graphics context inside the provided rectangle. - * @param rect The rectangle to draw into. + * @param rect The rectangle to draw into. * @param context The graphics context to draw into. **/ -(void)fillRect:(CGRect)rect inContext:(nonnull CGContextRef)context @@ -935,8 +935,8 @@ -(BOOL)isOpaque /** @brief Returns a boolean value that indicates whether the received is equal to the given object. * Gradients are equal if they have the same @ref blendingMode, @ref angle, @ref gradientType, and gradient colors at the same positions. - * @param object The object to be compared with the receiver. - * @return @YES if @par{object} is equal to the receiver, @NO otherwise. + * @param object The object to be compared with the receiver. + * @return @YES if @par{object} is equal to the receiver, @NO otherwise. **/ -(BOOL)isEqual:(nullable id)object { diff --git a/framework/Source/CPTGraph.m b/framework/Source/CPTGraph.m index 19110c455..a1299975c 100644 --- a/framework/Source/CPTGraph.m +++ b/framework/Source/CPTGraph.m @@ -195,8 +195,8 @@ @implementation CPTGraph * a @ref defaultPlotSpace created with the @link CPTGraph::newPlotSpace -newPlotSpace @endlink method, * and an @ref axisSet created with the @link CPTGraph::newAxisSet -newAxisSet @endlink method. * - * @param newFrame The frame rectangle. - * @return The initialized CPTGraph object. + * @param newFrame The frame rectangle. + * @return The initialized CPTGraph object. **/ -(nonnull instancetype)initWithFrame:(CGRect)newFrame { @@ -478,8 +478,8 @@ -(nonnull CPTPlotArray *)allPlots } /** @brief Gets the plot at the given index in the plot array. - * @param idx An index within the bounds of the plot array. - * @return The plot at the given index. + * @param idx An index within the bounds of the plot array. + * @return The plot at the given index. **/ -(nullable CPTPlot *)plotAtIndex:(NSUInteger)idx { @@ -492,8 +492,8 @@ -(nullable CPTPlot *)plotAtIndex:(NSUInteger)idx } /** @brief Gets the plot with the given identifier from the plot array. - * @param identifier A plot identifier. - * @return The plot with the given identifier or @nil if it was not found. + * @param identifier A plot identifier. + * @return The plot with the given identifier or @nil if it was not found. **/ -(nullable CPTPlot *)plotWithIdentifier:(nullable id)identifier { @@ -517,7 +517,7 @@ -(void)addPlot:(nonnull CPTPlot *)plot } /** @brief Add a plot to the given plot space. - * @param plot The plot. + * @param plot The plot. * @param space The plot space. **/ -(void)addPlot:(nonnull CPTPlot *)plot toPlotSpace:(nullable CPTPlotSpace *)space @@ -552,7 +552,7 @@ -(void)removePlot:(nullable CPTPlot *)plot /** @brief Add a plot to the default plot space at the given index in the plot array. * @param plot The plot. - * @param idx An index within the bounds of the plot array. + * @param idx An index within the bounds of the plot array. **/ -(void)insertPlot:(nonnull CPTPlot *)plot atIndex:(NSUInteger)idx { @@ -560,8 +560,8 @@ -(void)insertPlot:(nonnull CPTPlot *)plot atIndex:(NSUInteger)idx } /** @brief Add a plot to the given plot space at the given index in the plot array. - * @param plot The plot. - * @param idx An index within the bounds of the plot array. + * @param plot The plot. + * @param idx An index within the bounds of the plot array. * @param space The plot space. **/ -(void)insertPlot:(nonnull CPTPlot *)plot atIndex:(NSUInteger)idx intoPlotSpace:(nullable CPTPlotSpace *)space @@ -606,8 +606,8 @@ -(nonnull CPTPlotSpaceArray *)allPlotSpaces } /** @brief Gets the plot space at the given index in the plot space array. - * @param idx An index within the bounds of the plot space array. - * @return The plot space at the given index. + * @param idx An index within the bounds of the plot space array. + * @return The plot space at the given index. **/ -(nullable CPTPlotSpace *)plotSpaceAtIndex:(NSUInteger)idx { @@ -615,8 +615,8 @@ -(nullable CPTPlotSpace *)plotSpaceAtIndex:(NSUInteger)idx } /** @brief Gets the plot space with the given identifier from the plot space array. - * @param identifier A plot space identifier. - * @return The plot space with the given identifier or @nil if it was not found. + * @param identifier A plot space identifier. + * @return The plot space with the given identifier or @nil if it was not found. **/ -(nullable CPTPlotSpace *)plotSpaceWithIdentifier:(nullable id)identifier { @@ -1073,9 +1073,9 @@ -(void)setTitlePlotAreaFrameAnchor:(CPTRectAnchor)newAnchor * this method immediately returns @YES. If none of the layers * handle the event, it is passed to all plot spaces whether they handle it or not. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -1135,9 +1135,9 @@ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint) * this method immediately returns @YES. If none of the layers * handle the event, it is passed to all plot spaces whether they handle it or not. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -1200,9 +1200,9 @@ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)in * this method immediately returns @YES. If none of the layers * handle the event, it is passed to all plot spaces whether they handle it or not. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceDraggedEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -1263,8 +1263,8 @@ -(BOOL)pointingDeviceDraggedEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoi * this method immediately returns @YES. If none of the layers * handle the event, it is passed to all plot spaces whether they handle it or not. * - * @param event The OS event. - * @return Whether the event was handled or not. + * @param event The OS event. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceCancelledEvent:(nonnull CPTNativeEvent *)event { @@ -1323,10 +1323,10 @@ -(BOOL)pointingDeviceCancelledEvent:(nonnull CPTNativeEvent *)event * this method immediately returns @YES. If none of the layers * handle the event, it is passed to all plot spaces whether they handle it or not. * - * @param event The OS event. - * @param fromPoint The starting coordinates of the interaction. - * @param toPoint The ending coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param fromPoint The starting coordinates of the interaction. + * @param toPoint The ending coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)scrollWheelEvent:(nonnull CPTNativeEvent *)event fromPoint:(CGPoint)fromPoint toPoint:(CGPoint)toPoint { diff --git a/framework/Source/CPTGridLineGroup.m b/framework/Source/CPTGridLineGroup.m index 4d19e3f3c..23ed2ce5f 100644 --- a/framework/Source/CPTGridLineGroup.m +++ b/framework/Source/CPTGridLineGroup.m @@ -35,8 +35,8 @@ @implementation CPTGridLineGroup * - @ref major = @NO * - @ref needsDisplayOnBoundsChange = @YES * - * @param newFrame The frame rectangle. - * @return The initialized CPTGridLineGroup object. + * @param newFrame The frame rectangle. + * @return The initialized CPTGridLineGroup object. **/ -(nonnull instancetype)initWithFrame:(CGRect)newFrame { diff --git a/framework/Source/CPTGridLines.m b/framework/Source/CPTGridLines.m index 0989ef8e0..07176a050 100644 --- a/framework/Source/CPTGridLines.m +++ b/framework/Source/CPTGridLines.m @@ -30,8 +30,8 @@ @implementation CPTGridLines * - @ref major = @NO * - @ref needsDisplayOnBoundsChange = @YES * - * @param newFrame The frame rectangle. - * @return The initialized CPTGridLines object. + * @param newFrame The frame rectangle. + * @return The initialized CPTGridLines object. **/ -(nonnull instancetype)initWithFrame:(CGRect)newFrame { diff --git a/framework/Source/CPTImage.m b/framework/Source/CPTImage.m index ecfbcfd37..c9a378ffb 100644 --- a/framework/Source/CPTImage.m +++ b/framework/Source/CPTImage.m @@ -116,8 +116,8 @@ @implementation CPTImage /** @brief Initializes a CPTImage instance with the contents of a file. * - * @param path The full or partial path to the image file. - * @return A CPTImage instance initialized from the file at the given path. + * @param path The full or partial path to the image file. + * @return A CPTImage instance initialized from the file at the given path. **/ -(nonnull instancetype)initWithContentsOfFile:(nonnull NSString *)path { @@ -128,9 +128,9 @@ -(nonnull instancetype)initWithContentsOfFile:(nonnull NSString *)path * * This is the designated initializer. * - * @param anImage The image to wrap. - * @param newScale The image scale. Must be greater than zero. - * @return A CPTImage instance initialized with the provided @ref CGImageRef. + * @param anImage The image to wrap. + * @param newScale The image scale. Must be greater than zero. + * @return A CPTImage instance initialized with the provided @ref CGImageRef. **/ -(nonnull instancetype)initWithCGImage:(nullable CGImageRef)anImage scale:(CGFloat)newScale { @@ -150,8 +150,8 @@ -(nonnull instancetype)initWithCGImage:(nullable CGImageRef)anImage scale:(CGFlo } /** @brief Initializes a CPTImage instance with the provided @ref CGImageRef and scale @num{1.0}. - * @param anImage The image to wrap. - * @return A CPTImage instance initialized with the provided @ref CGImageRef. + * @param anImage The image to wrap. + * @return A CPTImage instance initialized with the provided @ref CGImageRef. **/ -(nonnull instancetype)initWithCGImage:(nullable CGImageRef)anImage { @@ -211,8 +211,8 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /// @endcond /** @brief Returns an object initialized from data in a given unarchiver. - * @param coder An unarchiver object. - * @return An object initialized from data in a given unarchiver. + * @param coder An unarchiver object. + * @return An object initialized from data in a given unarchiver. */ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { @@ -280,8 +280,8 @@ -(nonnull id)copyWithZone:(nullable NSZone *)zone /** @brief Initializes a CPTImage instance with the named image. * - * @param name The name of the image to load. - * @return A new CPTImage instance initialized with the named image. + * @param name The name of the image to load. + * @return A new CPTImage instance initialized with the named image. **/ +(nonnull instancetype)imageNamed:(nonnull NSString *)name { @@ -290,8 +290,8 @@ +(nonnull instancetype)imageNamed:(nonnull NSString *)name /** @brief Initializes a CPTImage instance with the provided platform-native image. * - * @param anImage The platform-native image. - * @return A new CPTImage instance initialized with the provided image. + * @param anImage The platform-native image. + * @return A new CPTImage instance initialized with the provided image. **/ +(nonnull instancetype)imageWithNativeImage:(nullable CPTNativeImage *)anImage { @@ -300,8 +300,8 @@ +(nonnull instancetype)imageWithNativeImage:(nullable CPTNativeImage *)anImage /** @brief Initializes a CPTImage instance with the contents of a file. * - * @param path The full or partial path to the image file. - * @return A new CPTImage instance initialized from the file at the given path. + * @param path The full or partial path to the image file. + * @return A new CPTImage instance initialized from the file at the given path. **/ +(nonnull instancetype)imageWithContentsOfFile:(nonnull NSString *)path { @@ -309,9 +309,9 @@ +(nonnull instancetype)imageWithContentsOfFile:(nonnull NSString *)path } /** @brief Creates and returns a new CPTImage instance initialized with the provided @ref CGImageRef. - * @param anImage The image to wrap. - * @param newScale The image scale. - * @return A new CPTImage instance initialized with the provided @ref CGImageRef. + * @param anImage The image to wrap. + * @param newScale The image scale. + * @return A new CPTImage instance initialized with the provided @ref CGImageRef. **/ +(nonnull instancetype)imageWithCGImage:(nullable CGImageRef)anImage scale:(CGFloat)newScale { @@ -319,8 +319,8 @@ +(nonnull instancetype)imageWithCGImage:(nullable CGImageRef)anImage scale:(CGFl } /** @brief Creates and returns a new CPTImage instance initialized with the provided @ref CGImageRef and scale @num{1.0}. - * @param anImage The image to wrap. - * @return A new CPTImage instance initialized with the provided @ref CGImageRef. + * @param anImage The image to wrap. + * @return A new CPTImage instance initialized with the provided @ref CGImageRef. **/ +(nonnull instancetype)imageWithCGImage:(nullable CGImageRef)anImage { @@ -333,8 +333,8 @@ +(nonnull instancetype)imageWithCGImage:(nullable CGImageRef)anImage * double-resolution image with the given name followed by @quote{@2x}. If the @quote{@2x} image * is not available, the named image file will be loaded. * - * @param path The file system path of the file. - * @return A new CPTImage instance initialized with the contents of the PNG file. + * @param path The file system path of the file. + * @return A new CPTImage instance initialized with the contents of the PNG file. **/ +(nonnull instancetype)imageForPNGFile:(nonnull NSString *)path { @@ -349,8 +349,8 @@ +(nonnull instancetype)imageForPNGFile:(nonnull NSString *)path /** @brief Returns a boolean value that indicates whether the received is equal to the given object. * Images are equal if they have the same @ref scale, @ref tiled, @ref tileAnchoredToContext, image size, color space, bit depth, and image data. - * @param object The object to be compared with the receiver. - * @return @YES if @par{object} is equal to the receiver, @NO otherwise. + * @param object The object to be compared with the receiver. + * @return @YES if @par{object} is equal to the receiver, @NO otherwise. **/ -(BOOL)isEqual:(nullable id)object { @@ -725,7 +725,7 @@ -(void)drawImage:(nonnull CGImageRef)theImage inContext:(nonnull CGContextRef)co * If the tiled property is @YES, the image is repeatedly drawn to fill the clipping region, otherwise the image is * scaled to fit in @par{rect}. * - * @param rect The rectangle to draw into. + * @param rect The rectangle to draw into. * @param context The graphics context to draw into. **/ -(void)drawInRect:(CGRect)rect inContext:(nonnull CGContextRef)context diff --git a/framework/Source/CPTLayer.m b/framework/Source/CPTLayer.m index ef3af1887..93e5d8503 100644 --- a/framework/Source/CPTLayer.m +++ b/framework/Source/CPTLayer.m @@ -164,8 +164,8 @@ @implementation CPTLayer * - @ref opaque = @NO * - @ref masksToBounds = @NO * - * @param newFrame The frame rectangle. - * @return The initialized object. + * @param newFrame The frame rectangle. + * @return The initialized object. **/ -(nonnull instancetype)initWithFrame:(CGRect)newFrame { @@ -205,8 +205,8 @@ -(nonnull instancetype)init /// @} /** @brief Override to copy or initialize custom fields of the specified layer. - * @param layer The layer from which custom fields should be copied. - * @return A layer instance with any custom instance variables copied from @par{layer}. + * @param layer The layer from which custom fields should be copied. + * @return A layer instance with any custom instance variables copied from @par{layer}. */ -(nonnull instancetype)initWithLayer:(nonnull id)layer { @@ -266,8 +266,8 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /// @endcond /** @brief Returns an object initialized from data in a given unarchiver. - * @param coder An unarchiver object. - * @return An object initialized from data in a given unarchiver. + * @param coder An unarchiver object. + * @return An object initialized from data in a given unarchiver. */ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { @@ -757,9 +757,9 @@ -(nullable CPTSublayerSet *)sublayersExcludedFromAutomaticLayout /// @endcond /** @brief Returns the margins that should be left between the bounds of the receiver and all sublayers. - * @param left The left margin. - * @param top The top margin. - * @param right The right margin. + * @param left The left margin. + * @param top The top margin. + * @param right The right margin. * @param bottom The bottom margin. **/ -(void)sublayerMarginLeft:(nonnull CGFloat *)left top:(nonnull CGFloat *)top right:(nonnull CGFloat *)right bottom:(nonnull CGFloat *)bottom @@ -873,9 +873,9 @@ -(nullable CGPathRef)sublayerMaskingPath * The clipping path is built by recursively climbing the layer tree and combining the sublayer masks from * each super layer. The tree traversal stops when a layer is encountered that is not a CPTLayer. * - * @param context The graphics context to clip. + * @param context The graphics context to clip. * @param sublayer The sublayer that called this method. - * @param offset The cumulative position offset between the receiver and the first layer in the recursive calling chain. + * @param offset The cumulative position offset between the receiver and the first layer in the recursive calling chain. **/ -(void)applySublayerMaskToContext:(nonnull CGContextRef)context forSublayer:(nonnull CPTLayer *)sublayer withOffset:(CGPoint)offset { diff --git a/framework/Source/CPTLayerAnnotation.m b/framework/Source/CPTLayerAnnotation.m index 69c68d6da..bf64ae7ab 100644 --- a/framework/Source/CPTLayerAnnotation.m +++ b/framework/Source/CPTLayerAnnotation.m @@ -54,8 +54,8 @@ @implementation CPTLayerAnnotation * This is the designated initializer. The initialized layer will be anchored to * #CPTRectAnchorTop by default. * - * @param newAnchorLayer The reference layer. Must be non-@nil. - * @return The initialized CPTLayerAnnotation object. + * @param newAnchorLayer The reference layer. Must be non-@nil. + * @return The initialized CPTLayerAnnotation object. **/ -(nonnull instancetype)initWithAnchorLayer:(nonnull CPTLayer *)newAnchorLayer { @@ -113,8 +113,8 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /// @endcond /** @brief Returns an object initialized from data in a given unarchiver. - * @param coder An unarchiver object. - * @return An object initialized from data in a given unarchiver. + * @param coder An unarchiver object. + * @return An object initialized from data in a given unarchiver. */ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { diff --git a/framework/Source/CPTLegend.h b/framework/Source/CPTLegend.h index d865a3e21..cb9978bc8 100644 --- a/framework/Source/CPTLegend.h +++ b/framework/Source/CPTLegend.h @@ -56,34 +56,34 @@ typedef NS_ENUM (NSInteger, CPTLegendSwatchLayout) { /// @{ /** @brief @optional This method gives the delegate a chance to provide a background fill for each legend entry. - * @param legend The legend. - * @param idx The zero-based index of the legend entry for the given plot. - * @param plot The plot. - * @return The fill for the legend entry background or @nil to use the default @link CPTLegend::entryFill entryFill @endlink . + * @param legend The legend. + * @param idx The zero-based index of the legend entry for the given plot. + * @param plot The plot. + * @return The fill for the legend entry background or @nil to use the default @link CPTLegend::entryFill entryFill @endlink . **/ -(nullable CPTFill *)legend:(nonnull CPTLegend *)legend fillForEntryAtIndex:(NSUInteger)idx forPlot:(nonnull CPTPlot *)plot; /** @brief @optional This method gives the delegate a chance to provide a border line style for each legend entry. - * @param legend The legend. - * @param idx The zero-based index of the legend entry for the given plot. - * @param plot The plot. - * @return The line style for the legend entry border or @nil to use the default @link CPTLegend::entryBorderLineStyle entryBorderLineStyle @endlink . + * @param legend The legend. + * @param idx The zero-based index of the legend entry for the given plot. + * @param plot The plot. + * @return The line style for the legend entry border or @nil to use the default @link CPTLegend::entryBorderLineStyle entryBorderLineStyle @endlink . **/ -(nullable CPTLineStyle *)legend:(nonnull CPTLegend *)legend lineStyleForEntryAtIndex:(NSUInteger)idx forPlot:(nonnull CPTPlot *)plot; /** @brief @optional This method gives the delegate a chance to provide a custom swatch fill for each legend entry. - * @param legend The legend. - * @param idx The zero-based index of the legend entry for the given plot. - * @param plot The plot. - * @return The fill for the legend swatch or @nil to use the default @link CPTLegend::swatchFill swatchFill @endlink . + * @param legend The legend. + * @param idx The zero-based index of the legend entry for the given plot. + * @param plot The plot. + * @return The fill for the legend swatch or @nil to use the default @link CPTLegend::swatchFill swatchFill @endlink . **/ -(nullable CPTFill *)legend:(nonnull CPTLegend *)legend fillForSwatchAtIndex:(NSUInteger)idx forPlot:(nonnull CPTPlot *)plot; /** @brief @optional This method gives the delegate a chance to provide a custom swatch border line style for each legend entry. - * @param legend The legend. - * @param idx The zero-based index of the legend entry for the given plot. - * @param plot The plot. - * @return The line style for the legend swatch border or @nil to use the default @link CPTLegend::swatchBorderLineStyle swatchBorderLineStyle @endlink . + * @param legend The legend. + * @param idx The zero-based index of the legend entry for the given plot. + * @param plot The plot. + * @return The line style for the legend swatch border or @nil to use the default @link CPTLegend::swatchBorderLineStyle swatchBorderLineStyle @endlink . **/ -(nullable CPTLineStyle *)legend:(nonnull CPTLegend *)legend lineStyleForSwatchAtIndex:(NSUInteger)idx forPlot:(nonnull CPTPlot *)plot; @@ -92,12 +92,12 @@ typedef NS_ENUM (NSInteger, CPTLegendSwatchLayout) { * The "swatch" is the graphical part of the legend entry, usually accompanied by a text title * that will be drawn by the legend. Returning @NO will cause the legend to not draw the default * legend graphics. It is then the delegate’s responsibility to do this. - * @param legend The legend. - * @param idx The zero-based index of the legend entry for the given plot. - * @param plot The plot. - * @param rect The bounding rectangle to use when drawing the swatch. - * @param context The graphics context to draw into. - * @return @YES if the legend should draw the default swatch or @NO if the delegate handled the drawing. + * @param legend The legend. + * @param idx The zero-based index of the legend entry for the given plot. + * @param plot The plot. + * @param rect The bounding rectangle to use when drawing the swatch. + * @param context The graphics context to draw into. + * @return @YES if the legend should draw the default swatch or @NO if the delegate handled the drawing. **/ -(BOOL)legend:(nonnull CPTLegend *)legend shouldDrawSwatchAtIndex:(NSUInteger)idx forPlot:(nonnull CPTPlot *)plot inRect:(CGRect)rect inContext:(nonnull CGContextRef)context; @@ -110,8 +110,8 @@ typedef NS_ENUM (NSInteger, CPTLegendSwatchLayout) { * @if MacOnly was both pressed and released. @endif * @if iOSOnly received both the touch down and up events. @endif * @param legend The legend. - * @param plot The plot associated with the selected legend entry. - * @param idx The index of the + * @param plot The plot associated with the selected legend entry. + * @param idx The index of the * @if MacOnly clicked legend entry. @endif * @if iOSOnly touched legend entry. @endif **/ @@ -121,11 +121,11 @@ typedef NS_ENUM (NSInteger, CPTLegendSwatchLayout) { * @if MacOnly was both pressed and released. @endif * @if iOSOnly received both the touch down and up events. @endif * @param legend The legend. - * @param plot The plot associated with the selected legend entry. - * @param idx The index of the + * @param plot The plot associated with the selected legend entry. + * @param idx The index of the * @if MacOnly clicked legend entry. @endif * @if iOSOnly touched legend entry. @endif - * @param event The event that triggered the selection. + * @param event The event that triggered the selection. **/ -(void)legend:(nonnull CPTLegend *)legend legendEntryForPlot:(nonnull CPTPlot *)plot wasSelectedAtIndex:(NSUInteger)idx withEvent:(nonnull CPTNativeEvent *)event; @@ -133,8 +133,8 @@ typedef NS_ENUM (NSInteger, CPTLegendSwatchLayout) { * @if MacOnly was pressed. @endif * @if iOSOnly touch started. @endif * @param legend The legend. - * @param plot The plot associated with the selected legend entry. - * @param idx The index of the + * @param plot The plot associated with the selected legend entry. + * @param idx The index of the * @if MacOnly clicked legend entry. @endif * @if iOSOnly touched legend entry. @endif **/ @@ -144,11 +144,11 @@ typedef NS_ENUM (NSInteger, CPTLegendSwatchLayout) { * @if MacOnly was pressed. @endif * @if iOSOnly touch started. @endif * @param legend The legend. - * @param plot The plot associated with the selected legend entry. - * @param idx The index of the + * @param plot The plot associated with the selected legend entry. + * @param idx The index of the * @if MacOnly clicked legend entry. @endif * @if iOSOnly touched legend entry. @endif - * @param event The event that triggered the selection. + * @param event The event that triggered the selection. **/ -(void)legend:(nonnull CPTLegend *)legend legendEntryForPlot:(nonnull CPTPlot *)plot touchDownAtIndex:(NSUInteger)idx withEvent:(nonnull CPTNativeEvent *)event; @@ -156,8 +156,8 @@ typedef NS_ENUM (NSInteger, CPTLegendSwatchLayout) { * @if MacOnly was released. @endif * @if iOSOnly touch ended. @endif * @param legend The legend. - * @param plot The plot associated with the selected legend entry. - * @param idx The index of the + * @param plot The plot associated with the selected legend entry. + * @param idx The index of the * @if MacOnly clicked legend entry. @endif * @if iOSOnly touched legend entry. @endif **/ @@ -167,11 +167,11 @@ typedef NS_ENUM (NSInteger, CPTLegendSwatchLayout) { * @if MacOnly was released. @endif * @if iOSOnly touch ended. @endif * @param legend The legend. - * @param plot The plot associated with the selected legend entry. - * @param idx The index of the + * @param plot The plot associated with the selected legend entry. + * @param idx The index of the * @if MacOnly clicked legend entry. @endif * @if iOSOnly touched legend entry. @endif - * @param event The event that triggered the selection. + * @param event The event that triggered the selection. **/ -(void)legend:(nonnull CPTLegend *)legend legendEntryForPlot:(nonnull CPTPlot *)plot touchUpAtIndex:(NSUInteger)idx withEvent:(nonnull CPTNativeEvent *)event; diff --git a/framework/Source/CPTLegend.m b/framework/Source/CPTLegend.m index 17d4ce474..bcc00ef21 100644 --- a/framework/Source/CPTLegend.m +++ b/framework/Source/CPTLegend.m @@ -239,8 +239,8 @@ @implementation CPTLegend #pragma mark Factory Methods /** @brief Creates and returns a new CPTLegend instance with legend entries for each plot in the given array. - * @param newPlots An array of plots. - * @return A new CPTLegend instance. + * @param newPlots An array of plots. + * @return A new CPTLegend instance. **/ +(nonnull instancetype)legendWithPlots:(nullable CPTPlotArray *)newPlots { @@ -248,8 +248,8 @@ +(nonnull instancetype)legendWithPlots:(nullable CPTPlotArray *)newPlots } /** @brief Creates and returns a new CPTLegend instance with legend entries for each plot in the given graph. - * @param graph The graph. - * @return A new CPTLegend instance. + * @param graph The graph. + * @return A new CPTLegend instance. **/ +(nonnull instancetype)legendWithGraph:(nullable __kindof CPTGraph *)graph { @@ -296,8 +296,8 @@ +(nonnull instancetype)legendWithGraph:(nullable __kindof CPTGraph *)graph * - @ref paddingBottom = @num{5.0} * - @ref needsDisplayOnBoundsChange = @YES * - * @param newFrame The frame rectangle. - * @return The initialized CPTLegend object. + * @param newFrame The frame rectangle. + * @return The initialized CPTLegend object. **/ -(nonnull instancetype)initWithFrame:(CGRect)newFrame { @@ -345,8 +345,8 @@ -(nonnull instancetype)initWithFrame:(CGRect)newFrame /// @} /** @brief Initializes a newly allocated CPTLegend object and adds legend entries for each plot in the given array. - * @param newPlots An array of plots. - * @return The initialized CPTLegend object. + * @param newPlots An array of plots. + * @return The initialized CPTLegend object. **/ -(nonnull instancetype)initWithPlots:(nullable CPTPlotArray *)newPlots { @@ -359,8 +359,8 @@ -(nonnull instancetype)initWithPlots:(nullable CPTPlotArray *)newPlots } /** @brief Initializes a newly allocated CPTLegend object and adds legend entries for each plot in the given graph. - * @param graph A graph. - * @return The initialized CPTLegend object. + * @param graph A graph. + * @return The initialized CPTLegend object. **/ -(nonnull instancetype)initWithGraph:(nullable __kindof CPTGraph *)graph { @@ -984,8 +984,8 @@ -(nonnull CPTPlotArray *)allPlots } /** @brief Gets the plot at the given index in the plot array. - * @param idx An index within the bounds of the plot array. - * @return The plot at the given index. + * @param idx An index within the bounds of the plot array. + * @return The plot at the given index. **/ -(nullable CPTPlot *)plotAtIndex:(NSUInteger)idx { @@ -998,8 +998,8 @@ -(nullable CPTPlot *)plotAtIndex:(NSUInteger)idx } /** @brief Gets the plot with the given identifier from the plot array. - * @param identifier A plot identifier. - * @return The plot with the given identifier or nil if it was not found. + * @param identifier A plot identifier. + * @return The plot with the given identifier or nil if it was not found. **/ -(nullable CPTPlot *)plotWithIdentifier:(nullable id)identifier { @@ -1044,7 +1044,7 @@ -(void)addPlot:(nonnull CPTPlot *)plot /** @brief Add a plot to the legend at the given index in the plot array. * @param plot The plot. - * @param idx An index within the bounds of the plot array. + * @param idx An index within the bounds of the plot array. **/ -(void)insertPlot:(nonnull CPTPlot *)plot atIndex:(NSUInteger)idx { @@ -1282,9 +1282,9 @@ -(void)legendEntryForInteractionPoint:(CGPoint)interactionPoint row:(nonnull NSU * The delegate method will be called and this method returns @YES if the @par{interactionPoint} is within a legend entry. * This method returns @NO if the @par{interactionPoint} is too far away from all of the legend entries. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -1350,9 +1350,9 @@ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint) * @link CPTLegendDelegate::legend:legendEntryForPlot:wasSelectedAtIndex:withEvent: -legend:legendEntryForPlot:wasSelectedAtIndex:withEvent: @endlink * methods, these will be called. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { diff --git a/framework/Source/CPTLegendEntry.m b/framework/Source/CPTLegendEntry.m index 38b054a5d..ed57e5ace 100644 --- a/framework/Source/CPTLegendEntry.m +++ b/framework/Source/CPTLegendEntry.m @@ -144,9 +144,9 @@ +(BOOL)supportsSecureCoding #pragma mark Drawing /** @brief Draws the legend title centered vertically in the given rectangle. - * @param rect The bounding rectangle where the title should be drawn. + * @param rect The bounding rectangle where the title should be drawn. * @param context The graphics context to draw into. - * @param scale The drawing scale factor. Must be greater than zero (@num{0}). + * @param scale The drawing scale factor. Must be greater than zero (@num{0}). **/ -(void)drawTitleInRect:(CGRect)rect inContext:(nonnull CGContextRef)context scale:(CGFloat)scale { diff --git a/framework/Source/CPTLimitBand.m b/framework/Source/CPTLimitBand.m index 2f75847c5..f1b05a6fe 100644 --- a/framework/Source/CPTLimitBand.m +++ b/framework/Source/CPTLimitBand.m @@ -22,9 +22,9 @@ @implementation CPTLimitBand #pragma mark Init/Dealloc /** @brief Creates and returns a new CPTLimitBand instance initialized with the provided range and fill. - * @param newRange The range of the band. - * @param newFill The fill used to draw the interior of the band. - * @return A new CPTLimitBand instance initialized with the provided range and fill. + * @param newRange The range of the band. + * @param newFill The fill used to draw the interior of the band. + * @return A new CPTLimitBand instance initialized with the provided range and fill. **/ +(nonnull instancetype)limitBandWithRange:(nullable CPTPlotRange *)newRange fill:(nullable CPTFill *)newFill { @@ -32,9 +32,9 @@ +(nonnull instancetype)limitBandWithRange:(nullable CPTPlotRange *)newRange fill } /** @brief Initializes a newly allocated CPTLimitBand object with the provided range and fill. - * @param newRange The range of the band. - * @param newFill The fill used to draw the interior of the band. - * @return The initialized CPTLimitBand object. + * @param newRange The range of the band. + * @param newFill The fill used to draw the interior of the band. + * @return The initialized CPTLimitBand object. **/ -(nonnull instancetype)initWithRange:(nullable CPTPlotRange *)newRange fill:(nullable CPTFill *)newFill { @@ -86,8 +86,8 @@ -(void)encodeWithCoder:(nonnull NSCoder *)encoder /// @endcond /** @brief Returns an object initialized from data in a given unarchiver. - * @param decoder An unarchiver object. - * @return An object initialized from data in a given unarchiver. + * @param decoder An unarchiver object. + * @return An object initialized from data in a given unarchiver. */ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)decoder { diff --git a/framework/Source/CPTLineCap.m b/framework/Source/CPTLineCap.m index 24bb04662..c624e3f5b 100644 --- a/framework/Source/CPTLineCap.m +++ b/framework/Source/CPTLineCap.m @@ -349,8 +349,8 @@ +(nonnull instancetype)snowPlotLineCap } /** @brief Creates and returns a new CPTLineCap instance initialized with a line cap type of #CPTLineCapTypeCustom. - * @param aPath The bounding path for the custom line cap. - * @return A new CPTLineCap instance initialized with a line cap type of #CPTLineCapTypeCustom. + * @param aPath The bounding path for the custom line cap. + * @return A new CPTLineCap instance initialized with a line cap type of #CPTLineCapTypeCustom. **/ +(nonnull instancetype)customLineCapWithPath:(nullable CGPathRef)aPath { @@ -392,8 +392,8 @@ -(nonnull id)copyWithZone:(nullable NSZone *)zone #pragma mark Drawing /** @brief Draws the line cap into the given graphics context centered at the provided point. - * @param context The graphics context to draw into. - * @param center The center point of the line cap. + * @param context The graphics context to draw into. + * @param center The center point of the line cap. * @param direction The direction the line is pointing. **/ -(void)renderAsVectorInContext:(nonnull CGContextRef)context atPoint:(CGPoint)center inDirection:(CGPoint)direction diff --git a/framework/Source/CPTLineStyle.m b/framework/Source/CPTLineStyle.m index 26fcb8d08..68cb20db1 100644 --- a/framework/Source/CPTLineStyle.m +++ b/framework/Source/CPTLineStyle.m @@ -114,8 +114,8 @@ +(nonnull instancetype)lineStyle * * The line style will be initialized with values from the given @par{lineStyle}. * - * @param lineStyle An existing CPTLineStyle. - * @return A new line style instance. + * @param lineStyle An existing CPTLineStyle. + * @return A new line style instance. **/ +(nonnull instancetype)lineStyleWithStyle:(nullable CPTLineStyle *)lineStyle { @@ -281,7 +281,7 @@ -(void)strokePathInContext:(nonnull CGContextRef)context /** @brief Stroke a rectangular path in the given graphics context. * Call @link CPTLineStyle::setLineStyleInContext: -setLineStyleInContext: @endlink first to set up the drawing properties. * - * @param rect The rectangle to draw. + * @param rect The rectangle to draw. * @param context The graphics context. **/ -(void)strokeRect:(CGRect)rect inContext:(nonnull CGContextRef)context diff --git a/framework/Source/CPTMutableNumericData+TypeConversion.m b/framework/Source/CPTMutableNumericData+TypeConversion.m index 6099cca29..4d537c5b6 100644 --- a/framework/Source/CPTMutableNumericData+TypeConversion.m +++ b/framework/Source/CPTMutableNumericData+TypeConversion.m @@ -25,9 +25,9 @@ @implementation CPTMutableNumericData(TypeConversion) @dynamic byteOrder; /** @brief Converts the current numeric data to a new data type. - * @param newDataType The new data type format. + * @param newDataType The new data type format. * @param newSampleBytes The number of bytes used to store each sample. - * @param newByteOrder The new byte order. + * @param newByteOrder The new byte order. **/ -(void)convertToType:(CPTDataTypeFormat)newDataType sampleBytes:(size_t)newSampleBytes diff --git a/framework/Source/CPTMutableNumericData.m b/framework/Source/CPTMutableNumericData.m index 631d70704..55bf97a26 100644 --- a/framework/Source/CPTMutableNumericData.m +++ b/framework/Source/CPTMutableNumericData.m @@ -43,8 +43,8 @@ @implementation CPTMutableNumericData #pragma mark Samples /** @brief Gets a pointer to a given sample in the data buffer. - * @param sample The zero-based index into the sample array. The array is treated as if it only has one dimension. - * @return A pointer to the sample or @NULL if the sample index is out of bounds. + * @param sample The zero-based index into the sample array. The array is treated as if it only has one dimension. + * @return A pointer to the sample or @NULL if the sample index is out of bounds. **/ -(nullable void *)mutableSamplePointer:(NSUInteger)sample { @@ -57,9 +57,9 @@ -(nullable void *)mutableSamplePointer:(NSUInteger)sample } /** @brief Gets a pointer to a given sample in the data buffer. - * @param idx The zero-based indices into a multi-dimensional sample array. Each index should of type @ref NSUInteger and the number of indices + * @param idx The zero-based indices into a multi-dimensional sample array. Each index should of type @ref NSUInteger and the number of indices * (including @par{idx}) should match the @ref numberOfDimensions. - * @return A pointer to the sample or @NULL if any of the sample indices are out of bounds. + * @return A pointer to the sample or @NULL if any of the sample indices are out of bounds. **/ -(nullable void *)mutableSamplePointerAtIndex:(NSUInteger)idx, ... { diff --git a/framework/Source/CPTNumericData+TypeConversion.m b/framework/Source/CPTNumericData+TypeConversion.m index 31e492af4..4b2777a13 100644 --- a/framework/Source/CPTNumericData+TypeConversion.m +++ b/framework/Source/CPTNumericData+TypeConversion.m @@ -6,10 +6,10 @@ @implementation CPTNumericData(TypeConversion) /** @brief Copies the current numeric data and converts the data to a new data type. - * @param newDataType The new data type format. - * @param newSampleBytes The number of bytes used to store each sample. - * @param newByteOrder The new byte order. - * @return A copy of the current numeric data converted to the new data type. + * @param newDataType The new data type format. + * @param newSampleBytes The number of bytes used to store each sample. + * @param newByteOrder The new byte order. + * @return A copy of the current numeric data converted to the new data type. **/ -(nonnull CPTNumericData *)dataByConvertingToType:(CPTDataTypeFormat)newDataType sampleBytes:(size_t)newSampleBytes @@ -19,8 +19,8 @@ -(nonnull CPTNumericData *)dataByConvertingToType:(CPTDataTypeFormat)newDataType } /** @brief Copies the current numeric data and converts the data to a new data type. - * @param newDataType The new data type. - * @return A copy of the current numeric data converted to the new data type. + * @param newDataType The new data type. + * @return A copy of the current numeric data converted to the new data type. **/ -(nonnull CPTNumericData *)dataByConvertingToDataType:(CPTNumericDataType)newDataType { @@ -76,10 +76,10 @@ -(nonnull CPTNumericData *)dataByConvertingToDataType:(CPTNumericDataType)newDat /** @brief Copies a data buffer and converts the data to a new data type without changing the byte order. * * The data is assumed to be in host byte order and no byte order conversion is performed. - * @param sourceData The source data buffer. + * @param sourceData The source data buffer. * @param sourceDataType The data type of the source. - * @param destData The destination data buffer. - * @param destDataType The new data type. + * @param destData The destination data buffer. + * @param destDataType The new data type. **/ -(void)convertData:(nonnull NSData *)sourceData dataType:(nonnull CPTNumericDataType *)sourceDataType diff --git a/framework/Source/CPTNumericData.m b/framework/Source/CPTNumericData.m index 6f3fe9c20..167f8106a 100644 --- a/framework/Source/CPTNumericData.m +++ b/framework/Source/CPTNumericData.m @@ -110,10 +110,10 @@ @implementation CPTNumericData #pragma mark Factory Methods /** @brief Creates and returns a new CPTNumericData instance. - * @param newData The data buffer. - * @param newDataType The type of data stored in the buffer. - * @param shapeArray The shape of the data buffer array. Multi-dimensional data arrays will be assumed to be stored in #CPTDataOrderRowsFirst. - * @return A new CPTNumericData instance. + * @param newData The data buffer. + * @param newDataType The type of data stored in the buffer. + * @param shapeArray The shape of the data buffer array. Multi-dimensional data arrays will be assumed to be stored in #CPTDataOrderRowsFirst. + * @return A new CPTNumericData instance. **/ +(nonnull instancetype)numericDataWithData:(nonnull NSData *)newData dataType:(CPTNumericDataType)newDataType @@ -125,10 +125,10 @@ +(nonnull instancetype)numericDataWithData:(nonnull NSData *)newData } /** @brief Creates and returns a new CPTNumericData instance. - * @param newData The data buffer. - * @param newDataTypeString The type of data stored in the buffer. - * @param shapeArray The shape of the data buffer array. Multi-dimensional data arrays will be assumed to be stored in #CPTDataOrderRowsFirst. - * @return A new CPTNumericData instance. + * @param newData The data buffer. + * @param newDataTypeString The type of data stored in the buffer. + * @param shapeArray The shape of the data buffer array. Multi-dimensional data arrays will be assumed to be stored in #CPTDataOrderRowsFirst. + * @return A new CPTNumericData instance. **/ +(nonnull instancetype)numericDataWithData:(nonnull NSData *)newData dataTypeString:(nonnull NSString *)newDataTypeString @@ -144,10 +144,10 @@ +(nonnull instancetype)numericDataWithData:(nonnull NSData *)newData * Objects in newData should be instances of NSNumber, NSDecimalNumber, NSString, or NSNull. * Numbers and strings will be converted to @par{newDataType} and stored in the receiver. * Any instances of NSNull will be treated as @quote{not a number} (@NAN) values for floating point types and zero (@num{0}) for integer types. - * @param newData An array of numbers. - * @param newDataType The type of data stored in the buffer. - * @param shapeArray The shape of the data buffer array. Multi-dimensional data arrays will be assumed to be stored in #CPTDataOrderRowsFirst. - * @return A new CPTNumericData instance. + * @param newData An array of numbers. + * @param newDataType The type of data stored in the buffer. + * @param shapeArray The shape of the data buffer array. Multi-dimensional data arrays will be assumed to be stored in #CPTDataOrderRowsFirst. + * @return A new CPTNumericData instance. **/ +(nonnull instancetype)numericDataWithArray:(nonnull CPTNumberArray *)newData dataType:(CPTNumericDataType)newDataType @@ -163,10 +163,10 @@ +(nonnull instancetype)numericDataWithArray:(nonnull CPTNumberArray *)newData * Objects in newData should be instances of NSNumber, NSDecimalNumber, NSString, or NSNull. * Numbers and strings will be converted to newDataTypeString and stored in the receiver. * Any instances of NSNull will be treated as @quote{not a number} (@NAN) values for floating point types and zero (@num{0}) for integer types. - * @param newData An array of numbers. - * @param newDataTypeString The type of data stored in the buffer. - * @param shapeArray The shape of the data buffer array. Multi-dimensional data arrays will be assumed to be stored in #CPTDataOrderRowsFirst. - * @return A new CPTNumericData instance. + * @param newData An array of numbers. + * @param newDataTypeString The type of data stored in the buffer. + * @param shapeArray The shape of the data buffer array. Multi-dimensional data arrays will be assumed to be stored in #CPTDataOrderRowsFirst. + * @return A new CPTNumericData instance. **/ +(nonnull instancetype)numericDataWithArray:(nonnull CPTNumberArray *)newData dataTypeString:(nonnull NSString *)newDataTypeString @@ -178,11 +178,11 @@ +(nonnull instancetype)numericDataWithArray:(nonnull CPTNumberArray *)newData } /** @brief Creates and returns a new CPTNumericData instance. - * @param newData The data buffer. - * @param newDataType The type of data stored in the buffer. - * @param shapeArray The shape of the data buffer array. - * @param order The data order for a multi-dimensional data array (row-major or column-major). - * @return A new CPTNumericData instance. + * @param newData The data buffer. + * @param newDataType The type of data stored in the buffer. + * @param shapeArray The shape of the data buffer array. + * @param order The data order for a multi-dimensional data array (row-major or column-major). + * @return A new CPTNumericData instance. **/ +(nonnull instancetype)numericDataWithData:(nonnull NSData *)newData dataType:(CPTNumericDataType)newDataType @@ -196,11 +196,11 @@ +(nonnull instancetype)numericDataWithData:(nonnull NSData *)newData } /** @brief Creates and returns a new CPTNumericData instance. - * @param newData The data buffer. - * @param newDataTypeString The type of data stored in the buffer. - * @param shapeArray The shape of the data buffer array. - * @param order The data order for a multi-dimensional data array (row-major or column-major). - * @return A new CPTNumericData instance. + * @param newData The data buffer. + * @param newDataTypeString The type of data stored in the buffer. + * @param shapeArray The shape of the data buffer array. + * @param order The data order for a multi-dimensional data array (row-major or column-major). + * @return A new CPTNumericData instance. **/ +(nonnull instancetype)numericDataWithData:(nonnull NSData *)newData dataTypeString:(nonnull NSString *)newDataTypeString @@ -218,11 +218,11 @@ +(nonnull instancetype)numericDataWithData:(nonnull NSData *)newData * Objects in newData should be instances of NSNumber, NSDecimalNumber, NSString, or NSNull. * Numbers and strings will be converted to @par{newDataType} and stored in the receiver. * Any instances of NSNull will be treated as @quote{not a number} (@NAN) values for floating point types and zero (@num{0}) for integer types. - * @param newData An array of numbers. - * @param newDataType The type of data stored in the buffer. - * @param shapeArray The shape of the data buffer array. - * @param order The data order for a multi-dimensional data array (row-major or column-major). - * @return A new CPTNumericData instance. + * @param newData An array of numbers. + * @param newDataType The type of data stored in the buffer. + * @param shapeArray The shape of the data buffer array. + * @param order The data order for a multi-dimensional data array (row-major or column-major). + * @return A new CPTNumericData instance. **/ +(nonnull instancetype)numericDataWithArray:(nonnull CPTNumberArray *)newData dataType:(CPTNumericDataType)newDataType @@ -240,11 +240,11 @@ +(nonnull instancetype)numericDataWithArray:(nonnull CPTNumberArray *)newData * Objects in newData should be instances of NSNumber, NSDecimalNumber, NSString, or NSNull. * Numbers and strings will be converted to newDataTypeString and stored in the receiver. * Any instances of NSNull will be treated as @quote{not a number} (@NAN) values for floating point types and zero (@num{0}) for integer types. - * @param newData An array of numbers. - * @param newDataTypeString The type of data stored in the buffer. - * @param shapeArray The shape of the data buffer array. - * @param order The data order for a multi-dimensional data array (row-major or column-major). - * @return A new CPTNumericData instance. + * @param newData An array of numbers. + * @param newDataTypeString The type of data stored in the buffer. + * @param shapeArray The shape of the data buffer array. + * @param order The data order for a multi-dimensional data array (row-major or column-major). + * @return A new CPTNumericData instance. **/ +(nonnull instancetype)numericDataWithArray:(nonnull CPTNumberArray *)newData dataTypeString:(nonnull NSString *)newDataTypeString @@ -261,10 +261,10 @@ +(nonnull instancetype)numericDataWithArray:(nonnull CPTNumberArray *)newData #pragma mark Init/Dealloc /** @brief Initializes a newly allocated CPTNumericData object with the provided data. - * @param newData The data buffer. - * @param newDataType The type of data stored in the buffer. - * @param shapeArray The shape of the data buffer array. Multi-dimensional data arrays will be assumed to be stored in #CPTDataOrderRowsFirst. - * @return The initialized CPTNumericData instance. + * @param newData The data buffer. + * @param newDataType The type of data stored in the buffer. + * @param shapeArray The shape of the data buffer array. Multi-dimensional data arrays will be assumed to be stored in #CPTDataOrderRowsFirst. + * @return The initialized CPTNumericData instance. **/ -(nonnull instancetype)initWithData:(nonnull NSData *)newData dataType:(CPTNumericDataType)newDataType @@ -277,10 +277,10 @@ -(nonnull instancetype)initWithData:(nonnull NSData *)newData } /** @brief Initializes a newly allocated CPTNumericData object with the provided data. - * @param newData The data buffer. - * @param newDataTypeString The type of data stored in the buffer. - * @param shapeArray The shape of the data buffer array. Multi-dimensional data arrays will be assumed to be stored in #CPTDataOrderRowsFirst. - * @return The initialized CPTNumericData instance. + * @param newData The data buffer. + * @param newDataTypeString The type of data stored in the buffer. + * @param shapeArray The shape of the data buffer array. Multi-dimensional data arrays will be assumed to be stored in #CPTDataOrderRowsFirst. + * @return The initialized CPTNumericData instance. **/ -(nonnull instancetype)initWithData:(nonnull NSData *)newData dataTypeString:(nonnull NSString *)newDataTypeString @@ -296,10 +296,10 @@ -(nonnull instancetype)initWithData:(nonnull NSData *)newData * Objects in newData should be instances of NSNumber, NSDecimalNumber, NSString, or NSNull. * Numbers and strings will be converted to @par{newDataType} and stored in the receiver. * Any instances of NSNull will be treated as @quote{not a number} (@NAN) values for floating point types and zero (@num{0}) for integer types. - * @param newData An array of numbers. - * @param newDataType The type of data stored in the buffer. - * @param shapeArray The shape of the data buffer array. Multi-dimensional data arrays will be assumed to be stored in #CPTDataOrderRowsFirst. - * @return The initialized CPTNumericData instance. + * @param newData An array of numbers. + * @param newDataType The type of data stored in the buffer. + * @param shapeArray The shape of the data buffer array. Multi-dimensional data arrays will be assumed to be stored in #CPTDataOrderRowsFirst. + * @return The initialized CPTNumericData instance. **/ -(nonnull instancetype)initWithArray:(nonnull CPTNumberArray *)newData dataType:(CPTNumericDataType)newDataType @@ -315,10 +315,10 @@ -(nonnull instancetype)initWithArray:(nonnull CPTNumberArray *)newData * Objects in newData should be instances of NSNumber, NSDecimalNumber, NSString, or NSNull. * Numbers and strings will be converted to newDataTypeString and stored in the receiver. * Any instances of NSNull will be treated as @quote{not a number} (@NAN) values for floating point types and zero (@num{0}) for integer types. - * @param newData An array of numbers. - * @param newDataTypeString The type of data stored in the buffer. - * @param shapeArray The shape of the data buffer array. Multi-dimensional data arrays will be assumed to be stored in #CPTDataOrderRowsFirst. - * @return The initialized CPTNumericData instance. + * @param newData An array of numbers. + * @param newDataTypeString The type of data stored in the buffer. + * @param shapeArray The shape of the data buffer array. Multi-dimensional data arrays will be assumed to be stored in #CPTDataOrderRowsFirst. + * @return The initialized CPTNumericData instance. **/ -(nonnull instancetype)initWithArray:(nonnull CPTNumberArray *)newData dataTypeString:(nonnull NSString *)newDataTypeString @@ -330,11 +330,11 @@ -(nonnull instancetype)initWithArray:(nonnull CPTNumberArray *)newData } /** @brief Initializes a newly allocated CPTNumericData object with the provided data. This is the designated initializer. - * @param newData The data buffer. - * @param newDataType The type of data stored in the buffer. - * @param shapeArray The shape of the data buffer array. - * @param order The data order for a multi-dimensional data array (row-major or column-major). - * @return The initialized CPTNumericData instance. + * @param newData The data buffer. + * @param newDataType The type of data stored in the buffer. + * @param shapeArray The shape of the data buffer array. + * @param order The data order for a multi-dimensional data array (row-major or column-major). + * @return The initialized CPTNumericData instance. **/ -(nonnull instancetype)initWithData:(nonnull NSData *)newData dataType:(CPTNumericDataType)newDataType @@ -352,11 +352,11 @@ -(nonnull instancetype)initWithData:(nonnull NSData *)newData } /** @brief Initializes a newly allocated CPTNumericData object with the provided data. - * @param newData The data buffer. - * @param newDataTypeString The type of data stored in the buffer. - * @param shapeArray The shape of the data buffer array. - * @param order The data order for a multi-dimensional data array (row-major or column-major). - * @return The initialized CPTNumericData instance. + * @param newData The data buffer. + * @param newDataTypeString The type of data stored in the buffer. + * @param shapeArray The shape of the data buffer array. + * @param order The data order for a multi-dimensional data array (row-major or column-major). + * @return The initialized CPTNumericData instance. **/ -(nonnull instancetype)initWithData:(nonnull NSData *)newData dataTypeString:(nonnull NSString *)newDataTypeString @@ -374,11 +374,11 @@ -(nonnull instancetype)initWithData:(nonnull NSData *)newData * Objects in newData should be instances of NSNumber, NSDecimalNumber, NSString, or NSNull. * Numbers and strings will be converted to @par{newDataType} and stored in the receiver. * Any instances of NSNull will be treated as @quote{not a number} (@NAN) values for floating point types and zero (@num{0}) for integer types. - * @param newData An array of numbers. - * @param newDataType The type of data stored in the buffer. - * @param shapeArray The shape of the data buffer array. - * @param order The data order for a multi-dimensional data array (row-major or column-major). - * @return The initialized CPTNumericData instance. + * @param newData An array of numbers. + * @param newDataType The type of data stored in the buffer. + * @param shapeArray The shape of the data buffer array. + * @param order The data order for a multi-dimensional data array (row-major or column-major). + * @return The initialized CPTNumericData instance. **/ -(nonnull instancetype)initWithArray:(nonnull CPTNumberArray *)newData dataType:(CPTNumericDataType)newDataType @@ -396,11 +396,11 @@ -(nonnull instancetype)initWithArray:(nonnull CPTNumberArray *)newData * Objects in newData should be instances of NSNumber, NSDecimalNumber, NSString, or NSNull. * Numbers and strings will be converted to newDataTypeString and stored in the receiver. * Any instances of NSNull will be treated as @quote{not a number} (@NAN) values for floating point types and zero (@num{0}) for integer types. - * @param newData An array of numbers. - * @param newDataTypeString The type of data stored in the buffer. - * @param shapeArray The shape of the data buffer array. - * @param order The data order for a multi-dimensional data array (row-major or column-major). - * @return The initialized CPTNumericData instance. + * @param newData An array of numbers. + * @param newDataTypeString The type of data stored in the buffer. + * @param shapeArray The shape of the data buffer array. + * @param order The data order for a multi-dimensional data array (row-major or column-major). + * @return The initialized CPTNumericData instance. **/ -(nonnull instancetype)initWithArray:(nonnull CPTNumberArray *)newData dataTypeString:(nonnull NSString *)newDataTypeString @@ -575,9 +575,9 @@ -(void)setShape:(nonnull CPTNumberArray *)newShape #pragma mark Samples /** @brief Gets the offset of a given sample in the data buffer. - * @param idx The zero-based indices into a multi-dimensional sample array. Each index should of type @ref NSUInteger and the number of indices + * @param idx The zero-based indices into a multi-dimensional sample array. Each index should of type @ref NSUInteger and the number of indices * (including @par{idx}) should match the @ref numberOfDimensions. - * @return The sample offset in the data buffer. To get the byte offset, multiply this value by + * @return The sample offset in the data buffer. To get the byte offset, multiply this value by * @ref sampleBytes. If any index is greater than or equal to the corresponding * dimension of the data buffer, this method returns @ref NSNotFound. **/ @@ -595,8 +595,8 @@ -(NSUInteger)sampleIndex:(NSUInteger)idx, ... } /** @brief Gets the value of a given sample in the data buffer. - * @param sample The zero-based index into the sample array. The array is treated as if it only has one dimension. - * @return The sample value wrapped in an instance of NSNumber or @nil if the sample index is out of bounds. + * @param sample The zero-based index into the sample array. The array is treated as if it only has one dimension. + * @return The sample value wrapped in an instance of NSNumber or @nil if the sample index is out of bounds. * * @note NSNumber does not support complex numbers. Complex number types will be cast to * @float or @double before being wrapped in an instance of NSNumber. @@ -695,9 +695,9 @@ case sizeof(NSDecimal): } /** @brief Gets the value of a given sample in the data buffer. - * @param idx The zero-based indices into a multi-dimensional sample array. Each index should of type @ref NSUInteger and the number of indices + * @param idx The zero-based indices into a multi-dimensional sample array. Each index should of type @ref NSUInteger and the number of indices * (including @par{idx}) should match the @ref numberOfDimensions. - * @return The sample value wrapped in an instance of NSNumber or @nil if any of the sample indices are out of bounds. + * @return The sample value wrapped in an instance of NSNumber or @nil if any of the sample indices are out of bounds. * * @note NSNumber does not support complex numbers. Complex number types will be cast to * @float or @double before being wrapped in an instance of NSNumber. @@ -722,8 +722,8 @@ -(NSNumber *)sampleValueAtIndex:(NSUInteger)idx, ... } /** @brief Gets a pointer to a given sample in the data buffer. - * @param sample The zero-based index into the sample array. The array is treated as if it only has one dimension. - * @return A pointer to the sample or @NULL if the sample index is out of bounds. + * @param sample The zero-based index into the sample array. The array is treated as if it only has one dimension. + * @return A pointer to the sample or @NULL if the sample index is out of bounds. **/ -(nullable const void *)samplePointer:(NSUInteger)sample { @@ -736,9 +736,9 @@ -(nullable const void *)samplePointer:(NSUInteger)sample } /** @brief Gets a pointer to a given sample in the data buffer. - * @param idx The zero-based indices into a multi-dimensional sample array. Each index should of type @ref NSUInteger and the number of indices + * @param idx The zero-based indices into a multi-dimensional sample array. Each index should of type @ref NSUInteger and the number of indices * (including @par{idx}) should match the @ref numberOfDimensions. - * @return A pointer to the sample or @NULL if any of the sample indices are out of bounds. + * @return A pointer to the sample or @NULL if any of the sample indices are out of bounds. **/ -(nullable const void *)samplePointerAtIndex:(NSUInteger)idx, ... { @@ -788,10 +788,10 @@ -(nonnull CPTNumberArray *)sampleArray /** @internal * @brief Gets the offset of a given sample in the data buffer. This method does not call @par{va_end()} * on the @par{indexList}. - * @param idx The zero-based indices into a multi-dimensional sample array. Each index should of type @ref NSUInteger and the number of indices + * @param idx The zero-based indices into a multi-dimensional sample array. Each index should of type @ref NSUInteger and the number of indices * (including @par{idx}) should match the @ref numberOfDimensions. - * @param indexList A @par{va_list} of the additional indices. - * @return The sample offset in the data buffer. To get the byte offset, multiply this value by + * @param indexList A @par{va_list} of the additional indices. + * @return The sample offset in the data buffer. To get the byte offset, multiply this value by * @ref sampleBytes. If any index is greater than or equal to the corresponding * dimension of the data buffer, this method returns @ref NSNotFound. **/ @@ -1173,8 +1173,8 @@ -(void)encodeWithCoder:(nonnull NSCoder *)encoder /// @endcond /** @brief Returns an object initialized from data in a given unarchiver. - * @param decoder An unarchiver object. - * @return An object initialized from data in a given unarchiver. + * @param decoder An unarchiver object. + * @return An object initialized from data in a given unarchiver. */ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)decoder { diff --git a/framework/Source/CPTNumericDataType.m b/framework/Source/CPTNumericDataType.m index af098066e..de0218286 100644 --- a/framework/Source/CPTNumericDataType.m +++ b/framework/Source/CPTNumericDataType.m @@ -10,10 +10,10 @@ #pragma mark Data type utilities /** @brief Initializes a CPTNumericDataType struct with the given parameter values. - * @param format The data type format. - * @param sampleBytes The number of bytes in each sample. - * @param byteOrder The byte order used to store the data samples. - * @return The initialized CPTNumericDataType struct. + * @param format The data type format. + * @param sampleBytes The number of bytes in each sample. + * @param byteOrder The byte order used to store the data samples. + * @return The initialized CPTNumericDataType struct. **/ CPTNumericDataType CPTDataType(CPTDataTypeFormat format, size_t sampleBytes, CFByteOrder byteOrder) { @@ -27,8 +27,8 @@ CPTNumericDataType CPTDataType(CPTDataTypeFormat format, size_t sampleBytes, CFB } /** @brief Initializes a CPTNumericDataType struct from a data type string. - * @param dataTypeString The data type string. - * @return The initialized CPTNumericDataType struct. + * @param dataTypeString The data type string. + * @return The initialized CPTNumericDataType struct. **/ CPTNumericDataType CPTDataTypeWithDataTypeString(NSString *__nonnull dataTypeString) { @@ -43,8 +43,8 @@ CPTNumericDataType CPTDataTypeWithDataTypeString(NSString *__nonnull dataTypeStr } /** @brief Generates a string representation of the given data type. - * @param dataType The data type. - * @return The string representation of the given data type. + * @param dataType The data type. + * @return The string representation of the given data type. **/ NSString *CPTDataTypeStringFromDataType(CPTNumericDataType dataType) { @@ -96,8 +96,8 @@ CPTNumericDataType CPTDataTypeWithDataTypeString(NSString *__nonnull dataTypeStr } /** @brief Validates a data type format. - * @param format The data type format. - * @return Returns @YES if the format is supported by CPTNumericData, @NO otherwise. + * @param format The data type format. + * @return Returns @YES if the format is supported by CPTNumericData, @NO otherwise. **/ BOOL CPTDataTypeIsSupported(CPTNumericDataType format) { @@ -179,9 +179,9 @@ case sizeof(double complex): } /** @brief Compares two data types for equality. - * @param dataType1 The first data type format. - * @param dataType2 The second data type format. - * @return Returns @YES if the two data types have the same format, size, and byte order. + * @param dataType1 The first data type format. + * @param dataType2 The second data type format. + * @return Returns @YES if the two data types have the same format, size, and byte order. **/ BOOL CPTDataTypeEqualToDataType(CPTNumericDataType dataType1, CPTNumericDataType dataType2) { diff --git a/framework/Source/CPTPathExtensions.m b/framework/Source/CPTPathExtensions.m index fbd20d904..9369cd850 100644 --- a/framework/Source/CPTPathExtensions.m +++ b/framework/Source/CPTPathExtensions.m @@ -4,9 +4,9 @@ /** @brief Creates a rectangular path with rounded corners. * - * @param rect The bounding rectangle for the path. - * @param cornerRadius The radius of the rounded corners. - * @return The new path. Caller is responsible for releasing this. + * @param rect The bounding rectangle for the path. + * @param cornerRadius The radius of the rounded corners. + * @return The new path. Caller is responsible for releasing this. **/ __nonnull CGPathRef CPTCreateRoundedRectPath(CGRect rect, CGFloat cornerRadius) { @@ -48,8 +48,8 @@ __nonnull CGPathRef CPTCreateRoundedRectPath(CGRect rect, CGFloat cornerRadius) /** @brief Adds a rectangular path with rounded corners to a graphics context. * - * @param context The graphics context. - * @param rect The bounding rectangle for the path. + * @param context The graphics context. + * @param rect The bounding rectangle for the path. * @param cornerRadius The radius of the rounded corners. **/ void CPTAddRoundedRectPath(__nonnull CGContextRef context, CGRect rect, CGFloat cornerRadius) diff --git a/framework/Source/CPTPieChart.h b/framework/Source/CPTPieChart.h index 3d568bb59..3c42e8818 100644 --- a/framework/Source/CPTPieChart.h +++ b/framework/Source/CPTPieChart.h @@ -50,9 +50,9 @@ typedef NS_CLOSED_ENUM(NSInteger, CPTPieDirection) { /// @{ /** @brief @optional Gets a range of slice fills for the given pie chart. - * @param pieChart The pie chart. - * @param indexRange The range of the data indexes of interest. - * @return An array of pie slice fills. + * @param pieChart The pie chart. + * @param indexRange The range of the data indexes of interest. + * @return An array of pie slice fills. **/ -(nullable CPTFillArray *)sliceFillsForPieChart:(nonnull CPTPieChart *)pieChart recordIndexRange:(NSRange)indexRange; @@ -60,9 +60,9 @@ typedef NS_CLOSED_ENUM(NSInteger, CPTPieDirection) { * This method will not be called if * @link CPTPieChartDataSource::sliceFillsForPieChart:recordIndexRange: -sliceFillsForPieChart:recordIndexRange: @endlink * is also implemented in the datasource. - * @param pieChart The pie chart. - * @param idx The data index of interest. - * @return The pie slice fill for the slice with the given index. If the datasource returns @nil, the default fill is used. + * @param pieChart The pie chart. + * @param idx The data index of interest. + * @return The pie slice fill for the slice with the given index. If the datasource returns @nil, the default fill is used. * If the data source returns an NSNull object, no fill is drawn. **/ -(nullable CPTFill *)sliceFillForPieChart:(nonnull CPTPieChart *)pieChart recordIndex:(NSUInteger)idx; @@ -73,9 +73,9 @@ typedef NS_CLOSED_ENUM(NSInteger, CPTPieDirection) { /// @{ /** @brief @optional Gets a range of slice offsets for the given pie chart. - * @param pieChart The pie chart. - * @param indexRange The range of the data indexes of interest. - * @return An array of radial offsets. + * @param pieChart The pie chart. + * @param indexRange The range of the data indexes of interest. + * @return An array of radial offsets. **/ -(nullable CPTNumberArray *)radialOffsetsForPieChart:(nonnull CPTPieChart *)pieChart recordIndexRange:(NSRange)indexRange; @@ -83,9 +83,9 @@ typedef NS_CLOSED_ENUM(NSInteger, CPTPieDirection) { * This method will not be called if * @link CPTPieChartDataSource::radialOffsetsForPieChart:recordIndexRange: -radialOffsetsForPieChart:recordIndexRange: @endlink * is also implemented in the datasource. - * @param pieChart The pie chart. - * @param idx The data index of interest. - * @return The radial offset in view coordinates. Zero is no offset. + * @param pieChart The pie chart. + * @param idx The data index of interest. + * @return The radial offset in view coordinates. Zero is no offset. **/ -(CGFloat)radialOffsetForPieChart:(nonnull CPTPieChart *)pieChart recordIndex:(NSUInteger)idx; @@ -95,16 +95,16 @@ typedef NS_CLOSED_ENUM(NSInteger, CPTPieDirection) { /// @{ /** @brief @optional Gets the legend title for the given pie chart slice. - * @param pieChart The pie chart. - * @param idx The data index of interest. - * @return The title text for the legend entry for the point with the given index. + * @param pieChart The pie chart. + * @param idx The data index of interest. + * @return The title text for the legend entry for the point with the given index. **/ -(nullable NSString *)legendTitleForPieChart:(nonnull CPTPieChart *)pieChart recordIndex:(NSUInteger)idx; /** @brief @optional Gets the styled legend title for the given pie chart slice. - * @param pieChart The pie chart. - * @param idx The data index of interest. - * @return The styled title text for the legend entry for the point with the given index. + * @param pieChart The pie chart. + * @param idx The data index of interest. + * @return The styled title text for the legend entry for the point with the given index. **/ -(nullable NSAttributedString *)attributedLegendTitleForPieChart:(nonnull CPTPieChart *)pieChart recordIndex:(NSUInteger)idx; @@ -127,7 +127,7 @@ typedef NS_CLOSED_ENUM(NSInteger, CPTPieDirection) { * @if MacOnly was both pressed and released. @endif * @if iOSOnly received both the touch down and up events. @endif * @param plot The pie chart. - * @param idx The index of the + * @param idx The index of the * @if MacOnly clicked pie slice. @endif * @if iOSOnly touched pie slice. @endif **/ @@ -136,8 +136,8 @@ typedef NS_CLOSED_ENUM(NSInteger, CPTPieDirection) { /** @brief @optional Informs the delegate that a pie slice * @if MacOnly was both pressed and released. @endif * @if iOSOnly received both the touch down and up events. @endif - * @param plot The pie chart. - * @param idx The index of the + * @param plot The pie chart. + * @param idx The index of the * @if MacOnly clicked pie slice. @endif * @if iOSOnly touched pie slice. @endif * @param event The event that triggered the selection. @@ -148,7 +148,7 @@ typedef NS_CLOSED_ENUM(NSInteger, CPTPieDirection) { * @if MacOnly was pressed. @endif * @if iOSOnly touch started. @endif * @param plot The pie chart. - * @param idx The index of the + * @param idx The index of the * @if MacOnly clicked pie slice. @endif * @if iOSOnly touched pie slice. @endif **/ @@ -157,8 +157,8 @@ typedef NS_CLOSED_ENUM(NSInteger, CPTPieDirection) { /** @brief @optional Informs the delegate that a pie slice * @if MacOnly was pressed. @endif * @if iOSOnly touch started. @endif - * @param plot The pie chart. - * @param idx The index of the + * @param plot The pie chart. + * @param idx The index of the * @if MacOnly clicked pie slice. @endif * @if iOSOnly touched pie slice. @endif * @param event The event that triggered the selection. @@ -169,7 +169,7 @@ typedef NS_CLOSED_ENUM(NSInteger, CPTPieDirection) { * @if MacOnly was released. @endif * @if iOSOnly touch ended. @endif * @param plot The pie chart. - * @param idx The index of the + * @param idx The index of the * @if MacOnly clicked pie slice. @endif * @if iOSOnly touched pie slice. @endif **/ @@ -178,8 +178,8 @@ typedef NS_CLOSED_ENUM(NSInteger, CPTPieDirection) { /** @brief @optional Informs the delegate that a pie slice * @if MacOnly was released. @endif * @if iOSOnly touch ended. @endif - * @param plot The pie chart. - * @param idx The index of the + * @param plot The pie chart. + * @param idx The index of the * @if MacOnly clicked pie slice. @endif * @if iOSOnly touched pie slice. @endif * @param event The event that triggered the selection. diff --git a/framework/Source/CPTPieChart.m b/framework/Source/CPTPieChart.m index 6d7592637..d90481349 100644 --- a/framework/Source/CPTPieChart.m +++ b/framework/Source/CPTPieChart.m @@ -162,8 +162,8 @@ @implementation CPTPieChart }; /** @brief Creates and returns a CPTColor that acts as the default color for that pie chart index. - * @param pieSliceIndex The pie slice index to return a color for. - * @return A new CPTColor instance corresponding to the default value for this pie slice index. + * @param pieSliceIndex The pie slice index to return a color for. + * @return A new CPTColor instance corresponding to the default value for this pie slice index. **/ +(nonnull CPTColor *)defaultPieSliceColorForIndex:(NSUInteger)pieSliceIndex @@ -212,8 +212,8 @@ +(void)initialize * - @ref labelOffset = @num{10.0} * - @ref labelField = #CPTPieChartFieldSliceWidth * - * @param newFrame The frame rectangle. - * @return The initialized CPTPieChart object. + * @param newFrame The frame rectangle. + * @return The initialized CPTPieChart object. **/ -(nonnull instancetype)initWithFrame:(CGRect)newFrame { @@ -813,8 +813,8 @@ -(void)drawSwatchForLegend:(nonnull CPTLegend *)legend atIndex:(NSUInteger)idx i #pragma mark Information /** @brief Searches the pie slices for one corresponding to the given angle. - * @param angle An angle in radians. - * @return The index of the pie slice that matches the given angle. Returns @ref NSNotFound if no such pie slice exists. + * @param angle An angle in radians. + * @return The index of the pie slice that matches the given angle. Returns @ref NSNotFound if no such pie slice exists. **/ -(NSUInteger)pieSliceIndexAtAngle:(CGFloat)angle { @@ -851,8 +851,8 @@ -(NSUInteger)pieSliceIndexAtAngle:(CGFloat)angle } /** @brief Computes the halfway-point between the starting and ending angles of a given pie slice. - * @param idx A pie slice index. - * @return The angle that is halfway between the slice's starting and ending angles, or @NAN if + * @param idx A pie slice index. + * @return The angle that is halfway between the slice's starting and ending angles, or @NAN if * an angle matching the given index cannot be found. **/ -(CGFloat)medianAngleForPieSliceIndex:(NSUInteger)idx @@ -1006,8 +1006,8 @@ -(NSUInteger)numberOfLegendEntries /** @internal * @brief The title text of a legend entry. - * @param idx The index of the desired title. - * @return The title of the legend entry at the requested index. + * @param idx The index of the desired title. + * @return The title of the legend entry at the requested index. **/ -(nullable NSString *)titleForLegendEntryAtIndex:(NSUInteger)idx { @@ -1027,8 +1027,8 @@ -(nullable NSString *)titleForLegendEntryAtIndex:(NSUInteger)idx /** @internal * @brief The styled title text of a legend entry. - * @param idx The index of the desired title. - * @return The styled title of the legend entry at the requested index. + * @param idx The index of the desired title. + * @return The styled title of the legend entry at the requested index. **/ -(nullable NSAttributedString *)attributedTitleForLegendEntryAtIndex:(NSUInteger)idx { @@ -1109,9 +1109,9 @@ -(BOOL)angle:(CGFloat)touchedAngle betweenStartAngle:(CGFloat)startingAngle endA * index where the @par{interactionPoint} is inside a pie slice. * This method returns @NO if the @par{interactionPoint} is outside all of the slices. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -1175,9 +1175,9 @@ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint) * @link CPTPieChartDelegate::pieChart:sliceWasSelectedAtRecordIndex:withEvent: -pieChart:sliceWasSelectedAtRecordIndex:withEvent: @endlink * methods, these will be called. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { diff --git a/framework/Source/CPTPlot.h b/framework/Source/CPTPlot.h index e24a2fa34..010bccec8 100644 --- a/framework/Source/CPTPlot.h +++ b/framework/Source/CPTPlot.h @@ -54,8 +54,8 @@ typedef NSMutableArray<__kindof CPTPlot *> CPTMutablePlotArray; /// @{ /** @brief @required The number of data points for the plot. - * @param plot The plot. - * @return The number of data points for the plot. + * @param plot The plot. + * @return The number of data points for the plot. **/ -(NSUInteger)numberOfRecordsForPlot:(nonnull CPTPlot *)plot; @@ -69,10 +69,10 @@ typedef NSMutableArray<__kindof CPTPlot *> CPTMutablePlotArray; * return an array of NSNumber objects holding the data values. For any scale type, include instances of NSNull * in the array to indicate missing values. * - * @param plot The plot. - * @param fieldEnum The field index. - * @param indexRange The range of the data indexes of interest. - * @return An array of data points. + * @param plot The plot. + * @param fieldEnum The field index. + * @param indexRange The range of the data indexes of interest. + * @return An array of data points. **/ -(nullable NSArray *)numbersForPlot:(nonnull CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndexRange:(NSRange)indexRange; @@ -84,37 +84,37 @@ typedef NSMutableArray<__kindof CPTPlot *> CPTMutablePlotArray; * NSNumber holding the data value. For any scale type, return @nil or an instance of NSNull to indicate * missing values. * - * @param plot The plot. - * @param fieldEnum The field index. - * @param idx The data index of interest. - * @return A data point. + * @param plot The plot. + * @param fieldEnum The field index. + * @param idx The data index of interest. + * @return A data point. **/ -(nullable id)numberForPlot:(nonnull CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)idx; /** @brief @optional Gets a range of plot data for the given plot and field. * Implement one and only one of the optional methods in this section. - * @param plot The plot. - * @param fieldEnum The field index. - * @param indexRange The range of the data indexes of interest. - * @return A retained C array of data points. + * @param plot The plot. + * @param fieldEnum The field index. + * @param indexRange The range of the data indexes of interest. + * @return A retained C array of data points. **/ -(nullable double *)doublesForPlot:(nonnull CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndexRange:(NSRange)indexRange NS_RETURNS_INNER_POINTER; /** @brief @optional Gets a plot data value for the given plot and field. * Implement one and only one of the optional methods in this section. - * @param plot The plot. - * @param fieldEnum The field index. - * @param idx The data index of interest. - * @return A data point. + * @param plot The plot. + * @param fieldEnum The field index. + * @param idx The data index of interest. + * @return A data point. **/ -(double)doubleForPlot:(nonnull CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)idx; /** @brief @optional Gets a range of plot data for the given plot and field. * Implement one and only one of the optional methods in this section. - * @param plot The plot. - * @param fieldEnum The field index. - * @param indexRange The range of the data indexes of interest. - * @return A one-dimensional array of data points. + * @param plot The plot. + * @param fieldEnum The field index. + * @param indexRange The range of the data indexes of interest. + * @return A one-dimensional array of data points. **/ -(nullable CPTNumericData *)dataForPlot:(nonnull CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndexRange:(NSRange)indexRange; @@ -128,9 +128,9 @@ typedef NSMutableArray<__kindof CPTPlot *> CPTMutablePlotArray; * The column index (zero-based) corresponds with the field index. * The data type will be converted to match the @link CPTPlot::cachePrecision cachePrecision @endlink if needed. * - * @param plot The plot. - * @param indexRange The range of the data indexes of interest. - * @return A two-dimensional array of data points. + * @param plot The plot. + * @param indexRange The range of the data indexes of interest. + * @return A two-dimensional array of data points. **/ -(nullable CPTNumericData *)dataForPlot:(nonnull CPTPlot *)plot recordIndexRange:(NSRange)indexRange; @@ -140,9 +140,9 @@ typedef NSMutableArray<__kindof CPTPlot *> CPTMutablePlotArray; /// @{ /** @brief @optional Gets a range of data labels for the given plot. - * @param plot The plot. - * @param indexRange The range of the data indexes of interest. - * @return An array of data labels. + * @param plot The plot. + * @param indexRange The range of the data indexes of interest. + * @return An array of data labels. **/ -(nullable CPTLayerArray *)dataLabelsForPlot:(nonnull CPTPlot *)plot recordIndexRange:(NSRange)indexRange; @@ -150,9 +150,9 @@ typedef NSMutableArray<__kindof CPTPlot *> CPTMutablePlotArray; * This method will not be called if * @link CPTPlotDataSource::dataLabelsForPlot:recordIndexRange: -dataLabelsForPlot:recordIndexRange: @endlink * is also implemented in the datasource. - * @param plot The plot. - * @param idx The data index of interest. - * @return The data label for the point with the given index. + * @param plot The plot. + * @param idx The data index of interest. + * @return The data label for the point with the given index. * If you return @nil, the default data label will be used. If you return an instance of NSNull, * no label will be shown for the index in question. **/ @@ -178,7 +178,7 @@ typedef NSMutableArray<__kindof CPTPlot *> CPTMutablePlotArray; * @if MacOnly was both pressed and released. @endif * @if iOSOnly received both the touch down and up events. @endif * @param plot The plot. - * @param idx The index of the + * @param idx The index of the * @if MacOnly clicked data label. @endif * @if iOSOnly touched data label. @endif **/ @@ -187,8 +187,8 @@ typedef NSMutableArray<__kindof CPTPlot *> CPTMutablePlotArray; /** @brief @optional Informs the delegate that a data label * @if MacOnly was both pressed and released. @endif * @if iOSOnly received both the touch down and up events. @endif - * @param plot The plot. - * @param idx The index of the + * @param plot The plot. + * @param idx The index of the * @if MacOnly clicked data label. @endif * @if iOSOnly touched data label. @endif * @param event The event that triggered the selection. @@ -199,7 +199,7 @@ typedef NSMutableArray<__kindof CPTPlot *> CPTMutablePlotArray; * @if MacOnly was pressed. @endif * @if iOSOnly touch started. @endif * @param plot The plot. - * @param idx The index of the + * @param idx The index of the * @if MacOnly clicked data label. @endif * @if iOSOnly touched data label. @endif **/ @@ -208,8 +208,8 @@ typedef NSMutableArray<__kindof CPTPlot *> CPTMutablePlotArray; /** @brief @optional Informs the delegate that a data label * @if MacOnly was pressed. @endif * @if iOSOnly touch started. @endif - * @param plot The plot. - * @param idx The index of the + * @param plot The plot. + * @param idx The index of the * @if MacOnly clicked data label. @endif * @if iOSOnly touched data label. @endif * @param event The event that triggered the selection. @@ -220,7 +220,7 @@ typedef NSMutableArray<__kindof CPTPlot *> CPTMutablePlotArray; * @if MacOnly was released. @endif * @if iOSOnly touch ended. @endif * @param plot The plot. - * @param idx The index of the + * @param idx The index of the * @if MacOnly clicked data label. @endif * @if iOSOnly touched data label. @endif **/ @@ -229,8 +229,8 @@ typedef NSMutableArray<__kindof CPTPlot *> CPTMutablePlotArray; /** @brief @optional Informs the delegate that a data label * @if MacOnly was released. @endif * @if iOSOnly touch ended. @endif - * @param plot The plot. - * @param idx The index of the + * @param plot The plot. + * @param idx The index of the * @if MacOnly clicked data label. @endif * @if iOSOnly touched data label. @endif * @param event The event that triggered the selection. diff --git a/framework/Source/CPTPlot.m b/framework/Source/CPTPlot.m index 404bda994..5d7f04cb6 100644 --- a/framework/Source/CPTPlot.m +++ b/framework/Source/CPTPlot.m @@ -287,8 +287,8 @@ +(void)initialize * - @ref masksToBounds = @YES * - @ref needsDisplayOnBoundsChange = @YES * - * @param newFrame The frame rectangle. - * @return The initialized CPTPlot object. + * @param newFrame The frame rectangle. + * @return The initialized CPTPlot object. **/ -(nonnull instancetype)initWithFrame:(CGRect)newFrame { @@ -598,7 +598,7 @@ -(void)reloadDataInIndexRange:(NSRange)indexRange } /** @brief Insert records into the plot data cache at the given index. - * @param idx The starting index of the new records. + * @param idx The starting index of the new records. * @param numberOfRecords The number of records to insert. **/ -(void)insertDataAtIndex:(NSUInteger)idx numberOfRecords:(NSUInteger)numberOfRecords @@ -771,9 +771,9 @@ +(nonnull id)nilData } /** @brief Gets a range of plot data for the given plot and field. - * @param fieldEnum The field index. - * @param indexRange The range of the data indexes of interest. - * @return An array of data points. + * @param fieldEnum The field index. + * @param indexRange The range of the data indexes of interest. + * @return An array of data points. **/ -(nullable id)numbersFromDataSourceForField:(NSUInteger)fieldEnum recordIndexRange:(NSRange)indexRange { @@ -840,8 +840,8 @@ -(nullable id)numbersFromDataSourceForField:(NSUInteger)fieldEnum recordIndexRan } /** @brief Gets a range of plot data for the given plot. - * @param indexRange The range of the data indexes of interest. - * @return Returns @YES if the datasource implements the + * @param indexRange The range of the data indexes of interest. + * @return Returns @YES if the datasource implements the * @link CPTPlotDataSource::dataForPlot:recordIndexRange: -dataForPlot:recordIndexRange: @endlink * method and it returns valid data. **/ @@ -973,7 +973,7 @@ -(NSUInteger)cachedDataCount } /** @brief Copies an array of numbers to the cache. - * @param numbers An array of numbers to cache. Can be a CPTNumericData, NSArray, or NSData (NSData is assumed to be a c-style array of type @double). + * @param numbers An array of numbers to cache. Can be a CPTNumericData, NSArray, or NSData (NSData is assumed to be a c-style array of type @double). * @param fieldEnum The field enumerator identifying the field. **/ -(void)cacheNumbers:(nullable id)numbers forField:(NSUInteger)fieldEnum @@ -1065,9 +1065,9 @@ -(void)cacheNumbers:(nullable id)numbers forField:(NSUInteger)fieldEnum } /** @brief Copies an array of numbers to replace a part of the cache. - * @param numbers An array of numbers to cache. Can be a CPTNumericData, NSArray, or NSData (NSData is assumed to be a c-style array of type @double). + * @param numbers An array of numbers to cache. Can be a CPTNumericData, NSArray, or NSData (NSData is assumed to be a c-style array of type @double). * @param fieldEnum The field enumerator identifying the field. - * @param idx The index of the first data point to replace. + * @param idx The index of the first data point to replace. **/ -(void)cacheNumbers:(nullable id)numbers forField:(NSUInteger)fieldEnum atRecordIndex:(NSUInteger)idx { @@ -1243,8 +1243,8 @@ -(BOOL)doublePrecisionCache } /** @brief Retrieves an array of numbers from the cache. - * @param fieldEnum The field enumerator identifying the field. - * @return The array of cached numbers. + * @param fieldEnum The field enumerator identifying the field. + * @return The array of cached numbers. **/ -(nullable CPTMutableNumericData *)cachedNumbersForField:(NSUInteger)fieldEnum { @@ -1252,9 +1252,9 @@ -(nullable CPTMutableNumericData *)cachedNumbersForField:(NSUInteger)fieldEnum } /** @brief Retrieves a single number from the cache. - * @param fieldEnum The field enumerator identifying the field. - * @param idx The index of the desired data value. - * @return The cached number. + * @param fieldEnum The field enumerator identifying the field. + * @param idx The index of the desired data value. + * @return The cached number. **/ -(nullable NSNumber *)cachedNumberForField:(NSUInteger)fieldEnum recordIndex:(NSUInteger)idx { @@ -1264,9 +1264,9 @@ -(nullable NSNumber *)cachedNumberForField:(NSUInteger)fieldEnum recordIndex:(NS } /** @brief Retrieves a single number from the cache. - * @param fieldEnum The field enumerator identifying the field. - * @param idx The index of the desired data value. - * @return The cached number or @NAN if no data is cached for the requested field. + * @param fieldEnum The field enumerator identifying the field. + * @param idx The index of the desired data value. + * @return The cached number or @NAN if no data is cached for the requested field. **/ -(double)cachedDoubleForField:(NSUInteger)fieldEnum recordIndex:(NSUInteger)idx { @@ -1301,9 +1301,9 @@ -(double)cachedDoubleForField:(NSUInteger)fieldEnum recordIndex:(NSUInteger)idx } /** @brief Retrieves a single number from the cache. - * @param fieldEnum The field enumerator identifying the field. - * @param idx The index of the desired data value. - * @return The cached number or @NAN if no data is cached for the requested field. + * @param fieldEnum The field enumerator identifying the field. + * @param idx The index of the desired data value. + * @return The cached number or @NAN if no data is cached for the requested field. **/ -(NSDecimal)cachedDecimalForField:(NSUInteger)fieldEnum recordIndex:(NSUInteger)idx { @@ -1380,8 +1380,8 @@ -(CPTNumericDataType)decimalDataType } /** @brief Retrieves an array of values from the cache. - * @param key The key identifying the field. - * @return The array of cached values. + * @param key The key identifying the field. + * @return The array of cached values. **/ -(nullable NSArray *)cachedArrayForKey:(nonnull NSString *)key { @@ -1389,9 +1389,9 @@ -(nullable NSArray *)cachedArrayForKey:(nonnull NSString *)key } /** @brief Retrieves a single value from the cache. - * @param key The key identifying the field. - * @param idx The index of the desired data value. - * @return The cached value or @nil if no data is cached for the requested key. + * @param key The key identifying the field. + * @param idx The index of the desired data value. + * @return The cached value or @nil if no data is cached for the requested key. **/ -(nullable id)cachedValueForKey:(nonnull NSString *)key recordIndex:(NSUInteger)idx { @@ -1400,7 +1400,7 @@ -(nullable id)cachedValueForKey:(nonnull NSString *)key recordIndex:(NSUInteger) /** @brief Copies an array of arbitrary values to the cache. * @param array An array of arbitrary values to cache. - * @param key The key identifying the field. + * @param key The key identifying the field. **/ -(void)cacheArray:(nullable NSArray *)array forKey:(nonnull NSString *)key { @@ -1423,8 +1423,8 @@ -(void)cacheArray:(nullable NSArray *)array forKey:(nonnull NSString *)key /** @brief Copies an array of arbitrary values to replace a part of the cache. * @param array An array of arbitrary values to cache. - * @param key The key identifying the field. - * @param idx The index of the first data point to replace. + * @param key The key identifying the field. + * @param idx The index of the first data point to replace. **/ -(void)cacheArray:(nullable NSArray *)array forKey:(nonnull NSString *)key atRecordIndex:(NSUInteger)idx { @@ -1456,8 +1456,8 @@ -(void)cacheArray:(nullable NSArray *)array forKey:(nonnull NSString *)key atRec #pragma mark Data Ranges /** @brief Determines the smallest plot range that fully encloses the data for a particular field. - * @param fieldEnum The field enumerator identifying the field. - * @return The plot range enclosing the data. + * @param fieldEnum The field enumerator identifying the field. + * @return The plot range enclosing the data. **/ -(nullable CPTPlotRange *)plotRangeForField:(NSUInteger)fieldEnum { @@ -1523,8 +1523,8 @@ -(nullable CPTPlotRange *)plotRangeForField:(NSUInteger)fieldEnum } /** @brief Determines the smallest plot range that fully encloses the data for a particular coordinate. - * @param coord The coordinate identifier. - * @return The plot range enclosing the data. + * @param coord The coordinate identifier. + * @return The plot range enclosing the data. **/ -(nullable CPTPlotRange *)plotRangeForCoordinate:(CPTCoordinate)coord { @@ -1550,8 +1550,8 @@ -(nullable CPTPlotRange *)plotRangeForCoordinate:(CPTCoordinate)coord } /** @brief Determines the smallest plot range that fully encloses the entire plot for a particular field. - * @param fieldEnum The field enumerator identifying the field. - * @return The plot range enclosing the data. + * @param fieldEnum The field enumerator identifying the field. + * @return The plot range enclosing the data. **/ -(nullable CPTPlotRange *)plotRangeEnclosingField:(NSUInteger)fieldEnum { @@ -1559,8 +1559,8 @@ -(nullable CPTPlotRange *)plotRangeEnclosingField:(NSUInteger)fieldEnum } /** @brief Determines the smallest plot range that fully encloses the entire plot for a particular coordinate. - * @param coord The coordinate identifier. - * @return The plot range enclosing the data. + * @param coord The coordinate identifier. + * @return The plot range enclosing the data. **/ -(nullable CPTPlotRange *)plotRangeEnclosingCoordinate:(CPTCoordinate)coord { @@ -1733,7 +1733,7 @@ -(void)relabel /** @brief Marks the receiver as needing to update a range of data labels before the content is next drawn. * @param indexRange The index range needing update. - * @see setNeedsRelabel() + * @see setNeedsRelabel() **/ -(void)relabelIndexRange:(NSRange)indexRange { @@ -1799,8 +1799,8 @@ -(NSUInteger)numberOfLegendEntries } /** @brief The title text of a legend entry. - * @param idx The index of the desired title. - * @return The title of the legend entry at the requested index. + * @param idx The index of the desired title. + * @return The title of the legend entry at the requested index. **/ -(nullable NSString *)titleForLegendEntryAtIndex:(NSUInteger __unused)idx { @@ -1818,8 +1818,8 @@ -(nullable NSString *)titleForLegendEntryAtIndex:(NSUInteger __unused)idx } /** @brief The styled title text of a legend entry. - * @param idx The index of the desired title. - * @return The styled title of the legend entry at the requested index. + * @param idx The index of the desired title. + * @return The styled title of the legend entry at the requested index. **/ -(nullable NSAttributedString *)attributedTitleForLegendEntryAtIndex:(NSUInteger __unused)idx { @@ -1838,9 +1838,9 @@ -(nullable NSAttributedString *)attributedTitleForLegendEntryAtIndex:(NSUInteger /** @brief Draws the legend swatch of a legend entry. * Subclasses should call @super to draw the background fill and border. - * @param legend The legend being drawn. - * @param idx The index of the desired swatch. - * @param rect The bounding rectangle where the swatch should be drawn. + * @param legend The legend being drawn. + * @param idx The index of the desired swatch. + * @param rect The bounding rectangle where the swatch should be drawn. * @param context The graphics context to draw into. **/ -(void)drawSwatchForLegend:(nonnull CPTLegend *)legend atIndex:(NSUInteger)idx inRect:(CGRect)rect inContext:(nonnull CGContextRef)context @@ -1902,9 +1902,9 @@ -(void)drawSwatchForLegend:(nonnull CPTLegend *)legend atIndex:(NSUInteger)idx i * The delegate method will be called and this method returns @YES if the @par{interactionPoint} is within a label. * This method returns @NO if the @par{interactionPoint} is too far away from all of the data labels. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -1979,9 +1979,9 @@ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint) * @link CPTPlotDelegate::plot:dataLabelWasSelectedAtRecordIndex:withEvent: -plot:dataLabelWasSelectedAtRecordIndex:withEvent: @endlink * methods, these will be called. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -2270,8 +2270,8 @@ -(nonnull CPTNumberArray *)fieldIdentifiers } /** @brief The field identifiers that correspond to a particular coordinate. - * @param coord The coordinate for which the corresponding field identifiers are desired. - * @return Array of NSNumber objects for the field identifiers. + * @param coord The coordinate for which the corresponding field identifiers are desired. + * @return Array of NSNumber objects for the field identifiers. **/ -(nonnull CPTNumberArray *)fieldIdentifiersForCoordinate:(CPTCoordinate __unused)coord { @@ -2279,8 +2279,8 @@ -(nonnull CPTNumberArray *)fieldIdentifiersForCoordinate:(CPTCoordinate __unused } /** @brief The coordinate value that corresponds to a particular field identifier. - * @param field The field identifier for which the corresponding coordinate is desired. - * @return The coordinate that corresponds to a particular field identifier or #CPTCoordinateNone if there is no matching coordinate. + * @param field The field identifier for which the corresponding coordinate is desired. + * @return The coordinate that corresponds to a particular field identifier or #CPTCoordinateNone if there is no matching coordinate. */ -(CPTCoordinate)coordinateForFieldIdentifier:(NSUInteger __unused)field { @@ -2292,7 +2292,7 @@ -(CPTCoordinate)coordinateForFieldIdentifier:(NSUInteger __unused)field /** @brief Adjusts the position of the data label annotation for the plot point at the given index. * @param label The annotation for the data label. - * @param idx The data index for the label. + * @param idx The data index for the label. **/ -(void)positionLabelAnnotation:(nonnull CPTPlotSpaceAnnotation *__unused)label forIndex:(NSUInteger __unused)idx { @@ -2304,8 +2304,8 @@ -(void)positionLabelAnnotation:(nonnull CPTPlotSpaceAnnotation *__unused)label f /** * @brief Determines the index of the data element that is under the given point. - * @param point The coordinates of the interaction. - * @return The index of the data point that is under the given point or @ref NSNotFound if none was found. + * @param point The coordinates of the interaction. + * @return The index of the data point that is under the given point or @ref NSNotFound if none was found. */ -(NSUInteger)dataIndexFromInteractionPoint:(CGPoint __unused)point { diff --git a/framework/Source/CPTPlotArea.h b/framework/Source/CPTPlotArea.h index 1d29c5f78..a9fed95b1 100644 --- a/framework/Source/CPTPlotArea.h +++ b/framework/Source/CPTPlotArea.h @@ -32,7 +32,7 @@ * @if MacOnly was both pressed and released. @endif * @if iOSOnly received both the touch down and up events. @endif * @param plotArea The plot area. - * @param event The event that triggered the selection. + * @param event The event that triggered the selection. **/ -(void)plotAreaWasSelected:(nonnull CPTPlotArea *)plotArea withEvent:(nonnull CPTNativeEvent *)event; @@ -47,7 +47,7 @@ * @if MacOnly was pressed. @endif * @if iOSOnly touch started. @endif * @param plotArea The plot area. - * @param event The event that triggered the selection. + * @param event The event that triggered the selection. **/ -(void)plotAreaTouchDown:(nonnull CPTPlotArea *)plotArea withEvent:(nonnull CPTNativeEvent *)event; @@ -62,7 +62,7 @@ * @if MacOnly was released. @endif * @if iOSOnly touch ended. @endif * @param plotArea The plot area. - * @param event The event that triggered the selection. + * @param event The event that triggered the selection. **/ -(void)plotAreaTouchUp:(nonnull CPTPlotArea *)plotArea withEvent:(nonnull CPTNativeEvent *)event; diff --git a/framework/Source/CPTPlotArea.m b/framework/Source/CPTPlotArea.m index c93cb9137..748cf2c41 100644 --- a/framework/Source/CPTPlotArea.m +++ b/framework/Source/CPTPlotArea.m @@ -147,8 +147,8 @@ @implementation CPTPlotArea * - @ref plotGroup = a new CPTPlotGroup with the same frame rectangle * - @ref needsDisplayOnBoundsChange = @YES * - * @param newFrame The frame rectangle. - * @return The initialized CPTPlotArea object. + * @param newFrame The frame rectangle. + * @return The initialized CPTPlotArea object. **/ -(nonnull instancetype)initWithFrame:(CGRect)newFrame { @@ -632,9 +632,9 @@ -(void)setAxisSetLayersForType:(CPTGraphLayerType)layerType } /** @brief Computes the sublayer index for the given layer type and axis. - * @param axis The axis of interest. - * @param layerType The layer type being updated. - * @return The sublayer index for the given layer type. + * @param axis The axis of interest. + * @param layerType The layer type being updated. + * @return The sublayer index for the given layer type. **/ -(unsigned)sublayerIndexForAxis:(nonnull CPTAxis *)axis layerType:(CPTGraphLayerType)layerType { @@ -696,9 +696,9 @@ -(unsigned)sublayerIndexForAxis:(nonnull CPTAxis *)axis layerType:(CPTGraphLayer * methods, the delegate method will be called and this method returns @YES if the @par{interactionPoint} is within the * plot area bounds. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -748,9 +748,9 @@ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint) * methods, the delegate method will be called and this method returns @YES if the @par{interactionPoint} is within the * plot area bounds. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { diff --git a/framework/Source/CPTPlotAreaFrame.m b/framework/Source/CPTPlotAreaFrame.m index c5723c6a0..c238b30ef 100644 --- a/framework/Source/CPTPlotAreaFrame.m +++ b/framework/Source/CPTPlotAreaFrame.m @@ -51,8 +51,8 @@ @implementation CPTPlotAreaFrame * - @ref masksToBorder = @YES * - @ref needsDisplayOnBoundsChange = @YES * - * @param newFrame The frame rectangle. - * @return The initialized CPTPlotAreaFrame object. + * @param newFrame The frame rectangle. + * @return The initialized CPTPlotAreaFrame object. **/ -(nonnull instancetype)initWithFrame:(CGRect)newFrame { @@ -130,9 +130,9 @@ +(BOOL)supportsSecureCoding * @if MacOnly pressed the mouse button. @endif * @if iOSOnly touched the screen. @endif * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -149,9 +149,9 @@ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint) * @if MacOnly released the mouse button. @endif * @if iOSOnly lifted their finger off the screen. @endif * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -168,9 +168,9 @@ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)in * @if MacOnly the mouse with the button pressed. @endif * @if iOSOnly their finger while touching the screen. @endif * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceDraggedEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -188,8 +188,8 @@ -(BOOL)pointingDeviceDraggedEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoi * @if iOSOnly touches @endif * has been cancelled for any reason. * - * @param event The OS event. - * @return Whether the event was handled or not. + * @param event The OS event. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceCancelledEvent:(nonnull CPTNativeEvent *)event { diff --git a/framework/Source/CPTPlotGroup.m b/framework/Source/CPTPlotGroup.m index 7dad71c7d..cc5f9c517 100644 --- a/framework/Source/CPTPlotGroup.m +++ b/framework/Source/CPTPlotGroup.m @@ -53,7 +53,7 @@ -(void)addPlot:(nonnull CPTPlot *)plot /** @brief Add a plot to this plot group at the given index. * @param plot The plot. - * @param idx The index at which to insert the plot. This value must not be greater than the count of elements in the sublayer array. + * @param idx The index at which to insert the plot. This value must not be greater than the count of elements in the sublayer array. **/ -(void)insertPlot:(nonnull CPTPlot *)plot atIndex:(NSUInteger)idx { diff --git a/framework/Source/CPTPlotRange.m b/framework/Source/CPTPlotRange.m index c83c432e6..c7b05cbf0 100644 --- a/framework/Source/CPTPlotRange.m +++ b/framework/Source/CPTPlotRange.m @@ -140,9 +140,9 @@ @implementation CPTPlotRange #pragma mark Init/Dealloc /** @brief Creates and returns a new CPTPlotRange instance initialized with the provided location and length. - * @param loc The starting location of the range. - * @param len The length of the range. - * @return A new CPTPlotRange instance initialized with the provided location and length. + * @param loc The starting location of the range. + * @param len The length of the range. + * @return A new CPTPlotRange instance initialized with the provided location and length. **/ +(nonnull instancetype)plotRangeWithLocation:(nonnull NSNumber *)loc length:(nonnull NSNumber *)len { @@ -150,9 +150,9 @@ +(nonnull instancetype)plotRangeWithLocation:(nonnull NSNumber *)loc length:(non } /** @brief Creates and returns a new CPTPlotRange instance initialized with the provided location and length. - * @param loc The starting location of the range. - * @param len The length of the range. - * @return A new CPTPlotRange instance initialized with the provided location and length. + * @param loc The starting location of the range. + * @param len The length of the range. + * @return A new CPTPlotRange instance initialized with the provided location and length. **/ +(nonnull instancetype)plotRangeWithLocationDecimal:(NSDecimal)loc lengthDecimal:(NSDecimal)len { @@ -160,9 +160,9 @@ +(nonnull instancetype)plotRangeWithLocationDecimal:(NSDecimal)loc lengthDecimal } /** @brief Initializes a newly allocated CPTPlotRange object with the provided location and length. - * @param loc The starting location of the range. - * @param len The length of the range. - * @return The initialized CPTPlotRange object. + * @param loc The starting location of the range. + * @param len The length of the range. + * @return The initialized CPTPlotRange object. **/ -(nonnull instancetype)initWithLocation:(nonnull NSNumber *)loc length:(nonnull NSNumber *)len { @@ -190,9 +190,9 @@ -(nonnull instancetype)initWithLocation:(nonnull NSNumber *)loc length:(nonnull } /** @brief Initializes a newly allocated CPTPlotRange object with the provided location and length. - * @param loc The starting location of the range. - * @param len The length of the range. - * @return The initialized CPTPlotRange object. + * @param loc The starting location of the range. + * @param len The length of the range. + * @return The initialized CPTPlotRange object. **/ -(nonnull instancetype)initWithLocationDecimal:(NSDecimal)loc lengthDecimal:(NSDecimal)len { @@ -468,8 +468,8 @@ -(void)encodeWithCoder:(nonnull NSCoder *)encoder /// @endcond /** @brief Returns an object initialized from data in a given unarchiver. - * @param decoder An unarchiver object. - * @return An object initialized from data in a given unarchiver. + * @param decoder An unarchiver object. + * @return An object initialized from data in a given unarchiver. */ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)decoder { @@ -500,8 +500,8 @@ +(BOOL)supportsSecureCoding #pragma mark Checking Containership /** @brief Determines whether a given number is inside the range. - * @param number The number to check. - * @return @YES if @ref location ≤ @par{number} ≤ @ref end. + * @param number The number to check. + * @return @YES if @ref location ≤ @par{number} ≤ @ref end. **/ -(BOOL)contains:(NSDecimal)number { @@ -529,8 +529,8 @@ -(BOOL)contains:(NSDecimal)number } /** @brief Determines whether a given number is inside the range. - * @param number The number to check. - * @return @YES if @ref locationDouble ≤ @par{number} ≤ @ref endDouble. + * @param number The number to check. + * @return @YES if @ref locationDouble ≤ @par{number} ≤ @ref endDouble. **/ -(BOOL)containsDouble:(double)number { @@ -538,8 +538,8 @@ -(BOOL)containsDouble:(double)number } /** @brief Determines whether a given number is inside the range. - * @param number The number to check. - * @return @YES if @ref location ≤ @par{number} ≤ @ref end. + * @param number The number to check. + * @return @YES if @ref location ≤ @par{number} ≤ @ref end. **/ -(BOOL)containsNumber:(nullable NSNumber *)number { @@ -552,8 +552,8 @@ -(BOOL)containsNumber:(nullable NSNumber *)number } /** @brief Determines whether a given range is equal to the range of the receiver. - * @param otherRange The range to check. - * @return @YES if the ranges both have the same location and length. + * @param otherRange The range to check. + * @return @YES if the ranges both have the same location and length. **/ -(BOOL)isEqualToRange:(nullable CPTPlotRange *)otherRange { @@ -569,8 +569,8 @@ -(BOOL)isEqualToRange:(nullable CPTPlotRange *)otherRange } /** @brief Determines whether the receiver entirely contains another range. - * @param otherRange The range to check. - * @return @YES if the other range fits entirely within the range of the receiver. + * @param otherRange The range to check. + * @return @YES if the other range fits entirely within the range of the receiver. **/ -(BOOL)containsRange:(nullable CPTPlotRange *)otherRange { @@ -602,8 +602,8 @@ -(BOOL)containsRange:(nullable CPTPlotRange *)otherRange } /** @brief Determines whether a given range intersects the receiver. - * @param otherRange The range to check. - * @return @YES if the ranges intersect. + * @param otherRange The range to check. + * @return @YES if the ranges intersect. **/ -(BOOL)intersectsRange:(nullable CPTPlotRange *)otherRange { @@ -662,8 +662,8 @@ -(BOOL)intersectsRange:(nullable CPTPlotRange *)otherRange } /** @brief Compares a number to the range, determining if it is in the range, or above or below it. - * @param number The number to check. - * @return The comparison result. + * @param number The number to check. + * @return The comparison result. **/ -(CPTPlotRangeComparisonResult)compareToNumber:(nonnull NSNumber *)number { @@ -679,8 +679,8 @@ -(CPTPlotRangeComparisonResult)compareToNumber:(nonnull NSNumber *)number } /** @brief Compares a number to the range, determining if it is in the range, or above or below it. - * @param number The number to check. - * @return The comparison result. + * @param number The number to check. + * @return The comparison result. **/ -(CPTPlotRangeComparisonResult)compareToDecimal:(NSDecimal)number { @@ -702,8 +702,8 @@ -(CPTPlotRangeComparisonResult)compareToDecimal:(NSDecimal)number } /** @brief Compares a number to the range, determining if it is in the range, or above or below it. - * @param number The number to check. - * @return The comparison result. + * @param number The number to check. + * @return The comparison result. **/ -(CPTPlotRangeComparisonResult)compareToDouble:(double)number { diff --git a/framework/Source/CPTPlotSpace.h b/framework/Source/CPTPlotSpace.h index be8f4e9c3..2d8f904f1 100644 --- a/framework/Source/CPTPlotSpace.h +++ b/framework/Source/CPTPlotSpace.h @@ -66,10 +66,10 @@ extern CPTPlotSpaceInfoKey __nonnull const CPTPlotSpaceDisplacementKey; /// @{ /** @brief @optional Informs the receiver that it should uniformly scale (e.g., in response to a pinch gesture). - * @param space The plot space. - * @param interactionScale The scaling factor. - * @param interactionPoint The coordinates of the scaling centroid. - * @return @YES if the gesture should be handled by the plot space, and @NO if not. + * @param space The plot space. + * @param interactionScale The scaling factor. + * @param interactionPoint The coordinates of the scaling centroid. + * @return @YES if the gesture should be handled by the plot space, and @NO if not. * In either case, the delegate may choose to take extra actions, or handle the scaling itself. **/ -(BOOL)plotSpace:(nonnull CPTPlotSpace *)space shouldScaleBy:(CGFloat)interactionScale aboutPoint:(CGPoint)interactionPoint; @@ -80,9 +80,9 @@ extern CPTPlotSpaceInfoKey __nonnull const CPTPlotSpaceDisplacementKey; /// @{ /** @brief @optional Notifies that plot space is going to scroll. - * @param space The plot space. - * @param proposedDisplacementVector The proposed amount by which the plot space will shift. - * @return The displacement actually applied. + * @param space The plot space. + * @param proposedDisplacementVector The proposed amount by which the plot space will shift. + * @return The displacement actually applied. **/ -(CGPoint)plotSpace:(nonnull CPTPlotSpace *)space willDisplaceBy:(CGPoint)proposedDisplacementVector; @@ -92,15 +92,15 @@ extern CPTPlotSpaceInfoKey __nonnull const CPTPlotSpaceDisplacementKey; /// @{ /** @brief @optional Notifies that plot space is going to change a plot range. - * @param space The plot space. - * @param newRange The proposed new plot range. - * @param coordinate The coordinate of the range. - * @return The new plot range to be used. + * @param space The plot space. + * @param newRange The proposed new plot range. + * @param coordinate The coordinate of the range. + * @return The new plot range to be used. **/ -(nullable CPTPlotRange *)plotSpace:(nonnull CPTPlotSpace *)space willChangePlotRangeTo:(nonnull CPTPlotRange *)newRange forCoordinate:(CPTCoordinate)coordinate; /** @brief @optional Notifies that plot space has changed a plot range. - * @param space The plot space. + * @param space The plot space. * @param coordinate The coordinate of the range. **/ -(void)plotSpace:(nonnull CPTPlotSpace *)space didChangePlotRangeForCoordinate:(CPTCoordinate)coordinate; @@ -111,36 +111,36 @@ extern CPTPlotSpaceInfoKey __nonnull const CPTPlotSpaceDisplacementKey; /// @{ /** @brief @optional Notifies that plot space intercepted a device down event. - * @param space The plot space. - * @param event The native event. - * @param point The point in the host view. - * @return Whether the plot space should handle the event or not. + * @param space The plot space. + * @param event The native event. + * @param point The point in the host view. + * @return Whether the plot space should handle the event or not. * In either case, the delegate may choose to take extra actions, or handle the event itself. **/ -(BOOL)plotSpace:(nonnull CPTPlotSpace *)space shouldHandlePointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)point; /** @brief @optional Notifies that plot space intercepted a device dragged event. - * @param space The plot space. - * @param event The native event. - * @param point The point in the host view. - * @return Whether the plot space should handle the event or not. + * @param space The plot space. + * @param event The native event. + * @param point The point in the host view. + * @return Whether the plot space should handle the event or not. * In either case, the delegate may choose to take extra actions, or handle the event itself. **/ -(BOOL)plotSpace:(nonnull CPTPlotSpace *)space shouldHandlePointingDeviceDraggedEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)point; /** @brief @optional Notifies that plot space intercepted a device cancelled event. - * @param space The plot space. - * @param event The native event. - * @return Whether the plot space should handle the event or not. + * @param space The plot space. + * @param event The native event. + * @return Whether the plot space should handle the event or not. * In either case, the delegate may choose to take extra actions, or handle the event itself. **/ -(BOOL)plotSpace:(nonnull CPTPlotSpace *)space shouldHandlePointingDeviceCancelledEvent:(nonnull CPTNativeEvent *)event; /** @brief @optional Notifies that plot space intercepted a device up event. - * @param space The plot space. - * @param event The native event. - * @param point The point in the host view. - * @return Whether the plot space should handle the event or not. + * @param space The plot space. + * @param event The native event. + * @param point The point in the host view. + * @return Whether the plot space should handle the event or not. * In either case, the delegate may choose to take extra actions, or handle the event itself. **/ -(BOOL)plotSpace:(nonnull CPTPlotSpace *)space shouldHandlePointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)point; @@ -149,11 +149,11 @@ extern CPTPlotSpaceInfoKey __nonnull const CPTPlotSpaceDisplacementKey; #else /** @brief @optional Notifies that plot space intercepted a scroll wheel event. - * @param space The plot space. - * @param event The native event. - * @param fromPoint The The starting point in the host view. - * @param toPoint The The ending point in the host view. - * @return Whether the plot space should handle the event or not. + * @param space The plot space. + * @param event The native event. + * @param fromPoint The The starting point in the host view. + * @param toPoint The The ending point in the host view. + * @return Whether the plot space should handle the event or not. * In either case, the delegate may choose to take extra actions, or handle the event itself. **/ -(BOOL)plotSpace:(nonnull CPTPlotSpace *)space shouldHandleScrollWheelEvent:(nonnull CPTNativeEvent *)event fromPoint:(CGPoint)fromPoint toPoint:(CGPoint)toPoint; diff --git a/framework/Source/CPTPlotSpace.m b/framework/Source/CPTPlotSpace.m index c08c67b96..74b071b70 100644 --- a/framework/Source/CPTPlotSpace.m +++ b/framework/Source/CPTPlotSpace.m @@ -139,8 +139,8 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /// @endcond /** @brief Returns an object initialized from data in a given unarchiver. - * @param coder An unarchiver object. - * @return An object initialized from data in a given unarchiver. + * @param coder An unarchiver object. + * @return An object initialized from data in a given unarchiver. */ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { @@ -179,8 +179,8 @@ +(BOOL)supportsSecureCoding /** @internal * @brief Gets the ordered set of categories for the given coordinate, creating it if necessary. - * @param coordinate The axis coordinate. - * @return The ordered set of categories for the given coordinate. + * @param coordinate The axis coordinate. + * @return The ordered set of categories for the given coordinate. */ -(nonnull CPTMutableCategorySet *)orderedSetForCoordinate:(CPTCoordinate)coordinate { @@ -212,7 +212,7 @@ -(nonnull CPTMutableCategorySet *)orderedSetForCoordinate:(CPTCoordinate)coordin * * Category names must be unique for each coordinate. Adding the same name more than once has no effect. * - * @param category The category name. + * @param category The category name. * @param coordinate The axis coordinate. */ -(void)addCategory:(nonnull NSString *)category forCoordinate:(CPTCoordinate)coordinate @@ -226,7 +226,7 @@ -(void)addCategory:(nonnull NSString *)category forCoordinate:(CPTCoordinate)coo /** * @brief Removes the named category for the given coordinate. - * @param category The category name. + * @param category The category name. * @param coordinate The axis coordinate. */ -(void)removeCategory:(nonnull NSString *)category forCoordinate:(CPTCoordinate)coordinate @@ -243,9 +243,9 @@ -(void)removeCategory:(nonnull NSString *)category forCoordinate:(CPTCoordinate) * * Category names must be unique for each coordinate. Adding the same name more than once has no effect. * - * @param category The category name. + * @param category The category name. * @param coordinate The axis coordinate. - * @param idx The index in the list of category names. + * @param idx The index in the list of category names. */ -(void)insertCategory:(nonnull NSString *)category forCoordinate:(CPTCoordinate)coordinate atIndex:(NSUInteger)idx { @@ -261,7 +261,7 @@ -(void)insertCategory:(nonnull NSString *)category forCoordinate:(CPTCoordinate) /** * @brief Replace all category names for the given coordinate with the names in the supplied array. * @param newCategories An array of category names. - * @param coordinate The axis coordinate. + * @param coordinate The axis coordinate. */ -(void)setCategories:(nullable CPTStringArray *)newCategories forCoordinate:(CPTCoordinate)coordinate { @@ -295,8 +295,8 @@ -(void)removeAllCategories /** * @brief Returns a list of all category names for the given coordinate. - * @param coordinate The axis coordinate. - * @return An array of category names. + * @param coordinate The axis coordinate. + * @return An array of category names. */ -(nonnull CPTStringArray *)categoriesForCoordinate:(CPTCoordinate)coordinate { @@ -307,9 +307,9 @@ -(nonnull CPTStringArray *)categoriesForCoordinate:(CPTCoordinate)coordinate /** * @brief Returns the category name for the given coordinate at the given index in the list of category names. - * @param coordinate The axis coordinate. - * @param idx The index in the list of category names. - * @return The category name. + * @param coordinate The axis coordinate. + * @param idx The index in the list of category names. + * @return The category name. */ -(nullable NSString *)categoryForCoordinate:(CPTCoordinate)coordinate atIndex:(NSUInteger)idx { @@ -322,9 +322,9 @@ -(nullable NSString *)categoryForCoordinate:(CPTCoordinate)coordinate atIndex:(N /** * @brief Returns the index of the given category name in the list of category names for the given coordinate. - * @param category The category name. - * @param coordinate The axis coordinate. - * @return The category index. + * @param category The category name. + * @param coordinate The axis coordinate. + * @return The category index. */ -(NSUInteger)indexOfCategory:(nonnull NSString *)category forCoordinate:(CPTCoordinate)coordinate { @@ -353,9 +353,9 @@ -(NSUInteger)indexOfCategory:(nonnull NSString *)category forCoordinate:(CPTCoor * delegate method is called. If it returns @NO, this method returns @YES * to indicate that the event has been handled and no further processing should occur. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -381,9 +381,9 @@ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint) * delegate method is called. If it returns @NO, this method returns @YES * to indicate that the event has been handled and no further processing should occur. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -409,9 +409,9 @@ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)in * delegate method is called. If it returns @NO, this method returns @YES * to indicate that the event has been handled and no further processing should occur. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceDraggedEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -438,8 +438,8 @@ -(BOOL)pointingDeviceDraggedEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoi * delegate method is called. If it returns @NO, this method returns @YES * to indicate that the event has been handled and no further processing should occur. * - * @param event The OS event. - * @return Whether the event was handled or not. + * @param event The OS event. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceCancelledEvent:(nonnull CPTNativeEvent *)event { @@ -466,10 +466,10 @@ -(BOOL)pointingDeviceCancelledEvent:(nonnull CPTNativeEvent *)event * delegate method is called. If it returns @NO, this method returns @YES * to indicate that the event has been handled and no further processing should occur. * - * @param event The OS event. - * @param fromPoint The starting coordinates of the interaction. - * @param toPoint The ending coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param fromPoint The starting coordinates of the interaction. + * @param toPoint The ending coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)scrollWheelEvent:(nonnull CPTNativeEvent *)event fromPoint:(CGPoint)fromPoint toPoint:(CGPoint)toPoint { @@ -503,8 +503,8 @@ -(NSUInteger)numberOfCoordinates /// @endcond /** @brief Converts a data point to plot area drawing coordinates. - * @param plotPoint An array of data point coordinates (as NSNumber values). - * @return The drawing coordinates of the data point. + * @param plotPoint An array of data point coordinates (as NSNumber values). + * @return The drawing coordinates of the data point. **/ -(CGPoint)plotAreaViewPointForPlotPoint:(nonnull CPTNumberArray *cpt_unused)plotPoint { @@ -514,9 +514,9 @@ -(CGPoint)plotAreaViewPointForPlotPoint:(nonnull CPTNumberArray *cpt_unused)plot } /** @brief Converts a data point to plot area drawing coordinates. - * @param plotPoint A c-style array of data point coordinates (as NSDecimal structs). - * @param count The number of coordinate values in the @par{plotPoint} array. - * @return The drawing coordinates of the data point. + * @param plotPoint A c-style array of data point coordinates (as NSDecimal structs). + * @param count The number of coordinate values in the @par{plotPoint} array. + * @return The drawing coordinates of the data point. **/ -(CGPoint)plotAreaViewPointForPlotPoint:(nonnull NSDecimal *__unused)plotPoint numberOfCoordinates:(NSUInteger cpt_unused)count { @@ -526,9 +526,9 @@ -(CGPoint)plotAreaViewPointForPlotPoint:(nonnull NSDecimal *__unused)plotPoint n } /** @brief Converts a data point to plot area drawing coordinates. - * @param plotPoint A c-style array of data point coordinates (as @double values). - * @param count The number of coordinate values in the @par{plotPoint} array. - * @return The drawing coordinates of the data point. + * @param plotPoint A c-style array of data point coordinates (as @double values). + * @param count The number of coordinate values in the @par{plotPoint} array. + * @return The drawing coordinates of the data point. **/ -(CGPoint)plotAreaViewPointForDoublePrecisionPlotPoint:(nonnull double *__unused)plotPoint numberOfCoordinates:(NSUInteger cpt_unused)count { @@ -538,8 +538,8 @@ -(CGPoint)plotAreaViewPointForDoublePrecisionPlotPoint:(nonnull double *__unused } /** @brief Converts a point given in plot area drawing coordinates to the data coordinate space. - * @param point The drawing coordinates of the data point. - * @return An array of data point coordinates (as NSNumber values). + * @param point The drawing coordinates of the data point. + * @return An array of data point coordinates (as NSNumber values). **/ -(nullable CPTNumberArray *)plotPointForPlotAreaViewPoint:(CGPoint __unused)point { @@ -548,8 +548,8 @@ -(nullable CPTNumberArray *)plotPointForPlotAreaViewPoint:(CGPoint __unused)poin /** @brief Converts a point given in plot area drawing coordinates to the data coordinate space. * @param plotPoint A c-style array of data point coordinates (as NSDecimal structs). - * @param count The number of coordinate values in the @par{plotPoint} array. - * @param point The drawing coordinates of the data point. + * @param count The number of coordinate values in the @par{plotPoint} array. + * @param point The drawing coordinates of the data point. **/ -(void)plotPoint:(nonnull NSDecimal *__unused)plotPoint numberOfCoordinates:(NSUInteger cpt_unused)count forPlotAreaViewPoint:(CGPoint __unused)point { @@ -558,8 +558,8 @@ -(void)plotPoint:(nonnull NSDecimal *__unused)plotPoint numberOfCoordinates:(NSU /** @brief Converts a point given in drawing coordinates to the data coordinate space. * @param plotPoint A c-style array of data point coordinates (as @double values). - * @param count The number of coordinate values in the @par{plotPoint} array. - * @param point The drawing coordinates of the data point. + * @param count The number of coordinate values in the @par{plotPoint} array. + * @param point The drawing coordinates of the data point. **/ -(void)doublePrecisionPlotPoint:(nonnull double *__unused)plotPoint numberOfCoordinates:(NSUInteger cpt_unused)count forPlotAreaViewPoint:(CGPoint __unused)point { @@ -567,8 +567,8 @@ -(void)doublePrecisionPlotPoint:(nonnull double *__unused)plotPoint numberOfCoor } /** @brief Converts the interaction point of an OS event to plot area drawing coordinates. - * @param event The event. - * @return The drawing coordinates of the point. + * @param event The event. + * @return The drawing coordinates of the point. **/ -(CGPoint)plotAreaViewPointForEvent:(nonnull CPTNativeEvent *__unused)event { @@ -576,8 +576,8 @@ -(CGPoint)plotAreaViewPointForEvent:(nonnull CPTNativeEvent *__unused)event } /** @brief Converts the interaction point of an OS event to the data coordinate space. - * @param event The event. - * @return An array of data point coordinates (as NSNumber values). + * @param event The event. + * @return An array of data point coordinates (as NSNumber values). **/ -(nullable CPTNumberArray *)plotPointForEvent:(nonnull CPTNativeEvent *__unused)event { @@ -586,8 +586,8 @@ -(nullable CPTNumberArray *)plotPointForEvent:(nonnull CPTNativeEvent *__unused) /** @brief Converts the interaction point of an OS event to the data coordinate space. * @param plotPoint A c-style array of data point coordinates (as NSDecimal structs). - * @param count The number of coordinate values in the @par{plotPoint} array. - * @param event The event. + * @param count The number of coordinate values in the @par{plotPoint} array. + * @param event The event. **/ -(void)plotPoint:(nonnull NSDecimal *__unused)plotPoint numberOfCoordinates:(NSUInteger cpt_unused)count forEvent:(nonnull CPTNativeEvent *__unused)event { @@ -596,8 +596,8 @@ -(void)plotPoint:(nonnull NSDecimal *__unused)plotPoint numberOfCoordinates:(NSU /** @brief Converts the interaction point of an OS event to the data coordinate space. * @param plotPoint A c-style array of data point coordinates (as @double values). - * @param count The number of coordinate values in the @par{plotPoint} array. - * @param event The event. + * @param count The number of coordinate values in the @par{plotPoint} array. + * @param event The event. **/ -(void)doublePrecisionPlotPoint:(nonnull double *__unused)plotPoint numberOfCoordinates:(NSUInteger cpt_unused)count forEvent:(nonnull CPTNativeEvent *__unused)event { @@ -605,7 +605,7 @@ -(void)doublePrecisionPlotPoint:(nonnull double *__unused)plotPoint numberOfCoor } /** @brief Sets the range of values for a given coordinate. - * @param newRange The new plot range. + * @param newRange The new plot range. * @param coordinate The axis coordinate. **/ -(void)setPlotRange:(nonnull CPTPlotRange *__unused)newRange forCoordinate:(CPTCoordinate __unused)coordinate @@ -613,8 +613,8 @@ -(void)setPlotRange:(nonnull CPTPlotRange *__unused)newRange forCoordinate:(CPTC } /** @brief Gets the range of values for a given coordinate. - * @param coordinate The axis coordinate. - * @return The range of values. + * @param coordinate The axis coordinate. + * @return The range of values. **/ -(nullable CPTPlotRange *)plotRangeForCoordinate:(CPTCoordinate __unused)coordinate { @@ -622,7 +622,7 @@ -(nullable CPTPlotRange *)plotRangeForCoordinate:(CPTCoordinate __unused)coordin } /** @brief Sets the scale type for a given coordinate. - * @param newType The new scale type. + * @param newType The new scale type. * @param coordinate The axis coordinate. **/ -(void)setScaleType:(CPTScaleType __unused)newType forCoordinate:(CPTCoordinate __unused)coordinate @@ -630,8 +630,8 @@ -(void)setScaleType:(CPTScaleType __unused)newType forCoordinate:(CPTCoordinate } /** @brief Gets the scale type for a given coordinate. - * @param coordinate The axis coordinate. - * @return The scale type. + * @param coordinate The axis coordinate. + * @return The scale type. **/ -(CPTScaleType)scaleTypeForCoordinate:(CPTCoordinate __unused)coordinate { @@ -646,7 +646,7 @@ -(void)scaleToFitPlots:(nullable CPTPlotArray *__unused)plots } /** @brief Scales the plot range for the given coordinate so that the plots just fit in the visible space. - * @param plots An array of the plots that have to fit in the visible area. + * @param plots An array of the plots that have to fit in the visible area. * @param coordinate The axis coordinate. **/ -(void)scaleToFitPlots:(nullable CPTPlotArray *)plots forCoordinate:(CPTCoordinate)coordinate @@ -683,7 +683,7 @@ -(void)scaleToFitEntirePlots:(nullable CPTPlotArray *__unused)plots } /** @brief Scales the plot range for the given coordinate so that the plots just fit in the visible space. - * @param plots An array of the plots that have to fit in the visible area. + * @param plots An array of the plots that have to fit in the visible area. * @param coordinate The axis coordinate. **/ -(void)scaleToFitEntirePlots:(nullable CPTPlotArray *)plots forCoordinate:(CPTCoordinate)coordinate diff --git a/framework/Source/CPTPlotSpaceAnnotation.m b/framework/Source/CPTPlotSpaceAnnotation.m index db08c4303..d3790db74 100644 --- a/framework/Source/CPTPlotSpaceAnnotation.m +++ b/framework/Source/CPTPlotSpaceAnnotation.m @@ -52,9 +52,9 @@ @implementation CPTPlotSpaceAnnotation * This is the designated initializer. The initialized layer will be anchored to * a point in plot coordinates. * - * @param newPlotSpace The plot space which the anchor is defined in. Must be non-@nil. - * @param newPlotPoint An array of NSDecimalNumber objects giving the anchor plot coordinates. - * @return The initialized CPTPlotSpaceAnnotation object. + * @param newPlotSpace The plot space which the anchor is defined in. Must be non-@nil. + * @param newPlotPoint An array of NSDecimalNumber objects giving the anchor plot coordinates. + * @return The initialized CPTPlotSpaceAnnotation object. **/ -(nonnull instancetype)initWithPlotSpace:(nonnull CPTPlotSpace *)newPlotSpace anchorPlotPoint:(nullable CPTNumberArray *)newPlotPoint { @@ -107,8 +107,8 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /// @endcond /** @brief Returns an object initialized from data in a given unarchiver. - * @param coder An unarchiver object. - * @return An object initialized from data in a given unarchiver. + * @param coder An unarchiver object. + * @return An object initialized from data in a given unarchiver. */ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { diff --git a/framework/Source/CPTPlotSymbol.m b/framework/Source/CPTPlotSymbol.m index 3537e2f2a..95d5dccfc 100644 --- a/framework/Source/CPTPlotSymbol.m +++ b/framework/Source/CPTPlotSymbol.m @@ -422,8 +422,8 @@ +(nonnull instancetype)snowPlotSymbol } /** @brief Creates and returns a new CPTPlotSymbol instance initialized with a symbol type of #CPTPlotSymbolTypeCustom. - * @param aPath The bounding path for the custom symbol. - * @return A new CPTPlotSymbol instance initialized with a symbol type of #CPTPlotSymbolTypeCustom. + * @param aPath The bounding path for the custom symbol. + * @return A new CPTPlotSymbol instance initialized with a symbol type of #CPTPlotSymbolTypeCustom. **/ +(nonnull instancetype)customPlotSymbolWithPath:(nullable CGPathRef)aPath { @@ -467,9 +467,9 @@ -(nonnull id)copyWithZone:(nullable NSZone *)zone #pragma mark Drawing /** @brief Draws the plot symbol into the given graphics context centered at the provided point using the cached symbol image. - * @param context The graphics context to draw into. - * @param center The center point of the symbol. - * @param scale The drawing scale factor. Must be greater than zero (@num{0}). + * @param context The graphics context to draw into. + * @param center The center point of the symbol. + * @param scale The drawing scale factor. Must be greater than zero (@num{0}). * @param alignToPixels If @YES, the symbol position is aligned with device pixels to reduce anti-aliasing artifacts. **/ -(void)renderInContext:(nonnull CGContextRef)context atPoint:(CGPoint)center scale:(CGFloat)scale alignToPixels:(BOOL)alignToPixels @@ -558,8 +558,8 @@ -(CGSize)layerSizeForScale:(CGFloat)scale /** @brief Draws the plot symbol into the given graphics context centered at the provided point. * @param context The graphics context to draw into. - * @param center The center point of the symbol. - * @param scale The drawing scale factor. Must be greater than zero (@num{0}). + * @param center The center point of the symbol. + * @param scale The drawing scale factor. Must be greater than zero (@num{0}). **/ -(void)renderAsVectorInContext:(nonnull CGContextRef)context atPoint:(CGPoint)center scale:(CGFloat)scale { diff --git a/framework/Source/CPTRangePlot.h b/framework/Source/CPTRangePlot.h index 99cd2d1de..d1b74c904 100644 --- a/framework/Source/CPTRangePlot.h +++ b/framework/Source/CPTRangePlot.h @@ -54,9 +54,9 @@ typedef NS_ENUM (NSInteger, CPTRangePlotFillDirection) { /// @{ /** @brief @optional Gets a range of bar line styles for the given range plot. - * @param plot The range plot. - * @param indexRange The range of the data indexes of interest. - * @return An array of line styles. + * @param plot The range plot. + * @param indexRange The range of the data indexes of interest. + * @return An array of line styles. **/ -(nullable CPTLineStyleArray *)barLineStylesForRangePlot:(nonnull CPTRangePlot *)plot recordIndexRange:(NSRange)indexRange; @@ -64,17 +64,17 @@ typedef NS_ENUM (NSInteger, CPTRangePlotFillDirection) { * This method will not be called if * @link CPTRangePlotDataSource::barLineStylesForRangePlot:recordIndexRange: -barLineStylesForRangePlot:recordIndexRange: @endlink * is also implemented in the datasource. - * @param plot The range plot. - * @param idx The data index of interest. - * @return The bar line style for the bar with the given index. If the data source returns @nil, the default line style is used. + * @param plot The range plot. + * @param idx The data index of interest. + * @return The bar line style for the bar with the given index. If the data source returns @nil, the default line style is used. * If the data source returns an NSNull object, no line is drawn. **/ -(nullable CPTLineStyle *)barLineStyleForRangePlot:(nonnull CPTRangePlot *)plot recordIndex:(NSUInteger)idx; /** @brief @optional Gets an array of bar widths for the given range plot. - * @param plot The range plot. - * @param indexRange The range of the data indexes of interest. - * @return An array of bar widths. + * @param plot The range plot. + * @param indexRange The range of the data indexes of interest. + * @return An array of bar widths. **/ -(nullable CPTNumberArray *)barWidthsForRangePlot:(nonnull CPTRangePlot *)plot recordIndexRange:(NSRange)indexRange; @@ -82,9 +82,9 @@ typedef NS_ENUM (NSInteger, CPTRangePlotFillDirection) { * This method will not be called if * @link CPTRangePlotDataSource::barWidthsForRangePlot:recordIndexRange: -barWidthsForRangePlot:recordIndexRange: @endlink * is also implemented in the datasource. - * @param plot The range plot. - * @param idx The data index of interest. - * @return The bar width for the bar with the given index. If the data source returns @nil, the default barWidth is used. + * @param plot The range plot. + * @param idx The data index of interest. + * @return The bar width for the bar with the given index. If the data source returns @nil, the default barWidth is used. **/ -(nullable NSNumber *)barWidthForRangePlot:(nonnull CPTRangePlot *)plot recordIndex:(NSUInteger)idx; @@ -108,7 +108,7 @@ typedef NS_ENUM (NSInteger, CPTRangePlotFillDirection) { * @if MacOnly was both pressed and released. @endif * @if iOSOnly received both the touch down and up events. @endif * @param plot The range plot. - * @param idx The index of the + * @param idx The index of the * @if MacOnly clicked bar. @endif * @if iOSOnly touched bar. @endif **/ @@ -117,8 +117,8 @@ typedef NS_ENUM (NSInteger, CPTRangePlotFillDirection) { /** @brief @optional Informs the delegate that a bar * @if MacOnly was both pressed and released. @endif * @if iOSOnly received both the touch down and up events. @endif - * @param plot The range plot. - * @param idx The index of the + * @param plot The range plot. + * @param idx The index of the * @if MacOnly clicked bar. @endif * @if iOSOnly touched bar. @endif * @param event The event that triggered the selection. @@ -129,7 +129,7 @@ typedef NS_ENUM (NSInteger, CPTRangePlotFillDirection) { * @if MacOnly was pressed. @endif * @if iOSOnly touch started. @endif * @param plot The range plot. - * @param idx The index of the + * @param idx The index of the * @if MacOnly clicked bar. @endif * @if iOSOnly touched bar. @endif **/ @@ -138,8 +138,8 @@ typedef NS_ENUM (NSInteger, CPTRangePlotFillDirection) { /** @brief @optional Informs the delegate that a bar * @if MacOnly was pressed. @endif * @if iOSOnly touch started. @endif - * @param plot The range plot. - * @param idx The index of the + * @param plot The range plot. + * @param idx The index of the * @if MacOnly clicked bar. @endif * @if iOSOnly touched bar. @endif * @param event The event that triggered the selection. @@ -150,7 +150,7 @@ typedef NS_ENUM (NSInteger, CPTRangePlotFillDirection) { * @if MacOnly was released. @endif * @if iOSOnly touch ended. @endif * @param plot The range plot. - * @param idx The index of the + * @param idx The index of the * @if MacOnly clicked bar. @endif * @if iOSOnly touched bar. @endif **/ @@ -159,8 +159,8 @@ typedef NS_ENUM (NSInteger, CPTRangePlotFillDirection) { /** @brief @optional Informs the delegate that a bar * @if MacOnly was released. @endif * @if iOSOnly touch ended. @endif - * @param plot The range plot. - * @param idx The index of the + * @param plot The range plot. + * @param idx The index of the * @if MacOnly clicked bar. @endif * @if iOSOnly touched bar. @endif * @param event The event that triggered the selection. diff --git a/framework/Source/CPTRangePlot.m b/framework/Source/CPTRangePlot.m index 10c2326a6..667e2863c 100644 --- a/framework/Source/CPTRangePlot.m +++ b/framework/Source/CPTRangePlot.m @@ -184,8 +184,8 @@ +(void)initialize * - @ref gapWidth = 0.0 * - @ref labelField = #CPTRangePlotFieldX * - * @param newFrame The frame rectangle. - * @return The initialized CPTRangePlot object. + * @param newFrame The frame rectangle. + * @return The initialized CPTRangePlot object. **/ -(nonnull instancetype)initWithFrame:(CGRect)newFrame { @@ -1241,9 +1241,9 @@ -(NSUInteger)dataIndexFromInteractionPoint:(CGPoint)point * index where the @par{interactionPoint} is inside a bar. * This method returns @NO if the @par{interactionPoint} is outside all of the bars. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -1307,9 +1307,9 @@ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint) * @link CPTRangePlotDelegate::rangePlot:rangeWasSelectedAtRecordIndex:withEvent: -rangePlot:rangeWasSelectedAtRecordIndex:withEvent: @endlink * methods, these will be called. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { diff --git a/framework/Source/CPTResponder.h b/framework/Source/CPTResponder.h index 39f171bd5..a76327587 100644 --- a/framework/Source/CPTResponder.h +++ b/framework/Source/CPTResponder.h @@ -12,9 +12,9 @@ * @brief @required Informs the receiver that the user has * @if MacOnly pressed the mouse button. @endif * @if iOSOnly touched the screen. @endif - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint; @@ -22,9 +22,9 @@ * @brief @required Informs the receiver that the user has * @if MacOnly released the mouse button. @endif * @if iOSOnly lifted their finger off the screen. @endif - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint; @@ -32,9 +32,9 @@ * @brief @required Informs the receiver that the user has moved * @if MacOnly the mouse with the button pressed. @endif * @if iOSOnly their finger while touching the screen. @endif - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceDraggedEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint; @@ -43,8 +43,8 @@ * @if MacOnly mouse moves @endif * @if iOSOnly touches @endif * has been cancelled for any reason. - * @param event The OS event. - * @return Whether the event was handled or not. + * @param event The OS event. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceCancelledEvent:(nonnull CPTNativeEvent *)event; @@ -53,10 +53,10 @@ /** * @brief @required Informs the receiver that the user has moved the scroll wheel. - * @param event The OS event. - * @param fromPoint The starting coordinates of the interaction. - * @param toPoint The ending coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param fromPoint The starting coordinates of the interaction. + * @param toPoint The ending coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)scrollWheelEvent:(nonnull CPTNativeEvent *)event fromPoint:(CGPoint)fromPoint toPoint:(CGPoint)toPoint; #endif diff --git a/framework/Source/CPTScatterPlot.h b/framework/Source/CPTScatterPlot.h index 8cd3b9a7d..91f1e3fbd 100644 --- a/framework/Source/CPTScatterPlot.h +++ b/framework/Source/CPTScatterPlot.h @@ -74,9 +74,9 @@ typedef NS_ENUM (NSInteger, CPTScatterPlotHistogramOption) { /// @{ /** @brief @optional Gets a range of plot symbols for the given scatter plot. - * @param plot The scatter plot. - * @param indexRange The range of the data indexes of interest. - * @return An array of plot symbols. + * @param plot The scatter plot. + * @param indexRange The range of the data indexes of interest. + * @return An array of plot symbols. **/ -(nullable CPTPlotSymbolArray *)symbolsForScatterPlot:(nonnull CPTScatterPlot *)plot recordIndexRange:(NSRange)indexRange; @@ -84,9 +84,9 @@ typedef NS_ENUM (NSInteger, CPTScatterPlotHistogramOption) { * This method will not be called if * @link CPTScatterPlotDataSource::symbolsForScatterPlot:recordIndexRange: -symbolsForScatterPlot:recordIndexRange: @endlink * is also implemented in the datasource. - * @param plot The scatter plot. - * @param idx The data index of interest. - * @return The plot symbol to show for the point with the given index. + * @param plot The scatter plot. + * @param idx The data index of interest. + * @return The plot symbol to show for the point with the given index. **/ -(nullable CPTPlotSymbol *)symbolForScatterPlot:(nonnull CPTScatterPlot *)plot recordIndex:(NSUInteger)idx; @@ -110,7 +110,7 @@ typedef NS_ENUM (NSInteger, CPTScatterPlotHistogramOption) { * @if MacOnly was both pressed and released. @endif * @if iOSOnly received both the touch down and up events. @endif * @param plot The scatter plot. - * @param idx The index of the + * @param idx The index of the * @if MacOnly clicked data point. @endif * @if iOSOnly touched data point. @endif **/ @@ -119,8 +119,8 @@ typedef NS_ENUM (NSInteger, CPTScatterPlotHistogramOption) { /** @brief @optional Informs the delegate that a data point * @if MacOnly was both pressed and released. @endif * @if iOSOnly received both the touch down and up events. @endif - * @param plot The scatter plot. - * @param idx The index of the + * @param plot The scatter plot. + * @param idx The index of the * @if MacOnly clicked data point. @endif * @if iOSOnly touched data point. @endif * @param event The event that triggered the selection. @@ -131,7 +131,7 @@ typedef NS_ENUM (NSInteger, CPTScatterPlotHistogramOption) { * @if MacOnly was pressed. @endif * @if iOSOnly touch started. @endif * @param plot The scatter plot. - * @param idx The index of the + * @param idx The index of the * @if MacOnly clicked data point. @endif * @if iOSOnly touched data point. @endif **/ @@ -140,8 +140,8 @@ typedef NS_ENUM (NSInteger, CPTScatterPlotHistogramOption) { /** @brief @optional Informs the delegate that a data point * @if MacOnly was pressed. @endif * @if iOSOnly touch started. @endif - * @param plot The scatter plot. - * @param idx The index of the + * @param plot The scatter plot. + * @param idx The index of the * @if MacOnly clicked data point. @endif * @if iOSOnly touched data point. @endif * @param event The event that triggered the selection. @@ -152,7 +152,7 @@ typedef NS_ENUM (NSInteger, CPTScatterPlotHistogramOption) { * @if MacOnly was released. @endif * @if iOSOnly touch ended. @endif * @param plot The scatter plot. - * @param idx The index of the + * @param idx The index of the * @if MacOnly clicked data point. @endif * @if iOSOnly touched data point. @endif **/ @@ -161,8 +161,8 @@ typedef NS_ENUM (NSInteger, CPTScatterPlotHistogramOption) { /** @brief @optional Informs the delegate that a data point * @if MacOnly was released. @endif * @if iOSOnly touch ended. @endif - * @param plot The scatter plot. - * @param idx The index of the + * @param plot The scatter plot. + * @param idx The index of the * @if MacOnly clicked data point. @endif * @if iOSOnly touched data point. @endif * @param event The event that triggered the selection. @@ -184,7 +184,7 @@ typedef NS_ENUM (NSInteger, CPTScatterPlotHistogramOption) { /** @brief @optional Informs the delegate that * @if MacOnly the mouse was both pressed and released on the plot line.@endif * @if iOSOnly the plot line received both the touch down and up events. @endif - * @param plot The scatter plot. + * @param plot The scatter plot. * @param event The event that triggered the selection. **/ -(void)scatterPlot:(nonnull CPTScatterPlot *)plot dataLineWasSelectedWithEvent:(nonnull CPTNativeEvent *)event; @@ -201,7 +201,7 @@ typedef NS_ENUM (NSInteger, CPTScatterPlotHistogramOption) { * @if MacOnly the mouse was pressed @endif * @if iOSOnly touch started @endif * while over the plot line. - * @param plot The scatter plot. + * @param plot The scatter plot. * @param event The event that triggered the selection. **/ -(void)scatterPlot:(nonnull CPTScatterPlot *)plot dataLineTouchDownWithEvent:(nonnull CPTNativeEvent *)event; @@ -218,7 +218,7 @@ typedef NS_ENUM (NSInteger, CPTScatterPlotHistogramOption) { * @if MacOnly the mouse was released @endif * @if iOSOnly touch ended @endif * while over the plot line. - * @param plot The scatter plot. + * @param plot The scatter plot. * @param event The event that triggered the selection. **/ -(void)scatterPlot:(nonnull CPTScatterPlot *)plot dataLineTouchUpWithEvent:(nonnull CPTNativeEvent *)event; @@ -231,9 +231,9 @@ typedef NS_ENUM (NSInteger, CPTScatterPlotHistogramOption) { /** @brief @optional Gives the delegate an opportunity to do something just before the * plot line will be drawn. A common operation is to draw a selection indicator for the * plot line. This is called after the plot fill has been drawn. - * @param plot The scatter plot. + * @param plot The scatter plot. * @param dataLinePath The CGPath describing the plot line that is about to be drawn. - * @param context The graphics context in which the plot line will be drawn. + * @param context The graphics context in which the plot line will be drawn. **/ -(void)scatterPlot:(nonnull CPTScatterPlot *)plot prepareForDrawingPlotLine:(nonnull CGPathRef)dataLinePath inContext:(nonnull CGContextRef)context; diff --git a/framework/Source/CPTScatterPlot.m b/framework/Source/CPTScatterPlot.m index fa411dd7a..2ebb4b696 100644 --- a/framework/Source/CPTScatterPlot.m +++ b/framework/Source/CPTScatterPlot.m @@ -232,8 +232,8 @@ +(void)initialize * - @ref curvedInterpolationCustomAlpha = @num{0.5} * - @ref labelField = #CPTScatterPlotFieldY * - * @param newFrame The frame rectangle. - * @return The initialized CPTScatterPlot object. + * @param newFrame The frame rectangle. + * @return The initialized CPTScatterPlot object. **/ -(nonnull instancetype)initWithFrame:(CGRect)newFrame { @@ -449,8 +449,8 @@ -(void)reloadPlotSymbolsInIndexRange:(NSRange)indexRange #pragma mark Symbols /** @brief Returns the plot symbol to use for a given index. - * @param idx The index of the record. - * @return The plot symbol to use, or @nil if no plot symbol should be drawn. + * @param idx The index of the record. + * @return The plot symbol to use, or @nil if no plot symbol should be drawn. **/ -(nullable CPTPlotSymbol *)plotSymbolForRecordIndex:(NSUInteger)idx { @@ -712,8 +712,8 @@ -(NSUInteger)dataIndexFromInteractionPoint:(CGPoint)point /// @endcond /** @brief Returns the index of the closest visible point to the point passed in. - * @param viewPoint The reference point. - * @return The index of the closest point, or @ref NSNotFound if there is no visible point. + * @param viewPoint The reference point. + * @return The index of the closest point, or @ref NSNotFound if there is no visible point. **/ -(NSUInteger)indexOfVisiblePointClosestToPlotAreaPoint:(CGPoint)viewPoint { @@ -746,8 +746,8 @@ -(NSUInteger)indexOfVisiblePointClosestToPlotAreaPoint:(CGPoint)viewPoint } /** @brief Returns the plot area view point of a visible point. - * @param idx The index of the point. - * @return The view point of the visible point at the index passed. + * @param idx The index of the point. + * @return The view point of the visible point at the index passed. **/ -(CGPoint)plotAreaPointOfVisiblePointAtIndex:(NSUInteger)idx { @@ -1247,9 +1247,9 @@ -(nonnull CGPathRef)newCurvedDataLinePathForViewPoints:(nonnull CGPoint *)viewPo } /** @brief Compute the control points using a catmull-rom spline. - * @param points A pointer to the array which should hold the first control points. - * @param points2 A pointer to the array which should hold the second control points. - * @param alpha The alpha value used for the catmull-rom interpolation. + * @param points A pointer to the array which should hold the first control points. + * @param points2 A pointer to the array which should hold the second control points. + * @param alpha The alpha value used for the catmull-rom interpolation. * @param viewPoints A pointer to the array which holds all view points for which the interpolation should be calculated. * @param indexRange The range in which the interpolation should occur. * @warning The @par{indexRange} must be valid for all passed arrays otherwise this method crashes. @@ -1329,8 +1329,8 @@ -(void)computeCatmullRomControlPoints:(nonnull CGPoint *)points points2:(nonnull * If the view points are monotonically increasing or decreasing in both @par{x} and @par{y}, * the smoothed curve will be also. * - * @param points A pointer to the array which should hold the first control points. - * @param points2 A pointer to the array which should hold the second control points. + * @param points A pointer to the array which should hold the first control points. + * @param points2 A pointer to the array which should hold the second control points. * @param viewPoints A pointer to the array which holds all view points for which the interpolation should be calculated. * @param indexRange The range in which the interpolation should occur. * @warning The @par{indexRange} must be valid for all passed arrays otherwise this method crashes. @@ -1402,9 +1402,9 @@ -(void)computeHermiteControlPoints:(nonnull CGPoint *)points points2:(nonnull CG } /** @brief Determine whether the plot points form a monotonic series. - * @param viewPoints A pointer to the array which holds all view points for which the interpolation should be calculated. - * @param indexRange The range in which the interpolation should occur. - * @return Returns @YES if the viewpoints are monotonically increasing or decreasing in both @par{x} and @par{y}. + * @param viewPoints A pointer to the array which holds all view points for which the interpolation should be calculated. + * @param indexRange The range in which the interpolation should occur. + * @return Returns @YES if the viewpoints are monotonically increasing or decreasing in both @par{x} and @par{y}. * @warning The @par{indexRange} must be valid for all passed arrays otherwise this method crashes. **/ -(BOOL)monotonicViewPoints:(nonnull CGPoint *)viewPoints indexRange:(NSRange)indexRange @@ -1903,9 +1903,9 @@ -(void)removeAreaFillBand:(nullable CPTLimitBand *)limitBand * This method returns @NO if the @par{interactionPoint} is not within @ref plotSymbolMarginForHitDetection points of any of * the data points or within @ref plotLineMarginForHitDetection points of the plot line. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -2018,9 +2018,9 @@ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint) * This method returns @NO if the @par{interactionPoint} is not within @ref plotSymbolMarginForHitDetection points of any of * the data points or within @ref plotLineMarginForHitDetection points of the plot line. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { diff --git a/framework/Source/CPTTextLayer.m b/framework/Source/CPTTextLayer.m index d18613a7a..9864d62b7 100644 --- a/framework/Source/CPTTextLayer.m +++ b/framework/Source/CPTTextLayer.m @@ -65,9 +65,9 @@ @implementation CPTTextLayer #pragma mark Init/Dealloc /** @brief Initializes a newly allocated CPTTextLayer object with the provided text and style. - * @param newText The text to display. - * @param newStyle The text style used to draw the text. - * @return The initialized CPTTextLayer object. + * @param newText The text to display. + * @param newStyle The text style used to draw the text. + * @return The initialized CPTTextLayer object. **/ -(nonnull instancetype)initWithText:(nullable NSString *)newText style:(nullable CPTTextStyle *)newStyle { @@ -82,8 +82,8 @@ -(nonnull instancetype)initWithText:(nullable NSString *)newText style:(nullable } /** @brief Initializes a newly allocated CPTTextLayer object with the provided text and the default text style. - * @param newText The text to display. - * @return The initialized CPTTextLayer object. + * @param newText The text to display. + * @return The initialized CPTTextLayer object. **/ -(nonnull instancetype)initWithText:(nullable NSString *)newText { @@ -91,8 +91,8 @@ -(nonnull instancetype)initWithText:(nullable NSString *)newText } /** @brief Initializes a newly allocated CPTTextLayer object with the provided styled text. - * @param newText The styled text to display. - * @return The initialized CPTTextLayer object. + * @param newText The styled text to display. + * @return The initialized CPTTextLayer object. **/ -(nonnull instancetype)initWithAttributedText:(nullable NSAttributedString *)newText { @@ -134,8 +134,8 @@ -(nonnull instancetype)initWithLayer:(nonnull id)layer * - @ref textStyle = @nil * - @ref attributedText = @nil * - * @param newFrame The frame rectangle. - * @return The initialized CPTTextLayer object. + * @param newFrame The frame rectangle. + * @return The initialized CPTTextLayer object. **/ -(nonnull instancetype)initWithFrame:(CGRect __unused)newFrame { diff --git a/framework/Source/CPTTextStyle.m b/framework/Source/CPTTextStyle.m index 8c802621e..f80d6e3cc 100644 --- a/framework/Source/CPTTextStyle.m +++ b/framework/Source/CPTTextStyle.m @@ -75,8 +75,8 @@ +(nonnull instancetype)textStyle * * The text style will be initalized with values from the given @par{textStyle}. * - * @param textStyle An existing CPTTextStyle. - * @return A new text style instance. + * @param textStyle An existing CPTTextStyle. + * @return A new text style instance. **/ +(nonnull instancetype)textStyleWithStyle:(nullable CPTTextStyle *)textStyle { diff --git a/framework/Source/CPTTheme.m b/framework/Source/CPTTheme.m index c272a452a..6163a453a 100644 --- a/framework/Source/CPTTheme.m +++ b/framework/Source/CPTTheme.m @@ -107,9 +107,9 @@ +(BOOL)supportsSecureCoding } /** @brief Gets a named theme. - * @param themeName The name of the desired theme. - * @return A CPTTheme instance with name matching @par{themeName} or @nil if no themes with a matching name were found. - * @see See @ref themeNames "Theme Names" for a list of named themes provided by Core Plot. + * @param themeName The name of the desired theme. + * @return A CPTTheme instance with name matching @par{themeName} or @nil if no themes with a matching name were found. + * @see See @ref themeNames "Theme Names" for a list of named themes provided by Core Plot. **/ +(nullable instancetype)themeNamed:(nullable CPTThemeName)themeName { diff --git a/framework/Source/CPTTimeFormatter.m b/framework/Source/CPTTimeFormatter.m index 8d0ad4b51..c6df73ed6 100644 --- a/framework/Source/CPTTimeFormatter.m +++ b/framework/Source/CPTTimeFormatter.m @@ -44,8 +44,8 @@ -(nonnull instancetype)init /// @} /** @brief Initializes new instance with the date formatter passed. - * @param aDateFormatter The date formatter. - * @return The new instance. + * @param aDateFormatter The date formatter. + * @return The new instance. **/ -(nonnull instancetype)initWithDateFormatter:(nullable NSDateFormatter *)aDateFormatter { @@ -72,8 +72,8 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /// @endcond /** @brief Returns an object initialized from data in a given unarchiver. - * @param coder An unarchiver object. - * @return An object initialized from data in a given unarchiver. + * @param coder An unarchiver object. + * @return An object initialized from data in a given unarchiver. */ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { @@ -113,8 +113,8 @@ -(nonnull id)copyWithZone:(nullable NSZone *)zone * Uses the date formatter to do the conversion. Conversions are relative to the * reference date, unless it is @nil, in which case the standard reference date * of 1 January 2001, GMT is used. - * @param coordinateValue The time value. - * @return The date string. + * @param coordinateValue The time value. + * @return The date string. **/ -(nullable NSString *)stringForObjectValue:(nullable id)coordinateValue { diff --git a/framework/Source/CPTTradingRangePlot.h b/framework/Source/CPTTradingRangePlot.h index dfef3d62c..0e46c9ec9 100644 --- a/framework/Source/CPTTradingRangePlot.h +++ b/framework/Source/CPTTradingRangePlot.h @@ -58,9 +58,9 @@ typedef NS_ENUM (NSInteger, CPTTradingRangePlotField) { /// @{ /** @brief @optional Gets a range of fills used with a candlestick plot when close >= open for the given plot. - * @param plot The trading range plot. - * @param indexRange The range of the data indexes of interest. - * @return An array of fills. + * @param plot The trading range plot. + * @param indexRange The range of the data indexes of interest. + * @return An array of fills. **/ -(nullable CPTFillArray *)increaseFillsForTradingRangePlot:(nonnull CPTTradingRangePlot *)plot recordIndexRange:(NSRange)indexRange; @@ -68,15 +68,15 @@ typedef NS_ENUM (NSInteger, CPTTradingRangePlotField) { * This method will not be called if * @link CPTTradingRangePlotDataSource::increaseFillsForTradingRangePlot:recordIndexRange: -increaseFillsForTradingRangePlot:recordIndexRange: @endlink * is also implemented in the datasource. - * @param plot The trading range plot. - * @param idx The data index of interest. - * @return The bar fill for the bar with the given index. If the data source returns @nil, the default increase fill is used. + * @param plot The trading range plot. + * @param idx The data index of interest. + * @return The bar fill for the bar with the given index. If the data source returns @nil, the default increase fill is used. * If the data source returns an NSNull object, no fill is drawn. **/ -(nullable CPTFill *)increaseFillForTradingRangePlot:(nonnull CPTTradingRangePlot *)plot recordIndex:(NSUInteger)idx; /** @brief @optional Gets a range of fills used with a candlestick plot when close < open for the given plot. - * @param plot The trading range plot. + * @param plot The trading range plot. * @param indexRange The range of the data indexes of interest. **/ -(nullable CPTFillArray *)decreaseFillsForTradingRangePlot:(nonnull CPTTradingRangePlot *)plot recordIndexRange:(NSRange)indexRange; @@ -85,17 +85,17 @@ typedef NS_ENUM (NSInteger, CPTTradingRangePlotField) { * This method will not be called if * @link CPTTradingRangePlotDataSource::decreaseFillsForTradingRangePlot:recordIndexRange: -decreaseFillsForTradingRangePlot:recordIndexRange: @endlink * is also implemented in the datasource. - * @param plot The trading range plot. - * @param idx The data index of interest. - * @return The bar fill for the bar with the given index. If the data source returns @nil, the default decrease fill is used. + * @param plot The trading range plot. + * @param idx The data index of interest. + * @return The bar fill for the bar with the given index. If the data source returns @nil, the default decrease fill is used. * If the data source returns an NSNull object, no fill is drawn. **/ -(nullable CPTFill *)decreaseFillForTradingRangePlot:(nonnull CPTTradingRangePlot *)plot recordIndex:(NSUInteger)idx; /** @brief @optional Gets an array of bar widths for the given trading range plot. - * @param plot The trading range plot. - * @param indexRange The range of the data indexes of interest. - * @return An array of bar widths. + * @param plot The trading range plot. + * @param indexRange The range of the data indexes of interest. + * @return An array of bar widths. **/ -(nullable CPTNumberArray *)barWidthsForTradingRangePlot:(nonnull CPTTradingRangePlot *)plot recordIndexRange:(NSRange)indexRange; @@ -103,9 +103,9 @@ typedef NS_ENUM (NSInteger, CPTTradingRangePlotField) { * This method will not be called if * @link CPTTradingRangePlotDataSource::barWidthsForTradingRangePlot:recordIndexRange: -barWidthsForTradingRangePlot:recordIndexRange: @endlink * is also implemented in the datasource. - * @param plot The trading range plot. - * @param idx The data index of interest. - * @return The bar width for the bar with the given index. If the data source returns @nil, the default barWidth is used. + * @param plot The trading range plot. + * @param idx The data index of interest. + * @return The bar width for the bar with the given index. If the data source returns @nil, the default barWidth is used. **/ -(nullable NSNumber *)barWidthForTradingRangePlot:(nonnull CPTTradingRangePlot *)plot recordIndex:(NSUInteger)idx; @@ -115,9 +115,9 @@ typedef NS_ENUM (NSInteger, CPTTradingRangePlotField) { /// @{ /** @brief @optional Gets a range of line styles used to draw candlestick or OHLC symbols for the given trading range plot. - * @param plot The trading range plot. - * @param indexRange The range of the data indexes of interest. - * @return An array of line styles. + * @param plot The trading range plot. + * @param indexRange The range of the data indexes of interest. + * @return An array of line styles. **/ -(nullable CPTLineStyleArray *)lineStylesForTradingRangePlot:(nonnull CPTTradingRangePlot *)plot recordIndexRange:(NSRange)indexRange; @@ -125,17 +125,17 @@ typedef NS_ENUM (NSInteger, CPTTradingRangePlotField) { * This method will not be called if * @link CPTTradingRangePlotDataSource::lineStylesForTradingRangePlot:recordIndexRange: -lineStylesForTradingRangePlot:recordIndexRange: @endlink * is also implemented in the datasource. - * @param plot The trading range plot. - * @param idx The data index of interest. - * @return The line style for the symbol with the given index. If the data source returns @nil, the default line style is used. + * @param plot The trading range plot. + * @param idx The data index of interest. + * @return The line style for the symbol with the given index. If the data source returns @nil, the default line style is used. * If the data source returns an NSNull object, no line is drawn. **/ -(nullable CPTLineStyle *)lineStyleForTradingRangePlot:(nonnull CPTTradingRangePlot *)plot recordIndex:(NSUInteger)idx; /** @brief @optional Gets a range of line styles used to outline candlestick symbols when close >= open for the given trading range plot. - * @param plot The trading range plot. - * @param indexRange The range of the data indexes of interest. - * @return An array of line styles. + * @param plot The trading range plot. + * @param indexRange The range of the data indexes of interest. + * @return An array of line styles. **/ -(nullable CPTLineStyleArray *)increaseLineStylesForTradingRangePlot:(nonnull CPTTradingRangePlot *)plot recordIndexRange:(NSRange)indexRange; @@ -143,17 +143,17 @@ typedef NS_ENUM (NSInteger, CPTTradingRangePlotField) { * This method will not be called if * @link CPTTradingRangePlotDataSource::increaseLineStylesForTradingRangePlot:recordIndexRange: -increaseLineStylesForTradingRangePlot:recordIndexRange: @endlink * is also implemented in the datasource. - * @param plot The trading range plot. - * @param idx The data index of interest. - * @return The line line style for the symbol with the given index. If the data source returns @nil, the default increase line style is used. + * @param plot The trading range plot. + * @param idx The data index of interest. + * @return The line line style for the symbol with the given index. If the data source returns @nil, the default increase line style is used. * If the data source returns an NSNull object, no line is drawn. **/ -(nullable CPTLineStyle *)increaseLineStyleForTradingRangePlot:(nonnull CPTTradingRangePlot *)plot recordIndex:(NSUInteger)idx; /** @brief @optional Gets a range of line styles used to outline candlestick symbols when close < open for the given trading range plot. - * @param plot The trading range plot. - * @param indexRange The range of the data indexes of interest. - * @return An array of line styles. + * @param plot The trading range plot. + * @param indexRange The range of the data indexes of interest. + * @return An array of line styles. **/ -(nullable CPTLineStyleArray *)decreaseLineStylesForTradingRangePlot:(nonnull CPTTradingRangePlot *)plot recordIndexRange:(NSRange)indexRange; @@ -161,9 +161,9 @@ typedef NS_ENUM (NSInteger, CPTTradingRangePlotField) { * This method will not be called if * @link CPTTradingRangePlotDataSource::decreaseLineStylesForTradingRangePlot:recordIndexRange: -decreaseLineStylesForTradingRangePlot:recordIndexRange: @endlink * is also implemented in the datasource. - * @param plot The trading range plot. - * @param idx The data index of interest. - * @return The line line style for the symbol with the given index. If the data source returns @nil, the default decrease line style is used. + * @param plot The trading range plot. + * @param idx The data index of interest. + * @return The line line style for the symbol with the given index. If the data source returns @nil, the default decrease line style is used. * If the data source returns an NSNull object, no line is drawn. **/ -(nullable CPTLineStyle *)decreaseLineStyleForTradingRangePlot:(nonnull CPTTradingRangePlot *)plot recordIndex:(NSUInteger)idx; @@ -188,7 +188,7 @@ typedef NS_ENUM (NSInteger, CPTTradingRangePlotField) { * @if MacOnly was both pressed and released. @endif * @if iOSOnly received both the touch down and up events. @endif * @param plot The trading range plot. - * @param idx The index of the + * @param idx The index of the * @if MacOnly clicked bar. @endif * @if iOSOnly touched bar. @endif **/ @@ -197,8 +197,8 @@ typedef NS_ENUM (NSInteger, CPTTradingRangePlotField) { /** @brief @optional Informs the delegate that a bar * @if MacOnly was both pressed and released. @endif * @if iOSOnly received both the touch down and up events. @endif - * @param plot The trading range plot. - * @param idx The index of the + * @param plot The trading range plot. + * @param idx The index of the * @if MacOnly clicked bar. @endif * @if iOSOnly touched bar. @endif * @param event The event that triggered the selection. @@ -209,7 +209,7 @@ typedef NS_ENUM (NSInteger, CPTTradingRangePlotField) { * @if MacOnly was pressed. @endif * @if iOSOnly touch started. @endif * @param plot The trading range plot. - * @param idx The index of the + * @param idx The index of the * @if MacOnly clicked bar. @endif * @if iOSOnly touched bar. @endif **/ @@ -218,8 +218,8 @@ typedef NS_ENUM (NSInteger, CPTTradingRangePlotField) { /** @brief @optional Informs the delegate that a bar * @if MacOnly was pressed. @endif * @if iOSOnly touch started. @endif - * @param plot The trading range plot. - * @param idx The index of the + * @param plot The trading range plot. + * @param idx The index of the * @if MacOnly clicked bar. @endif * @if iOSOnly touched bar. @endif * @param event The event that triggered the selection. @@ -230,7 +230,7 @@ typedef NS_ENUM (NSInteger, CPTTradingRangePlotField) { * @if MacOnly was released. @endif * @if iOSOnly touch ended. @endif * @param plot The trading range plot. - * @param idx The index of the + * @param idx The index of the * @if MacOnly clicked bar. @endif * @if iOSOnly touched bar. @endif **/ @@ -239,8 +239,8 @@ typedef NS_ENUM (NSInteger, CPTTradingRangePlotField) { /** @brief @optional Informs the delegate that a bar * @if MacOnly was released. @endif * @if iOSOnly touch ended. @endif - * @param plot The trading range plot. - * @param idx The index of the + * @param plot The trading range plot. + * @param idx The index of the * @if MacOnly clicked bar. @endif * @if iOSOnly touched bar. @endif * @param event The event that triggered the selection. diff --git a/framework/Source/CPTTradingRangePlot.m b/framework/Source/CPTTradingRangePlot.m index 15fb36bc7..b5e1fa72c 100644 --- a/framework/Source/CPTTradingRangePlot.m +++ b/framework/Source/CPTTradingRangePlot.m @@ -206,8 +206,8 @@ +(void)initialize * - @ref showBarBorder = @YES * - @ref labelField = #CPTTradingRangePlotFieldClose * - * @param newFrame The frame rectangle. - * @return The initialized CPTTradingRangePlot object. + * @param newFrame The frame rectangle. + * @return The initialized CPTTradingRangePlot object. **/ -(nonnull instancetype)initWithFrame:(CGRect)newFrame { @@ -1584,9 +1584,9 @@ -(NSUInteger)dataIndexFromInteractionPoint:(CGPoint)point * index where the @par{interactionPoint} is inside a bar. * This method returns @NO if the @par{interactionPoint} is outside all of the bars. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -1650,9 +1650,9 @@ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint) * @link CPTTradingRangePlotDelegate::tradingRangePlot:barWasSelectedAtRecordIndex:withEvent: -tradingRangePlot:barWasSelectedAtRecordIndex:withEvent: @endlink * methods, these will be called. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { diff --git a/framework/Source/CPTUtilities.m b/framework/Source/CPTUtilities.m index 3a644ca19..c40785c25 100644 --- a/framework/Source/CPTUtilities.m +++ b/framework/Source/CPTUtilities.m @@ -15,8 +15,8 @@ /** * @brief Converts an @ref NSDecimal value to an 8-bit integer. - * @param decimalNumber The @ref NSDecimal value. - * @return The converted value. + * @param decimalNumber The @ref NSDecimal value. + * @return The converted value. **/ int8_t CPTDecimalCharValue(NSDecimal decimalNumber) { @@ -25,8 +25,8 @@ int8_t CPTDecimalCharValue(NSDecimal decimalNumber) /** * @brief Converts an @ref NSDecimal value to a 16-bit integer. - * @param decimalNumber The @ref NSDecimal value. - * @return The converted value. + * @param decimalNumber The @ref NSDecimal value. + * @return The converted value. **/ int16_t CPTDecimalShortValue(NSDecimal decimalNumber) { @@ -35,8 +35,8 @@ int16_t CPTDecimalShortValue(NSDecimal decimalNumber) /** * @brief Converts an @ref NSDecimal value to a 32-bit integer. - * @param decimalNumber The @ref NSDecimal value. - * @return The converted value. + * @param decimalNumber The @ref NSDecimal value. + * @return The converted value. **/ int32_t CPTDecimalLongValue(NSDecimal decimalNumber) { @@ -55,8 +55,8 @@ int32_t CPTDecimalLongValue(NSDecimal decimalNumber) /** * @brief Converts an @ref NSDecimal value to a 64-bit integer. - * @param decimalNumber The @ref NSDecimal value. - * @return The converted value. + * @param decimalNumber The @ref NSDecimal value. + * @return The converted value. **/ int64_t CPTDecimalLongLongValue(NSDecimal decimalNumber) { @@ -75,8 +75,8 @@ int64_t CPTDecimalLongLongValue(NSDecimal decimalNumber) /** * @brief Converts an @ref NSDecimal value to an @int. - * @param decimalNumber The @ref NSDecimal value. - * @return The converted value. + * @param decimalNumber The @ref NSDecimal value. + * @return The converted value. **/ int CPTDecimalIntValue(NSDecimal decimalNumber) { @@ -85,8 +85,8 @@ int CPTDecimalIntValue(NSDecimal decimalNumber) /** * @brief Converts an @ref NSDecimal value to an @ref NSInteger. - * @param decimalNumber The @ref NSDecimal value. - * @return The converted value. + * @param decimalNumber The @ref NSDecimal value. + * @return The converted value. **/ NSInteger CPTDecimalIntegerValue(NSDecimal decimalNumber) { @@ -105,8 +105,8 @@ NSInteger CPTDecimalIntegerValue(NSDecimal decimalNumber) /** * @brief Converts an @ref NSDecimal value to an unsigned 8-bit integer. - * @param decimalNumber The @ref NSDecimal value. - * @return The converted value. + * @param decimalNumber The @ref NSDecimal value. + * @return The converted value. **/ uint8_t CPTDecimalUnsignedCharValue(NSDecimal decimalNumber) { @@ -115,8 +115,8 @@ uint8_t CPTDecimalUnsignedCharValue(NSDecimal decimalNumber) /** * @brief Converts an @ref NSDecimal value to an unsigned 16-bit integer. - * @param decimalNumber The @ref NSDecimal value. - * @return The converted value. + * @param decimalNumber The @ref NSDecimal value. + * @return The converted value. **/ uint16_t CPTDecimalUnsignedShortValue(NSDecimal decimalNumber) { @@ -125,8 +125,8 @@ uint16_t CPTDecimalUnsignedShortValue(NSDecimal decimalNumber) /** * @brief Converts an @ref NSDecimal value to an unsigned 32-bit integer. - * @param decimalNumber The @ref NSDecimal value. - * @return The converted value. + * @param decimalNumber The @ref NSDecimal value. + * @return The converted value. **/ uint32_t CPTDecimalUnsignedLongValue(NSDecimal decimalNumber) { @@ -145,8 +145,8 @@ uint32_t CPTDecimalUnsignedLongValue(NSDecimal decimalNumber) /** * @brief Converts an @ref NSDecimal value to an unsigned 64-bit integer. - * @param decimalNumber The @ref NSDecimal value. - * @return The converted value. + * @param decimalNumber The @ref NSDecimal value. + * @return The converted value. **/ uint64_t CPTDecimalUnsignedLongLongValue(NSDecimal decimalNumber) { @@ -165,8 +165,8 @@ uint64_t CPTDecimalUnsignedLongLongValue(NSDecimal decimalNumber) /** * @brief Converts an @ref NSDecimal value to an @uint. - * @param decimalNumber The @ref NSDecimal value. - * @return The converted value. + * @param decimalNumber The @ref NSDecimal value. + * @return The converted value. **/ unsigned int CPTDecimalUnsignedIntValue(NSDecimal decimalNumber) { @@ -175,8 +175,8 @@ unsigned int CPTDecimalUnsignedIntValue(NSDecimal decimalNumber) /** * @brief Converts an @ref NSDecimal value to an @ref NSUInteger. - * @param decimalNumber The @ref NSDecimal value. - * @return The converted value. + * @param decimalNumber The @ref NSDecimal value. + * @return The converted value. **/ NSUInteger CPTDecimalUnsignedIntegerValue(NSDecimal decimalNumber) { @@ -195,8 +195,8 @@ NSUInteger CPTDecimalUnsignedIntegerValue(NSDecimal decimalNumber) /** * @brief Converts an @ref NSDecimal value to a @float. - * @param decimalNumber The @ref NSDecimal value. - * @return The converted value. + * @param decimalNumber The @ref NSDecimal value. + * @return The converted value. **/ float CPTDecimalFloatValue(NSDecimal decimalNumber) { @@ -205,8 +205,8 @@ float CPTDecimalFloatValue(NSDecimal decimalNumber) /** * @brief Converts an @ref NSDecimal value to a @double. - * @param decimalNumber The @ref NSDecimal value. - * @return The converted value. + * @param decimalNumber The @ref NSDecimal value. + * @return The converted value. **/ double CPTDecimalDoubleValue(NSDecimal decimalNumber) { @@ -215,8 +215,8 @@ float CPTDecimalFloatValue(NSDecimal decimalNumber) /** * @brief Converts an @ref NSDecimal value to a @ref CGFloat. - * @param decimalNumber The @ref NSDecimal value. - * @return The converted value. + * @param decimalNumber The @ref NSDecimal value. + * @return The converted value. **/ CGFloat CPTDecimalCGFloatValue(NSDecimal decimalNumber) { @@ -229,8 +229,8 @@ CGFloat CPTDecimalCGFloatValue(NSDecimal decimalNumber) /** * @brief Converts an @ref NSDecimal value to an NSString. - * @param decimalNumber The @ref NSDecimal value. - * @return The converted value. + * @param decimalNumber The @ref NSDecimal value. + * @return The converted value. **/ NSString *__nonnull CPTDecimalStringValue(NSDecimal decimalNumber) { @@ -242,8 +242,8 @@ CGFloat CPTDecimalCGFloatValue(NSDecimal decimalNumber) /** * @brief Converts an 8-bit integer value to an @ref NSDecimal. - * @param anInt The integer value. - * @return The converted value. + * @param anInt The integer value. + * @return The converted value. **/ NSDecimal CPTDecimalFromChar(int8_t anInt) { @@ -265,8 +265,8 @@ NSDecimal CPTDecimalFromChar(int8_t anInt) /** * @brief Converts a 16-bit integer value to an @ref NSDecimal. - * @param anInt The integer value. - * @return The converted value. + * @param anInt The integer value. + * @return The converted value. **/ NSDecimal CPTDecimalFromShort(int16_t anInt) { @@ -288,8 +288,8 @@ NSDecimal CPTDecimalFromShort(int16_t anInt) /** * @brief Converts a 32-bit integer value to an @ref NSDecimal. - * @param anInt The integer value. - * @return The converted value. + * @param anInt The integer value. + * @return The converted value. **/ NSDecimal CPTDecimalFromLong(int32_t anInt) { @@ -311,8 +311,8 @@ NSDecimal CPTDecimalFromLong(int32_t anInt) /** * @brief Converts a 64-bit integer value to an @ref NSDecimal. - * @param anInt The integer value. - * @return The converted value. + * @param anInt The integer value. + * @return The converted value. **/ NSDecimal CPTDecimalFromLongLong(int64_t anInt) { @@ -334,8 +334,8 @@ NSDecimal CPTDecimalFromLongLong(int64_t anInt) /** * @brief Converts an @int value to an @ref NSDecimal. - * @param anInt The @int value. - * @return The converted value. + * @param anInt The @int value. + * @return The converted value. **/ NSDecimal CPTDecimalFromInt(int anInt) { @@ -357,8 +357,8 @@ NSDecimal CPTDecimalFromInt(int anInt) /** * @brief Converts an @ref NSInteger value to an @ref NSDecimal. - * @param anInt The @ref NSInteger value. - * @return The converted value. + * @param anInt The @ref NSInteger value. + * @return The converted value. **/ NSDecimal CPTDecimalFromInteger(NSInteger anInt) { @@ -380,8 +380,8 @@ NSDecimal CPTDecimalFromInteger(NSInteger anInt) /** * @brief Converts an unsigned 8-bit integer value to an @ref NSDecimal. - * @param anInt The unsigned integer value. - * @return The converted value. + * @param anInt The unsigned integer value. + * @return The converted value. **/ NSDecimal CPTDecimalFromUnsignedChar(uint8_t anInt) { @@ -403,8 +403,8 @@ NSDecimal CPTDecimalFromUnsignedChar(uint8_t anInt) /** * @brief Converts an unsigned 16-bit integer value to an @ref NSDecimal. - * @param anInt The unsigned integer value. - * @return The converted value. + * @param anInt The unsigned integer value. + * @return The converted value. **/ NSDecimal CPTDecimalFromUnsignedShort(uint16_t anInt) { @@ -426,8 +426,8 @@ NSDecimal CPTDecimalFromUnsignedShort(uint16_t anInt) /** * @brief Converts an unsigned 32-bit integer value to an @ref NSDecimal. - * @param anInt The unsigned integer value. - * @return The converted value. + * @param anInt The unsigned integer value. + * @return The converted value. **/ NSDecimal CPTDecimalFromUnsignedLong(uint32_t anInt) { @@ -449,8 +449,8 @@ NSDecimal CPTDecimalFromUnsignedLong(uint32_t anInt) /** * @brief Converts an unsigned 64-bit integer value to an @ref NSDecimal. - * @param anInt The unsigned integer value. - * @return The converted value. + * @param anInt The unsigned integer value. + * @return The converted value. **/ NSDecimal CPTDecimalFromUnsignedLongLong(uint64_t anInt) { @@ -472,8 +472,8 @@ NSDecimal CPTDecimalFromUnsignedLongLong(uint64_t anInt) /** * @brief Converts an @uint value to an @ref NSDecimal. - * @param anInt The @uint value. - * @return The converted value. + * @param anInt The @uint value. + * @return The converted value. **/ NSDecimal CPTDecimalFromUnsignedInt(unsigned int anInt) { @@ -495,8 +495,8 @@ NSDecimal CPTDecimalFromUnsignedInt(unsigned int anInt) /** * @brief Converts an @ref NSUInteger value to an @ref NSDecimal. - * @param anInt The @ref NSUInteger value. - * @return The converted value. + * @param anInt The @ref NSUInteger value. + * @return The converted value. **/ NSDecimal CPTDecimalFromUnsignedInteger(NSUInteger anInt) { @@ -518,8 +518,8 @@ NSDecimal CPTDecimalFromUnsignedInteger(NSUInteger anInt) /** * @brief Converts a @float value to an @ref NSDecimal. - * @param aFloat The @float value. - * @return The converted value. + * @param aFloat The @float value. + * @return The converted value. **/ NSDecimal CPTDecimalFromFloat(float aFloat) { @@ -536,8 +536,8 @@ NSDecimal CPTDecimalFromFloat(float aFloat) /** * @brief Converts a @double value to an @ref NSDecimal. - * @param aDouble The @double value. - * @return The converted value. + * @param aDouble The @double value. + * @return The converted value. **/ NSDecimal CPTDecimalFromDouble(double aDouble) { @@ -554,8 +554,8 @@ NSDecimal CPTDecimalFromDouble(double aDouble) /** * @brief Converts a @ref CGFloat value to an @ref NSDecimal. - * @param aCGFloat The @ref CGFloat value. - * @return The converted value. + * @param aCGFloat The @ref CGFloat value. + * @return The converted value. **/ NSDecimal CPTDecimalFromCGFloat(CGFloat aCGFloat) { @@ -572,8 +572,8 @@ NSDecimal CPTDecimalFromCGFloat(CGFloat aCGFloat) /** * @brief Parses a string and extracts the numeric value as an @ref NSDecimal. - * @param stringRepresentation The string value. - * @return The numeric value extracted from the string. + * @param stringRepresentation The string value. + * @return The numeric value extracted from the string. **/ NSDecimal CPTDecimalFromString(NSString *__nonnull stringRepresentation) { @@ -597,9 +597,9 @@ NSDecimal CPTDecimalFromString(NSString *__nonnull stringRepresentation) /** * @brief Adds two @ref NSDecimal structs together. - * @param leftOperand The left-hand side of the addition operation. - * @param rightOperand The right-hand side of the addition operation. - * @return The result of the addition. + * @param leftOperand The left-hand side of the addition operation. + * @param rightOperand The right-hand side of the addition operation. + * @return The result of the addition. **/ NSDecimal CPTDecimalAdd(NSDecimal leftOperand, NSDecimal rightOperand) { @@ -611,9 +611,9 @@ NSDecimal CPTDecimalAdd(NSDecimal leftOperand, NSDecimal rightOperand) /** * @brief Subtracts one @ref NSDecimal from another. - * @param leftOperand The left-hand side of the subtraction operation. - * @param rightOperand The right-hand side of the subtraction operation. - * @return The result of the subtraction. + * @param leftOperand The left-hand side of the subtraction operation. + * @param rightOperand The right-hand side of the subtraction operation. + * @return The result of the subtraction. **/ NSDecimal CPTDecimalSubtract(NSDecimal leftOperand, NSDecimal rightOperand) { @@ -625,9 +625,9 @@ NSDecimal CPTDecimalSubtract(NSDecimal leftOperand, NSDecimal rightOperand) /** * @brief Multiplies two @ref NSDecimal structs together. - * @param leftOperand The left-hand side of the multiplication operation. - * @param rightOperand The right-hand side of the multiplication operation. - * @return The result of the multiplication. + * @param leftOperand The left-hand side of the multiplication operation. + * @param rightOperand The right-hand side of the multiplication operation. + * @return The result of the multiplication. **/ NSDecimal CPTDecimalMultiply(NSDecimal leftOperand, NSDecimal rightOperand) { @@ -639,9 +639,9 @@ NSDecimal CPTDecimalMultiply(NSDecimal leftOperand, NSDecimal rightOperand) /** * @brief Divides one @ref NSDecimal by another. - * @param numerator The numerator of the multiplication operation. - * @param denominator The denominator of the multiplication operation. - * @return The result of the division. + * @param numerator The numerator of the multiplication operation. + * @param denominator The denominator of the multiplication operation. + * @return The result of the division. **/ NSDecimal CPTDecimalDivide(NSDecimal numerator, NSDecimal denominator) { @@ -667,9 +667,9 @@ NSDecimal CPTDecimalDivide(NSDecimal numerator, NSDecimal denominator) /** * @brief Checks to see if one @ref NSDecimal is greater than another. - * @param leftOperand The left side of the comparison. - * @param rightOperand The right side of the comparison. - * @return @YES if the left operand is greater than the right, @NO otherwise. + * @param leftOperand The left side of the comparison. + * @param rightOperand The right side of the comparison. + * @return @YES if the left operand is greater than the right, @NO otherwise. **/ BOOL CPTDecimalGreaterThan(NSDecimal leftOperand, NSDecimal rightOperand) { @@ -678,9 +678,9 @@ BOOL CPTDecimalGreaterThan(NSDecimal leftOperand, NSDecimal rightOperand) /** * @brief Checks to see if one @ref NSDecimal is greater than or equal to another. - * @param leftOperand The left side of the comparison. - * @param rightOperand The right side of the comparison. - * @return @YES if the left operand is greater than or equal to the right, @NO otherwise. + * @param leftOperand The left side of the comparison. + * @param rightOperand The right side of the comparison. + * @return @YES if the left operand is greater than or equal to the right, @NO otherwise. **/ BOOL CPTDecimalGreaterThanOrEqualTo(NSDecimal leftOperand, NSDecimal rightOperand) { @@ -689,9 +689,9 @@ BOOL CPTDecimalGreaterThanOrEqualTo(NSDecimal leftOperand, NSDecimal rightOperan /** * @brief Checks to see if one @ref NSDecimal is less than another. - * @param leftOperand The left side of the comparison. - * @param rightOperand The right side of the comparison. - * @return @YES if the left operand is less than the right, @NO otherwise. + * @param leftOperand The left side of the comparison. + * @param rightOperand The right side of the comparison. + * @return @YES if the left operand is less than the right, @NO otherwise. **/ BOOL CPTDecimalLessThan(NSDecimal leftOperand, NSDecimal rightOperand) { @@ -700,9 +700,9 @@ BOOL CPTDecimalLessThan(NSDecimal leftOperand, NSDecimal rightOperand) /** * @brief Checks to see if one @ref NSDecimal is less than or equal to another. - * @param leftOperand The left side of the comparison. - * @param rightOperand The right side of the comparison. - * @return @YES if the left operand is less than or equal to the right, @NO otherwise. + * @param leftOperand The left side of the comparison. + * @param rightOperand The right side of the comparison. + * @return @YES if the left operand is less than or equal to the right, @NO otherwise. **/ BOOL CPTDecimalLessThanOrEqualTo(NSDecimal leftOperand, NSDecimal rightOperand) { @@ -711,9 +711,9 @@ BOOL CPTDecimalLessThanOrEqualTo(NSDecimal leftOperand, NSDecimal rightOperand) /** * @brief Checks to see if one @ref NSDecimal is equal to another. - * @param leftOperand The left side of the comparison. - * @param rightOperand The right side of the comparison. - * @return @YES if the left operand is equal to the right, @NO otherwise. + * @param leftOperand The left side of the comparison. + * @param rightOperand The right side of the comparison. + * @return @YES if the left operand is equal to the right, @NO otherwise. **/ BOOL CPTDecimalEquals(NSDecimal leftOperand, NSDecimal rightOperand) { @@ -737,9 +737,9 @@ NSDecimal CPTDecimalNaN(void) /** * @brief Determines the smaller of two @ref NSDecimal values. - * @param leftOperand The first value to compare. - * @param rightOperand The second value to compare. - * @return The smaller of the two arguments. + * @param leftOperand The first value to compare. + * @param rightOperand The second value to compare. + * @return The smaller of the two arguments. **/ NSDecimal CPTDecimalMin(NSDecimal leftOperand, NSDecimal rightOperand) { @@ -759,9 +759,9 @@ NSDecimal CPTDecimalMin(NSDecimal leftOperand, NSDecimal rightOperand) /** * @brief Determines the larger of two @ref NSDecimal values. - * @param leftOperand The first value to compare. - * @param rightOperand The second value to compare. - * @return The larger of the two arguments. + * @param leftOperand The first value to compare. + * @param rightOperand The second value to compare. + * @return The larger of the two arguments. **/ NSDecimal CPTDecimalMax(NSDecimal leftOperand, NSDecimal rightOperand) { @@ -781,8 +781,8 @@ NSDecimal CPTDecimalMax(NSDecimal leftOperand, NSDecimal rightOperand) /** * @brief Determines the absolute value of an @ref NSDecimal value. - * @param value The input value for the calculation. - * @return The absolute value of the argument. + * @param value The input value for the calculation. + * @return The absolute value of the argument. **/ NSDecimal CPTDecimalAbs(NSDecimal value) { @@ -802,9 +802,9 @@ NSDecimal CPTDecimalAbs(NSDecimal value) * * The @par{location} of the resulting NSRange will be non-negative. * - * @param range The NSRange to expand. - * @param expandBy The amount the expand the range by. - * @return The expanded range. + * @param range The NSRange to expand. + * @param expandBy The amount the expand the range by. + * @return The expanded range. **/ NSRange CPTExpandedRange(NSRange range, NSInteger expandBy) { @@ -823,8 +823,8 @@ NSRange CPTExpandedRange(NSRange range, NSInteger expandBy) * * Supports RGBA and grayscale color spaces. * - * @param color The color. - * @return The RGBA components of the color. + * @param color The color. + * @return The RGBA components of the color. **/ CPTRGBAColor CPTRGBAColorFromCGColor(__nonnull CGColorRef color) { @@ -859,8 +859,8 @@ CPTRGBAColor CPTRGBAColorFromCGColor(__nonnull CGColorRef color) * * The current implementation is two-dimensional—X is orthogonal to Y and Y is orthogonal to X. * - * @param coord The CPTCoordinate. - * @return The orthogonal CPTCoordinate. + * @param coord The CPTCoordinate. + * @return The orthogonal CPTCoordinate. **/ CPTCoordinate CPTOrthogonalCoordinate(CPTCoordinate coord) { @@ -876,9 +876,9 @@ CPTCoordinate CPTOrthogonalCoordinate(CPTCoordinate coord) * Ensures that the x and y coordinates are at a pixel corner in device space. * Drawn from Programming with Quartz by D. Gelphman, B. Laden. * - * @param context The graphics context. - * @param point The point in user space. - * @return The device aligned point in user space. + * @param context The graphics context. + * @param point The point in user space. + * @return The device aligned point in user space. **/ CGPoint CPTAlignPointToUserSpace(__nonnull CGContextRef context, CGPoint point) { @@ -900,9 +900,9 @@ CGPoint CPTAlignPointToUserSpace(__nonnull CGContextRef context, CGPoint point) * Ensures that the width and height are an integer number of device pixels. * Drawn from Programming with Quartz by D. Gelphman, B. Laden. * - * @param context The graphics context. - * @param size The size in user space. - * @return The device aligned size in user space. + * @param context The graphics context. + * @param size The size in user space. + * @return The device aligned size in user space. **/ CGSize CPTAlignSizeToUserSpace(__nonnull CGContextRef context, CGSize size) { @@ -924,9 +924,9 @@ CGSize CPTAlignSizeToUserSpace(__nonnull CGContextRef context, CGSize size) * and the width and height are an integer number of device pixels. * Drawn from Programming with Quartz by D. Gelphman, B. Laden. * - * @param context The graphics context. - * @param rect The rectangle in user space. - * @return The device aligned rectangle in user space. + * @param context The graphics context. + * @param rect The rectangle in user space. + * @return The device aligned rectangle in user space. **/ CGRect CPTAlignRectToUserSpace(__nonnull CGContextRef context, CGRect rect) { @@ -952,9 +952,9 @@ CGRect CPTAlignRectToUserSpace(__nonnull CGContextRef context, CGRect rect) * * Ensures that the x and y coordinates are between pixels in device space. * - * @param context The graphics context. - * @param point The point in user space. - * @return The device aligned point in user space. + * @param context The graphics context. + * @param point The point in user space. + * @return The device aligned point in user space. **/ CGPoint CPTAlignIntegralPointToUserSpace(__nonnull CGContextRef context, CGPoint point) { @@ -972,9 +972,9 @@ CGPoint CPTAlignIntegralPointToUserSpace(__nonnull CGContextRef context, CGPoint * Ensures that the x and y coordinates are between pixels in device space * and the width and height are an integer number of device pixels. * - * @param context The graphics context. - * @param rect The rectangle in user space. - * @return The device aligned rectangle in user space. + * @param context The graphics context. + * @param rect The rectangle in user space. + * @return The device aligned rectangle in user space. **/ CGRect CPTAlignIntegralRectToUserSpace(__nonnull CGContextRef context, CGRect rect) { @@ -1021,8 +1021,8 @@ CGRect CPTAlignBorderedRectToUserSpace(__nonnull CGContextRef context, CGRect re #pragma mark String formatting for Core Graphics structs /** @brief Creates a string representation of the given point. - * @param point The point. - * @return A string with the format {x, y}. + * @param point The point. + * @return A string with the format {x, y}. **/ NSString *__nonnull CPTStringFromPoint(CGPoint point) { @@ -1030,8 +1030,8 @@ CGRect CPTAlignBorderedRectToUserSpace(__nonnull CGContextRef context, CGRect re } /** @brief Creates a string representation of the given size. - * @param size The size. - * @return A string with the format {width, height}. + * @param size The size. + * @return A string with the format {width, height}. **/ NSString *__nonnull CPTStringFromSize(CGSize size) { @@ -1039,8 +1039,8 @@ CGRect CPTAlignBorderedRectToUserSpace(__nonnull CGContextRef context, CGRect re } /** @brief Creates a string representation of the given rectangle. - * @param rect The rectangle. - * @return A string with the format {{x, y}, {width, height}}. + * @param rect The rectangle. + * @return A string with the format {{x, y}, {width, height}}. **/ NSString *__nonnull CPTStringFromRect(CGRect rect) { @@ -1048,8 +1048,8 @@ CGRect CPTAlignBorderedRectToUserSpace(__nonnull CGContextRef context, CGRect re } /** @brief Creates a string representation of the given vector. - * @param vector The vector. - * @return A string with the format {dx, dy}. + * @param vector The vector. + * @return A string with the format {dx, dy}. **/ NSString *__nonnull CPTStringFromVector(CGVector vector) { @@ -1060,9 +1060,9 @@ CGRect CPTAlignBorderedRectToUserSpace(__nonnull CGContextRef context, CGRect re #pragma mark CGPoint utilities /** @brief Computes the square of the distance between two points. - * @param point1 The first point. - * @param point2 The second point. - * @return The square of the distance between the two points. + * @param point1 The first point. + * @param point2 The second point. + * @return The square of the distance between the two points. **/ CGFloat squareOfDistanceBetweenPoints(CGPoint point1, CGPoint point2) { @@ -1077,11 +1077,11 @@ CGFloat squareOfDistanceBetweenPoints(CGPoint point1, CGPoint point2) #pragma mark Edge Inset Utilities /** @brief Returns a CPTEdgeInsets struct with the given insets. - * @param top The top inset. - * @param left The left inset. - * @param bottom The bottom inset. - * @param right The right inset. - * @return A CPTEdgeInsets struct with the given insets. + * @param top The top inset. + * @param left The left inset. + * @param bottom The bottom inset. + * @param right The right inset. + * @return A CPTEdgeInsets struct with the given insets. **/ CPTEdgeInsets CPTEdgeInsetsMake(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right) { @@ -1096,9 +1096,9 @@ CPTEdgeInsets CPTEdgeInsetsMake(CGFloat top, CGFloat left, CGFloat bottom, CGFlo } /** @brief Compares two CPTEdgeInsets structstructs. - * @param insets1 The first inset. - * @param insets2 The second inset. - * @return @YES if the two CPTEdgeInsets structs are equal. + * @param insets1 The first inset. + * @param insets2 The second inset. + * @return @YES if the two CPTEdgeInsets structs are equal. **/ BOOL CPTEdgeInsetsEqualToEdgeInsets(CPTEdgeInsets insets1, CPTEdgeInsets insets2) { @@ -1112,9 +1112,9 @@ BOOL CPTEdgeInsetsEqualToEdgeInsets(CPTEdgeInsets insets1, CPTEdgeInsets insets2 #pragma mark Log Modulus /** @brief Computes the log modulus of the given value. - * @param value The value. - * @return The log modulus of the given value. - * @see A log transformation of positive and negative values for more information about the log-modulus transformation. + * @param value The value. + * @return The log modulus of the given value. + * @see A log transformation of positive and negative values for more information about the log-modulus transformation. **/ double CPTLogModulus(double value) { @@ -1129,8 +1129,8 @@ BOOL CPTEdgeInsetsEqualToEdgeInsets(CPTEdgeInsets insets1, CPTEdgeInsets insets2 } /** @brief Computes the inverse log modulus of the given value. - * @param value The value. - * @return The inverse log modulus of the given value. + * @param value The value. + * @return The inverse log modulus of the given value. **/ double CPTInverseLogModulus(double value) { diff --git a/framework/Source/CPTXYAxis.m b/framework/Source/CPTXYAxis.m index d103f5a8a..0e470f9cc 100644 --- a/framework/Source/CPTXYAxis.m +++ b/framework/Source/CPTXYAxis.m @@ -62,8 +62,8 @@ @implementation CPTXYAxis * - @ref orthogonalPosition = @num{0} * - @ref axisConstraints = @nil * - * @param newFrame The frame rectangle. - * @return The initialized CPTXYAxis object. + * @param newFrame The frame rectangle. + * @return The initialized CPTXYAxis object. **/ -(nonnull instancetype)initWithFrame:(CGRect)newFrame { diff --git a/framework/Source/CPTXYAxisSet.m b/framework/Source/CPTXYAxisSet.m index 1013d786d..d87d4606b 100644 --- a/framework/Source/CPTXYAxisSet.m +++ b/framework/Source/CPTXYAxisSet.m @@ -37,8 +37,8 @@ @implementation CPTXYAxisSet * @ref yAxis#CPTCoordinateY#CPTSignNegative * * - * @param newFrame The frame rectangle. - * @return The initialized CPTXYAxisSet object. + * @param newFrame The frame rectangle. + * @return The initialized CPTXYAxisSet object. **/ -(nonnull instancetype)initWithFrame:(CGRect)newFrame { diff --git a/framework/Source/CPTXYGraph.m b/framework/Source/CPTXYGraph.m index f0fc66c9f..eb1abbb3c 100644 --- a/framework/Source/CPTXYGraph.m +++ b/framework/Source/CPTXYGraph.m @@ -38,10 +38,10 @@ @implementation CPTXYGraph /** @brief Initializes a newly allocated CPTXYGraph object with the provided frame rectangle and scale types. * - * @param newFrame The frame rectangle. - * @param newXScaleType The scale type for the x-axis. - * @param newYScaleType The scale type for the y-axis. - * @return The initialized CPTXYGraph object. + * @param newFrame The frame rectangle. + * @param newXScaleType The scale type for the x-axis. + * @param newYScaleType The scale type for the y-axis. + * @return The initialized CPTXYGraph object. **/ -(nonnull instancetype)initWithFrame:(CGRect)newFrame xScaleType:(CPTScaleType)newXScaleType yScaleType:(CPTScaleType)newYScaleType { @@ -61,9 +61,9 @@ -(nonnull instancetype)initWithFrame:(CGRect)newFrame xScaleType:(CPTScaleType)n * - @link CPTXYPlotSpace::xScaleType xScaleType @endlink = #CPTScaleTypeLinear * - @link CPTXYPlotSpace::yScaleType yScaleType @endlink = #CPTScaleTypeLinear * - * @param newFrame The frame rectangle. - * @return The initialized CPTXYGraph object. - * @see @link CPTXYGraph::initWithFrame:xScaleType:yScaleType: -initWithFrame:xScaleType:yScaleType: @endlink + * @param newFrame The frame rectangle. + * @return The initialized CPTXYGraph object. + * @see @link CPTXYGraph::initWithFrame:xScaleType:yScaleType: -initWithFrame:xScaleType:yScaleType: @endlink **/ -(nonnull instancetype)initWithFrame:(CGRect)newFrame { diff --git a/framework/Source/CPTXYPlotSpace.m b/framework/Source/CPTXYPlotSpace.m index 16802ab51..79f37fef8 100644 --- a/framework/Source/CPTXYPlotSpace.m +++ b/framework/Source/CPTXYPlotSpace.m @@ -1524,9 +1524,9 @@ -(void)scaleBy:(CGFloat)interactionScale aboutPoint:(CGPoint)plotAreaPoint * @link CPTPlotAreaFrame::plotArea plotArea @endlink, a drag operation starts and * this method returns @YES. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -1581,9 +1581,9 @@ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint) * Otherwise, if a drag operation is in progress, it ends and * this method returns @YES. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -1680,9 +1680,9 @@ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)in * and @ref yRange are shifted to follow the drag and * this method returns @YES. * - * @param event The OS event. - * @param interactionPoint The coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param interactionPoint The coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)pointingDeviceDraggedEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint { @@ -1805,10 +1805,10 @@ -(nullable CPTPlotRange *)shiftRange:(nonnull CPTPlotRange *)oldRange by:(NSDeci * delegate method is called. If it returns @NO, this method returns @YES * to indicate that the event has been handled and no further processing should occur. * - * @param event The OS event. - * @param fromPoint The starting coordinates of the interaction. - * @param toPoint The ending coordinates of the interaction. - * @return Whether the event was handled or not. + * @param event The OS event. + * @param fromPoint The starting coordinates of the interaction. + * @param toPoint The ending coordinates of the interaction. + * @return Whether the event was handled or not. **/ -(BOOL)scrollWheelEvent:(nonnull CPTNativeEvent *)event fromPoint:(CGPoint)fromPoint toPoint:(CGPoint)toPoint { diff --git a/framework/Source/NSCoderExtensions.m b/framework/Source/NSCoderExtensions.m index 22ee74d2e..3c063e555 100644 --- a/framework/Source/NSCoderExtensions.m +++ b/framework/Source/NSCoderExtensions.m @@ -14,7 +14,7 @@ @implementation NSCoder(CPTExtensions) /** @brief Encodes a @ref CGFloat and associates it with the string @par{key}. * @param number The number to encode. - * @param key The key to associate with the number. + * @param key The key to associate with the number. **/ -(void)encodeCGFloat:(CGFloat)number forKey:(nonnull NSString *)key { @@ -27,7 +27,7 @@ -(void)encodeCGFloat:(CGFloat)number forKey:(nonnull NSString *)key /** @brief Encodes a @ref CGPoint and associates it with the string @par{key}. * @param point The point to encode. - * @param key The key to associate with the point. + * @param key The key to associate with the point. **/ -(void)encodeCPTPoint:(CGPoint)point forKey:(nonnull NSString *)key { @@ -41,7 +41,7 @@ -(void)encodeCPTPoint:(CGPoint)point forKey:(nonnull NSString *)key /** @brief Encodes a @ref CGSize and associates it with the string @par{key}. * @param size The size to encode. - * @param key The key to associate with the size. + * @param key The key to associate with the size. **/ -(void)encodeCPTSize:(CGSize)size forKey:(nonnull NSString *)key { @@ -55,7 +55,7 @@ -(void)encodeCPTSize:(CGSize)size forKey:(nonnull NSString *)key /** @brief Encodes a @ref CGRect and associates it with the string @par{key}. * @param rect The rectangle to encode. - * @param key The key to associate with the rectangle. + * @param key The key to associate with the rectangle. **/ -(void)encodeCPTRect:(CGRect)rect forKey:(nonnull NSString *)key { @@ -69,7 +69,7 @@ -(void)encodeCPTRect:(CGRect)rect forKey:(nonnull NSString *)key /** @brief Encodes a color space and associates it with the string @par{key}. * @param colorSpace The @ref CGColorSpaceRef to encode. - * @param key The key to associate with the color space. + * @param key The key to associate with the color space. * @note The current implementation only works with named color spaces. **/ #if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST @@ -126,7 +126,7 @@ void CPTPathApplierFunc(void *__nullable info, const CGPathElement *__nonnull el break; } - NSMutableArray *> *pathData = (__bridge NSMutableArray *> *)info; + NSMutableArray *> *pathData = (__bridge NSMutableArray *> *) info; [pathData addObject:elementData]; } @@ -135,7 +135,7 @@ void CPTPathApplierFunc(void *__nullable info, const CGPathElement *__nonnull el /** @brief Encodes a path and associates it with the string @par{key}. * @param path The @ref CGPathRef to encode. - * @param key The key to associate with the path. + * @param key The key to associate with the path. **/ -(void)encodeCGPath:(nullable CGPathRef)path forKey:(nonnull NSString *)key { @@ -189,7 +189,7 @@ -(void)encodeCGPath:(nullable CGPathRef)path forKey:(nonnull NSString *)key /** @brief Encodes an image and associates it with the string @par{key}. * @param image The @ref CGImageRef to encode. - * @param key The key to associate with the image. + * @param key The key to associate with the image. **/ -(void)encodeCGImage:(nullable CGImageRef)image forKey:(nonnull NSString *)key { @@ -253,7 +253,7 @@ -(void)encodeCGImage:(nullable CGImageRef)image forKey:(nonnull NSString *)key /** @brief Encodes an @ref NSDecimal and associates it with the string @par{key}. * @param number The number to encode. - * @param key The key to associate with the number. + * @param key The key to associate with the number. **/ -(void)encodeDecimal:(NSDecimal)number forKey:(nonnull NSString *)key { @@ -266,8 +266,8 @@ -(void)encodeDecimal:(NSDecimal)number forKey:(nonnull NSString *)key /** @brief Decodes and returns a number that was previously encoded with * @link NSCoder::encodeCGFloat:forKey: -encodeCGFloat:forKey: @endlink * and associated with the string @par{key}. - * @param key The key associated with the number. - * @return The number as a @ref CGFloat. + * @param key The key associated with the number. + * @return The number as a @ref CGFloat. **/ -(CGFloat)decodeCGFloatForKey:(nonnull NSString *)key { @@ -281,8 +281,8 @@ -(CGFloat)decodeCGFloatForKey:(nonnull NSString *)key /** @brief Decodes and returns a point that was previously encoded with * @link NSCoder::encodeCPTPoint:forKey: -encodeCPTPoint:forKey: @endlink * and associated with the string @par{key}. - * @param key The key associated with the point. - * @return The point. + * @param key The key associated with the point. + * @return The point. **/ -(CGPoint)decodeCPTPointForKey:(nonnull NSString *)key { @@ -301,8 +301,8 @@ -(CGPoint)decodeCPTPointForKey:(nonnull NSString *)key /** @brief Decodes and returns a size that was previously encoded with * @link NSCoder::encodeCPTSize:forKey: -encodeCPTSize:forKey:@endlink * and associated with the string @par{key}. - * @param key The key associated with the size. - * @return The size. + * @param key The key associated with the size. + * @return The size. **/ -(CGSize)decodeCPTSizeForKey:(nonnull NSString *)key { @@ -321,8 +321,8 @@ -(CGSize)decodeCPTSizeForKey:(nonnull NSString *)key /** @brief Decodes and returns a rectangle that was previously encoded with * @link NSCoder::encodeCPTRect:forKey: -encodeCPTRect:forKey:@endlink * and associated with the string @par{key}. - * @param key The key associated with the rectangle. - * @return The rectangle. + * @param key The key associated with the rectangle. + * @return The rectangle. **/ -(CGRect)decodeCPTRectForKey:(nonnull NSString *)key { @@ -341,8 +341,8 @@ -(CGRect)decodeCPTRectForKey:(nonnull NSString *)key /** @brief Decodes and returns an new color space object that was previously encoded with * @link NSCoder::encodeCGColorSpace:forKey: -encodeCGColorSpace:forKey:@endlink * and associated with the string @par{key}. - * @param key The key associated with the color space. - * @return The new path. + * @param key The key associated with the color space. + * @return The new path. * @note The current implementation only works with named color spaces. **/ #if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST @@ -381,8 +381,8 @@ -(nullable CGColorSpaceRef)newCGColorSpaceDecodeForKey:(nonnull NSString *)key /** @brief Decodes and returns a new path object that was previously encoded with * @link NSCoder::encodeCGPath:forKey: -encodeCGPath:forKey:@endlink * and associated with the string @par{key}. - * @param key The key associated with the path. - * @return The new path. + * @param key The key associated with the path. + * @return The new path. **/ -(nullable CGPathRef)newCGPathDecodeForKey:(nonnull NSString *)key { @@ -449,8 +449,8 @@ -(nullable CGPathRef)newCGPathDecodeForKey:(nonnull NSString *)key /** @brief Decodes and returns a new image object that was previously encoded with * @link NSCoder::encodeCGImage:forKey: -encodeCGImage:forKey:@endlink * and associated with the string @par{key}. - * @param key The key associated with the image. - * @return The new image. + * @param key The key associated with the image. + * @return The new image. **/ -(nullable CGImageRef)newCGImageDecodeForKey:(nonnull NSString *)key { @@ -527,8 +527,8 @@ -(nullable CGImageRef)newCGImageDecodeForKey:(nonnull NSString *)key /** @brief Decodes and returns a decimal number that was previously encoded with * @link NSCoder::encodeDecimal:forKey: -encodeDecimal:forKey:@endlink * and associated with the string @par{key}. - * @param key The key associated with the number. - * @return The number as an @ref NSDecimal. + * @param key The key associated with the number. + * @return The number as an @ref NSDecimal. **/ -(NSDecimal)decodeDecimalForKey:(nonnull NSString *)key { diff --git a/framework/Source/NSNumberExtensions.m b/framework/Source/NSNumberExtensions.m index a9ee47ab0..abf98b549 100644 --- a/framework/Source/NSNumberExtensions.m +++ b/framework/Source/NSNumberExtensions.m @@ -3,8 +3,8 @@ @implementation NSNumber(CPTExtensions) /** @brief Creates and returns an NSNumber object containing a given value, treating it as a @ref CGFloat. - * @param number The value for the new number. - * @return An NSNumber object containing value, treating it as a @ref CGFloat. + * @param number The value for the new number. + * @return An NSNumber object containing value, treating it as a @ref CGFloat. **/ +(nonnull instancetype)numberWithCGFloat:(CGFloat)number { @@ -24,8 +24,8 @@ -(CGFloat)cgFloatValue } /** @brief Returns an NSNumber object initialized to contain a given value, treated as a @ref CGFloat. - * @param number The value for the new number. - * @return An NSNumber object containing value, treating it as a @ref CGFloat. + * @param number The value for the new number. + * @return An NSNumber object containing value, treating it as a @ref CGFloat. **/ -(nonnull instancetype)initWithCGFloat:(CGFloat)number { diff --git a/framework/Source/_CPTAnimationTimingFunctions.m b/framework/Source/_CPTAnimationTimingFunctions.m index 36b20aa6e..9ee01f30c 100644 --- a/framework/Source/_CPTAnimationTimingFunctions.m +++ b/framework/Source/_CPTAnimationTimingFunctions.m @@ -9,9 +9,9 @@ /** * @brief Computes a linear animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionLinear(CGFloat elapsedTime, CGFloat duration) { @@ -33,9 +33,9 @@ CGFloat CPTAnimationTimingFunctionLinear(CGFloat elapsedTime, CGFloat duration) /** * @brief Computes a backing in animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionBackIn(CGFloat elapsedTime, CGFloat duration) { @@ -56,9 +56,9 @@ CGFloat CPTAnimationTimingFunctionBackIn(CGFloat elapsedTime, CGFloat duration) /** * @brief Computes a backing out animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionBackOut(CGFloat elapsedTime, CGFloat duration) { @@ -79,9 +79,9 @@ CGFloat CPTAnimationTimingFunctionBackOut(CGFloat elapsedTime, CGFloat duration) /** * @brief Computes a backing in and out animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionBackInOut(CGFloat elapsedTime, CGFloat duration) { @@ -112,9 +112,9 @@ CGFloat CPTAnimationTimingFunctionBackInOut(CGFloat elapsedTime, CGFloat duratio /** * @brief Computes a bounce in animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionBounceIn(CGFloat elapsedTime, CGFloat duration) { @@ -123,9 +123,9 @@ CGFloat CPTAnimationTimingFunctionBounceIn(CGFloat elapsedTime, CGFloat duration /** * @brief Computes a bounce out animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionBounceOut(CGFloat elapsedTime, CGFloat duration) { @@ -161,9 +161,9 @@ CGFloat CPTAnimationTimingFunctionBounceOut(CGFloat elapsedTime, CGFloat duratio /** * @brief Computes a bounce in and out animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionBounceInOut(CGFloat elapsedTime, CGFloat duration) { @@ -181,9 +181,9 @@ CGFloat CPTAnimationTimingFunctionBounceInOut(CGFloat elapsedTime, CGFloat durat /** * @brief Computes a circular in animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionCircularIn(CGFloat elapsedTime, CGFloat duration) { @@ -202,9 +202,9 @@ CGFloat CPTAnimationTimingFunctionCircularIn(CGFloat elapsedTime, CGFloat durati /** * @brief Computes a circular out animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionCircularOut(CGFloat elapsedTime, CGFloat duration) { @@ -223,9 +223,9 @@ CGFloat CPTAnimationTimingFunctionCircularOut(CGFloat elapsedTime, CGFloat durat /** * @brief Computes a circular in and out animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionCircularInOut(CGFloat elapsedTime, CGFloat duration) { @@ -254,9 +254,9 @@ CGFloat CPTAnimationTimingFunctionCircularInOut(CGFloat elapsedTime, CGFloat dur /** * @brief Computes a elastic in animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionElasticIn(CGFloat elapsedTime, CGFloat duration) { @@ -280,9 +280,9 @@ CGFloat CPTAnimationTimingFunctionElasticIn(CGFloat elapsedTime, CGFloat duratio /** * @brief Computes a elastic out animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionElasticOut(CGFloat elapsedTime, CGFloat duration) { @@ -304,9 +304,9 @@ CGFloat CPTAnimationTimingFunctionElasticOut(CGFloat elapsedTime, CGFloat durati /** * @brief Computes a elastic in and out animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionElasticInOut(CGFloat elapsedTime, CGFloat duration) { @@ -338,9 +338,9 @@ CGFloat CPTAnimationTimingFunctionElasticInOut(CGFloat elapsedTime, CGFloat dura /** * @brief Computes a exponential in animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionExponentialIn(CGFloat elapsedTime, CGFloat duration) { @@ -359,9 +359,9 @@ CGFloat CPTAnimationTimingFunctionExponentialIn(CGFloat elapsedTime, CGFloat dur /** * @brief Computes a exponential out animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionExponentialOut(CGFloat elapsedTime, CGFloat duration) { @@ -380,9 +380,9 @@ CGFloat CPTAnimationTimingFunctionExponentialOut(CGFloat elapsedTime, CGFloat du /** * @brief Computes a exponential in and out animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionExponentialInOut(CGFloat elapsedTime, CGFloat duration) { @@ -410,9 +410,9 @@ CGFloat CPTAnimationTimingFunctionExponentialInOut(CGFloat elapsedTime, CGFloat /** * @brief Computes a sinusoidal in animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionSinusoidalIn(CGFloat elapsedTime, CGFloat duration) { @@ -431,9 +431,9 @@ CGFloat CPTAnimationTimingFunctionSinusoidalIn(CGFloat elapsedTime, CGFloat dura /** * @brief Computes a sinusoidal out animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionSinusoidalOut(CGFloat elapsedTime, CGFloat duration) { @@ -452,9 +452,9 @@ CGFloat CPTAnimationTimingFunctionSinusoidalOut(CGFloat elapsedTime, CGFloat dur /** * @brief Computes a sinusoidal in and out animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionSinusoidalInOut(CGFloat elapsedTime, CGFloat duration) { @@ -476,9 +476,9 @@ CGFloat CPTAnimationTimingFunctionSinusoidalInOut(CGFloat elapsedTime, CGFloat d /** * @brief Computes a cubic in animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionCubicIn(CGFloat elapsedTime, CGFloat duration) { @@ -497,9 +497,9 @@ CGFloat CPTAnimationTimingFunctionCubicIn(CGFloat elapsedTime, CGFloat duration) /** * @brief Computes a cubic out animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionCubicOut(CGFloat elapsedTime, CGFloat duration) { @@ -518,9 +518,9 @@ CGFloat CPTAnimationTimingFunctionCubicOut(CGFloat elapsedTime, CGFloat duration /** * @brief Computes a cubic in and out animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionCubicInOut(CGFloat elapsedTime, CGFloat duration) { @@ -549,9 +549,9 @@ CGFloat CPTAnimationTimingFunctionCubicInOut(CGFloat elapsedTime, CGFloat durati /** * @brief Computes a quadratic in animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionQuadraticIn(CGFloat elapsedTime, CGFloat duration) { @@ -570,9 +570,9 @@ CGFloat CPTAnimationTimingFunctionQuadraticIn(CGFloat elapsedTime, CGFloat durat /** * @brief Computes a quadratic out animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionQuadraticOut(CGFloat elapsedTime, CGFloat duration) { @@ -591,9 +591,9 @@ CGFloat CPTAnimationTimingFunctionQuadraticOut(CGFloat elapsedTime, CGFloat dura /** * @brief Computes a quadratic in and out animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionQuadraticInOut(CGFloat elapsedTime, CGFloat duration) { @@ -622,9 +622,9 @@ CGFloat CPTAnimationTimingFunctionQuadraticInOut(CGFloat elapsedTime, CGFloat du /** * @brief Computes a quartic in animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionQuarticIn(CGFloat elapsedTime, CGFloat duration) { @@ -643,9 +643,9 @@ CGFloat CPTAnimationTimingFunctionQuarticIn(CGFloat elapsedTime, CGFloat duratio /** * @brief Computes a quartic out animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionQuarticOut(CGFloat elapsedTime, CGFloat duration) { @@ -664,9 +664,9 @@ CGFloat CPTAnimationTimingFunctionQuarticOut(CGFloat elapsedTime, CGFloat durati /** * @brief Computes a quartic in and out animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionQuarticInOut(CGFloat elapsedTime, CGFloat duration) { @@ -695,9 +695,9 @@ CGFloat CPTAnimationTimingFunctionQuarticInOut(CGFloat elapsedTime, CGFloat dura /** * @brief Computes a quintic in animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionQuinticIn(CGFloat elapsedTime, CGFloat duration) { @@ -716,9 +716,9 @@ CGFloat CPTAnimationTimingFunctionQuinticIn(CGFloat elapsedTime, CGFloat duratio /** * @brief Computes a quintic out animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionQuinticOut(CGFloat elapsedTime, CGFloat duration) { @@ -737,9 +737,9 @@ CGFloat CPTAnimationTimingFunctionQuinticOut(CGFloat elapsedTime, CGFloat durati /** * @brief Computes a quintic in and out animation timing function. - * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. - * @param duration The overall duration of the animation in seconds. - * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. + * @param elapsedTime The elapsed time of the animation between zero (@num{0}) and @par{duration}. + * @param duration The overall duration of the animation in seconds. + * @return The animation progress in the range zero (@num{0}) to one (@num{1}) at the given @par{elapsedTime}. **/ CGFloat CPTAnimationTimingFunctionQuinticInOut(CGFloat elapsedTime, CGFloat duration) { diff --git a/framework/Source/_CPTBorderLayer.m b/framework/Source/_CPTBorderLayer.m index 009fa48eb..a329d9bea 100644 --- a/framework/Source/_CPTBorderLayer.m +++ b/framework/Source/_CPTBorderLayer.m @@ -28,8 +28,8 @@ @implementation CPTBorderLayer * - @ref maskedLayer = @nil * - @ref needsDisplayOnBoundsChange = @YES * - * @param newFrame The frame rectangle. - * @return The initialized CPTBorderLayer object. + * @param newFrame The frame rectangle. + * @return The initialized CPTBorderLayer object. **/ -(nonnull instancetype)initWithFrame:(CGRect)newFrame { diff --git a/framework/Source/_CPTConstraintsFixed.m b/framework/Source/_CPTConstraintsFixed.m index 7cef014bc..8f9c32a3c 100644 --- a/framework/Source/_CPTConstraintsFixed.m +++ b/framework/Source/_CPTConstraintsFixed.m @@ -27,8 +27,8 @@ @implementation _CPTConstraintsFixed #pragma mark Init/Dealloc /** @brief Initializes a newly allocated CPTConstraints instance initialized with a fixed offset from the lower bound. - * @param newOffset The offset. - * @return The initialized CPTConstraints object. + * @param newOffset The offset. + * @return The initialized CPTConstraints object. **/ -(nonnull instancetype)initWithLowerOffset:(CGFloat)newOffset { @@ -41,8 +41,8 @@ -(nonnull instancetype)initWithLowerOffset:(CGFloat)newOffset } /** @brief Initializes a newly allocated CPTConstraints instance initialized with a fixed offset from the upper bound. - * @param newOffset The offset. - * @return The initialized CPTConstraints object. + * @param newOffset The offset. + * @return The initialized CPTConstraints object. **/ -(nonnull instancetype)initWithUpperOffset:(CGFloat)newOffset { @@ -70,9 +70,9 @@ -(BOOL)isEqualToConstraint:(nullable CPTConstraints *)otherConstraint #pragma mark Positioning /** @brief Compute the position given a range of values. - * @param lowerBound The lower bound; must be less than or equal to the upperBound. - * @param upperBound The upper bound; must be greater than or equal to the lowerBound. - * @return The calculated position. + * @param lowerBound The lower bound; must be less than or equal to the upperBound. + * @param upperBound The upper bound; must be greater than or equal to the lowerBound. + * @return The calculated position. **/ -(CGFloat)positionForLowerBound:(CGFloat)lowerBound upperBound:(CGFloat)upperBound { @@ -126,8 +126,8 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /// @endcond /** @brief Returns an object initialized from data in a given unarchiver. - * @param coder An unarchiver object. - * @return An object initialized from data in a given unarchiver. + * @param coder An unarchiver object. + * @return An object initialized from data in a given unarchiver. */ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { diff --git a/framework/Source/_CPTConstraintsRelative.m b/framework/Source/_CPTConstraintsRelative.m index 533e204ed..b902dbc99 100644 --- a/framework/Source/_CPTConstraintsRelative.m +++ b/framework/Source/_CPTConstraintsRelative.m @@ -30,8 +30,8 @@ @implementation _CPTConstraintsRelative * For example, an offset of @num{0.0} will return a position equal to the lower bound, @num{1.0} will return the upper bound, * and @num{0.5} will return a point midway between the two bounds. * - * @param newOffset The offset. - * @return The initialized CPTConstraints object. + * @param newOffset The offset. + * @return The initialized CPTConstraints object. **/ -(nonnull instancetype)initWithRelativeOffset:(CGFloat)newOffset { @@ -57,9 +57,9 @@ -(BOOL)isEqualToConstraint:(nullable CPTConstraints *)otherConstraint #pragma mark Positioning /** @brief Compute the position given a range of values. - * @param lowerBound The lower bound; must be less than or equal to the upperBound. - * @param upperBound The upper bound; must be greater than or equal to the lowerBound. - * @return The calculated position. + * @param lowerBound The lower bound; must be less than or equal to the upperBound. + * @param upperBound The upper bound; must be greater than or equal to the lowerBound. + * @return The calculated position. **/ -(CGFloat)positionForLowerBound:(CGFloat)lowerBound upperBound:(CGFloat)upperBound { @@ -104,8 +104,8 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /// @endcond /** @brief Returns an object initialized from data in a given unarchiver. - * @param coder An unarchiver object. - * @return An object initialized from data in a given unarchiver. + * @param coder An unarchiver object. + * @return An object initialized from data in a given unarchiver. */ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { diff --git a/framework/Source/_CPTFillColor.m b/framework/Source/_CPTFillColor.m index 628f5b6d1..2680d1896 100644 --- a/framework/Source/_CPTFillColor.m +++ b/framework/Source/_CPTFillColor.m @@ -27,8 +27,8 @@ @implementation _CPTFillColor #pragma mark Init/Dealloc /** @brief Initializes a newly allocated _CPTFillColor object with the provided color. - * @param aColor The color. - * @return The initialized _CPTFillColor object. + * @param aColor The color. + * @return The initialized _CPTFillColor object. **/ -(nonnull instancetype)initWithColor:(nonnull CPTColor *)aColor { @@ -42,7 +42,7 @@ -(nonnull instancetype)initWithColor:(nonnull CPTColor *)aColor #pragma mark Drawing /** @brief Draws the color into the given graphics context inside the provided rectangle. - * @param rect The rectangle to draw into. + * @param rect The rectangle to draw into. * @param context The graphics context to draw into. **/ -(void)fillRect:(CGRect)rect inContext:(nonnull CGContextRef)context @@ -114,8 +114,8 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /// @endcond /** @brief Returns an object initialized from data in a given unarchiver. - * @param coder An unarchiver object. - * @return An object initialized from data in a given unarchiver. + * @param coder An unarchiver object. + * @return An object initialized from data in a given unarchiver. */ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { diff --git a/framework/Source/_CPTFillGradient.m b/framework/Source/_CPTFillGradient.m index c7d0aa70c..19a7cdaea 100644 --- a/framework/Source/_CPTFillGradient.m +++ b/framework/Source/_CPTFillGradient.m @@ -27,8 +27,8 @@ @implementation _CPTFillGradient #pragma mark Init/Dealloc /** @brief Initializes a newly allocated _CPTFillGradient object with the provided gradient. - * @param aGradient The gradient. - * @return The initialized _CPTFillGradient object. + * @param aGradient The gradient. + * @return The initialized _CPTFillGradient object. **/ -(nonnull instancetype)initWithGradient:(nonnull CPTGradient *)aGradient { @@ -42,7 +42,7 @@ -(nonnull instancetype)initWithGradient:(nonnull CPTGradient *)aGradient #pragma mark Drawing /** @brief Draws the gradient into the given graphics context inside the provided rectangle. - * @param rect The rectangle to draw into. + * @param rect The rectangle to draw into. * @param context The graphics context to draw into. **/ -(void)fillRect:(CGRect)rect inContext:(nonnull CGContextRef)context @@ -100,8 +100,8 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /// @endcond /** @brief Returns an object initialized from data in a given unarchiver. - * @param coder An unarchiver object. - * @return An object initialized from data in a given unarchiver. + * @param coder An unarchiver object. + * @return An object initialized from data in a given unarchiver. */ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { diff --git a/framework/Source/_CPTFillImage.m b/framework/Source/_CPTFillImage.m index cd1b04297..c26e39c75 100644 --- a/framework/Source/_CPTFillImage.m +++ b/framework/Source/_CPTFillImage.m @@ -27,8 +27,8 @@ @implementation _CPTFillImage #pragma mark Init/Dealloc /** @brief Initializes a newly allocated _CPTFillImage object with the provided image. - * @param anImage The image. - * @return The initialized _CPTFillImage object. + * @param anImage The image. + * @return The initialized _CPTFillImage object. **/ -(nonnull instancetype)initWithImage:(nonnull CPTImage *)anImage { @@ -42,7 +42,7 @@ -(nonnull instancetype)initWithImage:(nonnull CPTImage *)anImage #pragma mark Drawing /** @brief Draws the image into the given graphics context inside the provided rectangle. - * @param rect The rectangle to draw into. + * @param rect The rectangle to draw into. * @param context The graphics context to draw into. **/ -(void)fillRect:(CGRect)rect inContext:(nonnull CGContextRef)context @@ -107,8 +107,8 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /// @endcond /** @brief Returns an object initialized from data in a given unarchiver. - * @param coder An unarchiver object. - * @return An object initialized from data in a given unarchiver. + * @param coder An unarchiver object. + * @return An object initialized from data in a given unarchiver. */ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { diff --git a/framework/Source/_CPTMaskLayer.m b/framework/Source/_CPTMaskLayer.m index 14e3dc603..8c3c189d3 100644 --- a/framework/Source/_CPTMaskLayer.m +++ b/framework/Source/_CPTMaskLayer.m @@ -13,8 +13,8 @@ @implementation CPTMaskLayer * This is the designated initializer. The initialized layer will have the following properties: * - @ref needsDisplayOnBoundsChange = @YES * - * @param newFrame The frame rectangle. - * @return The initialized CPTMaskLayer object. + * @param newFrame The frame rectangle. + * @return The initialized CPTMaskLayer object. **/ -(nonnull instancetype)initWithFrame:(CGRect)newFrame { From cc145b97d95d9fcaf8cee1db7a94222c0f750979 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 9 Oct 2021 16:54:29 -0400 Subject: [PATCH 088/245] Standardized code formatting. --- framework/Source/CPTXYPlotSpace.m | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/framework/Source/CPTXYPlotSpace.m b/framework/Source/CPTXYPlotSpace.m index a9e75163c..fbe123db8 100644 --- a/framework/Source/CPTXYPlotSpace.m +++ b/framework/Source/CPTXYPlotSpace.m @@ -531,7 +531,7 @@ -(nonnull CPTPlotRange *)constrainRange:(nonnull CPTPlotRange *)existingRange to CPTPlotRange *theGlobalRange = globalRange; - if (CPTDecimalGreaterThanOrEqualTo(existingRange.lengthDecimal, CPTDecimalFromInteger(0))) { + if ( CPTDecimalGreaterThanOrEqualTo(existingRange.lengthDecimal, CPTDecimalFromInteger(0))) { if ( CPTDecimalGreaterThanOrEqualTo(existingRange.lengthDecimal, theGlobalRange.lengthDecimal)) { return [theGlobalRange copy]; } @@ -553,7 +553,6 @@ -(nonnull CPTPlotRange *)constrainRange:(nonnull CPTPlotRange *)existingRange to return newRange; } } - } -(void)animateRangeForCoordinate:(CPTCoordinate)coordinate shift:(NSDecimal)shift momentumTime:(CGFloat)momentumTime speed:(CGFloat)speed acceleration:(CGFloat)acceleration From de2a9d7a057964e2cfbd25a0cdb3360dd0c33423 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 14 Nov 2021 09:08:58 -0500 Subject: [PATCH 089/245] Implemented NSSecureCoding in the formatter classes. --- framework/Source/CPTCalendarFormatter.h | 2 +- framework/Source/CPTCalendarFormatter.m | 21 ++++++++++++++++++--- framework/Source/CPTTimeFormatter.h | 2 +- framework/Source/CPTTimeFormatter.m | 18 ++++++++++++++++-- 4 files changed, 36 insertions(+), 7 deletions(-) diff --git a/framework/Source/CPTCalendarFormatter.h b/framework/Source/CPTCalendarFormatter.h index 85df1cc6e..8c5f8a86a 100644 --- a/framework/Source/CPTCalendarFormatter.h +++ b/framework/Source/CPTCalendarFormatter.h @@ -1,6 +1,6 @@ #import -@interface CPTCalendarFormatter : NSNumberFormatter +@interface CPTCalendarFormatter : NSNumberFormatter @property (nonatomic, readwrite, strong, nullable) NSDateFormatter *dateFormatter; @property (nonatomic, readwrite, copy, nullable) NSDate *referenceDate; diff --git a/framework/Source/CPTCalendarFormatter.m b/framework/Source/CPTCalendarFormatter.m index 84b53a4a8..ac9d9455f 100644 --- a/framework/Source/CPTCalendarFormatter.m +++ b/framework/Source/CPTCalendarFormatter.m @@ -100,14 +100,29 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { if ((self = [super init])) { - dateFormatter = [coder decodeObjectForKey:@"CPTCalendarFormatter.dateFormatter"]; - referenceDate = [[coder decodeObjectForKey:@"CPTCalendarFormatter.referenceDate"] copy]; - referenceCalendar = [[coder decodeObjectForKey:@"CPTCalendarFormatter.referenceCalendar"] copy]; + dateFormatter = [coder decodeObjectOfClass:[NSDateFormatter class] + forKey:@"CPTCalendarFormatter.dateFormatter"]; + referenceDate = [[coder decodeObjectOfClass:[NSDate class] + forKey:@"CPTCalendarFormatter.referenceDate"] copy]; + referenceCalendar = [[coder decodeObjectOfClass:[NSCalendar class] + forKey:@"CPTCalendarFormatter.referenceCalendar"] copy]; referenceCalendarUnit = (NSCalendarUnit)[coder decodeIntegerForKey:@"CPTCalendarFormatter.referenceCalendarUnit"]; } return self; } +#pragma mark - +#pragma mark NSSecureCoding Methods + +/// @cond + ++(BOOL)supportsSecureCoding +{ + return YES; +} + +/// @endcond + #pragma mark - #pragma mark NSCopying Methods diff --git a/framework/Source/CPTTimeFormatter.h b/framework/Source/CPTTimeFormatter.h index 40b0cf1a2..f4e884a53 100644 --- a/framework/Source/CPTTimeFormatter.h +++ b/framework/Source/CPTTimeFormatter.h @@ -1,6 +1,6 @@ #import -@interface CPTTimeFormatter : NSNumberFormatter +@interface CPTTimeFormatter : NSNumberFormatter @property (nonatomic, readwrite, strong, nullable) NSDateFormatter *dateFormatter; @property (nonatomic, readwrite, copy, nullable) NSDate *referenceDate; diff --git a/framework/Source/CPTTimeFormatter.m b/framework/Source/CPTTimeFormatter.m index c6df73ed6..b607e771f 100644 --- a/framework/Source/CPTTimeFormatter.m +++ b/framework/Source/CPTTimeFormatter.m @@ -78,12 +78,26 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { if ((self = [super init])) { - dateFormatter = [coder decodeObjectForKey:@"CPTTimeFormatter.dateFormatter"]; - referenceDate = [[coder decodeObjectForKey:@"CPTTimeFormatter.referenceDate"] copy]; + dateFormatter = [coder decodeObjectOfClass:[NSDateFormatter class] + forKey:@"CPTTimeFormatter.dateFormatter"]; + referenceDate = [[coder decodeObjectOfClass:[NSDate class] + forKey:@"CPTTimeFormatter.referenceDate"] copy]; } return self; } +#pragma mark - +#pragma mark NSSecureCoding Methods + +/// @cond + ++(BOOL)supportsSecureCoding +{ + return YES; +} + +/// @endcond + #pragma mark - #pragma mark NSCopying Methods From ecb436bf101eeaf7ab4d8f65dfda7550bc71f1fa Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 14 Nov 2021 09:51:37 -0500 Subject: [PATCH 090/245] Added a read-only property in the XY plot space tests to reduce repeated code in the tests. --- framework/Source/CPTXYPlotSpaceTests.h | 2 + framework/Source/CPTXYPlotSpaceTests.m | 455 +++++++++++-------------- 2 files changed, 208 insertions(+), 249 deletions(-) diff --git a/framework/Source/CPTXYPlotSpaceTests.h b/framework/Source/CPTXYPlotSpaceTests.h index 56c6e53aa..c4d7db520 100644 --- a/framework/Source/CPTXYPlotSpaceTests.h +++ b/framework/Source/CPTXYPlotSpaceTests.h @@ -1,9 +1,11 @@ #import "CPTTestCase.h" @class CPTXYGraph; +@class CPTXYPlotSpace; @interface CPTXYPlotSpaceTests : CPTTestCase @property (nonatomic, readwrite, strong, nullable) CPTXYGraph *graph; +@property (nonatomic, readonly, strong, nullable) CPTXYPlotSpace *plotSpace; @end diff --git a/framework/Source/CPTXYPlotSpaceTests.m b/framework/Source/CPTXYPlotSpaceTests.m index 926097223..0026797d3 100644 --- a/framework/Source/CPTXYPlotSpaceTests.m +++ b/framework/Source/CPTXYPlotSpaceTests.m @@ -16,6 +16,7 @@ -(nonnull CPTPlotRange *)constrainRange:(nonnull CPTPlotRange *)existingRange to @implementation CPTXYPlotSpaceTests @synthesize graph; +@dynamic plotSpace; -(void)setUp { @@ -29,6 +30,11 @@ -(void)setUp [self.graph layoutIfNeeded]; } +-(CPTXYPlotSpace *)plotSpace +{ + return (CPTXYPlotSpace *)self.graph.defaultPlotSpace; +} + -(void)tearDown { self.graph = nil; @@ -39,29 +45,27 @@ -(void)tearDown -(void)testViewPointForPlotPointArrayLinear { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; - - plotSpace.xScaleType = CPTScaleTypeLinear; - plotSpace.yScaleType = CPTScaleTypeLinear; + self.plotSpace.xScaleType = CPTScaleTypeLinear; + self.plotSpace.yScaleType = CPTScaleTypeLinear; - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@0.0 - length:@10.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@0.0 - length:@10.0]; + self.plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@0.0 + length:@10.0]; + self.plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@0.0 + length:@10.0]; CPTNumberArray *plotPoint = @[@5.0, @5.0]; - CGPoint viewPoint = [plotSpace plotAreaViewPointForPlotPoint:plotPoint]; + CGPoint viewPoint = [self.plotSpace plotAreaViewPointForPlotPoint:plotPoint]; XCTAssertEqualWithAccuracy(viewPoint.x, CPTFloat(50.0), CPTFloat(0.01), @""); XCTAssertEqualWithAccuracy(viewPoint.y, CPTFloat(25.0), CPTFloat(0.01), @""); - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@0.0 - length:@10.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@0.0 - length:@5.0]; + self.plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@0.0 + length:@10.0]; + self.plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@0.0 + length:@5.0]; - viewPoint = [plotSpace plotAreaViewPointForPlotPoint:plotPoint]; + viewPoint = [self.plotSpace plotAreaViewPointForPlotPoint:plotPoint]; XCTAssertEqualWithAccuracy(viewPoint.x, CPTFloat(50.0), CPTFloat(0.01), @""); XCTAssertEqualWithAccuracy(viewPoint.y, CPTFloat(50.0), CPTFloat(0.01), @""); @@ -69,32 +73,30 @@ -(void)testViewPointForPlotPointArrayLinear -(void)testViewPointForPlotPointLinear { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; + self.plotSpace.xScaleType = CPTScaleTypeLinear; + self.plotSpace.yScaleType = CPTScaleTypeLinear; - plotSpace.xScaleType = CPTScaleTypeLinear; - plotSpace.yScaleType = CPTScaleTypeLinear; - - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@0.0 - length:@10.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@0.0 - length:@10.0]; + self.plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@0.0 + length:@10.0]; + self.plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@0.0 + length:@10.0]; NSDecimal plotPoint[2]; plotPoint[CPTCoordinateX] = CPTDecimalFromDouble(5.0); plotPoint[CPTCoordinateY] = CPTDecimalFromDouble(5.0); - CGPoint viewPoint = [plotSpace plotAreaViewPointForPlotPoint:plotPoint numberOfCoordinates:2]; + CGPoint viewPoint = [self.plotSpace plotAreaViewPointForPlotPoint:plotPoint numberOfCoordinates:2]; XCTAssertEqualWithAccuracy(viewPoint.x, CPTFloat(50.0), CPTFloat(0.01), @""); XCTAssertEqualWithAccuracy(viewPoint.y, CPTFloat(25.0), CPTFloat(0.01), @""); - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@0.0 - length:@10.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@0.0 - length:@5.0]; + self.plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@0.0 + length:@10.0]; + self.plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@0.0 + length:@5.0]; - viewPoint = [plotSpace plotAreaViewPointForPlotPoint:plotPoint numberOfCoordinates:2]; + viewPoint = [self.plotSpace plotAreaViewPointForPlotPoint:plotPoint numberOfCoordinates:2]; XCTAssertEqualWithAccuracy(viewPoint.x, CPTFloat(50.0), CPTFloat(0.01), @""); XCTAssertEqualWithAccuracy(viewPoint.y, CPTFloat(50.0), CPTFloat(0.01), @""); @@ -102,32 +104,30 @@ -(void)testViewPointForPlotPointLinear -(void)testViewPointForDoublePrecisionPlotPointLinear { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; - - plotSpace.xScaleType = CPTScaleTypeLinear; - plotSpace.yScaleType = CPTScaleTypeLinear; + self.plotSpace.xScaleType = CPTScaleTypeLinear; + self.plotSpace.yScaleType = CPTScaleTypeLinear; - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@0.0 - length:@10.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@0.0 - length:@10.0]; + self.plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@0.0 + length:@10.0]; + self.plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@0.0 + length:@10.0]; double plotPoint[2]; plotPoint[CPTCoordinateX] = 5.0; plotPoint[CPTCoordinateY] = 5.0; - CGPoint viewPoint = [plotSpace plotAreaViewPointForDoublePrecisionPlotPoint:plotPoint numberOfCoordinates:2]; + CGPoint viewPoint = [self.plotSpace plotAreaViewPointForDoublePrecisionPlotPoint:plotPoint numberOfCoordinates:2]; XCTAssertEqualWithAccuracy(viewPoint.x, CPTFloat(50.0), CPTFloat(0.01), @""); XCTAssertEqualWithAccuracy(viewPoint.y, CPTFloat(25.0), CPTFloat(0.01), @""); - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@0.0 - length:@10.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@0.0 - length:@5.0]; + self.plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@0.0 + length:@10.0]; + self.plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@0.0 + length:@5.0]; - viewPoint = [plotSpace plotAreaViewPointForDoublePrecisionPlotPoint:plotPoint numberOfCoordinates:2]; + viewPoint = [self.plotSpace plotAreaViewPointForDoublePrecisionPlotPoint:plotPoint numberOfCoordinates:2]; XCTAssertEqualWithAccuracy(viewPoint.x, CPTFloat(50.0), CPTFloat(0.01), @""); XCTAssertEqualWithAccuracy(viewPoint.y, CPTFloat(50.0), CPTFloat(0.01), @""); @@ -138,29 +138,27 @@ -(void)testViewPointForDoublePrecisionPlotPointLinear -(void)testViewPointForPlotPointArrayLog { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; + self.plotSpace.xScaleType = CPTScaleTypeLog; + self.plotSpace.yScaleType = CPTScaleTypeLog; - plotSpace.xScaleType = CPTScaleTypeLog; - plotSpace.yScaleType = CPTScaleTypeLog; - - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@1.0 - length:@9.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@1.0 - length:@9.0]; + self.plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@1.0 + length:@9.0]; + self.plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@1.0 + length:@9.0]; CPTNumberArray *plotPoint = @[@(sqrt(10.0)), @(sqrt(10.0))]; - CGPoint viewPoint = [plotSpace plotAreaViewPointForPlotPoint:plotPoint]; + CGPoint viewPoint = [self.plotSpace plotAreaViewPointForPlotPoint:plotPoint]; XCTAssertEqualWithAccuracy(viewPoint.x, CPTFloat(50.0), CPTFloat(0.01), @""); XCTAssertEqualWithAccuracy(viewPoint.y, CPTFloat(25.0), CPTFloat(0.01), @""); - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@1.0 - length:@9.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@10.0 - length:@90.0]; + self.plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@1.0 + length:@9.0]; + self.plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@10.0 + length:@90.0]; - viewPoint = [plotSpace plotAreaViewPointForPlotPoint:plotPoint]; + viewPoint = [self.plotSpace plotAreaViewPointForPlotPoint:plotPoint]; XCTAssertEqualWithAccuracy(viewPoint.x, CPTFloat(50.0), CPTFloat(0.01), @""); XCTAssertEqualWithAccuracy(viewPoint.y, -CPTFloat(25.0), CPTFloat(0.01), @""); @@ -168,32 +166,30 @@ -(void)testViewPointForPlotPointArrayLog -(void)testViewPointForPlotPointLog { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; - - plotSpace.xScaleType = CPTScaleTypeLog; - plotSpace.yScaleType = CPTScaleTypeLog; + self.plotSpace.xScaleType = CPTScaleTypeLog; + self.plotSpace.yScaleType = CPTScaleTypeLog; - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@1.0 - length:@9.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@1.0 - length:@9.0]; + self.plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@1.0 + length:@9.0]; + self.plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@1.0 + length:@9.0]; NSDecimal plotPoint[2]; plotPoint[CPTCoordinateX] = CPTDecimalFromDouble(sqrt(10.0)); plotPoint[CPTCoordinateY] = CPTDecimalFromDouble(sqrt(10.0)); - CGPoint viewPoint = [plotSpace plotAreaViewPointForPlotPoint:plotPoint numberOfCoordinates:2]; + CGPoint viewPoint = [self.plotSpace plotAreaViewPointForPlotPoint:plotPoint numberOfCoordinates:2]; XCTAssertEqualWithAccuracy(viewPoint.x, CPTFloat(50.0), CPTFloat(0.01), @""); XCTAssertEqualWithAccuracy(viewPoint.y, CPTFloat(25.0), CPTFloat(0.01), @""); - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@1.0 - length:@9.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@10.0 - length:@90.0]; + self.plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@1.0 + length:@9.0]; + self.plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@10.0 + length:@90.0]; - viewPoint = [plotSpace plotAreaViewPointForPlotPoint:plotPoint numberOfCoordinates:2]; + viewPoint = [self.plotSpace plotAreaViewPointForPlotPoint:plotPoint numberOfCoordinates:2]; XCTAssertEqualWithAccuracy(viewPoint.x, CPTFloat(50.0), CPTFloat(0.01), @""); XCTAssertEqualWithAccuracy(viewPoint.y, -CPTFloat(25.0), CPTFloat(0.01), @""); @@ -201,32 +197,30 @@ -(void)testViewPointForPlotPointLog -(void)testViewPointForDoublePrecisionPlotPointLog { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; + self.plotSpace.xScaleType = CPTScaleTypeLog; + self.plotSpace.yScaleType = CPTScaleTypeLog; - plotSpace.xScaleType = CPTScaleTypeLog; - plotSpace.yScaleType = CPTScaleTypeLog; - - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@1.0 - length:@9.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@1.0 - length:@9.0]; + self.plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@1.0 + length:@9.0]; + self.plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@1.0 + length:@9.0]; double plotPoint[2]; plotPoint[CPTCoordinateX] = sqrt(10.0); plotPoint[CPTCoordinateY] = sqrt(10.0); - CGPoint viewPoint = [plotSpace plotAreaViewPointForDoublePrecisionPlotPoint:plotPoint numberOfCoordinates:2]; + CGPoint viewPoint = [self.plotSpace plotAreaViewPointForDoublePrecisionPlotPoint:plotPoint numberOfCoordinates:2]; XCTAssertEqualWithAccuracy(viewPoint.x, CPTFloat(50.0), CPTFloat(0.01), @""); XCTAssertEqualWithAccuracy(viewPoint.y, CPTFloat(25.0), CPTFloat(0.01), @""); - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@1.0 - length:@9.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@10.0 - length:@90.0]; + self.plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@1.0 + length:@9.0]; + self.plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@10.0 + length:@90.0]; - viewPoint = [plotSpace plotAreaViewPointForDoublePrecisionPlotPoint:plotPoint numberOfCoordinates:2]; + viewPoint = [self.plotSpace plotAreaViewPointForDoublePrecisionPlotPoint:plotPoint numberOfCoordinates:2]; XCTAssertEqualWithAccuracy(viewPoint.x, CPTFloat(50.0), CPTFloat(0.01), @""); XCTAssertEqualWithAccuracy(viewPoint.y, -CPTFloat(25.0), CPTFloat(0.01), @""); @@ -237,19 +231,17 @@ -(void)testViewPointForDoublePrecisionPlotPointLog -(void)testViewPointForPlotPointArrayLogModulus { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; - - plotSpace.xScaleType = CPTScaleTypeLogModulus; - plotSpace.yScaleType = CPTScaleTypeLogModulus; + self.plotSpace.xScaleType = CPTScaleTypeLogModulus; + self.plotSpace.yScaleType = CPTScaleTypeLogModulus; - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@(-100.0) - length:@200.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@(-100.0) - length:@200.0]; + self.plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@(-100.0) + length:@200.0]; + self.plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@(-100.0) + length:@200.0]; NSArray *plotPoint = @[@9.0, @0.0]; - CGPoint viewPoint = [plotSpace plotAreaViewPointForPlotPoint:plotPoint]; + CGPoint viewPoint = [self.plotSpace plotAreaViewPointForPlotPoint:plotPoint]; XCTAssertEqualWithAccuracy(viewPoint.x, CPTFloat(74.95), CPTFloat(0.01), @""); XCTAssertEqualWithAccuracy(viewPoint.y, CPTFloat(25.0), CPTFloat(0.01), @""); @@ -257,22 +249,20 @@ -(void)testViewPointForPlotPointArrayLogModulus -(void)testViewPointForPlotPointLogModulus { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; + self.plotSpace.xScaleType = CPTScaleTypeLogModulus; + self.plotSpace.yScaleType = CPTScaleTypeLogModulus; - plotSpace.xScaleType = CPTScaleTypeLogModulus; - plotSpace.yScaleType = CPTScaleTypeLogModulus; - - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@(-100.0) - length:@200.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@(-100.0) - length:@200.0]; + self.plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@(-100.0) + length:@200.0]; + self.plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@(-100.0) + length:@200.0]; NSDecimal plotPoint[2]; plotPoint[CPTCoordinateX] = CPTDecimalFromInteger(9); plotPoint[CPTCoordinateY] = CPTDecimalFromInteger(0); - CGPoint viewPoint = [plotSpace plotAreaViewPointForPlotPoint:plotPoint numberOfCoordinates:2]; + CGPoint viewPoint = [self.plotSpace plotAreaViewPointForPlotPoint:plotPoint numberOfCoordinates:2]; XCTAssertEqualWithAccuracy(viewPoint.x, CPTFloat(74.95), CPTFloat(0.01), @""); XCTAssertEqualWithAccuracy(viewPoint.y, CPTFloat(25.0), CPTFloat(0.01), @""); @@ -280,22 +270,20 @@ -(void)testViewPointForPlotPointLogModulus -(void)testViewPointForDoublePrecisionPlotPointLogModulus { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; - - plotSpace.xScaleType = CPTScaleTypeLogModulus; - plotSpace.yScaleType = CPTScaleTypeLogModulus; + self.plotSpace.xScaleType = CPTScaleTypeLogModulus; + self.plotSpace.yScaleType = CPTScaleTypeLogModulus; - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@(-100.0) - length:@200.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@(-100.0) - length:@200.0]; + self.plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@(-100.0) + length:@200.0]; + self.plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@(-100.0) + length:@200.0]; double plotPoint[2]; plotPoint[CPTCoordinateX] = 9.0; plotPoint[CPTCoordinateY] = 0.0; - CGPoint viewPoint = [plotSpace plotAreaViewPointForDoublePrecisionPlotPoint:plotPoint numberOfCoordinates:2]; + CGPoint viewPoint = [self.plotSpace plotAreaViewPointForDoublePrecisionPlotPoint:plotPoint numberOfCoordinates:2]; XCTAssertEqualWithAccuracy(viewPoint.x, CPTFloat(74.95), CPTFloat(0.01), @""); XCTAssertEqualWithAccuracy(viewPoint.y, CPTFloat(25.0), CPTFloat(0.01), @""); @@ -306,18 +294,16 @@ -(void)testViewPointForDoublePrecisionPlotPointLogModulus -(void)testPlotPointArrayForViewPointLinear { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; + self.plotSpace.xScaleType = CPTScaleTypeLinear; + self.plotSpace.yScaleType = CPTScaleTypeLinear; - plotSpace.xScaleType = CPTScaleTypeLinear; - plotSpace.yScaleType = CPTScaleTypeLinear; - - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@0.0 - length:@10.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@0.0 - length:@10.0]; + self.plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@0.0 + length:@10.0]; + self.plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@0.0 + length:@10.0]; CGPoint viewPoint = CPTPointMake(50.0, 25.0); - CPTNumberArray *plotPoint = [plotSpace plotPointForPlotAreaViewPoint:viewPoint]; + CPTNumberArray *plotPoint = [self.plotSpace plotPointForPlotAreaViewPoint:viewPoint]; NSString *errMessage; errMessage = [NSString stringWithFormat:@"plotPoint[CPTCoordinateX] was %@", plotPoint[CPTCoordinateX]]; @@ -328,21 +314,19 @@ -(void)testPlotPointArrayForViewPointLinear -(void)testPlotPointForViewPointLinear { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; - - plotSpace.xScaleType = CPTScaleTypeLinear; - plotSpace.yScaleType = CPTScaleTypeLinear; + self.plotSpace.xScaleType = CPTScaleTypeLinear; + self.plotSpace.yScaleType = CPTScaleTypeLinear; - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@0.0 - length:@10.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@0.0 - length:@10.0]; + self.plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@0.0 + length:@10.0]; + self.plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@0.0 + length:@10.0]; NSDecimal plotPoint[2]; CGPoint viewPoint = CPTPointMake(50.0, 25.0); NSString *errMessage; - [plotSpace plotPoint:plotPoint numberOfCoordinates:2 forPlotAreaViewPoint:viewPoint]; + [self.plotSpace plotPoint:plotPoint numberOfCoordinates:2 forPlotAreaViewPoint:viewPoint]; errMessage = [NSString stringWithFormat:@"plotPoint[CPTCoordinateX] was %@", NSDecimalString(&plotPoint[CPTCoordinateX], nil)]; XCTAssertTrue(CPTDecimalEquals(plotPoint[CPTCoordinateX], CPTDecimalFromDouble(5.0)), @"%@", errMessage); @@ -352,21 +336,19 @@ -(void)testPlotPointForViewPointLinear -(void)testDoublePrecisionPlotPointForViewPointLinear { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; - - plotSpace.xScaleType = CPTScaleTypeLinear; - plotSpace.yScaleType = CPTScaleTypeLinear; + self.plotSpace.xScaleType = CPTScaleTypeLinear; + self.plotSpace.yScaleType = CPTScaleTypeLinear; - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@0.0 - length:@10.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@0.0 - length:@10.0]; + self.plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@0.0 + length:@10.0]; + self.plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@0.0 + length:@10.0]; double plotPoint[2]; CGPoint viewPoint = CPTPointMake(50.0, 25.0); NSString *errMessage; - [plotSpace doublePrecisionPlotPoint:plotPoint numberOfCoordinates:2 forPlotAreaViewPoint:viewPoint]; + [self.plotSpace doublePrecisionPlotPoint:plotPoint numberOfCoordinates:2 forPlotAreaViewPoint:viewPoint]; errMessage = [NSString stringWithFormat:@"plotPoint[CPTCoordinateX] was %g", plotPoint[CPTCoordinateX]]; XCTAssertEqual(plotPoint[CPTCoordinateX], 5.0, @"%@", errMessage); @@ -379,21 +361,19 @@ -(void)testDoublePrecisionPlotPointForViewPointLinear -(void)testPlotPointArrayForViewPointLog { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; + self.plotSpace.xScaleType = CPTScaleTypeLog; + self.plotSpace.yScaleType = CPTScaleTypeLog; - plotSpace.xScaleType = CPTScaleTypeLog; - plotSpace.yScaleType = CPTScaleTypeLog; - - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@1.0 - length:@9.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@1.0 - length:@9.0]; + self.plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@1.0 + length:@9.0]; + self.plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@1.0 + length:@9.0]; CGPoint viewPoint = CPTPointMake(50.0, 25.0); - CPTNumberArray *plotPoint = [plotSpace plotPointForPlotAreaViewPoint:viewPoint]; + CPTNumberArray *plotPoint = [self.plotSpace plotPointForPlotAreaViewPoint:viewPoint]; NSString *errMessage; - [plotSpace plotPointForPlotAreaViewPoint:viewPoint]; + [self.plotSpace plotPointForPlotAreaViewPoint:viewPoint]; errMessage = [NSString stringWithFormat:@"plotPoint[CPTCoordinateX] was %@", plotPoint[CPTCoordinateX]]; XCTAssertEqual([plotPoint[CPTCoordinateX] doubleValue], sqrt(10.0), @"%@", errMessage); @@ -403,21 +383,19 @@ -(void)testPlotPointArrayForViewPointLog -(void)testPlotPointForViewPointLog { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; - - plotSpace.xScaleType = CPTScaleTypeLog; - plotSpace.yScaleType = CPTScaleTypeLog; + self.plotSpace.xScaleType = CPTScaleTypeLog; + self.plotSpace.yScaleType = CPTScaleTypeLog; - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@1.0 - length:@9.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@1.0 - length:@9.0]; + self.plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@1.0 + length:@9.0]; + self.plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@1.0 + length:@9.0]; NSDecimal plotPoint[2]; CGPoint viewPoint = CPTPointMake(50.0, 25.0); NSString *errMessage; - [plotSpace plotPoint:plotPoint numberOfCoordinates:2 forPlotAreaViewPoint:viewPoint]; + [self.plotSpace plotPoint:plotPoint numberOfCoordinates:2 forPlotAreaViewPoint:viewPoint]; errMessage = [NSString stringWithFormat:@"plotPoint[CPTCoordinateX] was %@", NSDecimalString(&plotPoint[CPTCoordinateX], nil)]; XCTAssertTrue(CPTDecimalEquals(plotPoint[CPTCoordinateX], CPTDecimalFromDouble(sqrt(10.0))), @"%@", errMessage); @@ -427,21 +405,19 @@ -(void)testPlotPointForViewPointLog -(void)testDoublePrecisionPlotPointForViewPointLog { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; + self.plotSpace.xScaleType = CPTScaleTypeLog; + self.plotSpace.yScaleType = CPTScaleTypeLog; - plotSpace.xScaleType = CPTScaleTypeLog; - plotSpace.yScaleType = CPTScaleTypeLog; - - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@1.0 - length:@9.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@1.0 - length:@9.0]; + self.plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@1.0 + length:@9.0]; + self.plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@1.0 + length:@9.0]; double plotPoint[2]; CGPoint viewPoint = CPTPointMake(50.0, 25.0); NSString *errMessage; - [plotSpace doublePrecisionPlotPoint:plotPoint numberOfCoordinates:2 forPlotAreaViewPoint:viewPoint]; + [self.plotSpace doublePrecisionPlotPoint:plotPoint numberOfCoordinates:2 forPlotAreaViewPoint:viewPoint]; errMessage = [NSString stringWithFormat:@"plotPoint[CPTCoordinateX] was %g", plotPoint[CPTCoordinateX]]; XCTAssertEqual(plotPoint[CPTCoordinateX], sqrt(10.0), @"%@", errMessage); @@ -454,21 +430,19 @@ -(void)testDoublePrecisionPlotPointForViewPointLog -(void)testPlotPointArrayForViewPointLogModulus { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; - - plotSpace.xScaleType = CPTScaleTypeLogModulus; - plotSpace.yScaleType = CPTScaleTypeLogModulus; + self.plotSpace.xScaleType = CPTScaleTypeLogModulus; + self.plotSpace.yScaleType = CPTScaleTypeLogModulus; - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@(-100.0) - length:@200.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@(-100.0) - length:@200.0]; + self.plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@(-100.0) + length:@200.0]; + self.plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@(-100.0) + length:@200.0]; CGPoint viewPoint = CPTPointMake(74.95, 25.0); - NSArray *plotPoint = [plotSpace plotPointForPlotAreaViewPoint:viewPoint]; + NSArray *plotPoint = [self.plotSpace plotPointForPlotAreaViewPoint:viewPoint]; NSString *errMessage; - [plotSpace plotPointForPlotAreaViewPoint:viewPoint]; + [self.plotSpace plotPointForPlotAreaViewPoint:viewPoint]; errMessage = [NSString stringWithFormat:@"plotPoint[CPTCoordinateX] was %@", plotPoint[CPTCoordinateX]]; XCTAssertEqualWithAccuracy([plotPoint[CPTCoordinateX] doubleValue], CPTInverseLogModulus(1.0), 0.01, @"%@", errMessage); @@ -478,21 +452,19 @@ -(void)testPlotPointArrayForViewPointLogModulus -(void)testPlotPointForViewPointLogModulus { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; + self.plotSpace.xScaleType = CPTScaleTypeLogModulus; + self.plotSpace.yScaleType = CPTScaleTypeLogModulus; - plotSpace.xScaleType = CPTScaleTypeLogModulus; - plotSpace.yScaleType = CPTScaleTypeLogModulus; - - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@(-100.0) - length:@200.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@(-100.0) - length:@200.0]; + self.plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@(-100.0) + length:@200.0]; + self.plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@(-100.0) + length:@200.0]; NSDecimal plotPoint[2]; CGPoint viewPoint = CPTPointMake(50.0, 25.0); NSString *errMessage; - [plotSpace plotPoint:plotPoint numberOfCoordinates:2 forPlotAreaViewPoint:viewPoint]; + [self.plotSpace plotPoint:plotPoint numberOfCoordinates:2 forPlotAreaViewPoint:viewPoint]; errMessage = [NSString stringWithFormat:@"plotPoint[CPTCoordinateX] was %@", NSDecimalString(&plotPoint[CPTCoordinateX], nil)]; XCTAssertTrue(CPTDecimalEquals(plotPoint[CPTCoordinateX], CPTDecimalFromInteger(0)), @"%@", errMessage); @@ -502,21 +474,19 @@ -(void)testPlotPointForViewPointLogModulus -(void)testDoublePrecisionPlotPointForViewPointLogModulus { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; - - plotSpace.xScaleType = CPTScaleTypeLogModulus; - plotSpace.yScaleType = CPTScaleTypeLogModulus; + self.plotSpace.xScaleType = CPTScaleTypeLogModulus; + self.plotSpace.yScaleType = CPTScaleTypeLogModulus; - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@(-100.0) - length:@200.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@(-100.0) - length:@200.0]; + self.plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@(-100.0) + length:@200.0]; + self.plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@(-100.0) + length:@200.0]; double plotPoint[2]; CGPoint viewPoint = CPTPointMake(74.95, 25.0); NSString *errMessage; - [plotSpace doublePrecisionPlotPoint:plotPoint numberOfCoordinates:2 forPlotAreaViewPoint:viewPoint]; + [self.plotSpace doublePrecisionPlotPoint:plotPoint numberOfCoordinates:2 forPlotAreaViewPoint:viewPoint]; errMessage = [NSString stringWithFormat:@"plotPoint[CPTCoordinateX] was %g", plotPoint[CPTCoordinateX]]; XCTAssertEqualWithAccuracy(plotPoint[CPTCoordinateX], CPTInverseLogModulus(1.0), 0.01, @"%@", errMessage); @@ -529,22 +499,20 @@ -(void)testDoublePrecisionPlotPointForViewPointLogModulus -(void)testConstrainNilRanges { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; + CPTPlotRange *xRange = self.plotSpace.xRange; - XCTAssertEqualObjects([plotSpace constrainRange:plotSpace.xRange toGlobalRange:nil], plotSpace.xRange, @"Constrain to nil global range should return original range."); + XCTAssertEqualObjects([self.plotSpace constrainRange:xRange toGlobalRange:nil], xRange, @"Constrain to nil global range should return original range."); } -(void)testConstrainRanges1 { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; - CPTPlotRange *existingRange = [CPTPlotRange plotRangeWithLocation:@2.0 length:@5.0]; CPTPlotRange *globalRange = [CPTPlotRange plotRangeWithLocation:@0.0 length:@10.0]; CPTPlotRange *expectedRange = existingRange; - CPTPlotRange *constrainedRange = [plotSpace constrainRange:existingRange toGlobalRange:globalRange]; + CPTPlotRange *constrainedRange = [self.plotSpace constrainRange:existingRange toGlobalRange:globalRange]; NSString *errMessage = [NSString stringWithFormat:@"constrainedRange was %@, expected %@", constrainedRange, expectedRange]; XCTAssertTrue([constrainedRange isEqualToRange:expectedRange], @"%@", errMessage); @@ -552,15 +520,13 @@ -(void)testConstrainRanges1 -(void)testConstrainRanges2 { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; - CPTPlotRange *existingRange = [CPTPlotRange plotRangeWithLocation:@0.0 length:@10.0]; CPTPlotRange *globalRange = [CPTPlotRange plotRangeWithLocation:@0.0 length:@5.0]; CPTPlotRange *expectedRange = globalRange; - CPTPlotRange *constrainedRange = [plotSpace constrainRange:existingRange toGlobalRange:globalRange]; + CPTPlotRange *constrainedRange = [self.plotSpace constrainRange:existingRange toGlobalRange:globalRange]; NSString *errMessage = [NSString stringWithFormat:@"constrainedRange was %@, expected %@", constrainedRange, expectedRange]; XCTAssertTrue([constrainedRange isEqualToRange:expectedRange], @"%@", errMessage); @@ -568,8 +534,6 @@ -(void)testConstrainRanges2 -(void)testConstrainRanges3 { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; - CPTPlotRange *existingRange = [CPTPlotRange plotRangeWithLocation:@(-1.0) length:@8.0]; CPTPlotRange *globalRange = [CPTPlotRange plotRangeWithLocation:@0.0 @@ -577,7 +541,7 @@ -(void)testConstrainRanges3 CPTPlotRange *expectedRange = [CPTPlotRange plotRangeWithLocation:@0.0 length:@8.0]; - CPTPlotRange *constrainedRange = [plotSpace constrainRange:existingRange toGlobalRange:globalRange]; + CPTPlotRange *constrainedRange = [self.plotSpace constrainRange:existingRange toGlobalRange:globalRange]; NSString *errMessage = [NSString stringWithFormat:@"constrainedRange was %@, expected %@", constrainedRange, expectedRange]; XCTAssertTrue([constrainedRange isEqualToRange:expectedRange], @"%@", errMessage); @@ -585,8 +549,6 @@ -(void)testConstrainRanges3 -(void)testConstrainRanges4 { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; - CPTPlotRange *existingRange = [CPTPlotRange plotRangeWithLocation:@3.0 length:@8.0]; CPTPlotRange *globalRange = [CPTPlotRange plotRangeWithLocation:@0.0 @@ -594,7 +556,7 @@ -(void)testConstrainRanges4 CPTPlotRange *expectedRange = [CPTPlotRange plotRangeWithLocation:@2.0 length:@8.0]; - CPTPlotRange *constrainedRange = [plotSpace constrainRange:existingRange toGlobalRange:globalRange]; + CPTPlotRange *constrainedRange = [self.plotSpace constrainRange:existingRange toGlobalRange:globalRange]; NSString *errMessage = [NSString stringWithFormat:@"constrainedRange was %@, expected %@", constrainedRange, expectedRange]; XCTAssertTrue([constrainedRange isEqualToRange:expectedRange], @"%@", errMessage); @@ -605,58 +567,54 @@ -(void)testConstrainRanges4 -(void)testScaleByAboutPoint1 { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; - - plotSpace.allowsUserInteraction = YES; + self.plotSpace.allowsUserInteraction = YES; - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@0.0 - length:@10.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@10.0 - length:@(-10.0)]; + self.plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@0.0 + length:@10.0]; + self.plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@10.0 + length:@(-10.0)]; CGRect myBounds = self.graph.bounds; - [plotSpace scaleBy:0.5 aboutPoint:CGPointMake(CGRectGetMidX(myBounds), CGRectGetMidY(myBounds))]; + [self.plotSpace scaleBy:0.5 aboutPoint:CGPointMake(CGRectGetMidX(myBounds), CGRectGetMidY(myBounds))]; CPTPlotRange *expectedRangeX = [CPTPlotRange plotRangeWithLocation:@(-5.0) length:@20.0]; CPTPlotRange *expectedRangeY = [CPTPlotRange plotRangeWithLocation:@15.0 length:@(-20.0)]; - NSString *errMessage = [NSString stringWithFormat:@"xRange was %@, expected %@", plotSpace.xRange, expectedRangeX]; + NSString *errMessage = [NSString stringWithFormat:@"xRange was %@, expected %@", self.plotSpace.xRange, expectedRangeX]; - XCTAssertTrue([plotSpace.xRange isEqualToRange:expectedRangeX], @"%@", errMessage); + XCTAssertTrue([self.plotSpace.xRange isEqualToRange:expectedRangeX], @"%@", errMessage); - errMessage = [NSString stringWithFormat:@"yRange was %@, expected %@", plotSpace.yRange, expectedRangeY]; - XCTAssertTrue([plotSpace.yRange isEqualToRange:expectedRangeY], @"%@", errMessage); + errMessage = [NSString stringWithFormat:@"yRange was %@, expected %@", self.plotSpace.yRange, expectedRangeY]; + XCTAssertTrue([self.plotSpace.yRange isEqualToRange:expectedRangeY], @"%@", errMessage); } -(void)testScaleByAboutPoint2 { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; + self.plotSpace.allowsUserInteraction = YES; - plotSpace.allowsUserInteraction = YES; - - plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@0.0 - length:@10.0]; - plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@10.0 - length:@(-10.0)]; + self.plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@0.0 + length:@10.0]; + self.plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@10.0 + length:@(-10.0)]; CGRect myBounds = self.graph.bounds; - [plotSpace scaleBy:2.0 aboutPoint:CGPointMake(CGRectGetMidX(myBounds), CGRectGetMidY(myBounds))]; + [self.plotSpace scaleBy:2.0 aboutPoint:CGPointMake(CGRectGetMidX(myBounds), CGRectGetMidY(myBounds))]; CPTPlotRange *expectedRangeX = [CPTPlotRange plotRangeWithLocation:@2.5 length:@5.0]; CPTPlotRange *expectedRangeY = [CPTPlotRange plotRangeWithLocation:@7.5 length:@(-5.0)]; - NSString *errMessage = [NSString stringWithFormat:@"xRange was %@, expected %@", plotSpace.xRange, expectedRangeX]; + NSString *errMessage = [NSString stringWithFormat:@"xRange was %@, expected %@", self.plotSpace.xRange, expectedRangeX]; - XCTAssertTrue([plotSpace.xRange isEqualToRange:expectedRangeX], @"%@", errMessage); + XCTAssertTrue([self.plotSpace.xRange isEqualToRange:expectedRangeX], @"%@", errMessage); - errMessage = [NSString stringWithFormat:@"yRange was %@, expected %@", plotSpace.yRange, expectedRangeY]; - XCTAssertTrue([plotSpace.yRange isEqualToRange:expectedRangeY], @"%@", errMessage); + errMessage = [NSString stringWithFormat:@"yRange was %@, expected %@", self.plotSpace.yRange, expectedRangeY]; + XCTAssertTrue([self.plotSpace.yRange isEqualToRange:expectedRangeY], @"%@", errMessage); } #pragma mark - @@ -664,30 +622,29 @@ -(void)testScaleByAboutPoint2 -(void)testKeyedArchivingRoundTrip { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; - - plotSpace.globalXRange = [CPTPlotRange plotRangeWithLocation:@0.0 - length:@10.0]; - plotSpace.globalYRange = [CPTPlotRange plotRangeWithLocation:@10.0 - length:@(-10.0)]; + self.plotSpace.globalXRange = [CPTPlotRange plotRangeWithLocation:@0.0 + length:@10.0]; + self.plotSpace.globalYRange = [CPTPlotRange plotRangeWithLocation:@10.0 + length:@(-10.0)]; - CPTXYPlotSpace *newPlotSpace = [self archiveRoundTrip:plotSpace]; + CPTXYPlotSpace *oldPlotSpace = self.plotSpace; + CPTXYPlotSpace *newPlotSpace = [self archiveRoundTrip:oldPlotSpace]; - NSString *errMessage = [NSString stringWithFormat:@"xRange was %@, expected %@", plotSpace.xRange, newPlotSpace.xRange]; + NSString *errMessage = [NSString stringWithFormat:@"xRange was %@, expected %@", oldPlotSpace.xRange, newPlotSpace.xRange]; - XCTAssertTrue([plotSpace.xRange isEqualToRange:newPlotSpace.xRange], @"%@", errMessage); + XCTAssertTrue([oldPlotSpace.xRange isEqualToRange:newPlotSpace.xRange], @"%@", errMessage); - errMessage = [NSString stringWithFormat:@"yRange was %@, expected %@", plotSpace.yRange, newPlotSpace.yRange]; - XCTAssertTrue([plotSpace.yRange isEqualToRange:newPlotSpace.yRange], @"%@", errMessage); + errMessage = [NSString stringWithFormat:@"yRange was %@, expected %@", oldPlotSpace.yRange, newPlotSpace.yRange]; + XCTAssertTrue([oldPlotSpace.yRange isEqualToRange:newPlotSpace.yRange], @"%@", errMessage); - errMessage = [NSString stringWithFormat:@"globalXRange was %@, expected %@", plotSpace.globalXRange, newPlotSpace.globalXRange]; - XCTAssertTrue([plotSpace.globalXRange isEqualToRange:newPlotSpace.globalXRange], @"%@", errMessage); + errMessage = [NSString stringWithFormat:@"globalXRange was %@, expected %@", oldPlotSpace.globalXRange, newPlotSpace.globalXRange]; + XCTAssertTrue([oldPlotSpace.globalXRange isEqualToRange:newPlotSpace.globalXRange], @"%@", errMessage); - errMessage = [NSString stringWithFormat:@"globalYRange was %@, expected %@", plotSpace.globalYRange, newPlotSpace.globalYRange]; - XCTAssertTrue([plotSpace.globalYRange isEqualToRange:newPlotSpace.globalYRange], @"%@", errMessage); + errMessage = [NSString stringWithFormat:@"globalYRange was %@, expected %@", oldPlotSpace.globalYRange, newPlotSpace.globalYRange]; + XCTAssertTrue([oldPlotSpace.globalYRange isEqualToRange:newPlotSpace.globalYRange], @"%@", errMessage); - XCTAssertEqual(plotSpace.xScaleType, newPlotSpace.xScaleType, @"xScaleType not equal"); - XCTAssertEqual(plotSpace.yScaleType, newPlotSpace.yScaleType, @"yScaleType not equal"); + XCTAssertEqual(oldPlotSpace.xScaleType, newPlotSpace.xScaleType, @"xScaleType not equal"); + XCTAssertEqual(oldPlotSpace.yScaleType, newPlotSpace.yScaleType, @"yScaleType not equal"); } @end From e384cdbbdfeb1d66d1da8e1ff3280812272a732d Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 2 Jan 2022 15:16:22 -0500 Subject: [PATCH 091/245] Updated code formatting for Uncrustify 0.74. --- .../PlatformSpecific/CPTGraphHostingView.m | 4 +- framework/Source/CPTAxis.m | 8 +- framework/Source/CPTLineCap.m | 2 +- ...CPTMutableNumericDataTypeConversionTests.m | 2 +- .../Source/CPTNumericData+TypeConversion.m | 383 +++++++++--------- framework/Source/CPTNumericData.m | 26 +- .../CPTNumericDataTypeConversionTests.m | 2 +- framework/Source/CPTPlot.m | 24 +- framework/Source/CPTPlotSymbol.m | 2 +- framework/Source/CPTScatterPlot.m | 6 +- framework/Source/CPTXYAxis.m | 14 +- framework/Source/CPTXYPlotSpace.m | 24 +- scripts/uncrustify.cfg | 27 +- 13 files changed, 260 insertions(+), 264 deletions(-) diff --git a/framework/PlatformSpecific/CPTGraphHostingView.m b/framework/PlatformSpecific/CPTGraphHostingView.m index 1141de317..97933f4eb 100644 --- a/framework/PlatformSpecific/CPTGraphHostingView.m +++ b/framework/PlatformSpecific/CPTGraphHostingView.m @@ -375,8 +375,8 @@ -(void)scrollWheel:(nonnull NSEvent *)theEvent CGPoint pointOfMouseDrag = NSPointToCGPoint([self convertPoint:scrolledPointOfMouse fromView:nil]); CGPoint pointInHostedGraph = [self.layer convertPoint:pointOfMouseDrag toLayer:theGraph]; handled = handled || [theGraph pointingDeviceDraggedEvent:theEvent atPoint:pointInHostedGraph]; + break; } - break; case NSEventPhaseEnded: { @@ -389,8 +389,8 @@ -(void)scrollWheel:(nonnull NSEvent *)theEvent CGPoint pointOfMouseUp = NSPointToCGPoint([self convertPoint:scrolledPointOfMouse fromView:nil]); CGPoint pointInHostedGraph = [self.layer convertPoint:pointOfMouseUp toLayer:theGraph]; handled = [theGraph pointingDeviceUpEvent:theEvent atPoint:pointInHostedGraph]; + break; } - break; case NSEventPhaseNone: if ( theEvent.momentumPhase == NSEventPhaseNone ) { diff --git a/framework/Source/CPTAxis.m b/framework/Source/CPTAxis.m index e85f4edad..618df3346 100644 --- a/framework/Source/CPTAxis.m +++ b/framework/Source/CPTAxis.m @@ -1142,8 +1142,8 @@ -(void)autoGenerateMajorTickLocations:(CPTNumberSet *__autoreleasing *)newMajorL } [majorLocations addObject:[NSDecimalNumber decimalNumberWithDecimal:pointLocation]]; } + break; } - break; case CPTScaleTypeLog: { @@ -1188,8 +1188,8 @@ -(void)autoGenerateMajorTickLocations:(CPTNumberSet *__autoreleasing *)newMajorL [majorLocations addObject:@(pointLocation)]; } } + break; } - break; case CPTScaleTypeLogModulus: { @@ -1288,8 +1288,8 @@ -(void)autoGenerateMajorTickLocations:(CPTNumberSet *__autoreleasing *)newMajorL [majorLocations addObject:@(pointLocation)]; } } + break; } - break; default: break; @@ -1800,8 +1800,8 @@ -(void)relabel [self updateAxisLabelsAtLocations:self.minorTickLocations inRange:labeledRange useMajorAxisLabels:NO]; + break; } - break; default: [self updateAxisLabelsAtLocations:self.majorTickLocations diff --git a/framework/Source/CPTLineCap.m b/framework/Source/CPTLineCap.m index c624e3f5b..d646ab474 100644 --- a/framework/Source/CPTLineCap.m +++ b/framework/Source/CPTLineCap.m @@ -585,8 +585,8 @@ -(nonnull CGPathRef)newLineCapPath CGAffineTransformMakeTranslation(-halfSize.width, -halfSize.height)); CGPathAddPath(lineCapPath, &scaleTransform, customPath); } + break; } - break; } return lineCapPath; } diff --git a/framework/Source/CPTMutableNumericDataTypeConversionTests.m b/framework/Source/CPTMutableNumericDataTypeConversionTests.m index 575b30666..f76941ca2 100644 --- a/framework/Source/CPTMutableNumericDataTypeConversionTests.m +++ b/framework/Source/CPTMutableNumericDataTypeConversionTests.m @@ -185,7 +185,7 @@ -(void)testTypeConversionSwapsByteOrderDoubleInPlace uint64_t end = *(const uint64_t *)numericData.bytes; union swap { - double v; + double v; CFSwappedFloat64 sv; } result; diff --git a/framework/Source/CPTNumericData+TypeConversion.m b/framework/Source/CPTNumericData+TypeConversion.m index 4b2777a13..dcce6ba8d 100644 --- a/framework/Source/CPTNumericData+TypeConversion.m +++ b/framework/Source/CPTNumericData+TypeConversion.m @@ -105,10 +105,9 @@ case sizeof(int8_t): case CPTIntegerDataType: switch ( destDataType->sampleBytes ) { case sizeof(int8_t): - { // int8_t -> int8_t + // int8_t -> int8_t memcpy(destData.mutableBytes, sourceData.bytes, sampleCount * sizeof(int8_t)); - } - break; + break; case sizeof(int16_t): { // int8_t -> int16_t @@ -118,8 +117,8 @@ case sizeof(int16_t): while ( fromBytes < lastSample ) { *toBytes++ = (int16_t)*fromBytes++; } + break; } - break; case sizeof(int32_t): { // int8_t -> int32_t @@ -129,8 +128,8 @@ case sizeof(int32_t): while ( fromBytes < lastSample ) { *toBytes++ = (int32_t)*fromBytes++; } + break; } - break; case sizeof(int64_t): { // int8_t -> int64_t @@ -140,8 +139,8 @@ case sizeof(int64_t): while ( fromBytes < lastSample ) { *toBytes++ = (int64_t)*fromBytes++; } + break; } - break; } break; @@ -155,8 +154,8 @@ case sizeof(uint8_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint8_t)*fromBytes++; } + break; } - break; case sizeof(uint16_t): { // int8_t -> uint16_t @@ -166,8 +165,8 @@ case sizeof(uint16_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint16_t)*fromBytes++; } + break; } - break; case sizeof(uint32_t): { // int8_t -> uint32_t @@ -177,8 +176,8 @@ case sizeof(uint32_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint32_t)*fromBytes++; } + break; } - break; case sizeof(uint64_t): { // int8_t -> uint64_t @@ -188,8 +187,8 @@ case sizeof(uint64_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint64_t)*fromBytes++; } + break; } - break; } break; @@ -203,8 +202,8 @@ case sizeof(float): while ( fromBytes < lastSample ) { *toBytes++ = (float)*fromBytes++; } + break; } - break; case sizeof(double): { // int8_t -> double @@ -214,8 +213,8 @@ case sizeof(double): while ( fromBytes < lastSample ) { *toBytes++ = (double)*fromBytes++; } + break; } - break; } break; @@ -229,8 +228,8 @@ case sizeof(float complex): while ( fromBytes < lastSample ) { *toBytes++ = (float complex)*fromBytes++; } + break; } - break; case sizeof(double complex): { // int8_t -> double complex @@ -240,8 +239,8 @@ case sizeof(double complex): while ( fromBytes < lastSample ) { *toBytes++ = (double complex)*fromBytes++; } + break; } - break; } break; @@ -255,8 +254,8 @@ case sizeof(NSDecimal): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFromChar(*fromBytes++); } + break; } - break; } break; } @@ -277,14 +276,13 @@ case sizeof(int8_t): while ( fromBytes < lastSample ) { *toBytes++ = (int8_t)*fromBytes++; } + break; } - break; case sizeof(int16_t): - { // int16_t -> int16_t + // int16_t -> int16_t memcpy(destData.mutableBytes, sourceData.bytes, sampleCount * sizeof(int16_t)); - } - break; + break; case sizeof(int32_t): { // int16_t -> int32_t @@ -294,8 +292,8 @@ case sizeof(int32_t): while ( fromBytes < lastSample ) { *toBytes++ = (int32_t)*fromBytes++; } + break; } - break; case sizeof(int64_t): { // int16_t -> int64_t @@ -305,8 +303,8 @@ case sizeof(int64_t): while ( fromBytes < lastSample ) { *toBytes++ = (int64_t)*fromBytes++; } + break; } - break; } break; @@ -320,8 +318,8 @@ case sizeof(uint8_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint8_t)*fromBytes++; } + break; } - break; case sizeof(uint16_t): { // int16_t -> uint16_t @@ -331,8 +329,8 @@ case sizeof(uint16_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint16_t)*fromBytes++; } + break; } - break; case sizeof(uint32_t): { // int16_t -> uint32_t @@ -342,8 +340,8 @@ case sizeof(uint32_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint32_t)*fromBytes++; } + break; } - break; case sizeof(uint64_t): { // int16_t -> uint64_t @@ -353,8 +351,8 @@ case sizeof(uint64_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint64_t)*fromBytes++; } + break; } - break; } break; @@ -368,8 +366,8 @@ case sizeof(float): while ( fromBytes < lastSample ) { *toBytes++ = (float)*fromBytes++; } + break; } - break; case sizeof(double): { // int16_t -> double @@ -379,8 +377,8 @@ case sizeof(double): while ( fromBytes < lastSample ) { *toBytes++ = (double)*fromBytes++; } + break; } - break; } break; @@ -394,8 +392,8 @@ case sizeof(float complex): while ( fromBytes < lastSample ) { *toBytes++ = (float complex)*fromBytes++; } + break; } - break; case sizeof(double complex): { // int16_t -> double complex @@ -405,8 +403,8 @@ case sizeof(double complex): while ( fromBytes < lastSample ) { *toBytes++ = (double complex)*fromBytes++; } + break; } - break; } break; @@ -420,8 +418,8 @@ case sizeof(NSDecimal): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFromShort(*fromBytes++); } + break; } - break; } break; } @@ -442,8 +440,8 @@ case sizeof(int8_t): while ( fromBytes < lastSample ) { *toBytes++ = (int8_t)*fromBytes++; } + break; } - break; case sizeof(int16_t): { // int32_t -> int16_t @@ -453,14 +451,13 @@ case sizeof(int16_t): while ( fromBytes < lastSample ) { *toBytes++ = (int16_t)*fromBytes++; } + break; } - break; case sizeof(int32_t): - { // int32_t -> int32_t + // int32_t -> int32_t memcpy(destData.mutableBytes, sourceData.bytes, sampleCount * sizeof(int32_t)); - } - break; + break; case sizeof(int64_t): { // int32_t -> int64_t @@ -470,8 +467,8 @@ case sizeof(int64_t): while ( fromBytes < lastSample ) { *toBytes++ = (int64_t)*fromBytes++; } + break; } - break; } break; @@ -485,8 +482,8 @@ case sizeof(uint8_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint8_t)*fromBytes++; } + break; } - break; case sizeof(uint16_t): { // int32_t -> uint16_t @@ -496,8 +493,8 @@ case sizeof(uint16_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint16_t)*fromBytes++; } + break; } - break; case sizeof(uint32_t): { // int32_t -> uint32_t @@ -507,8 +504,8 @@ case sizeof(uint32_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint32_t)*fromBytes++; } + break; } - break; case sizeof(uint64_t): { // int32_t -> uint64_t @@ -518,8 +515,8 @@ case sizeof(uint64_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint64_t)*fromBytes++; } + break; } - break; } break; @@ -533,8 +530,8 @@ case sizeof(float): while ( fromBytes < lastSample ) { *toBytes++ = (float)*fromBytes++; } + break; } - break; case sizeof(double): { // int32_t -> double @@ -544,8 +541,8 @@ case sizeof(double): while ( fromBytes < lastSample ) { *toBytes++ = (double)*fromBytes++; } + break; } - break; } break; @@ -559,8 +556,8 @@ case sizeof(float complex): while ( fromBytes < lastSample ) { *toBytes++ = (float complex)*fromBytes++; } + break; } - break; case sizeof(double complex): { // int32_t -> double complex @@ -570,8 +567,8 @@ case sizeof(double complex): while ( fromBytes < lastSample ) { *toBytes++ = (double complex)*fromBytes++; } + break; } - break; } break; @@ -585,8 +582,8 @@ case sizeof(NSDecimal): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFromLong(*fromBytes++); } + break; } - break; } break; } @@ -607,8 +604,8 @@ case sizeof(int8_t): while ( fromBytes < lastSample ) { *toBytes++ = (int8_t)*fromBytes++; } + break; } - break; case sizeof(int16_t): { // int64_t -> int16_t @@ -618,8 +615,8 @@ case sizeof(int16_t): while ( fromBytes < lastSample ) { *toBytes++ = (int16_t)*fromBytes++; } + break; } - break; case sizeof(int32_t): { // int64_t -> int32_t @@ -629,14 +626,13 @@ case sizeof(int32_t): while ( fromBytes < lastSample ) { *toBytes++ = (int32_t)*fromBytes++; } + break; } - break; case sizeof(int64_t): - { // int64_t -> int64_t + // int64_t -> int64_t memcpy(destData.mutableBytes, sourceData.bytes, sampleCount * sizeof(int64_t)); - } - break; + break; } break; @@ -650,8 +646,8 @@ case sizeof(uint8_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint8_t)*fromBytes++; } + break; } - break; case sizeof(uint16_t): { // int64_t -> uint16_t @@ -661,8 +657,8 @@ case sizeof(uint16_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint16_t)*fromBytes++; } + break; } - break; case sizeof(uint32_t): { // int64_t -> uint32_t @@ -672,8 +668,8 @@ case sizeof(uint32_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint32_t)*fromBytes++; } + break; } - break; case sizeof(uint64_t): { // int64_t -> uint64_t @@ -683,8 +679,8 @@ case sizeof(uint64_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint64_t)*fromBytes++; } + break; } - break; } break; @@ -698,8 +694,8 @@ case sizeof(float): while ( fromBytes < lastSample ) { *toBytes++ = (float)*fromBytes++; } + break; } - break; case sizeof(double): { // int64_t -> double @@ -709,8 +705,8 @@ case sizeof(double): while ( fromBytes < lastSample ) { *toBytes++ = (double)*fromBytes++; } + break; } - break; } break; @@ -724,8 +720,8 @@ case sizeof(float complex): while ( fromBytes < lastSample ) { *toBytes++ = (float complex)*fromBytes++; } + break; } - break; case sizeof(double complex): { // int64_t -> double complex @@ -735,8 +731,8 @@ case sizeof(double complex): while ( fromBytes < lastSample ) { *toBytes++ = (double complex)*fromBytes++; } + break; } - break; } break; @@ -750,8 +746,8 @@ case sizeof(NSDecimal): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFromLongLong(*fromBytes++); } + break; } - break; } break; } @@ -776,8 +772,8 @@ case sizeof(int8_t): while ( fromBytes < lastSample ) { *toBytes++ = (int8_t)*fromBytes++; } + break; } - break; case sizeof(int16_t): { // uint8_t -> int16_t @@ -787,8 +783,8 @@ case sizeof(int16_t): while ( fromBytes < lastSample ) { *toBytes++ = (int16_t)*fromBytes++; } + break; } - break; case sizeof(int32_t): { // uint8_t -> int32_t @@ -798,8 +794,8 @@ case sizeof(int32_t): while ( fromBytes < lastSample ) { *toBytes++ = (int32_t)*fromBytes++; } + break; } - break; case sizeof(int64_t): { // uint8_t -> int64_t @@ -809,18 +805,17 @@ case sizeof(int64_t): while ( fromBytes < lastSample ) { *toBytes++ = (int64_t)*fromBytes++; } + break; } - break; } break; case CPTUnsignedIntegerDataType: switch ( destDataType->sampleBytes ) { case sizeof(uint8_t): - { // uint8_t -> uint8_t + // uint8_t -> uint8_t memcpy(destData.mutableBytes, sourceData.bytes, sampleCount * sizeof(uint8_t)); - } - break; + break; case sizeof(uint16_t): { // uint8_t -> uint16_t @@ -830,8 +825,8 @@ case sizeof(uint16_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint16_t)*fromBytes++; } + break; } - break; case sizeof(uint32_t): { // uint8_t -> uint32_t @@ -841,8 +836,8 @@ case sizeof(uint32_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint32_t)*fromBytes++; } + break; } - break; case sizeof(uint64_t): { // uint8_t -> uint64_t @@ -852,8 +847,8 @@ case sizeof(uint64_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint64_t)*fromBytes++; } + break; } - break; } break; @@ -867,8 +862,8 @@ case sizeof(float): while ( fromBytes < lastSample ) { *toBytes++ = (float)*fromBytes++; } + break; } - break; case sizeof(double): { // uint8_t -> double @@ -878,8 +873,8 @@ case sizeof(double): while ( fromBytes < lastSample ) { *toBytes++ = (double)*fromBytes++; } + break; } - break; } break; @@ -893,8 +888,8 @@ case sizeof(float complex): while ( fromBytes < lastSample ) { *toBytes++ = (float complex)*fromBytes++; } + break; } - break; case sizeof(double complex): { // uint8_t -> double complex @@ -904,8 +899,8 @@ case sizeof(double complex): while ( fromBytes < lastSample ) { *toBytes++ = (double complex)*fromBytes++; } + break; } - break; } break; @@ -919,8 +914,8 @@ case sizeof(NSDecimal): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFromUnsignedChar(*fromBytes++); } + break; } - break; } break; } @@ -941,8 +936,8 @@ case sizeof(int8_t): while ( fromBytes < lastSample ) { *toBytes++ = (int8_t)*fromBytes++; } + break; } - break; case sizeof(int16_t): { // uint16_t -> int16_t @@ -952,8 +947,8 @@ case sizeof(int16_t): while ( fromBytes < lastSample ) { *toBytes++ = (int16_t)*fromBytes++; } + break; } - break; case sizeof(int32_t): { // uint16_t -> int32_t @@ -963,8 +958,8 @@ case sizeof(int32_t): while ( fromBytes < lastSample ) { *toBytes++ = (int32_t)*fromBytes++; } + break; } - break; case sizeof(int64_t): { // uint16_t -> int64_t @@ -974,8 +969,8 @@ case sizeof(int64_t): while ( fromBytes < lastSample ) { *toBytes++ = (int64_t)*fromBytes++; } + break; } - break; } break; @@ -989,14 +984,13 @@ case sizeof(uint8_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint8_t)*fromBytes++; } + break; } - break; case sizeof(uint16_t): - { // uint16_t -> uint16_t + // uint16_t -> uint16_t memcpy(destData.mutableBytes, sourceData.bytes, sampleCount * sizeof(uint16_t)); - } - break; + break; case sizeof(uint32_t): { // uint16_t -> uint32_t @@ -1006,8 +1000,8 @@ case sizeof(uint32_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint32_t)*fromBytes++; } + break; } - break; case sizeof(uint64_t): { // uint16_t -> uint64_t @@ -1017,8 +1011,8 @@ case sizeof(uint64_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint64_t)*fromBytes++; } + break; } - break; } break; @@ -1032,8 +1026,8 @@ case sizeof(float): while ( fromBytes < lastSample ) { *toBytes++ = (float)*fromBytes++; } + break; } - break; case sizeof(double): { // uint16_t -> double @@ -1043,8 +1037,8 @@ case sizeof(double): while ( fromBytes < lastSample ) { *toBytes++ = (double)*fromBytes++; } + break; } - break; } break; @@ -1058,8 +1052,8 @@ case sizeof(float complex): while ( fromBytes < lastSample ) { *toBytes++ = (float complex)*fromBytes++; } + break; } - break; case sizeof(double complex): { // uint16_t -> double complex @@ -1069,8 +1063,8 @@ case sizeof(double complex): while ( fromBytes < lastSample ) { *toBytes++ = (double complex)*fromBytes++; } + break; } - break; } break; @@ -1084,8 +1078,8 @@ case sizeof(NSDecimal): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFromUnsignedShort(*fromBytes++); } + break; } - break; } break; } @@ -1106,8 +1100,8 @@ case sizeof(int8_t): while ( fromBytes < lastSample ) { *toBytes++ = (int8_t)*fromBytes++; } + break; } - break; case sizeof(int16_t): { // uint32_t -> int16_t @@ -1117,8 +1111,8 @@ case sizeof(int16_t): while ( fromBytes < lastSample ) { *toBytes++ = (int16_t)*fromBytes++; } + break; } - break; case sizeof(int32_t): { // uint32_t -> int32_t @@ -1128,8 +1122,8 @@ case sizeof(int32_t): while ( fromBytes < lastSample ) { *toBytes++ = (int32_t)*fromBytes++; } + break; } - break; case sizeof(int64_t): { // uint32_t -> int64_t @@ -1139,8 +1133,8 @@ case sizeof(int64_t): while ( fromBytes < lastSample ) { *toBytes++ = (int64_t)*fromBytes++; } + break; } - break; } break; @@ -1154,8 +1148,8 @@ case sizeof(uint8_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint8_t)*fromBytes++; } + break; } - break; case sizeof(uint16_t): { // uint32_t -> uint16_t @@ -1165,14 +1159,13 @@ case sizeof(uint16_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint16_t)*fromBytes++; } + break; } - break; case sizeof(uint32_t): - { // uint32_t -> uint32_t + // uint32_t -> uint32_t memcpy(destData.mutableBytes, sourceData.bytes, sampleCount * sizeof(uint32_t)); - } - break; + break; case sizeof(uint64_t): { // uint32_t -> uint64_t @@ -1182,8 +1175,8 @@ case sizeof(uint64_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint64_t)*fromBytes++; } + break; } - break; } break; @@ -1197,8 +1190,8 @@ case sizeof(float): while ( fromBytes < lastSample ) { *toBytes++ = (float)*fromBytes++; } + break; } - break; case sizeof(double): { // uint32_t -> double @@ -1208,8 +1201,8 @@ case sizeof(double): while ( fromBytes < lastSample ) { *toBytes++ = (double)*fromBytes++; } + break; } - break; } break; @@ -1223,8 +1216,8 @@ case sizeof(float complex): while ( fromBytes < lastSample ) { *toBytes++ = (float complex)*fromBytes++; } + break; } - break; case sizeof(double complex): { // uint32_t -> double complex @@ -1234,8 +1227,8 @@ case sizeof(double complex): while ( fromBytes < lastSample ) { *toBytes++ = (double complex)*fromBytes++; } + break; } - break; } break; @@ -1249,8 +1242,8 @@ case sizeof(NSDecimal): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFromUnsignedLong(*fromBytes++); } + break; } - break; } break; } @@ -1271,8 +1264,8 @@ case sizeof(int8_t): while ( fromBytes < lastSample ) { *toBytes++ = (int8_t)*fromBytes++; } + break; } - break; case sizeof(int16_t): { // uint64_t -> int16_t @@ -1282,8 +1275,8 @@ case sizeof(int16_t): while ( fromBytes < lastSample ) { *toBytes++ = (int16_t)*fromBytes++; } + break; } - break; case sizeof(int32_t): { // uint64_t -> int32_t @@ -1293,8 +1286,8 @@ case sizeof(int32_t): while ( fromBytes < lastSample ) { *toBytes++ = (int32_t)*fromBytes++; } + break; } - break; case sizeof(int64_t): { // uint64_t -> int64_t @@ -1304,8 +1297,8 @@ case sizeof(int64_t): while ( fromBytes < lastSample ) { *toBytes++ = (int64_t)*fromBytes++; } + break; } - break; } break; @@ -1319,8 +1312,8 @@ case sizeof(uint8_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint8_t)*fromBytes++; } + break; } - break; case sizeof(uint16_t): { // uint64_t -> uint16_t @@ -1330,8 +1323,8 @@ case sizeof(uint16_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint16_t)*fromBytes++; } + break; } - break; case sizeof(uint32_t): { // uint64_t -> uint32_t @@ -1341,14 +1334,13 @@ case sizeof(uint32_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint32_t)*fromBytes++; } + break; } - break; case sizeof(uint64_t): - { // uint64_t -> uint64_t + // uint64_t -> uint64_t memcpy(destData.mutableBytes, sourceData.bytes, sampleCount * sizeof(uint64_t)); - } - break; + break; } break; @@ -1362,8 +1354,8 @@ case sizeof(float): while ( fromBytes < lastSample ) { *toBytes++ = (float)*fromBytes++; } + break; } - break; case sizeof(double): { // uint64_t -> double @@ -1373,8 +1365,8 @@ case sizeof(double): while ( fromBytes < lastSample ) { *toBytes++ = (double)*fromBytes++; } + break; } - break; } break; @@ -1388,8 +1380,8 @@ case sizeof(float complex): while ( fromBytes < lastSample ) { *toBytes++ = (float complex)*fromBytes++; } + break; } - break; case sizeof(double complex): { // uint64_t -> double complex @@ -1399,8 +1391,8 @@ case sizeof(double complex): while ( fromBytes < lastSample ) { *toBytes++ = (double complex)*fromBytes++; } + break; } - break; } break; @@ -1414,8 +1406,8 @@ case sizeof(NSDecimal): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFromUnsignedLongLong(*fromBytes++); } + break; } - break; } break; } @@ -1440,8 +1432,8 @@ case sizeof(int8_t): while ( fromBytes < lastSample ) { *toBytes++ = (int8_t)*fromBytes++; } + break; } - break; case sizeof(int16_t): { // float -> int16_t @@ -1451,8 +1443,8 @@ case sizeof(int16_t): while ( fromBytes < lastSample ) { *toBytes++ = (int16_t)*fromBytes++; } + break; } - break; case sizeof(int32_t): { // float -> int32_t @@ -1462,8 +1454,8 @@ case sizeof(int32_t): while ( fromBytes < lastSample ) { *toBytes++ = (int32_t)*fromBytes++; } + break; } - break; case sizeof(int64_t): { // float -> int64_t @@ -1473,8 +1465,8 @@ case sizeof(int64_t): while ( fromBytes < lastSample ) { *toBytes++ = (int64_t)*fromBytes++; } + break; } - break; } break; @@ -1488,8 +1480,8 @@ case sizeof(uint8_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint8_t)*fromBytes++; } + break; } - break; case sizeof(uint16_t): { // float -> uint16_t @@ -1499,8 +1491,8 @@ case sizeof(uint16_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint16_t)*fromBytes++; } + break; } - break; case sizeof(uint32_t): { // float -> uint32_t @@ -1510,8 +1502,8 @@ case sizeof(uint32_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint32_t)*fromBytes++; } + break; } - break; case sizeof(uint64_t): { // float -> uint64_t @@ -1521,18 +1513,17 @@ case sizeof(uint64_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint64_t)*fromBytes++; } + break; } - break; } break; case CPTFloatingPointDataType: switch ( destDataType->sampleBytes ) { case sizeof(float): - { // float -> float + // float -> float memcpy(destData.mutableBytes, sourceData.bytes, sampleCount * sizeof(float)); - } - break; + break; case sizeof(double): { // float -> double @@ -1542,8 +1533,8 @@ case sizeof(double): while ( fromBytes < lastSample ) { *toBytes++ = (double)*fromBytes++; } + break; } - break; } break; @@ -1557,8 +1548,8 @@ case sizeof(float complex): while ( fromBytes < lastSample ) { *toBytes++ = (float complex)*fromBytes++; } + break; } - break; case sizeof(double complex): { // float -> double complex @@ -1568,8 +1559,8 @@ case sizeof(double complex): while ( fromBytes < lastSample ) { *toBytes++ = (double complex)*fromBytes++; } + break; } - break; } break; @@ -1583,8 +1574,8 @@ case sizeof(NSDecimal): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFromFloat(*fromBytes++); } + break; } - break; } break; } @@ -1605,8 +1596,8 @@ case sizeof(int8_t): while ( fromBytes < lastSample ) { *toBytes++ = (int8_t)*fromBytes++; } + break; } - break; case sizeof(int16_t): { // double -> int16_t @@ -1616,8 +1607,8 @@ case sizeof(int16_t): while ( fromBytes < lastSample ) { *toBytes++ = (int16_t)*fromBytes++; } + break; } - break; case sizeof(int32_t): { // double -> int32_t @@ -1627,8 +1618,8 @@ case sizeof(int32_t): while ( fromBytes < lastSample ) { *toBytes++ = (int32_t)*fromBytes++; } + break; } - break; case sizeof(int64_t): { // double -> int64_t @@ -1638,8 +1629,8 @@ case sizeof(int64_t): while ( fromBytes < lastSample ) { *toBytes++ = (int64_t)*fromBytes++; } + break; } - break; } break; @@ -1653,8 +1644,8 @@ case sizeof(uint8_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint8_t)*fromBytes++; } + break; } - break; case sizeof(uint16_t): { // double -> uint16_t @@ -1664,8 +1655,8 @@ case sizeof(uint16_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint16_t)*fromBytes++; } + break; } - break; case sizeof(uint32_t): { // double -> uint32_t @@ -1675,8 +1666,8 @@ case sizeof(uint32_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint32_t)*fromBytes++; } + break; } - break; case sizeof(uint64_t): { // double -> uint64_t @@ -1686,8 +1677,8 @@ case sizeof(uint64_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint64_t)*fromBytes++; } + break; } - break; } break; @@ -1701,14 +1692,13 @@ case sizeof(float): while ( fromBytes < lastSample ) { *toBytes++ = (float)*fromBytes++; } + break; } - break; case sizeof(double): - { // double -> double + // double -> double memcpy(destData.mutableBytes, sourceData.bytes, sampleCount * sizeof(double)); - } - break; + break; } break; @@ -1722,8 +1712,8 @@ case sizeof(float complex): while ( fromBytes < lastSample ) { *toBytes++ = (float complex)*fromBytes++; } + break; } - break; case sizeof(double complex): { // double -> double complex @@ -1733,8 +1723,8 @@ case sizeof(double complex): while ( fromBytes < lastSample ) { *toBytes++ = (double complex)*fromBytes++; } + break; } - break; } break; @@ -1748,8 +1738,8 @@ case sizeof(NSDecimal): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFromDouble(*fromBytes++); } + break; } - break; } break; } @@ -1774,8 +1764,8 @@ case sizeof(int8_t): while ( fromBytes < lastSample ) { *toBytes++ = (int8_t)*fromBytes++; } + break; } - break; case sizeof(int16_t): { // float complex -> int16_t @@ -1785,8 +1775,8 @@ case sizeof(int16_t): while ( fromBytes < lastSample ) { *toBytes++ = (int16_t)*fromBytes++; } + break; } - break; case sizeof(int32_t): { // float complex -> int32_t @@ -1796,8 +1786,8 @@ case sizeof(int32_t): while ( fromBytes < lastSample ) { *toBytes++ = (int32_t)*fromBytes++; } + break; } - break; case sizeof(int64_t): { // float complex -> int64_t @@ -1807,8 +1797,8 @@ case sizeof(int64_t): while ( fromBytes < lastSample ) { *toBytes++ = (int64_t)*fromBytes++; } + break; } - break; } break; @@ -1822,8 +1812,8 @@ case sizeof(uint8_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint8_t)*fromBytes++; } + break; } - break; case sizeof(uint16_t): { // float complex -> uint16_t @@ -1833,8 +1823,8 @@ case sizeof(uint16_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint16_t)*fromBytes++; } + break; } - break; case sizeof(uint32_t): { // float complex -> uint32_t @@ -1844,8 +1834,8 @@ case sizeof(uint32_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint32_t)*fromBytes++; } + break; } - break; case sizeof(uint64_t): { // float complex -> uint64_t @@ -1855,8 +1845,8 @@ case sizeof(uint64_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint64_t)*fromBytes++; } + break; } - break; } break; @@ -1870,8 +1860,8 @@ case sizeof(float): while ( fromBytes < lastSample ) { *toBytes++ = (float)*fromBytes++; } + break; } - break; case sizeof(double): { // float complex -> double @@ -1881,18 +1871,17 @@ case sizeof(double): while ( fromBytes < lastSample ) { *toBytes++ = (double)*fromBytes++; } + break; } - break; } break; case CPTComplexFloatingPointDataType: switch ( destDataType->sampleBytes ) { case sizeof(float complex): - { // float complex -> float complex + // float complex -> float complex memcpy(destData.mutableBytes, sourceData.bytes, sampleCount * sizeof(float complex)); - } - break; + break; case sizeof(double complex): { // float complex -> double complex @@ -1902,8 +1891,8 @@ case sizeof(double complex): while ( fromBytes < lastSample ) { *toBytes++ = (double complex)*fromBytes++; } + break; } - break; } break; @@ -1917,8 +1906,8 @@ case sizeof(NSDecimal): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFromFloat(crealf(*fromBytes++)); } + break; } - break; } break; } @@ -1939,8 +1928,8 @@ case sizeof(int8_t): while ( fromBytes < lastSample ) { *toBytes++ = (int8_t)*fromBytes++; } + break; } - break; case sizeof(int16_t): { // double complex -> int16_t @@ -1950,8 +1939,8 @@ case sizeof(int16_t): while ( fromBytes < lastSample ) { *toBytes++ = (int16_t)*fromBytes++; } + break; } - break; case sizeof(int32_t): { // double complex -> int32_t @@ -1961,8 +1950,8 @@ case sizeof(int32_t): while ( fromBytes < lastSample ) { *toBytes++ = (int32_t)*fromBytes++; } + break; } - break; case sizeof(int64_t): { // double complex -> int64_t @@ -1972,8 +1961,8 @@ case sizeof(int64_t): while ( fromBytes < lastSample ) { *toBytes++ = (int64_t)*fromBytes++; } + break; } - break; } break; @@ -1987,8 +1976,8 @@ case sizeof(uint8_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint8_t)*fromBytes++; } + break; } - break; case sizeof(uint16_t): { // double complex -> uint16_t @@ -1998,8 +1987,8 @@ case sizeof(uint16_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint16_t)*fromBytes++; } + break; } - break; case sizeof(uint32_t): { // double complex -> uint32_t @@ -2009,8 +1998,8 @@ case sizeof(uint32_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint32_t)*fromBytes++; } + break; } - break; case sizeof(uint64_t): { // double complex -> uint64_t @@ -2020,8 +2009,8 @@ case sizeof(uint64_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint64_t)*fromBytes++; } + break; } - break; } break; @@ -2035,8 +2024,8 @@ case sizeof(float): while ( fromBytes < lastSample ) { *toBytes++ = (float)*fromBytes++; } + break; } - break; case sizeof(double): { // double complex -> double @@ -2046,8 +2035,8 @@ case sizeof(double): while ( fromBytes < lastSample ) { *toBytes++ = (double)*fromBytes++; } + break; } - break; } break; @@ -2061,14 +2050,13 @@ case sizeof(float complex): while ( fromBytes < lastSample ) { *toBytes++ = (float complex)*fromBytes++; } + break; } - break; case sizeof(double complex): - { // double complex -> double complex + // double complex -> double complex memcpy(destData.mutableBytes, sourceData.bytes, sampleCount * sizeof(double complex)); - } - break; + break; } break; @@ -2082,8 +2070,8 @@ case sizeof(NSDecimal): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFromDouble(creal(*fromBytes++)); } + break; } - break; } break; } @@ -2108,8 +2096,8 @@ case sizeof(int8_t): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalCharValue(*fromBytes++); } + break; } - break; case sizeof(int16_t): { // NSDecimal -> int16_t @@ -2119,8 +2107,8 @@ case sizeof(int16_t): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalShortValue(*fromBytes++); } + break; } - break; case sizeof(int32_t): { // NSDecimal -> int32_t @@ -2130,8 +2118,8 @@ case sizeof(int32_t): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalLongValue(*fromBytes++); } + break; } - break; case sizeof(int64_t): { // NSDecimal -> int64_t @@ -2141,8 +2129,8 @@ case sizeof(int64_t): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalLongLongValue(*fromBytes++); } + break; } - break; } break; @@ -2156,8 +2144,8 @@ case sizeof(uint8_t): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalUnsignedCharValue(*fromBytes++); } + break; } - break; case sizeof(uint16_t): { // NSDecimal -> uint16_t @@ -2167,8 +2155,8 @@ case sizeof(uint16_t): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalUnsignedShortValue(*fromBytes++); } + break; } - break; case sizeof(uint32_t): { // NSDecimal -> uint32_t @@ -2178,8 +2166,8 @@ case sizeof(uint32_t): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalUnsignedLongValue(*fromBytes++); } + break; } - break; case sizeof(uint64_t): { // NSDecimal -> uint64_t @@ -2189,8 +2177,8 @@ case sizeof(uint64_t): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalUnsignedLongLongValue(*fromBytes++); } + break; } - break; } break; @@ -2204,8 +2192,8 @@ case sizeof(float): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFloatValue(*fromBytes++); } + break; } - break; case sizeof(double): { // NSDecimal -> double @@ -2215,8 +2203,8 @@ case sizeof(double): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalDoubleValue(*fromBytes++); } + break; } - break; } break; @@ -2230,8 +2218,8 @@ case sizeof(float complex): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFloatValue(*fromBytes++); } + break; } - break; case sizeof(double complex): { // NSDecimal -> double complex @@ -2241,18 +2229,17 @@ case sizeof(double complex): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalDoubleValue(*fromBytes++); } + break; } - break; } break; case CPTDecimalDataType: switch ( destDataType->sampleBytes ) { case sizeof(NSDecimal): - { // NSDecimal -> NSDecimal + // NSDecimal -> NSDecimal memcpy(destData.mutableBytes, sourceData.bytes, sampleCount * sizeof(NSDecimal)); - } - break; + break; } break; } @@ -2284,8 +2271,8 @@ case sizeof(uint16_t): uint16_t swapped = CFSwapInt16(*samples); *samples++ = swapped; } + break; } - break; case sizeof(uint32_t): { @@ -2297,8 +2284,8 @@ case sizeof(uint32_t): uint32_t swapped = CFSwapInt32(*samples); *samples++ = swapped; } + break; } - break; case sizeof(uint64_t): { @@ -2310,8 +2297,8 @@ case sizeof(uint64_t): uint64_t swapped = CFSwapInt64(*samples); *samples++ = swapped; } + break; } - break; default: // do nothing diff --git a/framework/Source/CPTNumericData.m b/framework/Source/CPTNumericData.m index 167f8106a..86f0d2728 100644 --- a/framework/Source/CPTNumericData.m +++ b/framework/Source/CPTNumericData.m @@ -892,8 +892,8 @@ case sizeof(int8_t): *toBytes++ = 0; } } + break; } - break; case sizeof(int16_t): { @@ -906,8 +906,8 @@ case sizeof(int16_t): *toBytes++ = 0; } } + break; } - break; case sizeof(int32_t): { @@ -920,8 +920,8 @@ case sizeof(int32_t): *toBytes++ = 0; } } + break; } - break; case sizeof(int64_t): { @@ -934,8 +934,8 @@ case sizeof(int64_t): *toBytes++ = 0; } } + break; } - break; } break; @@ -952,8 +952,8 @@ case sizeof(uint8_t): *toBytes++ = 0; } } + break; } - break; case sizeof(uint16_t): { @@ -966,8 +966,8 @@ case sizeof(uint16_t): *toBytes++ = 0; } } + break; } - break; case sizeof(uint32_t): { @@ -980,8 +980,8 @@ case sizeof(uint32_t): *toBytes++ = 0; } } + break; } - break; case sizeof(uint64_t): { @@ -994,8 +994,8 @@ case sizeof(uint64_t): *toBytes++ = 0; } } + break; } - break; } break; @@ -1012,8 +1012,8 @@ case sizeof(float): *toBytes++ = NAN; } } + break; } - break; case sizeof(double): { @@ -1026,8 +1026,8 @@ case sizeof(double): *toBytes++ = (double)NAN; } } + break; } - break; } break; @@ -1044,8 +1044,8 @@ case sizeof(float complex): *toBytes++ = CMPLXF(NAN, NAN); } } + break; } - break; case sizeof(double complex): { @@ -1058,8 +1058,8 @@ case sizeof(double complex): *toBytes++ = CMPLX(NAN, NAN); } } + break; } - break; } break; @@ -1076,8 +1076,8 @@ case sizeof(NSDecimal): *toBytes++ = CPTDecimalNaN(); } } + break; } - break; } break; } diff --git a/framework/Source/CPTNumericDataTypeConversionTests.m b/framework/Source/CPTNumericDataTypeConversionTests.m index 48ba00911..92e3b5904 100644 --- a/framework/Source/CPTNumericDataTypeConversionTests.m +++ b/framework/Source/CPTNumericDataTypeConversionTests.m @@ -203,7 +203,7 @@ -(void)testTypeConversionSwapsByteOrderDouble uint64_t end = *(const uint64_t *)swappedData.bytes; union swap { - double v; + double v; CFSwappedFloat64 sv; } result; diff --git a/framework/Source/CPTPlot.m b/framework/Source/CPTPlot.m index 5d7f04cb6..b9a9c3605 100644 --- a/framework/Source/CPTPlot.m +++ b/framework/Source/CPTPlot.m @@ -937,8 +937,8 @@ -(BOOL)loadNumbersForAllFieldsFromDataSourceInRecordIndexRange:(NSRange)indexRan [self cacheNumbers:tempNumericData forField:fieldNum atRecordIndex:indexRange.location]; } hasData = YES; + break; } - break; case CPTDataOrderColumnsFirst: for ( NSUInteger fieldNum = 0; fieldNum < fieldCount; fieldNum++ ) { @@ -1015,8 +1015,8 @@ -(void)cacheNumbers:(nullable id)numbers forField:(NSUInteger)fieldEnum [self setCachedDataType:self.decimalDataType]; break; } + break; } - break; case CPTScaleTypeCategory: { @@ -1049,8 +1049,8 @@ -(void)cacheNumbers:(nullable id)numbers forField:(NSUInteger)fieldEnum else { [self.cachedData removeObjectForKey:cacheKey]; } + break; } - break; default: break; @@ -1101,20 +1101,20 @@ -(void)cacheNumbers:(nullable id)numbers forField:(NSUInteger)fieldEnum atRecord CPTNumericDataType newType = self.doubleDataType; [self setCachedDataType:newType]; mutableNumbers.dataType = newType; + break; } - break; case CPTPlotCachePrecisionDecimal: { CPTNumericDataType newType = self.decimalDataType; [self setCachedDataType:newType]; mutableNumbers.dataType = newType; + break; } - break; } } + break; } - break; case CPTScaleTypeCategory: { @@ -1136,8 +1136,8 @@ -(void)cacheNumbers:(nullable id)numbers forField:(NSUInteger)fieldEnum atRecord shape:nil]; } } + break; } - break; default: [self.cachedData removeObjectForKey:cacheKey]; @@ -1228,8 +1228,8 @@ -(BOOL)doublePrecisionCache break; } } + break; } - break; case CPTPlotCachePrecisionDouble: result = YES; @@ -1280,8 +1280,8 @@ -(double)cachedDoubleForField:(NSUInteger)fieldEnum recordIndex:(NSUInteger)idx if ( doubleNumber ) { return *doubleNumber; } + break; } - break; case CPTDecimalDataType: { @@ -1289,8 +1289,8 @@ -(double)cachedDoubleForField:(NSUInteger)fieldEnum recordIndex:(NSUInteger)idx if ( decimalNumber ) { return CPTDecimalDoubleValue(*decimalNumber); } + break; } - break; default: [NSException raise:CPTException format:@"Unsupported data type format"]; @@ -1317,8 +1317,8 @@ -(NSDecimal)cachedDecimalForField:(NSUInteger)fieldEnum recordIndex:(NSUInteger) if ( doubleNumber ) { return CPTDecimalFromDouble(*doubleNumber); } + break; } - break; case CPTDecimalDataType: { @@ -1326,8 +1326,8 @@ -(NSDecimal)cachedDecimalForField:(NSUInteger)fieldEnum recordIndex:(NSUInteger) if ( decimalNumber ) { return *decimalNumber; } + break; } - break; default: [NSException raise:CPTException format:@"Unsupported data type format"]; diff --git a/framework/Source/CPTPlotSymbol.m b/framework/Source/CPTPlotSymbol.m index 95d5dccfc..7dfeed8d4 100644 --- a/framework/Source/CPTPlotSymbol.m +++ b/framework/Source/CPTPlotSymbol.m @@ -781,8 +781,8 @@ -(nonnull CGPathRef)newSymbolPath CGAffineTransformMakeTranslation(-halfSize.width, -halfSize.height)); CGPathAddPath(symbolPath, &scaleTransform, customPath); } + break; } - break; } return symbolPath; diff --git a/framework/Source/CPTScatterPlot.m b/framework/Source/CPTScatterPlot.m index 2ebb4b696..2747a884a 100644 --- a/framework/Source/CPTScatterPlot.m +++ b/framework/Source/CPTScatterPlot.m @@ -1025,8 +1025,8 @@ -(nonnull CGPathRef)newDataLinePathForViewPoints:(nonnull CGPoint *)viewPoints i CGPathAddLineToPoint(dataLinePath, NULL, x, viewPoint.y); } CGPathAddLineToPoint(dataLinePath, NULL, viewPoint.x, viewPoint.y); + break; } - break; case CPTScatterPlotInterpolationCurved: // Curved plot lines handled separately @@ -1719,8 +1719,8 @@ -(nullable CPTPlotRange *)plotRangeEnclosingField:(NSUInteger)fieldEnum lowerLeft[CPTCoordinateX].decimalValue)]; range = [CPTPlotRange plotRangeWithLocation:lowerLeft[CPTCoordinateX] length:length]; + break; } - break; case CPTScatterPlotFieldY: { @@ -1729,8 +1729,8 @@ -(nullable CPTPlotRange *)plotRangeEnclosingField:(NSUInteger)fieldEnum lowerLeft[CPTCoordinateY].decimalValue)]; range = [CPTPlotRange plotRangeWithLocation:lowerLeft[CPTCoordinateY] length:length]; + break; } - break; default: break; diff --git a/framework/Source/CPTXYAxis.m b/framework/Source/CPTXYAxis.m index 0e470f9cc..a4fe847b3 100644 --- a/framework/Source/CPTXYAxis.m +++ b/framework/Source/CPTXYAxis.m @@ -424,8 +424,8 @@ -(void)drawGridLinesInContext:(nonnull CGContextRef)context isMajor:(BOOL)major if ( theVisibleRange ) { [labeledRange intersectionPlotRange:theVisibleRange]; } + break; } - break; default: break; @@ -543,14 +543,11 @@ -(NSUInteger)initialBandIndexForSortedLocations:(CPTNumberArray *)sortedLocation break; case CPTAxisLabelingPolicyFixedInterval: - { majorInterval = self.majorIntervalLength.decimalValue; - } - break; + break; case CPTAxisLabelingPolicyLocationsProvided: case CPTAxisLabelingPolicyNone: - { // user provided tick locations; they're not guaranteed to be evenly spaced, but band drawing always starts with the first location if ( range.lengthDouble >= 0.0 ) { for ( NSNumber *location in sortedLocations ) { @@ -572,8 +569,7 @@ -(NSUInteger)initialBandIndexForSortedLocations:(CPTNumberArray *)sortedLocation } bandIndex = bandIndex % bandCount; - } - break; + break; } if ( !CPTDecimalEquals(majorInterval, zero)) { @@ -832,8 +828,8 @@ -(nonnull NSNumber *)defaultTitleLocation else { location = axisRange.midPoint; } + break; } - break; case CPTScaleTypeLogModulus: { @@ -841,8 +837,8 @@ -(nonnull NSNumber *)defaultTitleLocation double end = axisRange.endDouble; location = @(CPTInverseLogModulus((CPTLogModulus(loc) + CPTLogModulus(end)) / 2.0)); + break; } - break; default: location = axisRange.midPoint; diff --git a/framework/Source/CPTXYPlotSpace.m b/framework/Source/CPTXYPlotSpace.m index fbe123db8..50c2375c7 100644 --- a/framework/Source/CPTXYPlotSpace.m +++ b/framework/Source/CPTXYPlotSpace.m @@ -1050,16 +1050,12 @@ -(CGPoint)plotAreaViewPointForPlotPoint:(nonnull CPTNumberArray *)plotPoint break; case CPTScaleTypeLog: - { viewPoint.x = [self viewCoordinateForViewLength:layerSize.width logPlotRange:self.xRange doublePrecisionPlotCoordinateValue:plotPoint[CPTCoordinateX].doubleValue]; - } - break; + break; case CPTScaleTypeLogModulus: - { viewPoint.x = [self viewCoordinateForViewLength:layerSize.width logModulusPlotRange:self.xRange doublePrecisionPlotCoordinateValue:plotPoint[CPTCoordinateX].doubleValue]; - } - break; + break; default: [NSException raise:CPTException format:@"Scale type not supported in CPTXYPlotSpace"]; @@ -1072,16 +1068,12 @@ -(CGPoint)plotAreaViewPointForPlotPoint:(nonnull CPTNumberArray *)plotPoint break; case CPTScaleTypeLog: - { viewPoint.y = [self viewCoordinateForViewLength:layerSize.height logPlotRange:self.yRange doublePrecisionPlotCoordinateValue:plotPoint[CPTCoordinateY].doubleValue]; - } - break; + break; case CPTScaleTypeLogModulus: - { viewPoint.y = [self viewCoordinateForViewLength:layerSize.height logModulusPlotRange:self.yRange doublePrecisionPlotCoordinateValue:plotPoint[CPTCoordinateY].doubleValue]; - } - break; + break; default: [NSException raise:CPTException format:@"Scale type not supported in CPTXYPlotSpace"]; @@ -1115,15 +1107,15 @@ -(CGPoint)plotAreaViewPointForPlotPoint:(nonnull NSDecimal *)plotPoint numberOfC { double x = CPTDecimalDoubleValue(plotPoint[CPTCoordinateX]); viewPoint.x = [self viewCoordinateForViewLength:layerSize.width logPlotRange:self.xRange doublePrecisionPlotCoordinateValue:x]; + break; } - break; case CPTScaleTypeLogModulus: { double x = CPTDecimalDoubleValue(plotPoint[CPTCoordinateX]); viewPoint.x = [self viewCoordinateForViewLength:layerSize.width logModulusPlotRange:self.xRange doublePrecisionPlotCoordinateValue:x]; + break; } - break; default: [NSException raise:CPTException format:@"Scale type not supported in CPTXYPlotSpace"]; @@ -1139,15 +1131,15 @@ -(CGPoint)plotAreaViewPointForPlotPoint:(nonnull NSDecimal *)plotPoint numberOfC { double y = CPTDecimalDoubleValue(plotPoint[CPTCoordinateY]); viewPoint.y = [self viewCoordinateForViewLength:layerSize.height logPlotRange:self.yRange doublePrecisionPlotCoordinateValue:y]; + break; } - break; case CPTScaleTypeLogModulus: { double y = CPTDecimalDoubleValue(plotPoint[CPTCoordinateY]); viewPoint.y = [self viewCoordinateForViewLength:layerSize.height logModulusPlotRange:self.yRange doublePrecisionPlotCoordinateValue:y]; + break; } - break; default: [NSException raise:CPTException format:@"Scale type not supported in CPTXYPlotSpace"]; diff --git a/scripts/uncrustify.cfg b/scripts/uncrustify.cfg index 19d43c2e6..228160d37 100644 --- a/scripts/uncrustify.cfg +++ b/scripts/uncrustify.cfg @@ -1,4 +1,4 @@ -# Uncrustify_d-0.73.0 +# Uncrustify_d-0.74.0-72-720e8912 newlines = auto input_tab_size = 4 output_tab_size = 4 @@ -50,6 +50,8 @@ sp_after_ptr_block_caret = remove sp_after_ptr_star_qualifier = remove sp_after_ptr_star_func = remove sp_after_ptr_star_trailing = remove +sp_ptr_star_func_var = remove +sp_ptr_star_func_type = remove sp_ptr_star_paren = remove sp_before_ptr_star_func = force sp_before_ptr_star_trailing = force @@ -58,6 +60,7 @@ sp_before_unnamed_byref = force sp_after_byref = remove sp_after_byref_func = remove sp_before_byref_func = force +sp_byref_paren = remove sp_after_type = force sp_after_decltype = ignore sp_before_template_paren = ignore @@ -76,6 +79,9 @@ sp_before_sparen = force sp_inside_sparen = force sp_inside_sparen_open = ignore sp_inside_sparen_close = ignore +sp_inside_for = force +sp_inside_for_open = ignore +sp_inside_for_close = ignore sp_sparen_paren = remove sp_after_sparen = force sp_sparen_brace = force @@ -164,6 +170,7 @@ sp_func_call_user_inside_fparen = remove sp_func_call_user_paren_paren = remove sp_func_class_paren = remove sp_func_class_paren_empty = remove +sp_return = force sp_return_paren = force sp_return_brace = force sp_attribute_paren = remove @@ -197,6 +204,7 @@ sp_before_dc = remove sp_after_dc = remove sp_d_array_colon = remove sp_not = remove +sp_not_not = remove sp_inv = remove sp_addr = remove sp_member = remove @@ -309,12 +317,17 @@ indent_single_line_comments_after = 0 indent_sparen_extra = 0 indent_relative_single_line_comments = true indent_switch_case = 4 +indent_switch_body = 4 indent_case_brace = 0 indent_switch_break_with_case = false indent_switch_pp = true indent_case_shift = 0 +indent_case_comment = true +indent_comment = true indent_col1_comment = false indent_col1_multi_string_literal = false +indent_comment_align_thresh = 3 +indent_ignore_label = false indent_label = 1 indent_access_spec = 1 indent_access_spec_body = false @@ -630,8 +643,11 @@ align_var_def_colon_gap = 0 align_var_def_attribute = true align_var_def_inline = true align_assign_span = 1 +align_braced_init_list_span = 0 align_assign_func_proto_span = 0 align_assign_thresh = 0 +align_assign_on_multi_var_defs = false +align_braced_init_list_thresh = 0 align_assign_decl_func = 0 align_enum_equ_span = 1 align_enum_equ_thresh = 0 @@ -653,6 +669,8 @@ align_right_cmt_mix = false align_right_cmt_same_level = false align_right_cmt_at_col = 1 align_func_proto_span = 2 +align_func_proto_star_style = 1 +align_func_proto_amp_style = 1 align_func_proto_thresh = 0 align_func_proto_gap = 1 align_on_operator = true @@ -731,7 +749,8 @@ mod_sort_incl_import_prioritize_extensionless = false mod_sort_incl_import_prioritize_angle_over_quotes = false mod_sort_incl_import_ignore_extension = false mod_sort_incl_import_grouping_enabled = false -mod_move_case_break = false +mod_move_case_break = true +mod_move_case_return = true mod_case_brace = remove mod_remove_empty_return = true mod_enum_last_comma = remove @@ -745,6 +764,7 @@ mod_sort_oc_property_setter_weight = 0 mod_sort_oc_property_nullability_weight = 0 pp_indent = force pp_indent_at_level = false +pp_indent_at_level0 = false pp_indent_count = 0 pp_space = remove pp_space_count = 0 @@ -754,6 +774,7 @@ pp_indent_if = 0 pp_if_indent_code = false pp_indent_in_guard = true pp_define_at_level = false +pp_include_at_level = false pp_ignore_define_body = false pp_indent_case = true pp_indent_func_def = true @@ -773,5 +794,5 @@ debug_max_number_of_loops = 0 debug_line_number_to_protocol = 0 debug_timeout = 0 debug_truncate = 0 -# option(s) with 'not default' value: 334 +# option(s) with 'not default' value: 366 # From ab3ae10b4cd5cb0929029d35fae901f998403b1a Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Wed, 14 Sep 2022 18:13:54 -0400 Subject: [PATCH 092/245] Updated code formatting with Uncrustify 0.75.0. --- .../src/plots/CurvedInterpolationDemo.m | 2 +- framework/Source/CPTAnimation.m | 2 +- framework/Source/CPTBarPlot.m | 8 +-- framework/Source/CPTGradient.m | 12 ++--- scripts/uncrustify.cfg | 52 +++++++++++++++---- 5 files changed, 53 insertions(+), 23 deletions(-) diff --git a/examples/CorePlotGallery/src/plots/CurvedInterpolationDemo.m b/examples/CorePlotGallery/src/plots/CurvedInterpolationDemo.m index d5e6f20e9..7ddcb191a 100644 --- a/examples/CorePlotGallery/src/plots/CurvedInterpolationDemo.m +++ b/examples/CorePlotGallery/src/plots/CurvedInterpolationDemo.m @@ -62,7 +62,7 @@ -(void)generateData [generatedData addObject:@{ @"x": x, @"y": y - }]; + }]; } } self.plotData = generatedData; diff --git a/framework/Source/CPTAnimation.m b/framework/Source/CPTAnimation.m index 46a88cd8b..b2b3f1d38 100644 --- a/framework/Source/CPTAnimation.m +++ b/framework/Source/CPTAnimation.m @@ -337,7 +337,7 @@ -(void)update CPTAnimationOperationKey: animationOperation, CPTAnimationValueKey: [period tweenedValueForProgress:progress], CPTAnimationValueClassKey: valueClass ? valueClass : [NSNull class], - CPTAnimationStartedKey: @(started), + CPTAnimationStartedKey : @(started), CPTAnimationFinishedKey: @(currentTime >= endTime) }; diff --git a/framework/Source/CPTBarPlot.m b/framework/Source/CPTBarPlot.m index 1fe99f7aa..1cadfb46d 100644 --- a/framework/Source/CPTBarPlot.m +++ b/framework/Source/CPTBarPlot.m @@ -713,8 +713,8 @@ -(double)doubleLengthInPlotCoordinates:(NSDecimal)decimalLength double length; if ( self.barWidthsAreInViewCoordinates ) { - CGFloat floatLength = CPTDecimalCGFloatValue(decimalLength); - CGPoint originViewPoint = CGPointZero; + CGFloat floatLength = CPTDecimalCGFloatValue(decimalLength); + CGPoint originViewPoint = CGPointZero; CGPoint displacedViewPoint = CPTPointMake(floatLength, floatLength); double originPlotPoint[2], displacedPlotPoint[2]; CPTPlotSpace *thePlotSpace = self.plotSpace; @@ -738,8 +738,8 @@ -(NSDecimal)lengthInPlotCoordinates:(NSDecimal)decimalLength NSDecimal length; if ( self.barWidthsAreInViewCoordinates ) { - CGFloat floatLength = CPTDecimalCGFloatValue(decimalLength); - CGPoint originViewPoint = CGPointZero; + CGFloat floatLength = CPTDecimalCGFloatValue(decimalLength); + CGPoint originViewPoint = CGPointZero; CGPoint displacedViewPoint = CPTPointMake(floatLength, floatLength); NSDecimal originPlotPoint[2], displacedPlotPoint[2]; CPTPlotSpace *thePlotSpace = self.plotSpace; diff --git a/framework/Source/CPTGradient.m b/framework/Source/CPTGradient.m index e5cb3ccb0..733666854 100644 --- a/framework/Source/CPTGradient.m +++ b/framework/Source/CPTGradient.m @@ -1673,13 +1673,13 @@ -(nullable id)debugQuickLookObject return CPTQuickLookImage(rect, ^(CGContextRef context, CGFloat __unused scale, CGRect bounds) { switch ( self.gradientType ) { - case CPTGradientTypeAxial: - CGContextAddRect(context, bounds); - break; + case CPTGradientTypeAxial: + CGContextAddRect(context, bounds); + break; - case CPTGradientTypeRadial: - CGContextAddEllipseInRect(context, bounds); - break; + case CPTGradientTypeRadial: + CGContextAddEllipseInRect(context, bounds); + break; } [self fillPathInContext:context]; }); diff --git a/scripts/uncrustify.cfg b/scripts/uncrustify.cfg index 228160d37..6442fac4a 100644 --- a/scripts/uncrustify.cfg +++ b/scripts/uncrustify.cfg @@ -1,4 +1,4 @@ -# Uncrustify_d-0.74.0-72-720e8912 +# Uncrustify-0.75.0 newlines = auto input_tab_size = 4 output_tab_size = 4 @@ -26,6 +26,7 @@ sp_cpp_lambda_fparen = ignore sp_assign_default = force sp_before_assign = ignore sp_after_assign = ignore +sp_enum_brace = add sp_enum_paren = force sp_enum_assign = force sp_enum_before_assign = ignore @@ -112,11 +113,11 @@ sp_after_mdatype_commas = remove sp_before_mdatype_commas = remove sp_between_mdatype_commas = remove sp_paren_comma = force +sp_type_colon = remove sp_after_ellipsis = remove sp_before_ellipsis = remove sp_type_ellipsis = remove sp_ptr_type_ellipsis = remove -sp_type_question = remove sp_paren_ellipsis = remove sp_byref_ellipsis = remove sp_paren_qualifier = remove @@ -264,6 +265,7 @@ sp_after_noexcept = ignore sp_vala_after_translation = ignore force_tab_after_define = false indent_columns = 4 +indent_ignore_first_continue = false indent_continue = 0 indent_continue_class_head = 0 indent_single_newlines = false @@ -285,11 +287,14 @@ indent_namespace = false indent_namespace_single_indent = false indent_namespace_level = 0 indent_namespace_limit = 0 +indent_namespace_inner_only = false indent_extern = false indent_class = true +indent_ignore_before_class_colon = false indent_before_class_colon = 0 indent_class_colon = false indent_class_on_colon = false +indent_ignore_before_constr_colon = false indent_constr_colon = false indent_ctor_init_leading = 2 indent_ctor_init_following = 2 @@ -297,7 +302,7 @@ indent_ctor_init = 0 indent_else_if = false indent_var_def_blk = 0 indent_var_def_cont = false -indent_shift = false +indent_shift = 0 indent_func_def_force_col1 = false indent_func_call_param = false indent_func_def_param = false @@ -318,6 +323,7 @@ indent_sparen_extra = 0 indent_relative_single_line_comments = true indent_switch_case = 4 indent_switch_body = 4 +indent_ignore_case_brace = false indent_case_brace = 0 indent_switch_break_with_case = false indent_switch_pp = true @@ -336,14 +342,18 @@ indent_paren_close = 1 indent_paren_after_func_def = false indent_paren_after_func_decl = false indent_paren_after_func_call = false -indent_comma_brace = false -indent_comma_paren = false -indent_bool_paren = false +indent_comma_brace = 0 +indent_comma_paren = 0 +indent_bool_paren = 0 +indent_ignore_bool = false +indent_ignore_arith = false indent_semicolon_for_paren = false +indent_ignore_semicolon = false indent_first_bool_expr = false indent_first_for_expr = false indent_square_nl = false indent_preserve_sql = true +indent_ignore_assign = false indent_align_assign = true indent_off_after_assign = false indent_align_paren = true @@ -371,6 +381,7 @@ indent_single_after_return = false indent_ignore_asm_block = false donot_indent_func_def_close_paren = false nl_collapse_empty_body = false +nl_collapse_empty_body_functions = false nl_assign_leave_one_liners = true nl_class_leave_one_liners = false nl_enum_leave_one_liners = true @@ -500,10 +511,12 @@ nl_template_start = false nl_template_args = false nl_template_end = false nl_oc_msg_args = false +nl_oc_msg_args_min_params = 0 nl_fdef_brace = force nl_fdef_brace_cond = force nl_cpp_ldef_brace = ignore nl_return_expr = remove +nl_throw_expr = ignore nl_after_semicolon = true nl_paren_dbrace_open = ignore nl_type_brace_init_lst = ignore @@ -567,10 +580,10 @@ nl_class_leave_one_liner_groups = false nl_after_func_body = 2 nl_after_func_body_class = 0 nl_after_func_body_one_liner = 1 -nl_func_var_def_blk = 1 nl_typedef_blk_start = 0 nl_typedef_blk_end = 0 nl_typedef_blk_in = 0 +nl_var_def_blk_end_func_top = 1 nl_var_def_blk_start = 0 nl_var_def_blk_end = 0 nl_var_def_blk_in = 0 @@ -643,10 +656,10 @@ align_var_def_colon_gap = 0 align_var_def_attribute = true align_var_def_inline = true align_assign_span = 1 -align_braced_init_list_span = 0 align_assign_func_proto_span = 0 align_assign_thresh = 0 align_assign_on_multi_var_defs = false +align_braced_init_list_span = 0 align_braced_init_list_thresh = 0 align_assign_decl_func = 0 align_enum_equ_span = 1 @@ -723,15 +736,18 @@ mod_full_brace_do = force mod_full_brace_for = force mod_full_brace_function = force mod_full_brace_if = force -mod_full_brace_if_chain = false +mod_full_brace_if_chain = 0 mod_full_brace_if_chain_only = false mod_full_brace_while = force mod_full_brace_using = ignore mod_full_brace_nl = 1 mod_full_brace_nl_block_rem_mlcond = false mod_paren_on_return = remove +mod_paren_on_throw = ignore mod_pawn_semicolon = true mod_full_paren_if_bool = true +mod_full_paren_assign_bool = false +mod_full_paren_return_bool = false mod_remove_extra_semicolon = true mod_remove_duplicate_include = true mod_add_long_function_closebrace_comment = 0 @@ -754,6 +770,16 @@ mod_move_case_return = true mod_case_brace = remove mod_remove_empty_return = true mod_enum_last_comma = remove +mod_infinite_loop = 0 +mod_int_short = ignore +mod_short_int = ignore +mod_int_long = ignore +mod_long_int = ignore +mod_int_signed = ignore +mod_signed_int = ignore +mod_int_unsigned = ignore +mod_unsigned_int = ignore +mod_int_prefer_int_on_left = false mod_sort_oc_properties = false mod_sort_oc_property_class_weight = 0 mod_sort_oc_property_thread_safe_weight = 0 @@ -762,11 +788,12 @@ mod_sort_oc_property_reference_weight = 0 mod_sort_oc_property_getter_weight = 0 mod_sort_oc_property_setter_weight = 0 mod_sort_oc_property_nullability_weight = 0 +pp_indent_with_tabs = -1 pp_indent = force pp_indent_at_level = false pp_indent_at_level0 = false pp_indent_count = 0 -pp_space = remove +pp_space_after = ignore pp_space_count = 0 pp_indent_region = 0 pp_region_indent_code = false @@ -779,7 +806,8 @@ pp_ignore_define_body = false pp_indent_case = true pp_indent_func_def = true pp_indent_extern = true -pp_indent_brace = true +pp_indent_brace = 1 +pp_warn_unbalanced_if = false include_category_0 = "" include_category_1 = "" include_category_2 = "" @@ -794,5 +822,7 @@ debug_max_number_of_loops = 0 debug_line_number_to_protocol = 0 debug_timeout = 0 debug_truncate = 0 +debug_sort_the_tracks = true +set_numbering_for_html_output = false # option(s) with 'not default' value: 366 # From dc70aa0e956a2a0e93e77f7e2e7d6b7b7fcbf732 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Wed, 14 Sep 2022 18:58:54 -0400 Subject: [PATCH 093/245] Updated the Travis configuration to Xcode 13.4. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 91e88dfca..c4c9d4238 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ language: objective-c -osx_image: xcode12 +osx_image: xcode13.4 jobs: include: From 0841437b6c85f3680921dabf21d7348f1f6c01e2 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Thu, 15 Sep 2022 20:09:37 -0400 Subject: [PATCH 094/245] Use a dictionary to store theme classes to optimize class lookup. --- framework/Source/CPTTheme.m | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/framework/Source/CPTTheme.m b/framework/Source/CPTTheme.m index 6163a453a..7f93c2f7d 100644 --- a/framework/Source/CPTTheme.m +++ b/framework/Source/CPTTheme.m @@ -8,7 +8,7 @@ **/ // Registered themes -static NSMutableSet *themes = nil; +static NSMutableDictionary *themes = nil; /** @brief Creates a CPTGraph instance formatted with a predefined style. * @@ -103,7 +103,7 @@ +(BOOL)supportsSecureCoding { NSSortDescriptor *nameSort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)]; - return [themes sortedArrayUsingDescriptors:@[nameSort]]; + return [themes.allValues sortedArrayUsingDescriptors:@[nameSort]]; } /** @brief Gets a named theme. @@ -115,11 +115,11 @@ +(nullable instancetype)themeNamed:(nullable CPTThemeName)themeName { CPTTheme *newTheme = nil; - for ( Class themeClass in themes ) { - if ( [themeName isEqualToString:[themeClass name]] ) { - newTheme = [[themeClass alloc] init]; - break; - } + CPTThemeName theName = themeName; + + if ( theName ) { + Class themeClass = themes[theName]; + newTheme = [[themeClass alloc] init]; } return newTheme; @@ -130,19 +130,15 @@ +(nullable instancetype)themeNamed:(nullable CPTThemeName)themeName **/ +(void)registerTheme:(nonnull Class)themeClass { - NSParameterAssert(themeClass); + NSParameterAssert([themeClass isSubclassOfClass:self]); + NSParameterAssert([themeClass name]); @synchronized ( self ) { if ( !themes ) { - themes = [[NSMutableSet alloc] init]; + themes = [[NSMutableDictionary alloc] init]; } - if ( [themes containsObject:themeClass] ) { - [NSException raise:CPTException format:@"Theme class already registered: %@", themeClass]; - } - else { - [themes addObject:themeClass]; - } + [themes setObject:themeClass forKey:[themeClass name]]; } } From b123b6a1c124c6a5ec0992aa86dd638ace0c0a0a Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Fri, 16 Sep 2022 16:35:48 -0400 Subject: [PATCH 095/245] Enumerate theme classes without using the deprecated +load method. --- framework/Source/CPTTheme.h | 1 - framework/Source/CPTTheme.m | 131 +++++++++++++++++++---- framework/Source/_CPTDarkGradientTheme.m | 7 +- framework/Source/_CPTPlainBlackTheme.m | 7 +- framework/Source/_CPTPlainWhiteTheme.m | 7 +- framework/Source/_CPTSlateTheme.m | 7 +- framework/Source/_CPTStocksTheme.m | 7 +- 7 files changed, 113 insertions(+), 54 deletions(-) diff --git a/framework/Source/CPTTheme.h b/framework/Source/CPTTheme.h index 83cda6ef7..26f59de78 100644 --- a/framework/Source/CPTTheme.h +++ b/framework/Source/CPTTheme.h @@ -25,7 +25,6 @@ extern CPTThemeName __nonnull const kCPTStocksTheme; ///< A graph theme wi /// @name Theme Management /// @{ -+(void)registerTheme:(nonnull Class)themeClass; +(nullable NSArray *)themeClasses; +(nullable instancetype)themeNamed:(nullable CPTThemeName)themeName; +(nonnull CPTThemeName)name; diff --git a/framework/Source/CPTTheme.m b/framework/Source/CPTTheme.m index 7f93c2f7d..7362c4d08 100644 --- a/framework/Source/CPTTheme.m +++ b/framework/Source/CPTTheme.m @@ -2,14 +2,36 @@ #import "CPTExceptions.h" #import "CPTGraph.h" +#import + +/// @cond + +/** + * @brief A dictionary with CPTThemeName keys and Class values. + **/ +typedef NSDictionary CPTThemeDictionary; + +/** + * @brief A mutable dictionary with CPTThemeName keys and Class values. + **/ +typedef NSMutableDictionary CPTMutableThemeDictionary; + +@interface CPTTheme() + +NSArray * ClassGetSubclasses(Class parentClass); + ++(nonnull CPTThemeDictionary *)themeDictionary; + +@end + +#pragma mark - + +/// @endcond /** @defgroup themeNames Theme Names * @brief Names of the predefined themes. **/ -// Registered themes -static NSMutableDictionary *themes = nil; - /** @brief Creates a CPTGraph instance formatted with a predefined style. * * Themes apply a predefined combination of line styles, text styles, and fills to @@ -96,6 +118,86 @@ +(BOOL)supportsSecureCoding #pragma mark - #pragma mark Theme management +/// @cond + +// Code from https://stackoverflow.com/questions/7923586/objective-c-get-list-of-subclasses-from-superclass/23038932 +NSArray *ClassGetSubclasses() +{ + Class parentClass = [CPTTheme class]; + + int numClasses = objc_getClassList(NULL, 0); + + // According to the docs of objc_getClassList we should check + // if numClasses is bigger than 0. + if ( numClasses <= 0 ) { + return [NSArray array]; + } + + size_t memSize = sizeof(Class) * (size_t)numClasses; + Class *classes = (__unsafe_unretained Class *)malloc(memSize); + + if ((classes == NULL) && memSize ) { + return [NSArray array]; + } + + numClasses = objc_getClassList(classes, numClasses); + + NSMutableArray *result = [NSMutableArray new]; + + for ( NSInteger i = 0; i < numClasses; i++ ) { + Class superClass = classes[i]; + + // Don't add the parent class to list of sublcasses + if ( superClass == parentClass ) { + continue; + } + + // Using a do while loop, like pointed out in Cocoa with Love, + // can lead to EXC_I386_GPFLT, which stands for General + // Protection Fault and means we are doing something we + // shouldn't do. It's safer to use a regular while loop to + // check if superClass is valid. + while ( superClass && superClass != parentClass ) { + superClass = class_getSuperclass(superClass); + } + + if ( superClass ) { + [result addObject:classes[i]]; + } + } + + free(classes); + + return result; +} + +/** @brief A shared CPTAnimation instance responsible for scheduling and executing animations. + * @return The shared CPTAnimation instance. + **/ ++(nonnull CPTThemeDictionary *)themeDictionary +{ + static dispatch_once_t once = 0; + static CPTThemeDictionary *themes; + + dispatch_once(&once, ^{ + CPTMutableThemeDictionary *mutThemes = [[CPTMutableThemeDictionary alloc] init]; + + for ( Class cls in ClassGetSubclasses(self)) { + CPTThemeName themeName = [cls name]; + + if ( themeName.length > 0 ) { + [mutThemes setObject:cls forKey:themeName]; + } + } + + themes = [mutThemes copy]; + }); + + return themes; +} + +/// @endcond + /** @brief List of the available theme classes, sorted by name. * @return An NSArray containing all available theme classes, sorted by name. **/ @@ -103,7 +205,7 @@ +(BOOL)supportsSecureCoding { NSSortDescriptor *nameSort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)]; - return [themes.allValues sortedArrayUsingDescriptors:@[nameSort]]; + return [[self themeDictionary].allValues sortedArrayUsingDescriptors:@[nameSort]]; } /** @brief Gets a named theme. @@ -118,36 +220,19 @@ +(nullable instancetype)themeNamed:(nullable CPTThemeName)themeName CPTThemeName theName = themeName; if ( theName ) { - Class themeClass = themes[theName]; + Class themeClass = [self themeDictionary][theName]; newTheme = [[themeClass alloc] init]; } return newTheme; } -/** @brief Register a theme class. - * @param themeClass Theme class to register. - **/ -+(void)registerTheme:(nonnull Class)themeClass -{ - NSParameterAssert([themeClass isSubclassOfClass:self]); - NSParameterAssert([themeClass name]); - - @synchronized ( self ) { - if ( !themes ) { - themes = [[NSMutableDictionary alloc] init]; - } - - [themes setObject:themeClass forKey:[themeClass name]]; - } -} - /** @brief The name used for this theme class. * @return The name. **/ +(nonnull CPTThemeName)name { - return NSStringFromClass(self); + return @""; } #pragma mark - diff --git a/framework/Source/_CPTDarkGradientTheme.m b/framework/Source/_CPTDarkGradientTheme.m index f737dfdaa..2482c241b 100644 --- a/framework/Source/_CPTDarkGradientTheme.m +++ b/framework/Source/_CPTDarkGradientTheme.m @@ -21,12 +21,7 @@ **/ @implementation _CPTDarkGradientTheme -+(void)load -{ - [self registerTheme:self]; -} - -+(nonnull NSString *)name ++(nonnull CPTThemeName)name { return kCPTDarkGradientTheme; } diff --git a/framework/Source/_CPTPlainBlackTheme.m b/framework/Source/_CPTPlainBlackTheme.m index ae38761d0..440499491 100644 --- a/framework/Source/_CPTPlainBlackTheme.m +++ b/framework/Source/_CPTPlainBlackTheme.m @@ -18,12 +18,7 @@ **/ @implementation _CPTPlainBlackTheme -+(void)load -{ - [self registerTheme:self]; -} - -+(nonnull NSString *)name ++(nonnull CPTThemeName)name { return kCPTPlainBlackTheme; } diff --git a/framework/Source/_CPTPlainWhiteTheme.m b/framework/Source/_CPTPlainWhiteTheme.m index d90f88428..8e8e3f733 100644 --- a/framework/Source/_CPTPlainWhiteTheme.m +++ b/framework/Source/_CPTPlainWhiteTheme.m @@ -18,12 +18,7 @@ **/ @implementation _CPTPlainWhiteTheme -+(void)load -{ - [self registerTheme:self]; -} - -+(nonnull NSString *)name ++(nonnull CPTThemeName)name { return kCPTPlainWhiteTheme; } diff --git a/framework/Source/_CPTSlateTheme.m b/framework/Source/_CPTSlateTheme.m index 3f8807ad0..8943d4d80 100644 --- a/framework/Source/_CPTSlateTheme.m +++ b/framework/Source/_CPTSlateTheme.m @@ -21,12 +21,7 @@ **/ @implementation _CPTSlateTheme -+(void)load -{ - [self registerTheme:self]; -} - -+(nonnull NSString *)name ++(nonnull CPTThemeName)name { return kCPTSlateTheme; } diff --git a/framework/Source/_CPTStocksTheme.m b/framework/Source/_CPTStocksTheme.m index 208cf9db8..e09b0d6e0 100644 --- a/framework/Source/_CPTStocksTheme.m +++ b/framework/Source/_CPTStocksTheme.m @@ -19,12 +19,7 @@ **/ @implementation _CPTStocksTheme -+(void)load -{ - [self registerTheme:self]; -} - -+(nonnull NSString *)name ++(nonnull CPTThemeName)name { return kCPTStocksTheme; } From b56b292b0490d1d373cc53f0c05966da6c698f10 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Fri, 16 Sep 2022 17:17:48 -0400 Subject: [PATCH 096/245] Moved the parentClass variable to a parameter of ClassGetSubclasses(). --- framework/Source/CPTTheme.m | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/framework/Source/CPTTheme.m b/framework/Source/CPTTheme.m index 7362c4d08..2a94ef890 100644 --- a/framework/Source/CPTTheme.m +++ b/framework/Source/CPTTheme.m @@ -121,10 +121,8 @@ +(BOOL)supportsSecureCoding /// @cond // Code from https://stackoverflow.com/questions/7923586/objective-c-get-list-of-subclasses-from-superclass/23038932 -NSArray *ClassGetSubclasses() +NSArray *ClassGetSubclasses(Class parentClass) { - Class parentClass = [CPTTheme class]; - int numClasses = objc_getClassList(NULL, 0); // According to the docs of objc_getClassList we should check From a0770cd31d96be44fc910813600d67fa42db6416 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Fri, 16 Sep 2022 17:18:55 -0400 Subject: [PATCH 097/245] Enumerate Plot Gallery plot item classes without using the deprecated +load method. --- examples/CorePlotGallery/src/plots/AxisDemo.m | 5 -- .../src/plots/CandlestickPlot.m | 5 -- .../src/plots/ColoredBarChart.m | 5 -- .../CorePlotGallery/src/plots/CompositePlot.m | 5 -- .../CorePlotGallery/src/plots/ControlChart.m | 5 -- .../src/plots/CurvedInterpolationDemo.m | 5 -- .../src/plots/CurvedScatterPlot.m | 5 -- examples/CorePlotGallery/src/plots/DatePlot.m | 5 -- .../CorePlotGallery/src/plots/DonutChart.m | 5 -- .../CorePlotGallery/src/plots/FunctionPlot.m | 5 -- .../src/plots/GradientScatterPlot.m | 5 -- .../CorePlotGallery/src/plots/ImageDemo.m | 5 -- .../src/plots/LabelingPolicyDemo.m | 5 -- .../CorePlotGallery/src/plots/LineCapDemo.m | 5 -- examples/CorePlotGallery/src/plots/OHLCPlot.m | 5 -- .../CorePlotGallery/src/plots/PlotSpaceDemo.m | 5 -- .../CorePlotGallery/src/plots/RangePlot.m | 5 -- .../CorePlotGallery/src/plots/RealTimePlot.m | 5 -- .../src/plots/SimplePieChart.m | 5 -- .../src/plots/SimpleScatterPlot.m | 5 -- .../src/plots/SteppedScatterPlot.m | 5 -- .../src/plots/VerticalBarChart.m | 5 -- .../CorePlotGallery/src/shared/PlotGallery.h | 2 - .../CorePlotGallery/src/shared/PlotGallery.m | 64 +++++++++++++++++++ .../CorePlotGallery/src/shared/PlotItem.h | 2 - .../CorePlotGallery/src/shared/PlotItem.m | 15 ----- 26 files changed, 64 insertions(+), 129 deletions(-) diff --git a/examples/CorePlotGallery/src/plots/AxisDemo.m b/examples/CorePlotGallery/src/plots/AxisDemo.m index 07730cda7..b6bc0f721 100644 --- a/examples/CorePlotGallery/src/plots/AxisDemo.m +++ b/examples/CorePlotGallery/src/plots/AxisDemo.m @@ -7,11 +7,6 @@ @implementation AxisDemo -+(void)load -{ - [super registerPlotItem:self]; -} - -(nonnull instancetype)init { if ((self = [super init])) { diff --git a/examples/CorePlotGallery/src/plots/CandlestickPlot.m b/examples/CorePlotGallery/src/plots/CandlestickPlot.m index c60f344d2..3d54007e2 100644 --- a/examples/CorePlotGallery/src/plots/CandlestickPlot.m +++ b/examples/CorePlotGallery/src/plots/CandlestickPlot.m @@ -19,11 +19,6 @@ @implementation CandlestickPlot @synthesize graph; @synthesize plotData; -+(void)load -{ - [super registerPlotItem:self]; -} - -(nonnull instancetype)init { if ((self = [super init])) { diff --git a/examples/CorePlotGallery/src/plots/ColoredBarChart.m b/examples/CorePlotGallery/src/plots/ColoredBarChart.m index e2a607c84..b29e5b5d5 100644 --- a/examples/CorePlotGallery/src/plots/ColoredBarChart.m +++ b/examples/CorePlotGallery/src/plots/ColoredBarChart.m @@ -10,11 +10,6 @@ @implementation ColoredBarChart @synthesize plotData; -+(void)load -{ - [super registerPlotItem:self]; -} - -(nonnull instancetype)init { if ((self = [super init])) { diff --git a/examples/CorePlotGallery/src/plots/CompositePlot.m b/examples/CorePlotGallery/src/plots/CompositePlot.m index 9a3c140b8..af171deb0 100644 --- a/examples/CorePlotGallery/src/plots/CompositePlot.m +++ b/examples/CorePlotGallery/src/plots/CompositePlot.m @@ -33,11 +33,6 @@ @implementation CompositePlot @synthesize barChart; @synthesize pieChart; -+(void)load -{ - [super registerPlotItem:self]; -} - -(nonnull instancetype)init { if ((self = [super init])) { diff --git a/examples/CorePlotGallery/src/plots/ControlChart.m b/examples/CorePlotGallery/src/plots/ControlChart.m index cc8682410..edf163ba7 100644 --- a/examples/CorePlotGallery/src/plots/ControlChart.m +++ b/examples/CorePlotGallery/src/plots/ControlChart.m @@ -21,11 +21,6 @@ @implementation ControlChart @synthesize meanValue; @synthesize standardError; -+(void)load -{ - [super registerPlotItem:self]; -} - -(nonnull instancetype)init { if ((self = [super init])) { diff --git a/examples/CorePlotGallery/src/plots/CurvedInterpolationDemo.m b/examples/CorePlotGallery/src/plots/CurvedInterpolationDemo.m index 7ddcb191a..b154b73a8 100644 --- a/examples/CorePlotGallery/src/plots/CurvedInterpolationDemo.m +++ b/examples/CorePlotGallery/src/plots/CurvedInterpolationDemo.m @@ -30,11 +30,6 @@ @implementation CurvedInterpolationDemo @synthesize plotData = _plotData; -+(void)load -{ - [super registerPlotItem:self]; -} - -(instancetype)init { if ((self = [super init])) { diff --git a/examples/CorePlotGallery/src/plots/CurvedScatterPlot.m b/examples/CorePlotGallery/src/plots/CurvedScatterPlot.m index 1b0a3986c..7695a6e7b 100644 --- a/examples/CorePlotGallery/src/plots/CurvedScatterPlot.m +++ b/examples/CorePlotGallery/src/plots/CurvedScatterPlot.m @@ -27,11 +27,6 @@ @implementation CurvedScatterPlot @synthesize plotData1; @synthesize plotData2; -+(void)load -{ - [super registerPlotItem:self]; -} - -(nonnull instancetype)init { if ((self = [super init])) { diff --git a/examples/CorePlotGallery/src/plots/DatePlot.m b/examples/CorePlotGallery/src/plots/DatePlot.m index ea3d76b28..18cd022e2 100644 --- a/examples/CorePlotGallery/src/plots/DatePlot.m +++ b/examples/CorePlotGallery/src/plots/DatePlot.m @@ -27,11 +27,6 @@ @implementation DatePlot @synthesize plotData; @synthesize markerAnnotation; -+(void)load -{ - [super registerPlotItem:self]; -} - -(nonnull instancetype)init { if ((self = [super init])) { diff --git a/examples/CorePlotGallery/src/plots/DonutChart.m b/examples/CorePlotGallery/src/plots/DonutChart.m index a56ec42fb..d223a7d7f 100644 --- a/examples/CorePlotGallery/src/plots/DonutChart.m +++ b/examples/CorePlotGallery/src/plots/DonutChart.m @@ -13,11 +13,6 @@ @implementation DonutChart @synthesize plotData; -+(void)load -{ - [super registerPlotItem:self]; -} - -(nonnull instancetype)init { if ((self = [super init])) { diff --git a/examples/CorePlotGallery/src/plots/FunctionPlot.m b/examples/CorePlotGallery/src/plots/FunctionPlot.m index 68146403c..5a716087d 100644 --- a/examples/CorePlotGallery/src/plots/FunctionPlot.m +++ b/examples/CorePlotGallery/src/plots/FunctionPlot.m @@ -18,11 +18,6 @@ @implementation FunctionPlot #pragma mark - -+(void)load -{ - [super registerPlotItem:self]; -} - #pragma mark - -(nonnull instancetype)init diff --git a/examples/CorePlotGallery/src/plots/GradientScatterPlot.m b/examples/CorePlotGallery/src/plots/GradientScatterPlot.m index 625b81f16..ce686566b 100644 --- a/examples/CorePlotGallery/src/plots/GradientScatterPlot.m +++ b/examples/CorePlotGallery/src/plots/GradientScatterPlot.m @@ -17,11 +17,6 @@ @implementation GradientScatterPlot @synthesize symbolTextAnnotation; @synthesize plotData; -+(void)load -{ - [super registerPlotItem:self]; -} - -(nonnull instancetype)init { if ((self = [super init])) { diff --git a/examples/CorePlotGallery/src/plots/ImageDemo.m b/examples/CorePlotGallery/src/plots/ImageDemo.m index df304a094..c446264de 100644 --- a/examples/CorePlotGallery/src/plots/ImageDemo.m +++ b/examples/CorePlotGallery/src/plots/ImageDemo.m @@ -7,11 +7,6 @@ @implementation ImageDemo -+(void)load -{ - [super registerPlotItem:self]; -} - -(nonnull instancetype)init { if ((self = [super init])) { diff --git a/examples/CorePlotGallery/src/plots/LabelingPolicyDemo.m b/examples/CorePlotGallery/src/plots/LabelingPolicyDemo.m index 5be94fe80..08d4a776c 100644 --- a/examples/CorePlotGallery/src/plots/LabelingPolicyDemo.m +++ b/examples/CorePlotGallery/src/plots/LabelingPolicyDemo.m @@ -7,11 +7,6 @@ @implementation LabelingPolicyDemo -+(void)load -{ - [super registerPlotItem:self]; -} - -(nonnull instancetype)init { if ((self = [super init])) { diff --git a/examples/CorePlotGallery/src/plots/LineCapDemo.m b/examples/CorePlotGallery/src/plots/LineCapDemo.m index c5b5eb68f..82caa6c89 100644 --- a/examples/CorePlotGallery/src/plots/LineCapDemo.m +++ b/examples/CorePlotGallery/src/plots/LineCapDemo.m @@ -7,11 +7,6 @@ @implementation LineCapDemo -+(void)load -{ - [super registerPlotItem:self]; -} - -(nonnull instancetype)init { if ((self = [super init])) { diff --git a/examples/CorePlotGallery/src/plots/OHLCPlot.m b/examples/CorePlotGallery/src/plots/OHLCPlot.m index 7c1d99788..5cddee44f 100644 --- a/examples/CorePlotGallery/src/plots/OHLCPlot.m +++ b/examples/CorePlotGallery/src/plots/OHLCPlot.m @@ -19,11 +19,6 @@ @implementation OHLCPlot @synthesize graph; @synthesize plotData; -+(void)load -{ - [super registerPlotItem:self]; -} - -(nonnull instancetype)init { if ((self = [super init])) { diff --git a/examples/CorePlotGallery/src/plots/PlotSpaceDemo.m b/examples/CorePlotGallery/src/plots/PlotSpaceDemo.m index c192afd12..73a47d12e 100644 --- a/examples/CorePlotGallery/src/plots/PlotSpaceDemo.m +++ b/examples/CorePlotGallery/src/plots/PlotSpaceDemo.m @@ -7,11 +7,6 @@ @implementation PlotSpaceDemo -+(void)load -{ - [super registerPlotItem:self]; -} - -(nonnull instancetype)init { if ((self = [super init])) { diff --git a/examples/CorePlotGallery/src/plots/RangePlot.m b/examples/CorePlotGallery/src/plots/RangePlot.m index b29a39d1a..3091e6eeb 100644 --- a/examples/CorePlotGallery/src/plots/RangePlot.m +++ b/examples/CorePlotGallery/src/plots/RangePlot.m @@ -23,11 +23,6 @@ @implementation RangePlot @synthesize areaFill; @synthesize barLineStyle; -+(void)load -{ - [super registerPlotItem:self]; -} - -(nonnull instancetype)init { if ((self = [super init])) { diff --git a/examples/CorePlotGallery/src/plots/RealTimePlot.m b/examples/CorePlotGallery/src/plots/RealTimePlot.m index 053fdda2b..cbc06da8b 100644 --- a/examples/CorePlotGallery/src/plots/RealTimePlot.m +++ b/examples/CorePlotGallery/src/plots/RealTimePlot.m @@ -25,11 +25,6 @@ @implementation RealTimePlot @synthesize currentIndex; @synthesize dataTimer; -+(void)load -{ - [super registerPlotItem:self]; -} - -(nonnull instancetype)init { if ((self = [super init])) { diff --git a/examples/CorePlotGallery/src/plots/SimplePieChart.m b/examples/CorePlotGallery/src/plots/SimplePieChart.m index 8e396bf91..698f6aa6a 100644 --- a/examples/CorePlotGallery/src/plots/SimplePieChart.m +++ b/examples/CorePlotGallery/src/plots/SimplePieChart.m @@ -19,11 +19,6 @@ @implementation SimplePieChart @synthesize offsetIndex; @synthesize sliceOffset; -+(void)load -{ - [super registerPlotItem:self]; -} - -(nonnull instancetype)init { if ((self = [super init])) { diff --git a/examples/CorePlotGallery/src/plots/SimpleScatterPlot.m b/examples/CorePlotGallery/src/plots/SimpleScatterPlot.m index b5f9f777b..813a8810d 100644 --- a/examples/CorePlotGallery/src/plots/SimpleScatterPlot.m +++ b/examples/CorePlotGallery/src/plots/SimpleScatterPlot.m @@ -19,11 +19,6 @@ @implementation SimpleScatterPlot @synthesize plotData; @synthesize histogramOption; -+(void)load -{ - [super registerPlotItem:self]; -} - -(nonnull instancetype)init { if ((self = [super init])) { diff --git a/examples/CorePlotGallery/src/plots/SteppedScatterPlot.m b/examples/CorePlotGallery/src/plots/SteppedScatterPlot.m index 861e3a1b7..94d41f5a2 100644 --- a/examples/CorePlotGallery/src/plots/SteppedScatterPlot.m +++ b/examples/CorePlotGallery/src/plots/SteppedScatterPlot.m @@ -15,11 +15,6 @@ @implementation SteppedScatterPlot @synthesize plotData; -+(void)load -{ - [super registerPlotItem:self]; -} - -(nonnull instancetype)init { if ((self = [super init])) { diff --git a/examples/CorePlotGallery/src/plots/VerticalBarChart.m b/examples/CorePlotGallery/src/plots/VerticalBarChart.m index 393cfcb39..419a1339b 100644 --- a/examples/CorePlotGallery/src/plots/VerticalBarChart.m +++ b/examples/CorePlotGallery/src/plots/VerticalBarChart.m @@ -17,11 +17,6 @@ @implementation VerticalBarChart @synthesize symbolTextAnnotation; -+(void)load -{ - [super registerPlotItem:self]; -} - -(nonnull instancetype)init { if ((self = [super init])) { diff --git a/examples/CorePlotGallery/src/shared/PlotGallery.h b/examples/CorePlotGallery/src/shared/PlotGallery.h index 0c6e22f2f..04e449273 100644 --- a/examples/CorePlotGallery/src/shared/PlotGallery.h +++ b/examples/CorePlotGallery/src/shared/PlotGallery.h @@ -13,8 +13,6 @@ +(nonnull PlotGallery *)sharedPlotGallery; --(void)addPlotItem:(nonnull PlotItem *)plotItem; - -(void)sortByTitle; -(nonnull PlotItem *)objectInSection:(NSUInteger)section atIndex:(NSUInteger)index; diff --git a/examples/CorePlotGallery/src/shared/PlotGallery.m b/examples/CorePlotGallery/src/shared/PlotGallery.m index d66225db8..ee8c88a2b 100644 --- a/examples/CorePlotGallery/src/shared/PlotGallery.m +++ b/examples/CorePlotGallery/src/shared/PlotGallery.m @@ -4,12 +4,17 @@ // #import "PlotGallery.h" +#import @interface PlotGallery() @property (nonatomic, readwrite, strong) NSMutableArray *plotItems; @property (nonatomic, readwrite, strong) NSCountedSet *plotSections; +NSArray *ClassGetSubclasses(Class parentClass); + +-(void)addPlotItem:(nonnull PlotItem *)plotItem; + @end #pragma mark - @@ -19,6 +24,55 @@ @implementation PlotGallery @synthesize plotItems; @synthesize plotSections; +// Code from https://stackoverflow.com/questions/7923586/objective-c-get-list-of-subclasses-from-superclass/23038932 +NSArray *ClassGetSubclasses(Class parentClass) +{ + int numClasses = objc_getClassList(NULL, 0); + + // According to the docs of objc_getClassList we should check + // if numClasses is bigger than 0. + if ( numClasses <= 0 ) { + return [NSArray array]; + } + + size_t memSize = sizeof(Class) * (size_t)numClasses; + Class *classes = (__unsafe_unretained Class *)malloc(memSize); + + if ((classes == NULL) && memSize ) { + return [NSArray array]; + } + + numClasses = objc_getClassList(classes, numClasses); + + NSMutableArray *result = [NSMutableArray new]; + + for ( NSInteger i = 0; i < numClasses; i++ ) { + Class superClass = classes[i]; + + // Don't add the parent class to list of sublcasses + if ( superClass == parentClass ) { + continue; + } + + // Using a do while loop, like pointed out in Cocoa with Love, + // can lead to EXC_I386_GPFLT, which stands for General + // Protection Fault and means we are doing something we + // shouldn't do. It's safer to use a regular while loop to + // check if superClass is valid. + while ( superClass && superClass != parentClass ) { + superClass = class_getSuperclass(superClass); + } + + if ( superClass ) { + [result addObject:classes[i]]; + } + } + + free(classes); + + return result; +} + static PlotGallery *sharedPlotGallery = nil; +(nonnull PlotGallery *)sharedPlotGallery @@ -51,6 +105,14 @@ -(nonnull instancetype)init sharedPlotGallery = self; plotItems = [[NSMutableArray alloc] init]; plotSections = [[NSCountedSet alloc] init]; + + for ( Class itemClass in ClassGetSubclasses([PlotItem class])) { + PlotItem *plotItem = [[itemClass alloc] init]; + + if ( plotItem ) { + [self addPlotItem:plotItem]; + } + } } } } @@ -65,6 +127,8 @@ -(nonnull id)copyWithZone:(nullable NSZone *__unused)zone -(void)addPlotItem:(nonnull PlotItem *)plotItem { + NSLog(@"addPlotItem for class %@", [plotItem class]); + [self.plotItems addObject:plotItem]; NSString *sectionName = plotItem.section; diff --git a/examples/CorePlotGallery/src/shared/PlotItem.h b/examples/CorePlotGallery/src/shared/PlotItem.h index eefd5e40d..32ad932d8 100644 --- a/examples/CorePlotGallery/src/shared/PlotItem.h +++ b/examples/CorePlotGallery/src/shared/PlotItem.h @@ -38,8 +38,6 @@ extern NSString *__nonnull const kFinancialPlots; @property (nonatomic, readonly) CGFloat titleSize; -+(void)registerPlotItem:(nonnull id)item; - -(void)renderInView:(nonnull PlotGalleryNativeView *)hostingView withTheme:(nullable CPTTheme *)theme animated:(BOOL)animated; -(nonnull CPTNativeImage *)image; #if TARGET_IPHONE_SIMULATOR || TARGET_OS_IPHONE diff --git a/examples/CorePlotGallery/src/shared/PlotItem.m b/examples/CorePlotGallery/src/shared/PlotItem.m index e9ee9da41..30ea4ef36 100644 --- a/examples/CorePlotGallery/src/shared/PlotItem.m +++ b/examples/CorePlotGallery/src/shared/PlotItem.m @@ -36,21 +36,6 @@ @implementation PlotItem @synthesize cachedImage; @dynamic titleSize; -+(void)registerPlotItem:(nonnull id)item -{ - NSLog(@"registerPlotItem for class %@", [item class]); - - Class itemClass = [item class]; - - if ( itemClass ) { - // There's no autorelease pool here yet... - PlotItem *plotItem = [[itemClass alloc] init]; - if ( plotItem ) { - [[PlotGallery sharedPlotGallery] addPlotItem:plotItem]; - } - } -} - -(nonnull instancetype)init { if ((self = [super init])) { From d0125ee4f77991d023e51b9f0b91c8c9f4c0160b Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 18 Sep 2022 08:31:43 -0400 Subject: [PATCH 098/245] Updated all framework and example app projects to recommended settings for Xcode 14. --- .../CPTTestApp-iPad.xcodeproj/project.pbxproj | 18 -- .../xcschemes/CPTTestApp-iPad.xcscheme | 2 +- .../Images.xcassets/Contents.json | 6 + .../LaunchImage.launchimage/Contents.json | 60 ------- .../project.pbxproj | 20 --- .../xcschemes/CPTTestApp-iPhone.xcscheme | 2 +- .../CPTTestApp.xcodeproj/project.pbxproj | 4 +- .../xcschemes/CPTTestApp.xcscheme | 2 +- .../Images.xcassets/Contents.json | 6 +- .../LaunchImage.launchimage/Contents.json | 158 ------------------ .../Plot_Gallery.xcodeproj/project.pbxproj | 26 +-- .../xcschemes/Plot Gallery-Mac.xcscheme | 2 +- .../xcschemes/Plot Gallery-iOS.xcscheme | 2 +- .../xcschemes/Plot Gallery-tvOS.xcscheme | 2 +- .../DatePlot.xcodeproj/project.pbxproj | 6 +- .../xcshareddata/xcschemes/DatePlot.xcscheme | 2 +- .../DropPlot.xcodeproj/project.pbxproj | 6 +- .../xcshareddata/xcschemes/DropPlot.xcscheme | 2 +- .../project.pbxproj | 6 +- .../xcschemes/minorTickFormatter.xcscheme | 2 +- .../RangePlot.xcodeproj/project.pbxproj | 6 +- .../xcshareddata/xcschemes/RangePlot.xcscheme | 2 +- framework/CorePlot.xcodeproj/project.pbxproj | 12 -- .../xcschemes/CorePlot Mac.xcscheme | 2 +- .../xcschemes/CorePlot iOS.xcscheme | 2 +- .../xcschemes/CorePlot tvOS.xcscheme | 2 +- .../xcschemes/Documentation-Mac.xcscheme | 2 +- .../xcschemes/Documentation-iOS.xcscheme | 2 +- .../xcschemes/Universal Library.xcscheme | 2 +- .../xcschemes/Universal XCFramework.xcscheme | 2 +- .../Universal iOS Framework.xcscheme | 2 +- .../Universal tvOS Framework.xcscheme | 2 +- .../xcschemes/Update SPM Files.xcscheme | 2 +- 33 files changed, 55 insertions(+), 319 deletions(-) create mode 100644 examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/Contents.json delete mode 100644 examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/LaunchImage.launchimage/Contents.json delete mode 100644 examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/LaunchImage.launchimage/Contents.json diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj index 2274447aa..7af62cb3c 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj @@ -401,14 +401,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CLANG_ENABLE_OBJC_ARC = YES; - CODE_SIGN_ENTITLEMENTS = "CPTTestApp-iPad/CPTTestApp-iPad.entitlements"; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=*]" = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; - CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; - DEVELOPMENT_TEAM = ""; - "ENABLE_HARDENED_RUNTIME[sdk=macosx*]" = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = CPTTestApp_iPad_Prefix.pch; @@ -416,8 +409,6 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = org.CorePlot.CPTTestAppiPad; PRODUCT_NAME = "CPTTestApp-iPad"; - PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; SUPPORTS_MACCATALYST = YES; }; name = Debug; @@ -430,22 +421,13 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CLANG_ENABLE_OBJC_ARC = YES; - CODE_SIGN_ENTITLEMENTS = "CPTTestApp-iPad/CPTTestApp-iPad.entitlements"; - CODE_SIGN_IDENTITY = "iPhone Distribution"; - "CODE_SIGN_IDENTITY[sdk=*]" = "iPhone Distribution"; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; - CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = YES; - DEVELOPMENT_TEAM = ""; - "ENABLE_HARDENED_RUNTIME[sdk=macosx*]" = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = CPTTestApp_iPad_Prefix.pch; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/CPTTestApp_iPad-Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = org.CorePlot.CPTTestAppiPad; PRODUCT_NAME = "CPTTestApp-iPad"; - PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; SUPPORTS_MACCATALYST = YES; VALIDATE_PRODUCT = YES; }; diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme index a60f9e7d4..6cde07714 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme @@ -1,6 +1,6 @@ Date: Sun, 18 Sep 2022 08:44:01 -0400 Subject: [PATCH 099/245] Updated all iOS example apps to use a single app icon asset. --- .../AppIcon.appiconset/Contents.json | 88 +---------- .../AppIcon.appiconset/Icon-72.png | Bin 11413 -> 0 bytes .../AppIcon.appiconset/Icon-72@2x.png | Bin 29158 -> 0 bytes .../AppIcon.appiconset/Icon-76.png | Bin 12189 -> 0 bytes .../AppIcon.appiconset/Icon-76@2x.png | Bin 31407 -> 0 bytes .../AppIcon.appiconset/Icon-Small-50.png | Bin 7883 -> 0 bytes .../AppIcon.appiconset/Icon-Small-50@2x.png | Bin 17339 -> 0 bytes .../AppIcon.appiconset/Icon-Small.png | Bin 5494 -> 0 bytes .../AppIcon.appiconset/Icon-Small@2x.png | Bin 9132 -> 0 bytes .../AppIcon.appiconset/Icon-Spotlight-40.png | Bin 6625 -> 0 bytes .../Icon-Spotlight-40@2x.png | Bin 13024 -> 0 bytes .../AppIcon.appiconset/Icon-iPadPro@2x.png | Bin 36384 -> 0 bytes .../AppIcon.appiconset/Contents.json | 74 +-------- .../AppIcon.appiconset/Icon-60@2x.png | Bin 22330 -> 0 bytes .../AppIcon.appiconset/Icon-60@3x.png | Bin 40141 -> 0 bytes .../AppIcon.appiconset/Icon-Small.png | Bin 5494 -> 0 bytes .../AppIcon.appiconset/Icon-Small@2x.png | Bin 9132 -> 0 bytes .../Icon-Spotlight-40@2x.png | Bin 13024 -> 0 bytes .../AppIcon.appiconset/Icon.png | Bin 8903 -> 0 bytes .../AppIcon.appiconset/Icon@2x.png | Bin 20789 -> 0 bytes .../Images.xcassets/Contents.json | 6 +- .../AppIcon.appiconset/Contents.json | 149 +----------------- .../AppIcon.appiconset/Icon-60@2x.png | Bin 16647 -> 0 bytes .../AppIcon.appiconset/Icon-60@3x.png | Bin 28964 -> 0 bytes .../AppIcon.appiconset/Icon-72.png | Bin 7922 -> 0 bytes .../AppIcon.appiconset/Icon-72@2x.png | Bin 22476 -> 0 bytes .../AppIcon.appiconset/Icon-76.png | Bin 8615 -> 0 bytes .../AppIcon.appiconset/Icon-76@2x.png | Bin 23223 -> 0 bytes .../AppIcon.appiconset/Icon-Small-50.png | Bin 4708 -> 0 bytes .../AppIcon.appiconset/Icon-Small-50@2x.png | Bin 12854 -> 0 bytes .../AppIcon.appiconset/Icon-Small.png | Bin 2377 -> 0 bytes .../AppIcon.appiconset/Icon-Small@2x.png | Bin 5962 -> 0 bytes .../AppIcon.appiconset/Icon-Small@3x.png | Bin 10124 -> 0 bytes .../AppIcon.appiconset/Icon-Spotlight-40.png | Bin 3546 -> 0 bytes .../Icon-Spotlight-40@2x.png | Bin 9299 -> 0 bytes .../Icon-Spotlight-40@3x.png | Bin 15913 -> 0 bytes .../AppIcon.appiconset/Icon-iPadPro@2x.png | Bin 27492 -> 0 bytes .../AppIcon.appiconset/Icon.png | Bin 5667 -> 0 bytes .../AppIcon.appiconset/Icon@2x.png | Bin 15670 -> 0 bytes .../Assets.xcassets/Contents.json | 6 +- .../LaunchImage.launchimage/Contents.json | 23 --- .../LaunchImage.launchimage/LaunchImage.png | Bin 37274 -> 0 bytes 42 files changed, 24 insertions(+), 322 deletions(-) delete mode 100644 examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-72.png delete mode 100644 examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-72@2x.png delete mode 100644 examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-76.png delete mode 100644 examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png delete mode 100644 examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-Small-50.png delete mode 100644 examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png delete mode 100644 examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-Small.png delete mode 100644 examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png delete mode 100644 examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png delete mode 100644 examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png delete mode 100644 examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-iPadPro@2x.png delete mode 100644 examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png delete mode 100644 examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png delete mode 100644 examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon-Small.png delete mode 100644 examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png delete mode 100644 examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png delete mode 100644 examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon.png delete mode 100644 examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon@2x.png delete mode 100644 examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png delete mode 100644 examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png delete mode 100644 examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-72.png delete mode 100644 examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-72@2x.png delete mode 100644 examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-76.png delete mode 100644 examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png delete mode 100644 examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Small-50.png delete mode 100644 examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png delete mode 100644 examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Small.png delete mode 100644 examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png delete mode 100644 examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png delete mode 100644 examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png delete mode 100644 examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png delete mode 100644 examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png delete mode 100644 examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-iPadPro@2x.png delete mode 100644 examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon.png delete mode 100644 examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon@2x.png delete mode 100644 examples/CorePlotGallery/Plot Gallery-tvOS/Assets.xcassets/LaunchImage.launchimage/Contents.json delete mode 100644 examples/CorePlotGallery/Plot Gallery-tvOS/Assets.xcassets/LaunchImage.launchimage/LaunchImage.png diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Contents.json b/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Contents.json index 80abb1d7e..4217bf80b 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Contents.json @@ -1,90 +1,14 @@ { "images" : [ { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-Small.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-Small@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-Spotlight-40.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-Spotlight-40@2x.png", - "scale" : "2x" - }, - { - "size" : "50x50", - "idiom" : "ipad", - "filename" : "Icon-Small-50.png", - "scale" : "1x" - }, - { - "size" : "50x50", - "idiom" : "ipad", - "filename" : "Icon-Small-50@2x.png", - "scale" : "2x" - }, - { - "size" : "72x72", - "idiom" : "ipad", - "filename" : "Icon-72.png", - "scale" : "1x" - }, - { - "size" : "72x72", - "idiom" : "ipad", - "filename" : "Icon-72@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-76.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-iPadPro@2x.png", - "scale" : "2x" - }, - { - "size" : "1024x1024", - "idiom" : "ios-marketing", "filename" : "iTunesArtwork.png", - "scale" : "1x" + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-72.png b/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-72.png deleted file mode 100644 index ddf49ea5ab229259adafb19f907eacd148dad956..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11413 zcmV;GENat4Tx09b{UmkBskU)R9*opH_c+%;s%<(j8Vm(24#RHl2)T)CzYp(qV96OpNu z29k(MC8RQhr2Zl)rIdNdknddT|Nox%{odz&zWqGsp5I-2owe85Ywfew27pb_D=aJ+ z4gd%VjR?0hCgNON-Ef#uzySCG6Tktimk%{e-^RuQ{KvLD1YorL0G?*+KkNOUjhRHI z`Tzivg_uO5`h-Ay4gk20Pgr;a0Ej+FE*2dTM&m_@Im00b0YK8x*l&jgY3#kjgl!!M zI|GOfY4*K$*n!4=J4~W+l#d@|6A4{t_E1tlC;$v6AlC8m_k#LapF%paAt4kR)5ewB z@pHQ|7*K*K;W!He!~f^Y{Sf#-HsiYOQ4sT4ek9Q4kU*<+W(fvgavQM zn8xX05k#6kFT}-U>b^fZw`2VsoPR&t5guvh2(dWCgFzH?yWeB2lE{X?eS;%IgRLxf ze1>xdM3~b2=Y&`W7y&O34*UQa;DH4&0EWMRagZDb5e4cc11hBVaa-??mecnCfPZ-k z4}7=nMQuM51STO4@d!u`hivU=bO9eo<^@9kNC-8ADZ<9z{j?E-w@3XWG5B;y*IU94I}Y z7++8Di42eWowG1lHvs?b|IWJm-4Kui(8mXM9KnyggjT@Zr8i=D$+(|snuWr;%AUf> z!F8TToVSKwS)fs9uW%dASfoSDMEr?_kz}j1hD@!j6#l$C6CqaNlajS^y(*ttwECc? zyw>r(Z*^pKWAq*o84PR;&+Y3m#+n$I#+ltT|6s{xrE48zlWY6H?vn%7k>F(S9O;th zddF?Zec=GxL3s~zPk*lz?-HN8q<-?WAIe`iKsC@Zh#VXjk{Mb>xf}N4&}jG!bt{r7 zN+4P?M)9y#tU;Vvy!8>=1p7q$qqa$w$;K&q$JCDFQ*mkRClDv*PmZNOKXvDH>6x^% zp&9n))H3-qH?l^vALLxfjmvY*S1DjCm@e!*Use=bY=1$f1YYu{^ybCmWp3qi74V9o z$}3gzm#i-1F3(rDUCFuXQ=@bZajpM)*$v7~?OJT@aNVU_)Ox+!jJJmyD({3fYBgb+ z`tM$7_G?jW*|^tvKl6cGt61yzhj$(&JT`7)X?y*owB4^mu4Ae5-qYkRlV{A&2A&tZ zIM6N9{i)|lZ*ZS{-~7vl{^$YqfwjSwSMfu8hc;i|8;*aY^=AET^ItI|Y9q_9aE zf#UlP1Dd%3;3@Ji@aVhwlAw`&it=iKmz@`1f}vaaRU zxq9+#%?8$nPj{Ld&o%kp)o$i!{@U{JUjBW`1LM|Rt*a0FA6N z*3+!6@MreVRbKGE*ytYb>FmAHm-jNUKVZONQ16x8kl<_V>-FL3H)C)6|LPcNepfqs zX{`8t_IUb-q=}f1luy2s`#;-$F`Cl+D*H`%nt6KT`)ka#h**P z%atopt42RLf4*P4vL3dfwz0YS=vT^?!FK!+a9M;d(h(JcPREqd-KFnk_{<1r;$g5G_(nu}S9+w8WIFq7OTr7f*2 zBe{oHmR@!dKPJ~Hf1Qx2KvlF?A}BK`PpGu0o>L>Kt7~91hBPa+4(-*^#%TBH6zY2E zN$bt%HxT0t^bJvl&-P^)*&Fj1kCm}4*LKvd%0AdZ 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
  • 0opKhmF!Jda_mCBa))C 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

    m?*YtjuO2vWD|5x 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%0AdZ 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 diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png b/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png deleted file mode 100644 index e8dded8792b407bf0a00c613da709a60819b6ace..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31407 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 diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-Small-50.png b/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-Small-50.png deleted file mode 100644 index 9c85f21e2c098b11738a60df4c39db61e9999639..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7883 zcmV;+9yH;JP)4Tx09b{UmkBskU)R9*opH_c+%;s%<(j8Vm(24#RHl2)T)CzYp(qV96OpNu z29k(MC8RQhr2Zl)rIdNdknddT|Nox%{odz&zWqGsp5I-2owe85Ywfew27pb_D=aJ+ z4gd%VjR?0hCgNON-Ef#uzySCG6Tktimk%{e-^RuQ{KvLD1YorL0G?*+KkNOUjhRHI z`Tzivg_uO5`h-Ay4gk20Pgr;a0Ej+FE*2dTM&m_@Im00b0YK8x*l&jgY3#kjgl!!M zI|GOfY4*K$*n!4=J4~W+l#d@|6A4{t_E1tlC;$v6AlC8m_k#LapF%paAt4kR)5ewB z@pHQ|7*K*K;W!He!~f^Y{Sf#-HsiYOQ4sT4ek9Q4kU*<+W(fvgavQM zn8xX05k#6kFT}-U>b^fZw`2VsoPR&t5guvh2(dWCgFzH?yWeB2lE{X?eS;%IgRLxf ze1>xdM3~b2=Y&`W7y&O34*UQa;DH4&0EWMRagZDb5e4cc11hBVaa-??mecnCfPZ-k z4}7=nMQuM51STO4@d!u`hivU=bO9eo<^@9kNC-8ADZ<9z{j?E-w@3XWG5B;y*IU94I}Y z7++8Di42eWowG1lHvs?b|IWJm-4Kui(8mXM9KnyggjT@Zr8i=D$+(|snuWr;%AUf> z!F8TToVSKwS)fs9uW%dASfoSDMEr?_kz}j1hD@!j6#l$C6CqaNlajS^y(*ttwECc? zyw>r(Z*^pKWAq*o84PR;&+Y3m#+n$I#+ltT|6s{xrE48zlWY6H?vn%7k>F(S9O;th zddF?Zec=GxL3s~zPk*lz?-HN8q<-?WAIe`iKsC@Zh#VXjk{Mb>xf}N4&}jG!bt{r7 zN+4P?M)9y#tU;Vvy!8>=1p7q$qqa$w$;K&q$JCDFQ*mkRClDv*PmZNOKXvDH>6x^% zp&9n))H3-qH?l^vALLxfjmvY*S1DjCm@e!*Use=bY=1$f1YYu{^ybCmWp3qi74V9o z$}3gzm#i-1F3(rDUCFuXQ=@bZajpM)*$v7~?OJT@aNVU_)Ox+!jJJmyD({3fYBgb+ z`tM$7_G?jW*|^tvKl6cGt61yzhj$(&JT`7)X?y*owB4^mu4Ae5-qYkRlV{A&2A&tZ zIM6N9{i)|lZ*ZS{-~7vl{^$YqfwjSwSMfu8hc;i|8;*aY^=AET^ItI|Y9q_9aE zf#UlP1Dd%3;3@Ji@aVhwlAw`&it=iKmz@`1f}vaaRU zxq9+#%?8$nPj{Ld&o%kp)o$i!{@U{JUjBW`1LM|Rt*a0FA6N z*3+!6@MreVRbKGE*ytYb>FmAHm-jNUKVZONQ16x8kl<_V>-FL3H)C)6|LPcNepfqs zX{`8t_IUb-q=}f1luy2s`#;-$F`Cl+D*H`%nt6KT`)ka#h**P z%atopt42RLf4*P4vL3dfwz0YS=vT^?!FK!+a9M;d(h(JcPREqd-KFnk_{<1r;$g5G_(nu}S9+w8WIFq7OTr7f*2 zBe{oHmR@!dKPJ~Hf1Qx2KvlF?A}BK`PpGu0o>L>Kt7~91hBPa+4(-*^#%TBH6zY2E zN$bt%HxT0t^bJvl&-P^)*&Fj1kCm}4*LKvd%0AdZ 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%0AdZ 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%0AdZ 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 diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png b/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png deleted file mode 100644 index 7f872ef97b0bb37c1f9e2c4c4c0814f80b84b74c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9132 zcmV;dBU9XoP)4Tx09b{UmkBskU)R9*opH_c+%;s%<(j8Vm(24#RHl2)T)CzYp(qV96OpNu z29k(MC8RQhr2Zl)rIdNdknddT|Nox%{odz&zWqGsp5I-2owe85Ywfew27pb_D=aJ+ z4gd%VjR?0hCgNON-Ef#uzySCG6Tktimk%{e-^RuQ{KvLD1YorL0G?*+KkNOUjhRHI z`Tzivg_uO5`h-Ay4gk20Pgr;a0Ej+FE*2dTM&m_@Im00b0YK8x*l&jgY3#kjgl!!M zI|GOfY4*K$*n!4=J4~W+l#d@|6A4{t_E1tlC;$v6AlC8m_k#LapF%paAt4kR)5ewB z@pHQ|7*K*K;W!He!~f^Y{Sf#-HsiYOQ4sT4ek9Q4kU*<+W(fvgavQM zn8xX05k#6kFT}-U>b^fZw`2VsoPR&t5guvh2(dWCgFzH?yWeB2lE{X?eS;%IgRLxf ze1>xdM3~b2=Y&`W7y&O34*UQa;DH4&0EWMRagZDb5e4cc11hBVaa-??mecnCfPZ-k z4}7=nMQuM51STO4@d!u`hivU=bO9eo<^@9kNC-8ADZ<9z{j?E-w@3XWG5B;y*IU94I}Y z7++8Di42eWowG1lHvs?b|IWJm-4Kui(8mXM9KnyggjT@Zr8i=D$+(|snuWr;%AUf> z!F8TToVSKwS)fs9uW%dASfoSDMEr?_kz}j1hD@!j6#l$C6CqaNlajS^y(*ttwECc? zyw>r(Z*^pKWAq*o84PR;&+Y3m#+n$I#+ltT|6s{xrE48zlWY6H?vn%7k>F(S9O;th zddF?Zec=GxL3s~zPk*lz?-HN8q<-?WAIe`iKsC@Zh#VXjk{Mb>xf}N4&}jG!bt{r7 zN+4P?M)9y#tU;Vvy!8>=1p7q$qqa$w$;K&q$JCDFQ*mkRClDv*PmZNOKXvDH>6x^% zp&9n))H3-qH?l^vALLxfjmvY*S1DjCm@e!*Use=bY=1$f1YYu{^ybCmWp3qi74V9o z$}3gzm#i-1F3(rDUCFuXQ=@bZajpM)*$v7~?OJT@aNVU_)Ox+!jJJmyD({3fYBgb+ z`tM$7_G?jW*|^tvKl6cGt61yzhj$(&JT`7)X?y*owB4^mu4Ae5-qYkRlV{A&2A&tZ zIM6N9{i)|lZ*ZS{-~7vl{^$YqfwjSwSMfu8hc;i|8;*aY^=AET^ItI|Y9q_9aE zf#UlP1Dd%3;3@Ji@aVhwlAw`&it=iKmz@`1f}vaaRU zxq9+#%?8$nPj{Ld&o%kp)o$i!{@U{JUjBW`1LM|Rt*a0FA6N z*3+!6@MreVRbKGE*ytYb>FmAHm-jNUKVZONQ16x8kl<_V>-FL3H)C)6|LPcNepfqs zX{`8t_IUb-q=}f1luy2s`#;-$F`Cl+D*H`%nt6KT`)ka#h**P z%atopt42RLf4*P4vL3dfwz0YS=vT^?!FK!+a9M;d(h(JcPREqd-KFnk_{<1r;$g5G_(nu}S9+w8WIFq7OTr7f*2 zBe{oHmR@!dKPJ~Hf1Qx2KvlF?A}BK`PpGu0o>L>Kt7~91hBPa+4(-*^#%TBH6zY2E zN$bt%HxT0t^bJvl&-P^)*&Fj1kCm}4*LKvd%0AdZ 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%0AdZ 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 diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png b/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png deleted file mode 100644 index 87672586c4b5f409837d443bad898626600e9ce4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13024 zcmV<6G9S%}P)4Tx09b{UmkBskU)R9*opH_c+%;s%<(j8Vm(24#RHl2)T)CzYp(qV96OpNu z29k(MC8RQhr2Zl)rIdNdknddT|Nox%{odz&zWqGsp5I-2owe85Ywfew27pb_D=aJ+ z4gd%VjR?0hCgNON-Ef#uzySCG6Tktimk%{e-^RuQ{KvLD1YorL0G?*+KkNOUjhRHI z`Tzivg_uO5`h-Ay4gk20Pgr;a0Ej+FE*2dTM&m_@Im00b0YK8x*l&jgY3#kjgl!!M zI|GOfY4*K$*n!4=J4~W+l#d@|6A4{t_E1tlC;$v6AlC8m_k#LapF%paAt4kR)5ewB z@pHQ|7*K*K;W!He!~f^Y{Sf#-HsiYOQ4sT4ek9Q4kU*<+W(fvgavQM zn8xX05k#6kFT}-U>b^fZw`2VsoPR&t5guvh2(dWCgFzH?yWeB2lE{X?eS;%IgRLxf ze1>xdM3~b2=Y&`W7y&O34*UQa;DH4&0EWMRagZDb5e4cc11hBVaa-??mecnCfPZ-k z4}7=nMQuM51STO4@d!u`hivU=bO9eo<^@9kNC-8ADZ<9z{j?E-w@3XWG5B;y*IU94I}Y z7++8Di42eWowG1lHvs?b|IWJm-4Kui(8mXM9KnyggjT@Zr8i=D$+(|snuWr;%AUf> z!F8TToVSKwS)fs9uW%dASfoSDMEr?_kz}j1hD@!j6#l$C6CqaNlajS^y(*ttwECc? zyw>r(Z*^pKWAq*o84PR;&+Y3m#+n$I#+ltT|6s{xrE48zlWY6H?vn%7k>F(S9O;th zddF?Zec=GxL3s~zPk*lz?-HN8q<-?WAIe`iKsC@Zh#VXjk{Mb>xf}N4&}jG!bt{r7 zN+4P?M)9y#tU;Vvy!8>=1p7q$qqa$w$;K&q$JCDFQ*mkRClDv*PmZNOKXvDH>6x^% zp&9n))H3-qH?l^vALLxfjmvY*S1DjCm@e!*Use=bY=1$f1YYu{^ybCmWp3qi74V9o z$}3gzm#i-1F3(rDUCFuXQ=@bZajpM)*$v7~?OJT@aNVU_)Ox+!jJJmyD({3fYBgb+ z`tM$7_G?jW*|^tvKl6cGt61yzhj$(&JT`7)X?y*owB4^mu4Ae5-qYkRlV{A&2A&tZ zIM6N9{i)|lZ*ZS{-~7vl{^$YqfwjSwSMfu8hc;i|8;*aY^=AET^ItI|Y9q_9aE zf#UlP1Dd%3;3@Ji@aVhwlAw`&it=iKmz@`1f}vaaRU zxq9+#%?8$nPj{Ld&o%kp)o$i!{@U{JUjBW`1LM|Rt*a0FA6N z*3+!6@MreVRbKGE*ytYb>FmAHm-jNUKVZONQ16x8kl<_V>-FL3H)C)6|LPcNepfqs zX{`8t_IUb-q=}f1luy2s`#;-$F`Cl+D*H`%nt6KT`)ka#h**P z%atopt42RLf4*P4vL3dfwz0YS=vT^?!FK!+a9M;d(h(JcPREqd-KFnk_{<1r;$g5G_(nu}S9+w8WIFq7OTr7f*2 zBe{oHmR@!dKPJ~Hf1Qx2KvlF?A}BK`PpGu0o>L>Kt7~91hBPa+4(-*^#%TBH6zY2E zN$bt%HxT0t^bJvl&-P^)*&Fj1kCm}4*LKvd%0AdZ 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 Bxr+b* diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon-Small.png b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon-Small.png deleted file mode 100644 index 5104b1d945eb777c98e2eeb404f76044063c2de2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5494 zcmV-+6^ZJJP)4Tx09b{UmkBskU)R9*opH_c+%;s%<(j8Vm(24#RHl2)T)CzYp(qV96OpNu z29k(MC8RQhr2Zl)rIdNdknddT|Nox%{odz&zWqGsp5I-2owe85Ywfew27pb_D=aJ+ z4gd%VjR?0hCgNON-Ef#uzySCG6Tktimk%{e-^RuQ{KvLD1YorL0G?*+KkNOUjhRHI z`Tzivg_uO5`h-Ay4gk20Pgr;a0Ej+FE*2dTM&m_@Im00b0YK8x*l&jgY3#kjgl!!M zI|GOfY4*K$*n!4=J4~W+l#d@|6A4{t_E1tlC;$v6AlC8m_k#LapF%paAt4kR)5ewB z@pHQ|7*K*K;W!He!~f^Y{Sf#-HsiYOQ4sT4ek9Q4kU*<+W(fvgavQM zn8xX05k#6kFT}-U>b^fZw`2VsoPR&t5guvh2(dWCgFzH?yWeB2lE{X?eS;%IgRLxf ze1>xdM3~b2=Y&`W7y&O34*UQa;DH4&0EWMRagZDb5e4cc11hBVaa-??mecnCfPZ-k z4}7=nMQuM51STO4@d!u`hivU=bO9eo<^@9kNC-8ADZ<9z{j?E-w@3XWG5B;y*IU94I}Y z7++8Di42eWowG1lHvs?b|IWJm-4Kui(8mXM9KnyggjT@Zr8i=D$+(|snuWr;%AUf> z!F8TToVSKwS)fs9uW%dASfoSDMEr?_kz}j1hD@!j6#l$C6CqaNlajS^y(*ttwECc? zyw>r(Z*^pKWAq*o84PR;&+Y3m#+n$I#+ltT|6s{xrE48zlWY6H?vn%7k>F(S9O;th zddF?Zec=GxL3s~zPk*lz?-HN8q<-?WAIe`iKsC@Zh#VXjk{Mb>xf}N4&}jG!bt{r7 zN+4P?M)9y#tU;Vvy!8>=1p7q$qqa$w$;K&q$JCDFQ*mkRClDv*PmZNOKXvDH>6x^% zp&9n))H3-qH?l^vALLxfjmvY*S1DjCm@e!*Use=bY=1$f1YYu{^ybCmWp3qi74V9o z$}3gzm#i-1F3(rDUCFuXQ=@bZajpM)*$v7~?OJT@aNVU_)Ox+!jJJmyD({3fYBgb+ z`tM$7_G?jW*|^tvKl6cGt61yzhj$(&JT`7)X?y*owB4^mu4Ae5-qYkRlV{A&2A&tZ zIM6N9{i)|lZ*ZS{-~7vl{^$YqfwjSwSMfu8hc;i|8;*aY^=AET^ItI|Y9q_9aE zf#UlP1Dd%3;3@Ji@aVhwlAw`&it=iKmz@`1f}vaaRU zxq9+#%?8$nPj{Ld&o%kp)o$i!{@U{JUjBW`1LM|Rt*a0FA6N z*3+!6@MreVRbKGE*ytYb>FmAHm-jNUKVZONQ16x8kl<_V>-FL3H)C)6|LPcNepfqs zX{`8t_IUb-q=}f1luy2s`#;-$F`Cl+D*H`%nt6KT`)ka#h**P z%atopt42RLf4*P4vL3dfwz0YS=vT^?!FK!+a9M;d(h(JcPREqd-KFnk_{<1r;$g5G_(nu}S9+w8WIFq7OTr7f*2 zBe{oHmR@!dKPJ~Hf1Qx2KvlF?A}BK`PpGu0o>L>Kt7~91hBPa+4(-*^#%TBH6zY2E zN$bt%HxT0t^bJvl&-P^)*&Fj1kCm}4*LKvd%0AdZ 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 diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png deleted file mode 100644 index 7f872ef97b0bb37c1f9e2c4c4c0814f80b84b74c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9132 zcmV;dBU9XoP)4Tx09b{UmkBskU)R9*opH_c+%;s%<(j8Vm(24#RHl2)T)CzYp(qV96OpNu z29k(MC8RQhr2Zl)rIdNdknddT|Nox%{odz&zWqGsp5I-2owe85Ywfew27pb_D=aJ+ z4gd%VjR?0hCgNON-Ef#uzySCG6Tktimk%{e-^RuQ{KvLD1YorL0G?*+KkNOUjhRHI z`Tzivg_uO5`h-Ay4gk20Pgr;a0Ej+FE*2dTM&m_@Im00b0YK8x*l&jgY3#kjgl!!M zI|GOfY4*K$*n!4=J4~W+l#d@|6A4{t_E1tlC;$v6AlC8m_k#LapF%paAt4kR)5ewB z@pHQ|7*K*K;W!He!~f^Y{Sf#-HsiYOQ4sT4ek9Q4kU*<+W(fvgavQM zn8xX05k#6kFT}-U>b^fZw`2VsoPR&t5guvh2(dWCgFzH?yWeB2lE{X?eS;%IgRLxf ze1>xdM3~b2=Y&`W7y&O34*UQa;DH4&0EWMRagZDb5e4cc11hBVaa-??mecnCfPZ-k z4}7=nMQuM51STO4@d!u`hivU=bO9eo<^@9kNC-8ADZ<9z{j?E-w@3XWG5B;y*IU94I}Y z7++8Di42eWowG1lHvs?b|IWJm-4Kui(8mXM9KnyggjT@Zr8i=D$+(|snuWr;%AUf> z!F8TToVSKwS)fs9uW%dASfoSDMEr?_kz}j1hD@!j6#l$C6CqaNlajS^y(*ttwECc? zyw>r(Z*^pKWAq*o84PR;&+Y3m#+n$I#+ltT|6s{xrE48zlWY6H?vn%7k>F(S9O;th zddF?Zec=GxL3s~zPk*lz?-HN8q<-?WAIe`iKsC@Zh#VXjk{Mb>xf}N4&}jG!bt{r7 zN+4P?M)9y#tU;Vvy!8>=1p7q$qqa$w$;K&q$JCDFQ*mkRClDv*PmZNOKXvDH>6x^% zp&9n))H3-qH?l^vALLxfjmvY*S1DjCm@e!*Use=bY=1$f1YYu{^ybCmWp3qi74V9o z$}3gzm#i-1F3(rDUCFuXQ=@bZajpM)*$v7~?OJT@aNVU_)Ox+!jJJmyD({3fYBgb+ z`tM$7_G?jW*|^tvKl6cGt61yzhj$(&JT`7)X?y*owB4^mu4Ae5-qYkRlV{A&2A&tZ zIM6N9{i)|lZ*ZS{-~7vl{^$YqfwjSwSMfu8hc;i|8;*aY^=AET^ItI|Y9q_9aE zf#UlP1Dd%3;3@Ji@aVhwlAw`&it=iKmz@`1f}vaaRU zxq9+#%?8$nPj{Ld&o%kp)o$i!{@U{JUjBW`1LM|Rt*a0FA6N z*3+!6@MreVRbKGE*ytYb>FmAHm-jNUKVZONQ16x8kl<_V>-FL3H)C)6|LPcNepfqs zX{`8t_IUb-q=}f1luy2s`#;-$F`Cl+D*H`%nt6KT`)ka#h**P z%atopt42RLf4*P4vL3dfwz0YS=vT^?!FK!+a9M;d(h(JcPREqd-KFnk_{<1r;$g5G_(nu}S9+w8WIFq7OTr7f*2 zBe{oHmR@!dKPJ~Hf1Qx2KvlF?A}BK`PpGu0o>L>Kt7~91hBPa+4(-*^#%TBH6zY2E zN$bt%HxT0t^bJvl&-P^)*&Fj1kCm}4*LKvd%0AdZ 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%0AdZ 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%0AdZ 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 V5RrN^sPq5;002ovPDHLkV1jeQYBc}= diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon@2x.png b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon@2x.png deleted file mode 100644 index 2e49f1b076f33777df8b23a41cf9cd1c1cd786bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20789 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 diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/Contents.json b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/Contents.json index da4a164c9..73c00596a 100644 --- a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/Contents.json +++ b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/Contents.json @@ -1,6 +1,6 @@ { "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Contents.json b/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Contents.json index b3e167fda..4217bf80b 100644 --- a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Contents.json @@ -1,151 +1,14 @@ { "images" : [ { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-Small.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-Small@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-Small@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-Spotlight-40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-Spotlight-40@3x.png", - "scale" : "3x" - }, - { - "size" : "57x57", - "idiom" : "iphone", - "filename" : "Icon.png", - "scale" : "1x" - }, - { - "size" : "57x57", - "idiom" : "iphone", - "filename" : "Icon@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-60@3x.png", - "scale" : "3x" - }, - { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-Spotlight-40.png", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "2x" - }, - { - "size" : "50x50", - "idiom" : "ipad", - "filename" : "Icon-Small-50.png", - "scale" : "1x" - }, - { - "size" : "50x50", - "idiom" : "ipad", - "filename" : "Icon-Small-50@2x.png", - "scale" : "2x" - }, - { - "size" : "72x72", - "idiom" : "ipad", - "filename" : "Icon-72.png", - "scale" : "1x" - }, - { - "size" : "72x72", - "idiom" : "ipad", - "filename" : "Icon-72@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-76.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-iPadPro@2x.png", - "scale" : "2x" - }, - { - "size" : "1024x1024", - "idiom" : "ios-marketing", "filename" : "iTunesArtwork.png", - "scale" : "1x" + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png b/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png deleted file mode 100644 index 86b252df7cd6135e4c66f0f101caf0e5f8c1aa73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16647 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 P00000NkvXXu0mjflJR4+ diff --git a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-72.png b/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-72.png deleted file mode 100644 index 4b00fb7c66fbcf785cfcc74a0f332ff476e8aa14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7922 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 diff --git a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-72@2x.png b/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-72@2x.png deleted file mode 100644 index 6356abb7c78b15b1cc4d614e4237514b0b4da554..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22476 zcmV)DK*7I>P)4Tx062|}luK*WP!z}i8B;1+1fkYiM52NeX-is*D57?zFUHn!m_D>ckeSS# znb=GwCYin{F1m4P^$UpFg$qBxEL^y<8>K?6Zc1@mMJX1#kusi}WF{%L=!GP|dmjID zZgO*hnv+Sx&_WWB*KIS=ACc~ijZ3xbID`|ZM;lHj70U?6}H0(&CqHj$O^;YcnlQ-hTO~i?b!T^tHpxmz6-0*Fe1#LFh9rO5;SxoS{XDDXT z(4752y@lRk3>p|z=yca1A%T8G&9W{Ltd4i%Zu{&g{ES&@0mC6smk)>P15C+E4rT7>&ewusBW0N z8nR@~SJz|(It_G}(HEM0C0>I)ifsp0$pV#Hk#dwKoJy09&!T%cP;I}rN3lzDZyNnt zt77TyO5M`ju6I@VYgMees@-!xE||~6Q)0Uq6)%aGA&J+;F7cY!L$fR5U^QceR8&kk zN*0oorDKM?#;$MX#=>UPHsA2w1!KlkvpHJ|(`mt^sIIiNNF8!}C&14h_qW(eIA@B` zu7r6JC%ykn5Iz7_=0b-%tD}x;*30EB z+WWOnft@Gi^6wYr^3F@rUjyE1e*o@J^!6a77vTT^KmbWZK~#7F?Y()JUCCA8dGCGq zt+}VRl1gi7D=no`?Y67R#u%3uY|}Ovf6#o>Y(ql>?awd+OwS+F)6>J((+o6AcLQw( zW}s;{17oh@4ZY(nM^9py_PowE8^h$Y6Gk394g`|;b zwrRW;Vfo(>nU>OZO*6M}nr#<-I@*^kjkFBOm4>^bHVJ?vTf1~wY1q<(41%E9Yy$X7 zF)%PNGBT3QX44tIL17d@zdA@Noh

    gjrCkfT7Pl^ZS9C3IeeoDe#xMfOR8p@R zg|7mAb3#n2E!$@4B335rv(hY<)%wILq-I%1Jdy~oB6Nw=6;&D~=9*3=$zqgGU$S%- zRSTGOUXAvWS)S>nG^|Y0R|H5529}`Iy+E3ag)JEv3tOOztQT(ydV%XCUW*L8hO}V4 zrKB;?_a#=mrCf{55~P`QtvbC_~0<0gt%yK&}kzy<_1xQ<~Y$f2@MU%#KdGmBq zFI!Rxitpl?Cbl$bq=hw=?3PRiytNoA8CT8HOQuQiw+t=D7Mcc>Os{EfUAZh-nkLQ1 z!cY>F%)%KqIPe=RGuav-jRc!vE#P{{Hf-2Hb{2Zq6brKJp;5BF;$fIgn>HOgc5HTb z_MUt0sZ=Uq7*ZWpn(J_0C#kFAP_9)jMH7_OT4a`+5?qta(x(9gK$&b%ts2Anij~f$ za2HvZ1f;Tca{vAJU$}7LnP;By{Z0|Rtoky%Q8JYWo3WA2j?K1h+a@O`+3e^Ntcz_| zExJ*aGzvUC;;+gz)9m`(mN0oQZA*qggDw^Cn$747}2 zI`~r=`ct`FX19&*H9bAuXf!|qW3w-_E^B3nKVIa`Z+i3a@Gu1}EiLudk&4s*pzKXr zi|smidKe6o-THOt(n;F=*U|!#ktC^2=lM%7lCZKSu6nr5Z2X6eOS zjLju%+X1BFRS{g#7tI`+`T2RSw0&rmrk!ckFG*>JtI|>tC0mOa4W2xG3Y{!3FXL2F z`2>Xjo;`bzjn;GJ$`vgRRs>C5M*wL0rh;6xm)KQgItnS~J$m#gdbxc0vT6#XvQ{CK zK91tB6fS;y*}2(SnO@mc+j#u8cihy}k z0Pu*U8Np}(37}chSLI`q(#2UaQqyD_wOJq|b$)XG^!_vcqCc`Q>=gQxwRP*(fx-%*>1x6@VlyMfodz8U|y@G*#&>6QZ;aqJ*wt2|ggZxaDj4>YcUbWHURLjWbE( zP%^F;FJ6pCoN!KtH$~E__V3@nWy=;CJp;V9dzC~vL#DOp6;GLDFgQfC*7WQ^(`=pu zh@A_w7nWw1Tu1)dfLei7Ab{A9XTE)|G+V+k=H_xOH#mFb?7+(VE@bl;a&DM1a=UjXT-rZc95F4OdRCXKufF58^7G4n z&5vDEYV6diwb$SMy7!u!X(S^D^j5RL+Wxrdr;L@GvbALGGUXQnr9mT9hjEvBVX*Wa zwKSQ@BTcihr&T&zZ0%_6+qrK`xFwTKT8VPQPX_zLU^FP4D>&x92;;@n($qxl($d7D zn@Oyg5DQb0grW%mR#YX>9^cvgO=mNClWNG_TR*$fSg9PTmd+0>-(N1CDr9G}aZc2S zncwo3x4iJe3k!=2!$ZSIjvV>aZGV+H?>p#9^ozl~>hWr3+8ugsDDsWjm3!MN?O5km zC6R0BGA zR&8)wN@eA?+{OEs-I^PhV`sz}-Z`>iWxRR0iLS-b8Nue>HSfil=H{j&`WHF9hF3jO zpZ>n-UH``p+A&sCyk5z>VdI8&=CQ#d^7xb92>!+DvuUuVx*(7ak%I{d&up z+(cIT+^Rli3t1EJTHf6I=Hsjr4upks`Ph>>(^Km^8@0Xl+|_Ju+E-+n1$9%GNDs4( zG)=HROua6D&lR`s<}W8D_N8|tr?s&qj;H3L`lap5XM)qg6V1Rg14Qgb`6wI?Ggotr zZS`&S{26getu3wko<{C+K7TRq)u~U?+O!BHXOVE=;DHUBHcn4XGrvn4jNT7{af$fY zlIMH=>g>VrdrlXhEjk#W<&=-E+%&i4=AoNq@lo|o-}(B&rp4CIR&A_) z>BuE-CF9S_yiSM>eUuL?$18)+52{<}TmLkYyp-#NarH=zT6s&J+jI(-60ZW2#?FQ` z;cQfVy@+43dC7={$jhpk_V-2%7CE*3^){Hatg1|(|m9B=lax$L=Yekzw+%&K^aWadYxOo*s&F7TE;sUSKj z`>oBb#=*wG3j^o@Z3M-DhD(!m7o6dPBe%cj_S<(KJ72umc%mK;ME;7OznW8nrG*Kr z(aiCgno}>F&C?bU$)+YfjO98bMC10lm-Vvqe!RL(;eVRjn)7d89C*4U&WG-9{u+fw zC9cfIbB$aRcjq=-`a!0gp(|J#0q_{1L+Z-CmE2s`U+Ck(tU9y>N&mkvo%wHB@Mbbz+0#1G&@=dzYFs#; z-(B0Cy*)p7c-}i9)}@sf-GWn#CoWISRAz$tz-=IWqj;epc~=KA1Os99Xl>xdQo3?D3ZJDbgwvlNHG5TK>w$B!R8c#xGJeEh5*X2WoaaV%BezzN)N;OM}EV-F6D z4$PgLtCp*@Ff>}9te@R@{)#v0z37UYMUkbrbfMU-40^;!$W*2HLZL93Pm4{V+W0b5 z45p1+nvGkV#n%ezwMkCu*>o4bWhro4{}|o?YZLdo7)<} zuAq3jGb-33REJ2jYu7G@+?%)FeD318iT7MyzPjXIWL{<18s^1I#c(LB-BkBa`xMvO z+@xpZujG*#JF!(y55s1hvD~(KD-&ZDr#MCeMKC9(MqPz!(PFb8nwgt6Y1%B#wrtokG%$GS%B2Ih9N7Dwy#sp(C!d%U4z|9r%T39I#U>>N zqwNSPi1Dia%4&xQo;tSTcrm67N{T5A-C5fh4AufENnt|JAyeWgcB^h~F5kr;^;u~E zDl3(+8lF9N?#jl=+$-7a0#-qnQXI4A#*PL9wL9z5!x+_26XQp;IiglVpvGX++3{+X z+9mhOm8r?a`Ni9h-o9z$ChUqi(=)Dgxxh%$2phGi8qd)FBla$;$*?mwqT2dZTJ_HU?0|Cs*-6)Hy{4Tz8k=wUqm_tXEmJ-=Q{>0U+>}ip%Hk zx#<60CL8)0`YzrGSFPN_Xn1aTd-3Mdn+IM$`Ff>Z5$$K3<|r$3DK-qk0|yS^7>i!< z$ycAe@W4dzVj+4k3?_n0=PtD>Ew!jfW`dU6j!BnVdCN-Jiu_7ehI+d1U{F5X%>RBe zv#&4J=kA}6Dp7oYRC#G-c~3d}nXDHfViFQSMD|K&#E~GsAXP=C7NRUrz!-SetL>{X zxlc`jZVZ1|@l=AZndqVNbhc!`7*|g@rs#CJ{jkqlvGC?h^A& z)3GRzzjmt;SfgnGN*h&53XPo1f}dZ?<9<8*+Yr;8Fc&p8HNxdEH<_g|I;euY@G<2g zcd1#r`NP`}96UIA`bzm~S$2A>E{k{8n9OB@IAHu6&5mZjCHwr)^CN#V#O7Y}Wb@Sx zug-5?aG!JBT%U5=-f$gT0 zDy&Wb#ExzG(|CgxhIHa=?B?CVm4dYgBTFz6%)e_s|6DE(U8bG6g`7>ruCzJkQyIK7 z9XYIr%MX+@UPe4jyNBU$Yy0Zeoz?7V;~B7}E#8)mGc@*)B&~p6l~TzdVAgPV%`1Ac ztz||9)WFz)L*BQ4-;S~ESMQsdE=&zPIp8ptre9%K!$$-~RQf=@H62}@T)wjMLTX!O_5<$l_Aet59=eg!V;- z!(icU3;CxR?M%5S)QPL#Tq{l#yqe4dgRx-ofu-ClIhSdA;QI6CuB;3MM$~?4Nwi_q zqP6H~j~-Tcf<3L=a!&ZS#ffr}b0v0}7dPDc-Syl`&R_PeIS^NN5V=1K)Qp<+_xxf` zmft3TL}(mzI3LoMrE+cUDEY%*20NW)tX-pc%f^WqFML;0cN z0|OVIzZgCfxIB!}%Tu{Eo$7dHwlwR%(iOLX58nU%v>gu z%i!4?&88Q~M5DI5zIk!;#?g(#Bg1SD>ik%01RH4{vTTT^BA4MnP{w6pm03Sq&$)8Q z!EKEO&RNIdb}X7OMJt(HRlF1+qgp%KA26*v9F7WedH74AFmAca50+bTD>ErG37WV# zBvNTYqC^QypgfG`WjtCm6O!czSHuOG01Fe+ z@Q`e6m{g{A1I58RkKgglZ+iRan?|pG^X%ZCmlz{uRAZxACj!jemb~mEzV|)et;cVr zp>Qvas@WiQ4V;CC7UPx-64Qc@SzSV7pzw49Sp_KbOesNu5j%A!za;Ko{96PLJS#|~t!x9UM7 z^cQp4mDCXowk%i%%^IcCRB(yuhJz4<4n_$QG8rv(I5cD!X?$?(j%~-c5AJ9+T2mJ$ zXNTr4AG+L#n#+63{-=F2Zl$>?3=@E)T-qRi(%4L)GDE9H<2yGD-#K#m{FQ|#=lzx+ z$m-H%w;K1}Xt0cz_8W)MC<~liSf8s;U7q4Tg=#_NXU8O32)$`7rCkeJ$U-JpV-qLC znu#$obEZ9omeSi~De)3jbgMo9?AP$B!N#9vF@TnMFzI@Qh*aUw-WJ7mI)Q)Y8+e z9Cq&5xo6KF7NGdXs2-IMlxy^)nlV^X94*6%hJuy1RNxQ}1eIfqgesD)EYa2Csr((a zD7{{#7PmAG>OKTxGa0+yH{ExEm`BXgG@SD zt}+zY>a`#W{3S0}&PhF!;6`(i#|=w@%7G04P#dxmq#MbvL`9d9%6fsObnC7A{fxJ~ z$bEfTe9#+$R%_<+?AbfcEuCC+W*q-QCVPeZ3x zCOrR<%*Oo2{Rj8Y&deM=avKU@nS}9b+z%5zaAMl&($wWY&FLXX51j}1&F`mIeZ@082D(eSdW5Vl%bskvzxssSlfYGKr}surep zQX`h?GU2-KoA2FU*v}Rk4rb!mr3>dS1Q!EWMrb(4#jsdhDX@MIBePF$9^*@<7~&!W zZe6ujhE}wPu`5$~Qzh6CNE8V~2%|pfMn)i0ut+9RqeLZ>f7B`#G;rDiqBSV9FA;B;{gGym2Ci)t-@@3-`u`aw8*$M)OYY z*$vN~`{KFUi#2w15txi#vZ$ z#n30JS4N7lFi}%|#7PS6mj(W88%|72uvc>F(gcx+x!#a6TBUG*|6?P;oP-MCxEHnBdf z%v9KCx%=L`CoWye=W@QW3>Pzjp=Uf)FMhJfo@RD9yYS$m{}-m0APOBNjz`DFTdk&? z_p^!+*{z(2A*^INz#PsQsx}U6AD`N}^Oh4QPH`?n=tOXng7D__~XMEAN2eucs=NWx3oti*{2_I7?q*TWKJGO7n zOp9aAnr?QyV zLRfpcx;V4QQl!H{AU6!+#qygQ&C!9vQ{2)?Qroq_g8AG)d1b6wU#P4s(GFmY-l);m ztv9j9v{GJSW|m>4)AZ!!0Br`!hZt?%opU%dIC;2@2~w8_fan$xXqQ*o+?Tjfkq`*ujyl`=(()gjl!ta#| za1ia{dM;h^tBsH3vVUDFTxF9rmBWDW7B@?i?v&U?BjvVxd|Cz!#tpfR|Y;;Ue&#d#h><9Sck-ePa@ z5OH|=v{SCUvsnCdU+%}JR=uhgnbye69%7+qkw&=o29XEb~RZpAlb3oZo@m#*h|IY!2<`I(c5y_Y0jG% z&*Bt|wNmj?F55)tq$Wn8rp`tM8bw6Y%M~vb1}`ONTdhJ6m@{&MK^bwgHBhM@Z8SHT zfmbOt$ymr(OX4P2^%;gjoLHz`ZbE06GcwN2EIj)7;YS|bv9iJ)OzwbW+xjU$!QmN0*-8#3po1s`3spmvElgs2cd}xy4ft)`ThnYg|+`>Zr#h16v z&efz<%BBWu_pw%V>tOzDCNofP9pSzrs%B7#Ge>g8CyU}6%spWvx#|Is-9ik1=bcB! zM#p4Up;eYrMF1HBR1T~~AqFoOp%Y;xuBQ*|HG%_ki$`8K@%D^+mdPf{mUC|O`Y84@b3wR+0+k_GF_Z~#u&_;S11*|x zFQM{3=K@>;zi|41#U;K&Lx!tlyB89O5cT~<(x=Z=&`M`NFn=Sg8 zu->}Q^T$esW*F^~Ezy*Oh>bgIH0sYjUwrh7`T6gc;Qw)M=oRbZ*#xsG< z5>$%HIbl9KzvGLKeOnaF6tZVzu#egFKVKO7?xRNzdS0{Ex}#R#(F%uK@jWZmH#h2U zlBHtQVp`8E2b;k?k^tFOrnGBmF(ln`1p>QRa|MSS*Mvj23+#pkL-Ie!Gb1p68OpcBY9Xj&id+vRQ zUwmKDe~y!Tt>|VkSW0X-6PA`LCtiKv!HccNscf#{Wr|X` z_6IRUv(_9O8s0TF+K3&W<*jspegT2-!%X70ZR6PUj=z8Q*0}je+-)rv`h~kT3_Zc1 zTB+|Uw?+m_&n!l_4vp;QmJy4SG&A&<%gY0$<74A8X<8$&62eGHqU&%Ycd+E2nK)Lx z>#{J8{5WN8@3yvfhPd~hSGiA=G6SLV!T+)=UHB3>U=gD9C&7a`Q74r;^b&jqk|KT7T#ifbm(HW+z8mTjt`EHZPIsr8HREe$f%6f*=s>?W$R4? znyL~?JD^*c7K&a0#@QB-X$G@T$wwO(opKkXkULWt_$2-?2q>GoL(<=u=g)oa(I59S ze?C6)*Pche%+TbZ&gQGMZ(0~+ZF?aPN%fW5SUyLK%W+f&>#7{~DyCv8#Ex;~EH2LH za>d-h&Qk8lhzyR(F%^dRx5=tH%^F0M!3_9 zdpLLQT(!Ew+2U$rd(nTY)nYfuqjQqPAYI5l7I+^#ba;GncE?KNLaod(SgGmU%*j)) z-Pvs1yk*m`(URPFK8S{Db?(}6qP;WAHBPMvB@km;+G}TSTRX;yhw! zsXQ7sX{~0q-&Q1}QLXvSxjcKcP3EjJ4u~=7%d=5iOsDvrFINW&YlcXIK%(QFXCAT+E)rHt-x{4lq_2AK&=;>#t+Hd~sife& zbu(UmacP<2GVW#HdF<3#W{*zLI2$r=VHCj*GDcj^kvv(m;ApszR9{+QpiL%9;~Q((#y^ zm5P&v{Lk|+J0@>GN+X%Dll~W?#9I6?Tf2Ja-5)&t%I6Lrx{aCZ=RWs2)JO5QAfn65 zOT#0Z{M`0(>tE7W{p>{=fV2VbEVFa&HCoZ$Ow4Vog73|e(a+2_TYI3C8v;6#P`Jy9 zw%Ql}ep|D(A#Oc#+ii!q{e1Q63{MoU;~wLvcINzet@-Vx!jq$eve3z7mcn?q=RHmb zqVKG%R3CfljxeZr(c+OK$6WueZ9DV6vtx2{X>@eBSj>O^ktb0R{b_mO`LpN0-SL{6 zhW}DjLlw}N?~f0E3L!azL0iCYaRfDV_Ich3_**3~VF_Bd`k6(}2n6xrqIc4^Mb#Be zM_m(bWFd4mMNUZ`ckKjZpofn8?n!1s2CaQYz>KFSnK`N44hqRt$TVge0A6kG@?}Qm zQ5H9BiK06^ayy&+dS2_?g$eY!tK@N(n6X+Yo!b0r* z!eH?<&X7f?@6I%%9qO;x!<(5~nOS-(%Z!nc`l-_q+c(2QkKJ?kaJ5>?=lnby3?9l3 zutmlT3b}`+MlPCR+rgA9&0R)Qj^P_IqKrEeguA*$iak~Wh3qSI>t=Whw;{R-Xr>sA zcEEg{r{be%G~-Q~rH4{7%Nl2v;kry-DaqQ5ROunz>`;o}5=)s>C1Vz_bmG+Xcqv?3 zeC@T@PV2EwB(ioO1Gm=%!reY%7R&?b_X$;lnt|7zMYR2F`fl<+H6q{?VL&0?+!&spCQLou%RnwaVWG93h{c zq6%~kI)O~ETyJ#XQ`m=1Blu8cyNxH>0YfLtcvqX@e#1Y(GcbkmNEC0#co*=&VRWbI zKP(bDU66vLhl%+ec~~)ww=f3op6hUedTUD@ zO;D&YlGvQb3Ayvj8ye1D+}B#UZ{yHUGTDsSACvac4o1FuZTi%y<%Pw$puxsDNerls zj62tg_UHW9GMVhT^V9kKy-xN4$9Z{t=7 zb{R%D``OPTyD1t!waECv&Z6foGPDHoO>SmuDgRf@5B;Hudh^A6_F|dij&dJb0xeDf zuFQmurczZf*p&9@VRJG%#v?4$w3$0Dui@A&&fnp#uk?m6+UR>%EL-7`Oge;p%X1fk z@aDY#to0t)Jcw>)v&MDsIc73qDwJl?AMPQ;JNxcr5ZzMDKE*7DTLg46CYB7#V`I6| z@!LhRq&_2z*>=Fix5yga$9 zT>C}e|K*Ltf5N0!W&m++bm-wm>r69xhwHsu$kFV49{tzmVkJkmW^mYbmpu+9N;QQu z!xo-4j5lW7dA0|d0praa>snT;EWZYdr*J%pvr|U0wUY$eQ(FE`RZ@`aaOl4g#+x$k zg4qBhZ^TwW#ybxn!Z1ih+kNknb$Ezv$1oZNdb$|IJH&{>S7!w5Z|-2`Bil~0^VAb) z1|1=KQZ0fCuv&4>Hd;pt9(#a;B9rI%j$(o-KE9D1--{dmrwV2a1trF3nT z2ja1KDCIxFvq*lX#!!KrxT;d&;>f`L+eQ!0&Mmgecja=wK9GAvdJ+d0*)`?rI>p?{ zu(oG#{C~OQ@Sow_o_p>EeWym-Y>HCvvu6o#8)7u&e4aDUc4k4k}! zc+|X~LX5b*@>@+<0Bd>9ocMF^RghwfnEj7k`OM=~jDGAnSDMkDyz`hz?M%?bI~gy* zuz9W)9AaO>^gO8!jWme1vND%xllmxwHC8gVvcs6jm~xmV*5)h|B{&QYOpO%ZwPobc z%+(7ozdW_l_@-QTW~uSEYW+iV3&Hr{nXKH4mUb$I@FV{_0Wk*)UoeRU)issO`ir+6 z-f(d5hd%qrwrJ|5v4P(SLV6#59zMzq{bqCi-xP{F%e7;9@0DhgULyM`)LMcQaG)!Q zwiL2|DGMAjnsS+Zx$bN$x=9|`i;F?DqnP>)w8Y$hync8PwekhFpweS7< zQ1NrQ;up#3XJl+QrD!XV`8-mJN==YHmE4R-B%y)Ss^u47c=5vd1B=VAZQuO)N~Ltu zmW@kGi;?V#k%LYkLkr9=p81`ZU;fREw|lJgH%wM35wqbQnQ%6uyJVT@EI?>FnXFG) z!(^Q4AUX&o8)H#a^fGuF6amkqf^G3cJJMPu)g+~_woOYdEP+HkXQI-0ThR?Ne(ugY z?+D%7mn;4&&o1)h7u+(O0gi{mXoyiwYa#iQ@n7mjw9M2ajJ9MmjJG)kl2)|cY~wP4 zWGlh6eO12{r)4X^wIe8%HCENDkecemi;D}-J^S3)_?|1%w`FrD^YM=qvM=}^51BGV zBMO>@r^wMML?k3pg7P#3iV*==kY2oer*rO>y?g)T@#9CIeDcM&zV+^BpM801YL?Rv z6`oy?)rhc^~$HXlWw*Zv|i$GJ$EXK z-a^6nL(iR&c~fk*+eK_|c) zqz9Xjh-cJdYLTG%G1cL!jn8OORPWc0AIp!HzG-3pwMQQtUTJ(+F7pe61y*k|o#F9} zZ5xJeOnF#8}%6;ZL|79|7CtYIMgbD;D7Inz++wFKqd&Sy|^Q9e>M|G66bB?*SPp@exM_Y!`r*~oLy zh5e@|o|L!o7YapQ$Rd*t;}Q)mw&U$FoRRowqJOh@&*Td)Z?DuY*K3os z3tgm}LZo=*=4rV`PwwTo$D?cMzx8O+I5wA_B)iJdICA=|Rj6eU|&rG^5 zKKuu&O-`zvG;0Zx<(>%*b$oPs~YL8*2XE10r8o{^a{j0t| z8^+vq9LZ)b!+^Pfl|pn#WlUUQi6f?Tgzh9uW*WL%%**SC#KD?<6PpF3!s)A2+%OcT zs|nH=ygjO9vxm)YZtOH$`i>-A8r4p2@*$XT78@|7T5dHSZG?w&{??Ocb~jqz=foFA zOY}$`x=fi;E*oC0k)Z|O|E4TEe6?Bek*@JQT6ahcTNNf?i+Z56)7=~Yb;e5INfvi*Ay<=d{o}15{In$ZeQ#N!bevcj(p!E=&(COkLIGdZM~^@hYDduUElnP3WIJWRhL}s|S`%WGOL03Ik=R zm;}#Hn@@*8(vpy5F=Te*Omc_=We}hM^vif4^d0_Ap_KnpG2&PXU6A480KQsSX^ zV=7r!t;(!q(!S;OC$wd!l>f9D9`Vns#wS+h84h%0SI$oa)rH4R|Lo=lb78ou2xF5~ z7-QpA;vrH(mh)d1`DDXB)euZ}+(s$)Y&Lw4pQ#7Y=B4uY4;Fb`Gn920wlebr_H%jc zkDG)iYOU{h>iLJ37N1~?k5z(^OT{yViI`eFDq`4+wz`6mDZweML`Y@^W~r$#GO{Yh zP%945l8JnlO#3gXZDhL$Qw@m#(7nikg3akpEnOL=Yhfg3gcli%G5D4IA`Dyfjb{0g zM;o4rh-V)C+8Ne^%%sb9*hJlg$;1=c82Bob!7Vm%hXG4vrMCmf)otQWU`e0tyF%X{RI+{Ylds zG7tpik!0tmO(y)?$x4&N41q1(CK>94o4`tzVA;5my(@+_<`V4^B+c@%Si$tv!ia|^ zmP)#^s`ic2F@4S-VOmsSBfIq$K51mPCx${mM1T=8_1VG$y&x%|n&A0dqf0 z`j`ZfTN-A>-Sg&9;Rl%6%XvamH_2%_6DwIrr7~OuOmx*LOAG8JYfEqPnvyy!q-2w? zO_Zc}laW`0l-r@T)RHLT$>9-_nR*~-l10j0T?>=Yu0=v68ZZ^*>KAg)=A$2UJzN$e z9NY|%xu$E;&Z>D6U2C~2u$HTv0NvVai)Wbt^eQ>#0GZqfl|w8NtRM#D!W-0Bff3p} z>!y(qSK@@Mlh4qmE{06)*=BDHZ#W1YSgDyX(i(OPZi?t8Q)IiGwrbkk3?3vEgE4_w zBI~4tjJ*7lT8$VS03mIRtyCc3BAQD zCLIM7n`Qs z^_tG9a2J_IEt$=w_%tivG#La$d&v}U`6yt?x&URUe7GuL3nB`vS!_njFr8{MS~3Nc zMz6}Yi<_mlg{A@EGyzdUnww&{S~3f0k`(~F%aID3;U9s2_!=-T2TO^GG1Z>n09ddw z(1~IHI~osC)&0f;?fozj9Sd=2P);3lFs0Sv(HGtt$pdbT;e>y*+1JIq7$vRwRXvQ( z#4`c+-FF{v7vu;yq%Xhx@-4UA!i16!Gk_uV9*h6FRHLgFI{t+ z^bZ`M=Mb!rVlZk;9Du$>pkf?PC(8Pa?nPAJb_|j?dU3+rX6_59QnXzt=k>|7=(Q*< zw{^&%p-MOdLYj|-X=FT>$PsaBrwpw~N@GjuN`(x9u2hRzKeaDso7bjVz>3txmS;ye z=4BtScj;1=l+3(gP5TfH77LlXw*~SL#acWXORAP(bA7!4#8634D3-ulygwGp^(vi; z@Y-!2LRI>&m%wkVTpoC$UiRh1iA%IKr`ndUb}X!g3al1HNv20yvabt(3=FsQ8+ttN z_GO6e62l6tev+sW-0miHk^jSu+KQ-%iAw~l2{ctJJ2h0KwUE}?MlI#n9>5Irb$t;x z4}nch@kl`8)m3JqDrdSzUnx0d?}!$_)d0$t7Ln-gtI(jWGha37=&FycxdoI!713qO zMCjCr2*y%c8a_TYQ zYeu}$kM}%r;7qE-JHG4eVDii-C;iQXT;Sh85nWjfZz|p1R3zC(x=4GYWTt6zB}uPc zG!|)rF3PUFYmu$R)^Z~w*5azqa{>^gS|)U52d4yFyOORa%3TXSidN^a4^IMAYrB`1 z57uhC8jYKRV3@<@=D;v(RX+5x?E6?SmhG25HBd*vu6*Dmro$@p6Zh)PZC8n zr%#_IGX&(cl~FDlwMYxtGSXxgxfU4&>7+EQd71Jd1`U_VE>k3?h4Nx>)3A`R?}(+< zwyZ3W7N!@;cPx17>*~I%GasI*+*SRt{~><=gw1gcfSdVyqiAoX@{vmAwW+DU85;Vl z&6_7jMpy}^C)ujcE?!8|B@FTtluW)dt8uR6zxigKncL3t3jn2HIR8=QqX=X*YzoYPw;Z&wm(-WbPks@LDa z*Ho+3bDYB}6tGzr**a0`&YFtaX{A=VL{KE42%RNUPgVeA;2Cn;a#fXG1t>C|l!h&_ zMOuKQG^~^sV*yJBhCst&B&AdFAoFtNzKMxvcI`?Upe?Hl(2QNkK2eSeH+VC7?ed2& zFZ|#_%*!;|;rVZKzVPpzcg?rsH~70Pj(=)l;l0btzr1DhV>fN(4l*9H!+mXTNS;ny zY*PW~7)EAbo8Ly2DM@LJrCcY~(!@=;O9{Z_f-jcLZ=ApMu}k&$*VB~1jeX9ayvup$_uBV> zyOOUjdNd4w`O4&Pl~?|sojaSQ5^rB$WsTKLRG(HtO?M*7 z78)#U3u>o`7-?9e7TF6x3{vrFK=E9qQyHtU`9hDsa%HkwS*q1X%9TA??-{A=*=|j^K|Mx`e{?6WAhnSP^k@M|;;ta2&;|}$j5I*gmW^>ol z(sPAEwU{#x$F51N3A9nhCau(}9tKJk1OTa3qGlsXNYfA{$zn9B#Fm3iwSW?IT{Sh$ z0RoNcm9bXG)T>voQUPf_?dQx90-CnPyBJ?rRE`_f<12ShPX3=)oE>XsdHq4>(S6Q$ z%OjItZg^L-IePBQkLOPYplk~VXqRznuB8T+R8C9_$s znacE)PESYSBi6MV@1o(GUSr6s9LSEr5V%WbO;zN2MbwUp{iJh~m8c(Zlk*4f za=y#F4z^$N4dB>G`?L7HuTA~Zv!m%h# zfA($cwRO~{y#8O78T2iNS6&Xbyu_O^&X{*!2m>Qhr>XVwguu}Brtl6FZ|0Vn$$yKr zuI=m|{SN1aUw4knBQkG1ko#x+_x)nwzc|j;OVb1S%*O^wJdNMKpLK~XgOd%2z>cbZ z6@_^)07*>oY1aTMU|0UNq!#sjIZkRdUsy4<<<;3@FrEerjyD=_s_>D}9vj)Zqyd;2 zar#_%=hE_E`SQQM9PhcdwcxXOm-DA@SuNZR#<14E^1t;Li@)W#TamvNJ#caQqYXX{ zx2BBAxT7^%Zzw#gjw0BI{DLAl87onSCYk( zs!5hi0lg|WV9QoB>SW>U*|Rht%*N~9)iA?IVCcX&+t4Fulc^V9yf{Yv52S)L`?nd>w^a^>pDom>Anb_%K= zE3hrXVpbW9`f$gKR*b1I7*V5SCU4%l0aGv0D)~M9lDrk zoIih_EB&6Ap;>MgfY_LzPZBh$1%yu*LF?x89n)`{u6|GQL3PV*ec*+6I!|qN-l-?q z*C$<_%0l61#9H(%M&DHMvI~_T9WFmU%3zkfOiEHsrIO}r)xK&BW9r2g6m6NhF-68y z7?0O#aaH>%3!B+8)xuRTdIhrN}lFf9!0( z?p9)~^`T!a{D$MM;YxY6Y3l>?%b(h^;hC;CAZoF;^(Sjd)@AB3NT4la9)R@KO8Yec zkVFGxCld{>W!_83XENhAHybx0D&FFnV%QogrI<7o7z8ULmF4eRPCc}KO_m*k%Wrr7 z@=zzbK7_;lsQ-~)Eqr`UYbE)I7FNEi$@jL*Lk}roS5;Pe7>3!mZy&krzLb@KRB{pp zu&}0fMQxTY;6}+X72_x!3qE*4L^3A;xHU-IVgq88^tLP`!DeE_WWG5;eUX9n*M_eoBpc%xVAt>wxsV1O- z>0!*;c^jy{B2^Q(Y9Q4Dz-o3aMeA?1kOtCZ7(nTJuYJkrKv)Z#ahCv??lm!SQJwP| z#xjiCc5DkS)=IarPP{(Ybsm4Ob8_e!#Jo}H$Fu+RzsR_C zEo&(!cVuzp?NP|8y3^W{ly+qj*T>LB&@`)hqQFoB=v7smI4tu6Mx$v!$rNMp>0CC8 zO-%z#b~I2ZNA7~aYc|ar!w{rX5puMj&Xb2DrCGEq)#q2JZD_`oU6t1D^6&@yhYru( z-*{NO)A@@#*UN^rKI;F|-^^pJHO8&p+%m;~XRXdbLb;i4L%KdbBNq23xw6Xi8EG&8 z02H}NL_t(RkF;w}gvsYb7Z<_sHp<<*cSC?{BAXTgBMbKyYB6xT9x}_#3{KKS_y8JL zL_+RHb3?iIp=#}qcJ9y(S<{s|X0xRMh*W(`gd3ql$|sPIRk%+jm}BWi&>^`tRB-;} zgU(NU!5QpF%F(kQ%l@<9&i}IG_D%1X$KaxPZ>4^)SbW}bI*0NQ-cI`D{^$Pv`|*dY zk*O^S@}XeY#ZD}rF%?fsV83(c&cV=D+X8ErY!a@Y3`)Kg$g~i%vE<@zGP3YCMW#%V zyWN#fnwbuvok~=V(bR5S$xYz!i#QBPGgm>GK+{n`ub~%Kk0s1k;sxkqe@(h7)pjNUVO=LMQ>*4f^uL$mPq!kpORN? zBoOsUsw6QJXl;actn&+VLSoCvZ5ErY!~JfcbaGr5)ZFEK^1aRnep4P;w*hPY3;+9n zxA2Q^z*>fh+iV@;;Yv^TEfTIsZv2fz#U+yR(n~MV46zU}Gih!#D=qa0CId+j5E35k z-qzu26AVBWO|k?QSWPI$e!xJ_+y`Mypn3Sq%jIIhym6$HK{}JfI%YFz@_0S=5Whk8 z4tX1*2%4i7#Md<%n;X%NPDR>OH~yP(KL1agi~rTx!z{ssMaTJ3{|EnD;g=lu8VB0f zER5zE-5l@+e0j&SG(Pl}u9r;f8MJP@?KYl!U;^FC$f~|KX&ua3=IP3U67_ZL_+BRQ zNM_dQty<&QVtLGoKQlaranklNaJ%Ux+yo~mvSaDqqIGmki1~W%hL&@Ev$iD5+CLL- zaUMS4{J_gXfwg|v|L1>D_=PuaEmKe!Z3x0*HoI&+2qv)g5|>Ep<8%~5Jy?~^))`VT zL;(nj*Q-YDRmn6vNXy6OvPo&?7>p5=`z8-R{4jf9>=r^MZ~BrOQ(L*qO4*vxT+{F> zG<>-2quo=b)nqLTye*W^cLd|XDleAebi?2V=MUa12Ag-BAMyYBABrcG737x_VrM7_ z2I6>0W$vm1Hu5o*sW1(+&j64v+g2N7nq3-ilQiS{NtBC4*|((8P&(flC>BctCE5+! z8NBUKm?@v@xxy-K8_fceUfU6am%a^!Z)}63uMAIpm-9Ej=KN0ONB^+!b6>u-Oc6!i z(`fcP5|>C7tZ96OY#a@C>Smmb>J&wgtyf}*E#77Xlg6)~i=x#lVyeYO9+L@6CG+Vy z&DO8bz6`ZQD~tsoPQ%gw`V4cuEUy={Tps+Mu^*dj{cHWC;`L@*j}Cv(t!i5Z@%RMI z4!{jeW^3vvnFVm1lo5`Z8`DKY*r&bQ>{bTF^y1S5Z++`q&zgWIWST>lVwSqn`2MK; z@IdKe$4q?+Ts^3z`k+eKRl2RJE#15gw-bBg(20Wc8}EsJ=VNn~2XFYm;(DcWx37Cn zWR)qe-?MocoVfvZpJx zW*J0v12dPSS^2TMl{TaAuW3uwW3e8D6-)swx}9BQR*YV8vo4=Yrqb7N|CT{N;DYab z{O!(f|4$Cvz{TuW)LIl*AO=Q3~HV9bjC@E+$^e%yKe!@OY9x#5*@m*9P(ytEVT#hM^eSeI zXcjzOfh0~T0c#$61?cTh%E97$qcA*t_%Lfe_AOaO;BR>&58ridG_c~;(OlYdw{4Qf ziJ^=ES6NYn(z1|~kgks6ZEcD2nO1++ci1~xeb-kh*SqpI^4~w?{HKpPFMZhY$Hi1_ z8Q05o<7s?~BjZ)r98GU_*m|vUiIzDX3%%F>{3|1)%nYUbpa;{B5(fIS>e{0zYZ42rqHjk?6)|Rg@3I$-b;g2r z`WnBSoB8xE=a;_E`Qi^b-d4G%(yy1Vk@<$v8TX3$p75#@G#E@7^;u?Wf|?Ve{pcp=KYX9_@DDl7y-v^Jgf8;0K$JK6 z@(m^V`V0o^RMskd)hsbx9vZYn7N4$p8foD)fMM`~XpnPP7>td7V9t!x>osy3eG zty(BlQpO>-HeCd5%i8M_+bKy|CWjTw0#=gVitxx+{<(bfJFjK1XNR2s_(A87|D{vA zOI`;0HL#WlUEzC0^2vkM)wK1J2a0Unt_L7znk=mjg}Fk&m3bf!QqZfIbFx|>BLgHe z4m=^}YpRWRSF6oJ?vDz5J4C`NwyB7M79q1IL*M7pw|fce_PDKicz<=_nL>G?yyh_W zYTo&k_dB2Xs55gvA2Pf4edRu~yg`)bp65;cybL|9XX<6m)MsuBsZv8{gH~JdX<5=3 z$!6ZZ2zQ37qeqW&AfDlhg&llIV)7XTb^eS^`2xA_gkb>w)NBdwPQ*fKGYL`?+St`5 zNlU1(5iPkyew06*&%Dxa{XF3~|MqRpL%;9*+V4B%2b_WQmkN5he&sPa?{it7jVGDz z*^urP-IET8@MCw~br-#X4G3HrEOcS8LP5L%dBx?F0#`w`S?#y~-uFiQ8sUYO`Vy>4?%YdRQb#B_Nf@^)l5= z;V%l62jnw%N#L`ZzkRRs@sB#Ezs<=FeDx-Q?ehBl#+89QU-!cUt*V98%>?p@CAAwR zI8$v*#r&I*h8xffKiqn@T{2w`S%`AQ#sJW;jeGCC_hL3M^evJwBwKmx>T(Yx2>n{{ zk$UYQNjS|kt5tAcua}S;Gxuaw3)(7J$DloX6>}4DbMD}$2ir;W*3qcj-2at1 zhz(G}NSiZArWF{K-4Je4i*3vqP}W;SG2YP7z{<)p-#V6_#HNe%EwQr}XLJL+%1UjE zFuiY+wSU{WR{t7q$fF%Sou)FUF~D&qE==W%zgeu_x6%29A9No30Vmq#ywQ7DUCiHL zG_DQgew&wAu-DVeK~)XD+a)UL#fujep#Ip5tM(x(Z z2QoNmc2dF6y*~4q&p?1v9ULgMnpMtX1kr{tzQ5HfiE9>p(r;w-wN`+{Xk9O9x^_w$ zXSh&0p|>JdHYG@3>FEWhIpF`L!zZVD7_KGTR|_A_4i|pG>@THd?7+5aeP)U4%cO>c z6J%%4o~8dWt>D#F>_BSL!ooaLc?PvcYkRG6xZaR2vGZs$9<QlI{m}u zjB~(vOLp8z!eGqf!?4cF-#De)2<~YG1C9D`6icdLV}R>x%N?o?giu6Q#Z^ukj~1|2 zRS^tIQq%R)D9`eb6@GTMb|iL>q*K3^us1T2H-dRIfVC zW9|pF=1)_C#9G>`1_nyBzcU8X;>v!Oz)MoMj?NBDEF_Nc&0b?E03{Wrp?-mUm7j`?|f>Qxpo`Z z{hL<1jA7}xMllkzyS;n&a^-#)_r`QuFUu)ak1VSAqH%_Mo4j#?S6?<;JL`40InD5) zFx(Fxxw9)DG9U*VEiBzd4)V!2heX?ahDYbGkZCG&2U1OMkW^jm3zFVz^75rPUG18@ zDbC1Auyp~jaJqJVVeZEd6~8#>f6R$FNApz+v8)%4-tOd6dxUOuVkG}B3c1Usj(w#Q zq^Wz7n&DgJy)u%>anfVQjxl{;X2EKVDIYMDbSZ`?w8L%_Fow+MvyJ9JwSI3DUe4!R z%@!Y~Jy$5qh0#D1F6DCPc@GWmK=m`P<_kRXRr1_(`NC2V4#eSnK6lCWia{&L`e%5+ zv(YSM+;hd^N*ETyppwg;XMdlE)3TY@3I#Tc2l+l*p*Sy`12|vcZd$A9=Cfz`dUs!M zsZ~=sF(H6f-d0&L%$D=nQ&Dh<2Us1q&#cr7Z3O`(u zp^Fleod@`6@8x0AO!~g$%{%U7I93Ngf|ZZ_;b=Vc9NsFGBewUrA%5VL^XwQDz#3m48~FhM5+RR6q4!m?q{ zo;}P_CnvA8vzUDSF4t`^B&k>Gx0jng8#!-Y-3I#cy-}Q0lp2Rw_Y)(9|1F>8V{S6U ztRK<_gHqmvvwj9rRp}U+Bi!$N=R0{9&Ghti+M;O=XmjVzowwh9d#N;V;lc%?>C|3W zTLT8huWt#xE~ z-LnJ!|2k6q57|tO&;NE3)`n2N4$n%Gq0Va)Cn;1FH^{yQ+QB`ZIB^0lgszOJp1`w# z-22CC{_Wr566q_JPcHyH-IR469hY(L$tR!0xoJP>B?dzg2*Yxa zp^+)mBab|C?%X-GR$uzB9FjJN*_=}D`C|NZ7!9|=ovrXt5FZWW{jsw(mKUtB$&VS> zf#adeMbEj6o&3y+EPvjl$HzwHql~L|F>X}6wDH#LVJL`Eo!gkq@44cyxYLgr(wSA2 zbU}2d%d*EGf1Giym#j-f`WB|e#p^lf#&L2yTT@^~=y1#GkK)J=tciDnkgHq5+w|)U$ZYH3E1#2b2h*>boXq%ZglNL3E3`et=w*i{m8= zVqA~eu9NKgWw=g;y<`jr$j_*xWv%*H&h;06qm&rNYE3&hod!|poj2;=ZnS9Vu@Joz z0Cn`ut|nY7HJt^@uQ3_=L01ePD&#fBo3yNN7^a4l_x|_4pV=c5yl?&1Z)Ij^d)Nyv zywG>@`G$+@&4>UxuhBa968uBPsFSmjuQ^Nn3f2LA(ZiTz(o&e|=~eeNn0j#Fhk1t; z=qp%mnw2)1H0B!!PAf;ANdFp$u45Iw8^tkO(`h<#Fzn%-8K1reGW_>ZM5l)_#Zd>J z+UUXQCyRQUB$!pRA&FoHi&O%0?a<*84Ox5@l0B^n*>nQDkx4Tx062|}luK*WP!z}i8B;1+1fkYiM52NeX-is*D57?zFUHn!m_D>ckeSS# znb=GwCYin{F1m4P^$UpFg$qBxEL^y<8>K?6Zc1@mMJX1#kusi}WF{%L=!GP|dmjID zZgO*hnv+Sx&_WWB*KIS=ACc~ijZ3xbID`|ZM;lHj70U?6}H0(&CqHj$O^;YcnlQ-hTO~i?b!T^tHpxmz6-0*Fe1#LFh9rO5;SxoS{XDDXT z(4752y@lRk3>p|z=yca1A%T8G&9W{Ltd4i%Zu{&g{ES&@0mC6smk)>P15C+E4rT7>&ewusBW0N z8nR@~SJz|(It_G}(HEM0C0>I)ifsp0$pV#Hk#dwKoJy09&!T%cP;I}rN3lzDZyNnt zt77TyO5M`ju6I@VYgMees@-!xE||~6Q)0Uq6)%aGA&J+;F7cY!L$fR5U^QceR8&kk zN*0oorDKM?#;$MX#=>UPHsA2w1!KlkvpHJ|(`mt^sIIiNNF8!}C&14h_qW(eIA@B` zu7r6JC%ykn5Iz7_=0b-%tD}x;*30EB z+WWOnft@Gi^6wYr^3F@rUjyE1e*o@J^!6a77vTT^9-v7?K~#7FwVY{;WXFBj>z#eh z^vv{}JG(Qxvj@2(cPWt)DJhU5IIv(UeO;1k?Av8@(o>3Ih%W)FdPv{*CRUY(J^h?)^)wt>p_x;OOq${ zqyk#Ho~EKcq9K?GkUFxO&89RGC>D-jC#Y1?fa#$9?L_|_gDv!?pFeXee za9|`2N+Kz#D4=pg8VH20G+Z?w4x|?g@h%k#3=bmpb^~r==E%%H&SF-O;+5 zANcD_8_{|MPsuonlpx|jH6=7vKv+7lL|E18wItYtFWh6Ex8%>w%+7RY_S^efpskc98ehNs+o`FR2XfUc<57}Am|a}KNE(TsJGJBBWX!gj>JUd zp7O=E2pYb&r}<-k6x<)cG`Vm1`)8V+Vn={t1)YU%XogWB(-lRI!!VgARH}meiI3OB z>sPw(XyG8|ORYrcOghG0y*<|1FYbfm<-IT$d9!|C2EFNC<=n2X`7oiN|M8Q@R~}!X zLKD+)mZ=FX%*8u_*xAI!UE^LyYa2I>XdycGk;Qjg@3=)@FKJ>|GuuX}hfyCfepWhe zP++IDFPF;hir1(%{UTC@SMs7xD~aN`+EXh{6TYzTFCnVP?>WMweOUuQN zj8|@L<9T}*6U@iYJsx@F)~ILpqDG{-8ffP}er{}fyn1t2>u9@$oz7+_?1x6A8~cWw zK7rOyOmK!LSoEJ&G@B2(>0@`$mz^AoR9I%Gs+m!Wyw1I=fET zi51HUt7b)-jK^gd%A<{!?`soCL5Ng?^-WjoITf`E1@Sn>*#* zOO;FEDua5TklgFO>Nz!+m95|uFMRew|5(3&xi5MIkua);?&>R_T*=#c;uah?>jjKJ zPf8SR;adUeD%uwz!7;yLw)-i3UQpz+;M_q3@GO*O3+gX7n{aFbNXQj@~R=j@0` zI+5o0yv@w!a(8LAG|Lvk?R(_+a4%d7?_~0s^YiD4OtBz(wZ7;|Cj6%pA66LDLjpmu zMLMj~`XqJIVQwrpJ2yL%ohh6sRBu!@HrG>{)sQaFydj2&4bL>Y-}__8QnN2 z=rR`WmnaCl1>fyz!A2N~)t6R@X}fL9$pYeF%1Cr90iyD!oOaBS?+a(i0Z4Ku2#Lu^ z3!|%|b-uMeu~Efb{)8Fa#!F*tgx2qEvAa-gS>EL;!z@I3 zKgfHz`426;bLmR^?G6J#&^^8Mw6MhH`UdiiW5Dr(*rU(S~yT8vpN=E&B*>+71H%Vsc=oWM0iW3PcP zSs`ft=FRZ#>Tp~C;bhA5$G$=pT^hS^)8NPC|zf4xAv?quFJuc{?yp9 z5S;B++t7_-KHu7F-@bPTZu(xFibAm`>g>!Wb5l;+(OE|Dh*8tsmScUyw*8FsbQD$V z9}PT$lW~xLKmxyL+4H6G;MU#GwA!<}9y@@CGLnk=i$cp>%Gfi+f}xqY%n2<{M;I*s zgf54CNX4*NZOgc$n;Rw;;*R6T=8w(IHkyrAr6~=Hd9n*^b;^NX)@e&x_uBPyo110w zi*4GovrpJ|)~c9#TSpn(girgc{kWk!8ioe#F!RL$q|Q5rqcA(vyVgr>xZ?|K{x{x3+Mx|EuuCIPfL|xCHV_h(enQZQO zD4w=6WMo}3l>FuH+xH)ri5?$79kO>Oe~bA-p|0ujWFUmMdgoK7*~sViOtVy+_@&xf zpzCbpm&}OW9Xb+Xy(pZYnkqXEku3`#m9OV!$2#sOx3?>PxLhb)Y4^`%L*L4r%-Qd8 z9SLS8n_-p_w<>=qTAq+kPUeH?Oz&PPYmXK4V-jEHzrghhdQh^=JrS*Y#;J*^i(ThT zuh-1jV&TM>c6X{leLs^qk+s*@+i03o*(v+M_Y}>qe z;i;|7+gzN)j<%FvS0ATt9|ANF&FQ**Q4)MRdJ zYnwjbXYE^TJ71{QJkPyp7;XGzWln{mZHPOrf7}pPS(Nkn=+64{o0TUXKiBK`IgNBB z-?)%Vws)6yYvVcly6Z3M;zk%aH`c!7c$|2jT|Cw+joV@1x0*ZKm9bha$XIJAn6ck8 zv@S8}`DH`97VB>~{!`37Ll8T}ro4J3T$!@1Fq&Z!$Ow)m+Rhc%fC*{unjZx&BYU6+poV|+ikLE^Mm44Av-ZZ+L37wtFDEY@T^j2ez}FZ7#Rm412RORH{Yn{GuyW5S!QdjczmNWbN$ZD%)~dD zj=uNDk@fV->Gn>g(r$NITf(Rige6OVmq^h>D-27Ffob+L=FNb z$mb$8>F1Xl4-3nfhI+37Y{fRQT-^_xeqIVb4aY z$6x4mUiW=+wdZ&zBat`7S{zLoAuP=1e1S5=p5)0A5Koo^&w-N6=aL_EXQ#bF=@b19 zlauK)Z)rDl!^SljSz=`R?s3!D)qKJ#==*WJnT zbFJoT6mc*|BJ+MOjEcHg(>O=POoluY&hY@mf>`LMrbyM{+$tI5L;|7bu$uKXt?&BhO#OPyH(@6gO+jRne9_qNYvC(d`^I2i3{4v76#GIE z>RQJ(Ug`B(`}<7}%H$7HIw?78zv27&yIU{FHCp>nxAl_DZ5*70>qi8XZfNhu%+u0i z+Xl=N#n{l=J@1$Ataaneq@66ec700w<-fcEJ(nuzHxBpnr{q*r;dqFhjJF9Yf zCXA$OhvTV$u`0HCTjpz-0HkIEPp2`{b#?}%V28awdsebBbDmjc5b&;hz1?nBtF3sx z$aHHM-nsLii^9!b8xN*5d5{!Mp0KO6YS#Q-#=n?F-^;K ziJ)-4F!5_{{|Ax#lF$y^H6P47Nel6*>7RffQi+7c@s;%FIKwQ$gu_ShVSmh2q(nN0 zH2b%m-uEp1M^HS3->^$+!h#ng54DmzGWPHb`Ruy3urROdcDKvsj)UF>U2|;nrkr5V zAvz|J;~Fa>TL}=5f-6fE<^zC|NUjXLP03(hzt7Z=#4(WHfuOj?BlP?Q7F$Da6Ui~- z`MvF2TwgM4rnq;GKK@xEpe;H}4kg<1TzDoR1xNJ$?Vx8h&Syhln07^&6 zb2LRh2hKT)+_u)`wjD3VSOb|uOeJvys60MI8N?VnNUoRJ))6gkF3T+zXfj~p%Fu%0 z?@t9L2uUT)Dh0$mkc<b6ca(|+<>OJzQkVm={9|a^va4G=;5J-ZL2*p4Byw8W%l7w^UmmGJ>ad__yamO_G zYc^ais2?QeZnP;9kd-g1*GF6y7jJ3i`>w#K|TN+4RHPtggVCd%O=h;!cefesq z)8{%vZFFEuAy%0aX%a=K_x09X>(1Z3v+B{xshFrI3Mh#KBazB?8SCro%v3DI7&HKwrcw37Y5_SChz#DL$LDze|q|2>$6+8|K;u8Cwd|))+fZT{*lNXF;0?>a6RX` zpR3n-XLPw(RLUy;>ZyzbQy!WTNl{w@dD7#$$}m)F1$(4Ga~LuL#7AUlUP5s2-`ZO1 z^cVU)F*#9lT{$f&QpFJ?IV`);+KX%3|71HFALO&Krz#sdorz$ZH$yW9JI zY0{8;z`?*E1w+(HK+Y3YV1xFG84&8|`oRjGBJ3|-ybwgz-F1ztTIHFcDEW(^H1ntz z-Tms_>OZK)M}whBmiUt|59<&9-52_w_Wt>;&98HPnP`oLn4l!euRo|Ueb1dcN3Q47 z2_Sqyd3dFMu$0jr7{)&GcXq{Q7LR z7v`6<|Nehkzae{dvD^I3X8W{^`(aT6+57cE z_IJ3gQ$S^oRDqR4r5|ilrYDw5)!t88SXf{-zV?$>YPD)8mKfK82JvK11`_@hJi?7t zZ?d=lH}{47M&ju5_Ron|PK|a|h4sbk@4sZLmbIoNi>s1nU9H%A3x5UQVe_Nop+eB zY0@L>a8Ynb@Dz7qtE=yES?UF!be!w)^}-;btHiBlyCRV)Kpu$Ba~(Mw7mt)M0DkAo zqWXJcI@V}M*k8>4r|;P>9%Z4#?>Zm%gFj@Ls4I!m$gQm{27#SGrBYF{@icnl1|>vl z6R+S@(m+)Q$S@KDi^msl+*s>7yjKBDjpD!y@`r0Cix)Bjo;Z;=K)i5r9)ED^RN{r$ z_^|l%kBYDUP*g-!l$n0{c&84@!h;#+@9{M-+- zU&{W$53H}=haXkrC7|bz@sf`1ppqz0A&ewaX(uCw>X55u!bh2%22#fza9|jDRkpX+ zvACm_7f^@GAb1iZ!QlOc{I)PN812I}X~_4M7k<9@udj+n*c=E>a5gE0RYIvJ4=eD( zfR&XM&P4nJ1DaQ_UR8Fc#ZVuykmhsGJ@?jIZ(V--Ql!l_+KW@XD%H}T77iF717zi< zgb(YAympuGhaOs1$Hl+3|D3&m}tP22d6%!3Uy*h z0gq&&)FspKra^scy<3ZNdB%_gGMI9Q2qBVed8#hNGmxwte6JCndccCboe}@xE8@TW zmZ&_%e*NeWIV6d_xk9q^f(t>ns;IC~{`Y{vgj}(O z8~Dm#Ui4&tob7+1uSCcvx%R((O8lGO7MDLKIEuX=^CUU%V$Gj$N6#0`NW?m1Nh4(+ zv7qayP6Sd{t0hPjr4T^UG0ExV$&=jH@If~p6?t9956|(%h~zy|MgTFZ#7J;s055mK z-1l?De8dYxNWSy5_*ef>{OAQ?*zeoCfdWC^`U{2w{s53DjZ_{5MEIRKb4JZEj0B=| z!V4r%<|@6I#|e$(RIhIu)~A}Co}D?$!V!bxCJYmY0-!025!rX_%%5fYrx(S)_V* z$z&E9t;Y%yaj*|Qpi(;ZsPT-i-IPe43RyXqx@Lvr|Lj!1_NStCMozyp`2oI<(1^mZ z+&6TcSjA6>8n{&sEAmvqHVmW4{us^xGIYDUyZq~bTQ_ge?|A1OH}40_^uI5C6hkFQ zav#cNwq&~XLipc5poIgcNf%_zZ|3cn_*iym(BSv}oCHY?W8yJpDT@l)a8u#?j%Hl! z_I4fbS&oV^j?7+hUME$`t0rawP4$eM_kr=p8ghofE#W_?Fc~$ol>dg;KJP|0- zZB5vgaN|9#DPEh%{Vp4Tv;gT#l;h-~_@Dv7$+3&ux}BX}#*l$!%f{?At=WD*C$#Cn zZ|er1omElHHu*@TXPBO$)rc`e-(g+I*nA1$@YM$2-*J+(%qnb6qhT2CSh1&K5vfSz znS=}g_IVleyRQFu7@c|ah&2ttzfst$^KSXgsr;{7#twThX;xeqBnnlHY^jW-LGt9R zgj)4_9aG7)>eUDcGRFqq^2t+s^=gZM*dilUMXO}OckGi>YPXE$S zRp`blt|U>2gD+b=Httf*xG=C|<1CLe`NDXdl^`TOWr*^IvoukjnwsW&cE&^jsjxP& ztd`5Olau8bIFvN}g}EvUz?!6MebgPZUev{v!>dx-09Dt-T1NaZ0oHBvO4j(cuHE2-6GqG?W{N_LpOUm~YOm*vZ;WUD zanAm~Tz15XKz5`HdeTIeTqn~VOu~y7FW$U)ldY_>kY3(EUAS<8lQdzR0D+?sJ6NXi zE3dqQh01uvjrwDcJ%*i7fu_t$3sQlUhNyaMJ}+u|1^bWl*0=aqNq+cP5S_wWW-j|u zL#&y`4O73vQbA(I5i#MYg#eXM4Al5MJCOvGOB(cJ(MO4))QB4c26JO$BMqdNpywos zJJ|FlUBKZ>KAW4HTU}jcxL}xwNGjm7>L$$xR8XBIhF3l6OIb#gG39$y)@PZzA3!C+ z*un~rXlW#`E7GXS`VqANg2R9$m>?)1##2dKsBl#82vtH(1qUHMK}&c2tm=qR34Cy# zL|9^jiY_FjfvTy*V;J+0w8Tyw^VllA{r20^VJR;pv}rREAbiMVcq&bznEwo)h)`N- zGc)r47$H+xO2wfh2_4q&|Dr2X7xO4ou$gd88*?A^5o<)sKn_1g3w=aRN22iwbiDuM zZcB!wEW_XXtvFiao0ssI2m!P+H0008QX+uL$Nkc;* zP;zf(X>4Tx062|}luK*WP!z}i8B;1+1fkYiM52NeX-is*D57?zFUHn!m_D>ckeSS# znb=GwCYin{F1m4P^$UpFg$qBxEL^y<8>K?6Zc1@mMJX1#kusi}WF{%L=!GP|dmjID zZgO*hnv+Sx&_WWB*KIS=ACc~ijZ3xbID`|ZM;lHj70U?6}H0(&CqHj$O^;YcnlQ-hTO~i?b!T^tHpxmz6-0*Fe1#LFh9rO5;SxoS{XDDXT z(4752y@lRk3>p|z=yca1A%T8G&9W{Ltd4i%Zu{&g{ES&@0mC6smk)>P15C+E4rT7>&ewusBW0N z8nR@~SJz|(It_G}(HEM0C0>I)ifsp0$pV#Hk#dwKoJy09&!T%cP;I}rN3lzDZyNnt zt77TyO5M`ju6I@VYgMees@-!xE||~6Q)0Uq6)%aGA&J+;F7cY!L$fR5U^QceR8&kk zN*0oorDKM?#;$MX#=>UPHsA2w1!KlkvpHJ|(`mt^sIIiNNF8!}C&14h_qW(eIA@B` zu7r6JC%ykn5Iz7_=0b-%tD}x;*30EB z+WWOnft@Gi^6wYr^3F@rUjyE1e*o@J^!6a77vTT^KmbWZK~#7F?Y#-OWXV;SdDmRu zUiE6V0piS1m0GBq0F;VLrnkW=8X22{4R3Gv6@gGkEM7dpyE`zygB=!h=Cz zBw3~#wWRJ=@9M3(tEy|SdbPZI`;z%`&wKCuCn7WQzRY~DUR77O)c%Nibu*R|C(aUa zBI4Y*_u8vhueNPFQo(VYFbplrB1dQHIE5sM6VcZnWJpbuQR1CUG6nZENDl(fRKbNZmEjlcC?RV{+bE z9K|JHtyb&xI*fRlt4t=--`}4|BuHvi>3nlFnI`g%fQ08{GU@yN!omWS8+HuwI#Y|r zWX8cv<_{nwWETpBTrP(?Wkk|jQDjd~PaCUk{JayBu$s+g>7cNx2jx4Fi)CnrDLp7< zM4~^fLT!b*Rs%qHTOBdUPGD2CLP)?s0&-JvDV$dT2`ZQZc_(Xzytl6Pw}PWMPU1Si zLc_FbX1FdDv=%AV5tHnMH$^LiY=iGa*x9J5(h1zwXj?K4-&SJ7DA{eIPVJWb8Za&;WJc?`|k-9)%HG7>oOXXh~qq=skLa5IS`CGLBpWknvXWH)`UhNI_i&q`^SM#WRP6#rHvo7re1* z8e)Bu2v=A=2!h?ackkM@Yi@4tfd?L#oSa0LxRG(u8F{S`)fIrzX&^v1^!Bh!Ta`+M zMwgo-m*E5|mzN7H_4M}a-@pIVsZ+&baT)j6B~dLy#!^LeN<4EYZ(v|xdV1P4u{_O7 zVOwE7EU#U=mKL!?7cX8cl}c~5F5~!RM3RPcJj*Mg7+J*YFH{QW~XN(TRdch zWz@M0p35!5_juvL1-!{qQ&R{OYN46Vv_i5kw>bk3gDCRWTW-ZoUn~_dMV!LN)+(5)P!p@4{Cplbx2)w$}y8xC2!?4iFKSigOJZ-4KJ6DPU?uOw6R48D|;*dRWxx`!*=g$VF=u7$_93VxcSMOJ;%qm`jpP zyOZZ9$8MfTT}Te)2CZac>16PO2g|o(`;JnvRH;^=S<8?sLmBO|n3$QFxnx5IArV7c zV~(V<&e9YUH#r6`nHY_Mz5%GARZT>9NGq~KJL<906m@Dhj4eK|6gu!Rf#v>X(z&fI@agKCcS82Oy zdOXjAQ@w=IF zsSHyTX%K4sTn!Q(G08Xq?%?1cX~-p*g08e$wpFjykDobFm|wuP2Re;WN8)j(?Bwpq z6>l$RMlwMZWX@$41`21dIotbMj~&_IApqZYUB2~drCKZ(nRlmVrlPQ+eljb5Wv)0k zGbSC`;M62({B%B8V~!*lhtZ{RNS$MN*G0(pw%cyoyLa#W{Jb9YZLJubR%lh$R&(#o zMSW<@N*wb8w_z|fDj+Ml%E>!Uj`vO^Urj^_$)-_;aypfso}6Z8rJJshPD2L6gFY?F zqXDk*V1RU{YA|vFC&&b&|NYqNudPa*Nm^AVOVF+8c>LPdx&pOkXJ(H+bZphPhTIy+8U)vhwG#s;!*nooVhFi( z#i=ReY9!tTf2{d>-x+pk3hqLAN<<%b=P98~Af(p}+ zw)UEa^jx}hO}VnZ>d$&whP7(#_2aLzBy>w|DoEtbY09jOr zM5kcS-JbK$x#^Q>o!QySayg+@AF4-5J5pUdPHJ^s-KpEsDU?9lkmyXU!ma>q@NG#H zFg7+eIX4y7gPFG^_Y7^RZJNkWfI$xxr|J~0EiBwvumiig zrka@W!-UKcPRW_SYhmVxr?>vg&2HY+QZ`~ z)M^CDQ-R96ui1Uww(Ayl7iRCDPo7HjKHpo}09yf;RzR$1?A+Mg*qqHeres$t<>~S1 z#CQVEqe>`$Em67lV{JlCkWh9M^MMq38)rkTnBRSifrh!Yze!_4AoyX&SLA_RNE`t44;_ zrq&cH1-I;+85%iu?QyT-7H=$0*)wCek7o~LMP~u*S%{v_7^H*p&T{r}CTeXTnr$rc z+n_kGs++2I#j$HvbyZz3C`$mfL2qD{o&4V|shrefdsdPU0ZvrwZJT@CIk!?nbyFEdCGP0ml{OAFQs%%{|`F)FKq>5tB& z-$+|ktF*n;TkQ46eJ6Bg9-gVJt)!2nE#}R!MB9jzx|UrJ>#unSM-N>n&KKKgz!oAX zmz|A(di?Y4ZiF&wb5r?ayN`wS(3^7URZ-1yPq`be-*Dsl8!w!_FuyZbTNQ+UNQWwI zD+P0*JMX$VAaSR-@1j-J+X1m(mkMLjX(vKpg87*KvK<|^5x-=-na+j^j#MsJ!}5`x!#wvG8W16!)kxcMTSA-o%41) zv~&OPzAZOwIXiyNK517sR_Qd^BiRVEwK&i-W`dbh?>S{ZYk4)VO_7ia!7@kEMs-rSodaSN{=_u7KbcykR!XR!GXbbd)7Vr@;B!uX2U3~ z3{?|@iR5|dwm~{f98CGOuyA9swy8G!wV@zMC0U+q-MSSF8#ivG7qaifU5C?Eqit)e zGYJ^$wQH`q#&`S+nbDa8b6&yC-=Fu3Uh1^)sH@NrkVuavU@uHZmGzb68;Pja6d)^u zX(#!bSKC}0m>*!dH2P!X-V3f>Rw4;4j0~N-FjNSqu`5yHgde4C7H)bSu!u0*^2&aq zm<-m1(MeiuNl!Bc8I4t|thhw4iy*Wul05Xm1W*$SXn=fF5q_=y*!v&zLa+ZD{SoFw zY=^Y2_Xc{x5DW^Xt{7F}xYfiWTAK->NriH`%vxL)2=|tQ6Mrz&# z@SalrFHX1>C;58Pn_)rOBA$IMU~J)W2Z~a?sIa!!b1ut7uEAggk=SF-+>gyabo!xi zG#m^^USD_(jbbVh$oa3Hd*k-Q-g7>fStO#s;w`1#<7ubnwizvkd*Q}HEnN@U&ooJB zW5kmVh3P9>KSH58^hL<~~! zVQtR4l?@elu5q4S;8mxVQWafD@a)Lh(YaBa0MhS` zC<3eRYrQiM%=*{)X;iMIRH;{jJWEC=tl89Za(3pabbvi;30P4EHa2ipkT~eq zQbFi6`l~dd0ui`SBa#l{M)iT3aH&|O02qZvE|vA=RLrQ(KC=6uR#tV0n5=k4@Usp{%#@=S92 zho=+IC2>B0Ir~^f4+YH|9fAfi#S8g`!>=A@n!R}XA}e?@8AHd89YYgBl9Gjvm@B+9 zzaBYpWc>EYh<;gK{Rfid+nT)LOx29 zN=gWHS{MqG=Kx_J&MhiIaZe z{zBhtJ!T*oH4$-nhzB0*s$K6@9lz4xNK?$pu)eAulmd4G&ROqE?-08{M2&KZGoT?% z<>(|Pr43SQLGYYw_1ON5FTg4oQcNA`b3jetFon9 z-yQZH?X?P4I4#Qxh%fCgF@K~^q-2J+ZSE~IQ>MJsY<~9CgJ)(-v$^&8TLy0_&KFYI z)adA_9+YjZH)ui{?DMwP?2EQP=_BPRu%V%PLnU=8r736IaBlA0k$aBLj?C8Y2|XGX`7EHk$aM;ij0FBQgD7&%nl+egnwx(pmmW=d`9+H&wRI~Mwigq}5{!AluXQG> zf-FTe7@7G*!AM+XYOpp)6rYGncN8%!Yjx=6(!wr%Ps5It>19Xh9iX|^`5|* zkMf%f!F>I^dw%wfS>T(^cK>B!p1*It9tHkI4`YsW7&rByFms08msEjz+jCfXMFneq zaE_JK*shD#tCquw3jp+=QfEUTs*bdanw7X39K|46g4BnC!b8QLSF(%d$k1jrU|q17 zk_vYhT+hK8nKhSY0G7q?jy}1uZO_|Y;Cl;hT*MUBlYx5@K9uGZag81a4w4O0lp@u* zX%N~83IAo=o%j5j$JUcpj6i9H`>~86w!If`8*`4>$&(48mEO7-C!IH_1oqv|U}m6x zxH>jECLRs7$XfW&LgrY8H8!gTT(V&&-MEi&pr^1CnoY+^NFMEBHFu= z7Kgsd_Ovg=*TFE7z6m2xUb4a=R`eeJETqhkWyc)O2mVUZ2n)Hi{ZVW@u!u~=~sk?KIKj!%r-z_ZC5iKxNxa-%ihpl?0p1*k^ z*c@h#ru77dd_+m1HS>{KOq@HTCKatV8HgffC1@Fx@XMblMpe;8>beM$mG{EEMH)?> zmp(;=u0&us-hA`T*+h2r#?=Sc9rWIyx8qLjjuR_4Gd}aimN(|VH4ho^DGgy@D|Tu; z1uE=L&dwdZ``GN)W)r7!HE)H0W%GS#KP4me^ z%#IC?Xtc7Yn#?EsY2}yv*+1jc zDR5?a0MD$-ATRh%^#P>brr)H9}aFdQ8gQPxOpS@Lj75&XFI_#nS zs*g#4RH2qkb-=@6&qjw8iP+KH2j|5hAj=AYAW|Ey=kHsv>S|flv;#hlav!)}^*9qmQl6h1uvKV0OUv4jyw^xJ=6||KqZ9OnoXTkg^Dp!KGlZe_^mXwfe4AcdYAM$Lj0c znRD}D?!*U9)Te^NwxWB?_Rf2<4+GoMI2&zgfM)BW2E5hp4eRTIk*}Vyjzzc}>vh<* zlb-L`Zj}+KD8Zy>&ZYxD$Vd6<6VruKfvS4DqUj8K!sv|UOezQ1rAnz@4vG(!oTMXe0cEr>ak+;UYHrOR@yTf@NzLEV zBq4s4w8AcIh&r)kzMqH!dUXSmoTw5xA9Z@7p4_?oi61@@O+?{X;EdY1PS{0=7Io*) znA>nla&c&4#`DU}_p__c9-TS5XZD({>$ffx7H+@gcDy;_b@4E*4WBxOs5W0ampy-B z{b=-ZxN6nvEnBy+bm#a*xl(49ntjh)En7>R5Fx}lVjEfbP%(Wbg&R5duDmrD$poq8 zDb(ti;yq5IW~51{Dv3#{4Kfm6a_z2q@?ru?a2oH}zr()Zj2{@Ug-8d|?O>>0d~Y#x zKy5%(^_C*(kEK$%X4Sk&H!+)(+k1_+qG-;t#v-PAsiKD(WsQ}N%G6`7F$xu8rA5YK zCY#;AfA7rnY^|y=s+~ztuTLGDI(g@*nG-Y43GV5*Eb(PgE(TTg6|PI*RQ+bj)-hkn z0}1anZ~L}wtbXU`a{Kq~SEpmD>13)@D78$58~GEyf5M;n@!9QbwrzK|53C;GtN|eXje=6$JFXmQirHothjKYEs8%lYS=D_35DfZ{ zA4Pu?=OT`<{Xw{DaOkeP?%FrBue?y^^xEv2xugBZ3NPf@Wl1ZzDQj*|t~XVZ+vwVs zFgeN{9ufpH5d_|%`PFl)=2poqco<1W`48pNf0hyvAZrOS)Ko-WBre!vIn5{rJ&f}6 zVW8(%VXFaYk2}#<0&Cn#6cQ|^#5c4;oR?}HY#6&_GKChCiNyHWSU$Hsqczo zMK#@E2${&XSAx!IZUVqUGpnS^*uSWpnS=uRSu zeOt-iiACzI!W?&{%#Y4lx9EfstwY?hWb zp2E5;AQlBioQ>!2@n;{e-dTUel9)+4b9m$J;;p61KpD@FOkFC_c2Bk!tT@tSaV(*wgg9eZ zkZP^3RK7LB;p~lUSl_>4<0cL(w_r>?MWkGyQeo_h6S)Au?MeEy3~v?0n5cYJw^17{ z%5a^$9-PDmJ%UXmmb$)vMJ>&J4Yfh0lSAiKwnyXnudxrWx zHZXYIVEJq*m_h=&Lu*pxTC0X9PTf2)*;B6^X0|YNDhOHn;k)0pb7y~Fe^3t#g~pj_ z8KeONMD`o?s9rl$t&Ugg6ZPZ~-yij@mU{pO?VwseTN^pD<;eV#a~n2qTsypWWMm|f zOt>31Y=8%Dz;e=%_L$Pycw+9j`@iRgJ!7ZGERK;X5g|102i@Fxw)L72cIhL^;N4^ z0fo1{F}FAIXoPZ#&heHzz|WGUYWt(&g-E@Wa;uB(BI&+@h>-T4P1mfm)@RT4Odg!z zmc6l#x!JgBOU9_^^@l!XSIGsp)6X_J^ zHX9rQ30bYWF(iU3o|HaY#|6~an|0)rX=4Il@bzXBK~Updq-asmDL7+6bRd0RQ5eJ7 zXuSz3Hym_5eN~WDWMx0dAqtj#b92?X+Oc;Z&mGE@=Zj8Sxm9Cy(unVdsnmfm9Ii*( zz37BxCyZDC#L~{q=1+~>9a-6dp3gJ!sqKppHZaha&3g0mX*muFA=+)ODA9DnU4uTX z$eim=x?x}B9LMQdO1N^kM9q=X+Ztd|I!YW$;IlaS=@TPmpF0c^q?~~t6w5;w#y{nH zudEsT0!om9ry4+5Kk;5fo%F|ha*E#gGUb@IavSwIxAi;A^WpNXhxV#YQbv9y{5NkG{5kH zZ2y;nup$zY{g(joKNKgf6QC$r?l$tVxo6K-@`c@*t#*8Z z8F3KUhcSn9?vFWa&FWR$q?=mUJCHdc6PUO`{l2~nVeW}kf?K;yW1;z%*693AmK3od zRCy|)%8)>*v^rmWcd2w@%>W3sBBM&xotXP5wbu@EkDKL#pi&rHI3eD2(#`YSKGf@rQ=je{%J}a|`*(sgtL; z-7T$&aC;JovYe#~H{0$pQHZoqIz2L6F8@?IHMy$)IDM~$RY{3SKaBw)U?*(BYq9DI1y;9)PZrBb_rl^2z?8g^{Q zLB#DaR35Ba)e}1J_Pw%av9v*mayPXg-(S$pfNsbh&4+H^EfUrpvh=Yfs zLx;D^vt3Sf?tJFLXip}2ik>ZNN*N|BpX#2oPzyInT;o?XXo3_H_-PO=NoBMZBybpv z!D?`CZ_i{cyj9mzbYjp49B-TBZQu|!wHiedlg2?P7$hqHVmP}%>bk1M7NqR8+_cC2 z<;2qopT|p7A5x$|DjFJHgu4_$G!RCseRmo#$10sY{larE{ezMnH_4;bh9o0rDjuTB_?HQD+)mEdOZMEeHjWX+3OSSj;$zD6+ zSS%A86Icrg4QX{sUAtbbZ{v0u&kQhqaOa^~SqOsRYHcI_Q`Y;kWec}4H+k-1@TB}> zt5$!cFF6reJ;z2qnn}J|57yR#9Z~cm`)fmtAQq2L`PBod`NGd-Qvabp!;PM#CQmq3 zbaK^-ZtKy3LqA;&_N?mvElfSOk}i=>9ClM5*s`@UHoh=E z^MOQi+O@xw&Wx#v`k-xd(~%A(m^#8ic!3DYn4S$>QRMRPuDCwllD{r~Oftxd@}I5u}I9$voL#F5MzUMkvJD zXweI+we{uVJ^k6I^QBvDdzJ4^m^oep(^wN{P%rOEc+69f-a6#=S{6Zmr z=;haMn9lF@66w|1=NTW^H_jULq@NW!Y;JxwI73mq=-g}_<_1cmI#Y+%l3>Mgn|!&LzKMs^yNeM<=!}zP0yF> zZg2mtfnK^bJ|h{3z{@g936x71`MK)eO!B2f0^3Frw#`qa0@oXhod5A%cRfR=SGtt!>6HLF%{#S94l3@Ojk3mn@ClG&cQk@>Z2 zt$|*iq*Ts&ML+7ppWHC5C@Zv56I0o8eheE65(x^9Uz_7yPO-Q5r7+C19BuMn<}IP) zV?Uov{_ar!H!791tN}32Qdj=#Q?NuD0oHALN&eg@hW<<#CUHSPsK6R^0}AyCk6kmO zFBBHIcX8Oc(@##77J*!fazb6B6RR%Ym?x%{1D!K}ihsh4I^ z3Cpzo*YC%(GyC%F*!Y;Xu_&@ZRqRJA9(q`uWqY!fO8)Q>d{~u)^J1xt({6rZ$}8nZ zQ5cmN+t=;8jzjuz@xlu)un4LITS_H1x+9!Kpk0;*+96;^uhyeARqOs_`dDvvdS+~# zgM_O6`qcFKT>cj=_lY$_kGgnR@#$1*V`CLh?4qoL8YIyikK>i^;a#N@GwUkF$Hh=L zcQ;&DpU>U#p8#g4L_nnNWRWE(`+q}=bys>s4GCE{i_N~exS(f^xCA7URY zt5Yh9?4+hvjfT{iq)JqG?U|js@0+=JXn1&-o!QZ&N8vawR(ci(K6dWdic4}KKl}WP z*fF%AZd7zn4mg&)s$AYr%RD3Lgm4OZ4KJa5yYO z6WMF`Y_HkxpPqI4(>qU(O!fEo@J5E?Cq@)&cE*45!0QkC?v3@@lVS_xBseW$z30>E z-(l_J*i3M2@Cvq5s|9Oa`=X3ULz1-URqNMe{Aa4QZ8981nnEl=s8K=YNYaioA4bD? z9Bhs%$AVbaa25FudkI;{YBf{EPI83Ze@bZ))M!zxf$AyfMxmg4G_pvF1ng*h+xAbE zbAQHRewpS;RC4W7J>0^2M}sl;H3j427f+0QvKDOY^}luVE!Wb0DSGLpm&6z>9e5lv$FoV* z9@i?{(tjd6S+!`NUQ9t`7?hrUKA6sbD(U|FZ5z>La<-UVw|Y90UNx61Z`!z~w`*?2_EjDgh86@T-fMMA3l=zy`EfderhVEI&8C0{n7)fweq18p9+F|Q_0^O?0M9& zX6Qhy)5PQnjGav$8`$tbHu+F;-Yw@Cpq?GoTxYTx>_~af(JwKi^b))|VX$!WbY(hs zlVuG@*-!TNmqt#%}3?uk2Y-&(CyW@os22erydiJ1KU?6)e_GwI}c>C9NQrj)o} zA}q=C7;^Q5i*2Hic(A#hv5S%B+Po&DTnl&m(qB_?5aN17GIn?}8yEaK&pEe9krpd} z-L5?q*~;moYA&2u3UQ8?;@;{%zW{F3o8`?>(;^ z**)0*7b)*lp?cFd9=oMf`b5h6z({r`xk9yPJuGiL_pTWDdFC1O?<~N@}ZKD@if^U7K+)ivk@mbR35)l?tg;-;>XO zJeztpZ6Xs z$@vV&1iY5Q^R|UUvv~ z#K?9S6OT7XuF89WGl+d2DtZQq8V&aubh*|GN@JM|l5 z=N?b_&+ym_wO9>h(#M9fKWn*b7;U{hzJ6&vTs4Hz`U$Jyjjl5yRtlCI?66Yf*3~v` z8zL)J4Yzvs31vSyiC9c0FDiuze50250UA=$@=>HN;z-E~d1^?pi;h*SM_Vk}%jrP# z>q6Ej_C>k?t2q|@Xhf;038Hi(rj-%NH164Fs=*DatIGP5Ad`B?lOZ&~i!{h=a;=mW7jC-c zZ=!HApD(}i$}7sG$J_EN^?gbAIoXsoPZYAMbnJ5|5)mN%AX*8AUJEy-@%nsuxkv$bPQD#NhOckpes#v3&0ITG8- zw&x;71NxW`^fU?e^$_o0-nQq}GO1Owos^ZOk$aZsOZ@k)>DxX(KY8lZ*-HJMR1$f9 zbS{5?$O6azMt@HM^Rg^HJC!_=N*=T<_D>Cxa6fI|JU+PUefxH2UjM`EQ~uwk{qN$s zW8;ARpexE%yc`^EKh%@?ZY8`Y?S8vZnCNH-_wicRHH40TT%^fk@XJeG=klZ z#Vbtaxm9eG-GS-~GT7&wWfr6>VbZYu>ytKx@@|>pkaCe8|S>)N#3jwM}TvoE9&QngYqH%84%2>UY-ajHv3K zJ-b)0-Z)d-H*);jbF(;u5DV*_GxcDn<;$jCH6Zm7tTwHBaaF?*2TYUh0fn4l$|@R< z5yE9b!Q`j1;}@vZl*Nl6D4x{t3X(-!E;n=h*vspN*PI>uBzG1P*5?xbfwcbu-c8?w zICeM)UGX1B(!|-qY+w{-O!VY*Z*lCWtlA$xblVDidL{Sf{d*R+Zr$#Ai8tPO12+xNGF6;gtjhB;)(y+jI_>2-Pl7MgiRSCU z=8X3(NYyxHZqn46h>?<_Q_D&CA}kGwocnr;t9pBSylWToBT(vkt7qqq&Cia=`dKCs z?jxTrRPIV~D}eKvv8OymkupnSb#M_{jO+fCEa(;KkzWtjv48|XVUg~o$q<56C1Jp1 z>0*`a3JJsIN_g@34M&b`O#A=3Fa3fQ&7wlAzY>J(lzElTk~rgH>S#UTU8sehckCyo zr*i{?;(1~DGdw(a<_!J>*ulUG)pE7HzU)_m;OoWekNeqwoXva#gWK1~BbBR%*X*zp zTORw{FR_-F**DG+M~1C=mXyq7OoxnGfl-sF5FCS4%``6!(KeI(E)B`RN~J1y-Ids| z=0{(6_RGglOul;ffl}pM#^WH1I3{rJ^7hhg*9`ag_bkkx9=$jYdX2j2;822e?X%_D za3pW9pjH?}{gIV+d5T9Gm+qj&&>%`xQCV`4|5R#(?vP;RIroJ7G_N^MC%z>&J1zCT z7h@!s$0?;?R$(zD?fdRrf9l_0KgY*2(=)tR#C`hdXJ=pBoefPF%FcnQ9QX1G7wklO^nNtaJ29_Jx|1 zHr_S!n#`C`Bzt*C>8KGW3XYGQ_NQj{UYObtg!}MpWH=GWq$%RXHBs5Or`*@`;PjY< zB3b$K91_*^-4A?*fXOrv1Uss=A-Rdl4Ym44zM`c}itPD>u?BTbB9-!VpD;xrS_Tq# zb8qSk!jjE08c1embmud8mi`Gi=@)q1hZx-HWyQHgI}22QrYX z@;t|I0x3aL8Kbj-Nag6#u8{P!iHW&mBU`NKeq850=>t*l7;ZK4wM7I0X6E$+uUBf@ z!_vWh`*!T#f8*D`{)i~jw86cLYJIq7{Xe<#pAI>{n$7lR5_gVI;0;15;%F9 zb(|GV%6~Elr?QE^@|=>)iE@-1`Ab{$p+aHq{N&!q`pJZQs2ZMGDB!nC2El@!BSlCc za%^7a^A(<(ty zB1l=ZkUL zYqZ{;-6h=>lKn3RAYU9zsz(Ivf;?Ha0Ya9+5o!EC_;$2(T9En2S z&ZL6km1$!>7lUzFacd^Qs|i~8iQy?zweOfN9`cZ zIngG`O$zyy?S~{$Icq^Y+L&N6+98>xIM*^?8Y?WEaDp=9K&mR35$_j~B<_Qr!5 zt>(P=VCbatQaD*pr2LDP{j*F!2&}=lu*`oImcgk_+FJrCV@wnYrv%7RR|wLrB~$+M z$>>=uGF~n{(>9A5WOpPR+-RN*P`6}vNHs_duWk9c;P;fiqD zQQF4~$`YSj8H=VHh4zYYHVL{ic`Cl3r*Vo-BWs98{m{F(0So6MUUF3b7bWXRyaM*a zWSf|YToTeSLKT9(cExERb!26b5Rb%x<&Q{%d=ha+4CYJXY~C!CVGd4(gyAXJmcgmm z0sbmODjMV@izt#6t+KA1kmGB;oRO9GghnAu{Vqz9D;4Fxlp074Y?8X>N+GozR)ACR zudMY3qz2}y%#YL+y4B9N$>7pBR}Lw71 z21K8pmr5~b>Q)r9BChJ&h#FB#W5JX{*yEdDS5`O)F{rav`Dql4v!~s}4!KD-o22SspSDV<0vD#;R2( zG!I=Frkd8|7qU-P*XOMjpLPLY6mr}<)Hjka|*%GNqx4E6V^A1n#P?tU~0)T<{DCcMV{_4n~OHf4MISpPL!oz74@!$`o3{djhr0|22#KpZ)8gjc|5DF8>DTkX8)fnJO{d65+3QkPO!i^h}&-*VN|E}A1LM#=KDTWqCHCLdaWe`@NW1!Q0}B7JSk)XBEYw*nF)p=r}^ zfFmBKsx7WdH5XlpG4P#~cjhdGp$*a`O=PK741kGrLQ-TVI9j4K(K2!Y z##EuAPMS;;F-01=Ng4nXF-0qfq%JQjWja7NJThlA1Yrb94XXe4A}|P3T-y~HXH^54 z9G&cxOIwaknoJV`PdsjtCeuVrk!e~N82}T}kR+Kfn7=WY^f~M*`G$BC(b(F!h@;ZA zbWR*B9@j`ZAvxMbt6Z_>c+E5zr@pWZ+y&&mgfS7F_}g$Af|r79qemx~Q>1A?M|1`H zyJ^V)#G53OWG9RUev^=0F_X#UO+bZOi?p>A0Xm;51Vg`xm`oF)C?0P>s$2hjPm;s3 zJRifCm9o{!P^sKst*)xodgKN95v4iDnMow(e1A5bE+vzJdh0lPl_dsFQqyWPq8n;! zt}SWkAs=3hv0OAqYJ_byf!1}J&2?i;mBlN@>bc$d-1WKqzG86~FNoo}5Iz2yZOG`ftdeDMj`&z2 zaWI=b*xP%uw>O{7^0rT21lk0=3crg+B>bacR_82Mwf+za0%Ea_?V>dR2v?!mtAWB0 z1F7TVyk&Qc<+MRerisTRnlDo~UUbPg@6F`6dC4zdym@;2{LF9tb!o3T>DH|>=9Ir) z{-S7CrShRlr8F~h%JZJiWFA?y>J(qMW`)hbx+0NkMHn_)oI?p^yrY5d>~dwx!Hq67 ziXVXQI=ue+>wNc1!*rwh?aqT#{lOP(DRe>`dq-ZOxpwV3V_lb_NlT%V9U~V50F2HQ z6*{HKdnTuUY`Xejwf2H#KWh04%QVuZh-bI1tJkl~<$fxc`_{#af4OGO>#J6|iG;kS zx7kn|Rl4;~dfKqJk4U7$s(}uU9{|yyPQ2>iGK<|f#x`7UXA*5e5-*!2@Y!K{8=n#= zmw9D+-s0! z(62PvV_6?9mmfNN_M4NFf4F}A*;T7}DS*7SF^0g<)<&mZrszx!LnU6_%*WOnLFclS zWXd^v_AJujt53wWLx55&0ig;0eg0)enL3#6{AR>AbP2iQQ1 zJiN~Q2v?D{g6w_UjKe_sf1?5_2&-}2wEKFUYxI_qC%4#H(<-aJ45vhU4h zcmnRy0U=;`5P}wLW1KBjPpe0lqERBIrp`2~(h-yFL}-fM3?y~AKLb@*`19w_qe%L0 zHp|zO8f#QKvrIH{Mn`h=wJp*{Nhhh)3JcNs2hL6WiwR4BZYhIyZ%3_*xn3EE{~c;EZjbz>91Ibq4CZZ8#9TmR_;*3TS_ zy#eo10g4)RRLsM!W79Ys70V7C=4-S zxY&f?^wMio?J?0{rsnr6!WxHXbXk;f^R!l9T@61vpXVh*jm4XxO0(1T3XD-Ck$B)` z$Fsw8W4}ITtuvS|5qa)Mt(VvyzPZ2$k^fik{r@ukCA0{p(7NvYUYZs>Nt@m zPQGDq(W;e^$9pkvy6GnLrzcXjBJ3%7c`5HoVAD-LSOoFg9<-f+ZdNx8N1iFi%wk7) zb+Iw4Oq7O6AiL5?zGeZ0Z2&lKN>S;;KfVxN*Iv{H8BZ?UWPRm6>#j%Rd6yT*qW+ru zzJHtgl4Uo$53hg;AGk2_v)eX&-gU7(U1Y8^4V&$z6;JK%)7jB@JkEE=> z`?xjvcf7c8dARPSH1@xEANpMC4_aE(fV|(R@~O!g-hlEvZxrfYIhNZRk#I}EaN&(( ze?}ZI*81ciIOECe?8q@}Z&j2=aWK)D&>}i06nNKzH#neN8H-dVdR0nlxNHnTnjMlv z08lWdP$Ev?%&nW9`-NHc!p22KmrT6z9_!hS)<@1?60jXWwCH~DbEz*{_HcU{X}f1C z_Y3_!2Y3_n;z!9^u!gTizE<{&?ERU644{T1$804{(c2b5=#YUfF%`_*Y;JiOP_bC^ z{du$Nh!fMMB+WuwW*lDPoU-R@RG*xTwqMDxs_(S^@_y?hf7Xt5`80P$e%1T%=Xo_o zS1qc__2`a?x%X~a`!!462G&lS(IT*o#SVOGR$1&QtA*kukkmQU(bY8M+jB*EI%q#Q zyGBeaGA~v?kYBiOe!eXCZ5MN=24sU5L$i*UBy6|Q&l+cbTdw#~xx;g1;hUfB{W>)O z02ic5L_t)rPF#8`*TT)-;-82X|G3?vwm?+OwsM7^StxSCNZcT80SLodLy;^WaJr&1 z3gX2EPDeo0*3es*q%9_F%qfl-%sVHESa!|L&8rVLsaGp4v7FH)#VK#&sFP-1N;~uL zjJ3YAWTiRd_gY`QVWq(ImtXci_B-kSVA=9{w&g<*?VZWLFA5pJU4mg#=12lx5oJN~ z_~Vb8*|AHd<^~G1wat-guxX~2At~M? zS*#WY3dIi>1S_*jR=rwvnaW*@2Cc7u-1_vZQhWJ;LVm^j*zco7YjAnUMyccFOCPFK zzsBLf_)Mu;fKv@7<^UD4*b_ z3f25zGBjl*Az0I_<0hw_^oo_cH5ctxuXlKY_r+>VmwkQd1J-N2NOjr3>!&{J{rK;v z|6rwBRM_gl%?qXN>g8j4Dc5R4^T<_fDK}w2ynIo8Tqgvs? zf^-j9ypDctpe`@6aHI7%w=Y)(E&h`Ci9ckgVO`pyE<$AY<_dRmSi^KvO~2t0U~!tG zBpfBoMp|(1em5V5E1^ZK8J3NW2Mz&l-g1W$;Fbs$HPuRJ?3V=)`lzfk5}jaXlQWKELN2Q8wzVtpkg42^Jz*!NFb@NxDzUTDEoTl_6E}~19rS^wml-L=F~g3oxL{9@{NEn99kU0&eDceQ(JwLj&9zf?5zYguVjqL}U5x8HEX z4d{}av51e&28z_<5>SStu8C+?(mcQ#{*u6*kc>iRL0n6>+;R)wzvH$xTUb0wC>OQ! z-c1==qBt}mKkDTQvEir+bn9lxt-A$R6XFU6WqDIM+}Q5nyCm^l0Z#m|^~mNfB}$7w z^+nlftZZKFz)=tPmMg>R_2Z2)*wl*De0i)1*<~~Mu%#GSrX?O3V7bU>paw})%TWP_ z1(4cr*VYQ?;+oURwoF~6Ewd{mor(Nat5%^x^ja?S&S1RcF?%P9LyKxuwUMHdiWnKz zRO~F*cH0mvO>8e)mp@24F_RN)w7&X7)=&KYBBuhk>Hm@U(|?-!9X9w~Ypoom(mpfqx?c(|lWwPPS!g;I_;- zBynU)6A(a;L7n6zlZi^jE|x0kRO|+QTsxxBc$%bOMT5GZ8Y1HnfoKNe)onOCuTpTV zCx65``9*6F`$QGc;xBmr@XM*s%g4grOo+04h9`=iGQ=Y;Jr!!K!Y{MqefQmmb)`V- zk{lDrWPoZ*wUjQwMFTo$yveqFC!dg9r@pGzA`5jG9ub{*>DZ_-HHuaj^VzDT4)2ge?&caVHE|8FRMO-VF_0*d zsqyZ+?|$Z)XE5p5hI8l6u{z}=a~4)F_U#zaSmVDYLnmd=p)qq}hZ6!UvEi_j7u^v} z)6BYc4AAPUGeK$stO4sUK5YG?S1iWj|K$DLpNkfkf7gDa-X(uRzHP-?$1xi)u{yA+ zD~ckSAhk?8IgevEa*t)zTvLMG@zm)w2qUSh#=}6sg&1 zoY`sdhS=1NI-R2!m+u8qfw*Q@qgaY{Q&F`ojV%Rf0H^|frbbp<+@8YN=jO|NoeB?~ zsw)^;Dv~TzB^fdf`E8Y}GSDd|P17bqaXhXN@jgDObrr+HO!iZQpPnuK2JdaWifDQL zaf9s`Qp1isPeP!GEFxT4zM?tAN|J%Xq_u9{I(7nj0iuERHHNS~Y5+{69YWpgWShab zdGW;;X@$>au{P$xn1#}f`SPwx^)KYJ!xA8`VLBJ9tfAdb%u=UmY~vBb_M$3Raf&>g zw7&3g^k=_3TYNx$LTOPuZ#uynfkgoEptAw!XpsoQ<i0W3{G=4;CNrOApkTCMNZ9jr{&8i zS04D9&!697{qAS1lRsf4(wFv{UujExw2_^vpGx%2=b9K z9s_(mI!9+};5L#B5|iIG2Ru9{#BC||80`A7*yQllW?ngX9f{W~5E2Bo&PO zvTXz^UPXX)7tz%r!$fr4olJsUL zj=gIflmGZC>vKP2edp6wZTAXJMRmn;*_nK>F6o^#Z}T+uVMoUojYw16H3I+S>uXnl zu9?8A0T*!ZnhE%cC!V0~Q>RYxMRVpw@a1#)Af+cMXo_h}?ebMx6sk3m)`!VaUK5Lb3mxt>veYUL~!4;=n z`#9f+z@-|;08@r9@vO$nmWi7>%fNINu?*Htuv}skf&|Yyz8k?7)k~ED}4 z#c*eBorAg>12wL)CbZIZGhu$|E?o?%nmcJ)TGzp~yeZFn&8zNNcA7kzu>Rc-Szq}@ zYwBJr?Yx~T)MWbZcU_l9c2H!Ka#gTsL^fE8{TNoYEJ&J_4p1#A#Hw^gnP|BcwQbur zCPLcdz8FVus0&UOs31(I-5?qat(`&8PG2XsR!*D|Ryrglr;#furKF{ZY|E#<6FSLn zC#yfk10=0RTCsDM^(XgQU-+zb;YX~b_tq^+TP=3RqEaUD3~rn_@raS6$!W}y@w${T zpXpm#dgH0L3x|@WC zW*X9M%D9=^)?&=GiXvsSn=#h`N=CfY_U+8Gnf#f&wS6(@6e_&U`h(9}$A831^uEQ5 z(#1_LPPz6g>BLb!=4JY;DL0ICnIl=FGK>hg0+`kC>2L^&-2$5sQ@?8j9iu<4*I$1< zi&731uwO)ZAffvlIB#5VEVGhh$>e`YRzAaGR0Z}GU%kfq?Vq<^`jq7jH9j!g1z9Khw;(49(%ygdT+S;k zI@+p7q#0Ktcg1q+0tD+x()zw2CJ`8I6(O?)r(&i$Iy3L^Cy7W8W`3|S?xDl;Kp??1WepE_bH&GAL?D&-qI3pt#wJH8MktR=T zOAoQeK#Ri>7nJ~RYQ&1+FqXPRly~%}Pb3rnc6Ig4k6M5IS*x~BUJcN_%}b!V>cwgA zOR2U6x z&GJ!dtM9kBPA&X%E4}9JUzEnli^rYlKyUghYJ1%#fyOj%*pwwnX8@PcqK*S&8X(RV zf+P`EF52(I?gA^S*Ennz4;?zhVC5(tccOR@NG)oz9ITEXIZ+5(Xbt|AM?{AW7hQX$ zPNqx_peAl2e3&@hdp6zkTT6Wvvb}+~Asv;o{=ZB3v(RSfTq@GoU{ZWpglUDLY?d%6 z6|2j*M0uza{ZWcinPPeCO}_HJO5t=ibAqouYjYZJNVmFF+h%WJs>o_o5@@hlmEXnn zHLC!{nbQ4|91}4(O@yUbfBMU{g?sDv2TbPoF_N_ZxG(*6zPsGcp`yvKsVNjyo8j3> zbX*oXuCHhgVB)N7vBSiPy!P5_C>8zj(j`VAXEl&|Exb1fws5PX>y)#|EVegKq5f+x zFzKdJ$uP<^5d$R=cwB}}4T`n!{c>OGpWD$Ho%4OXI?;>$na^>QV}&#{R;`-PwktN1 zafV+8^>9UPZ2@?4Xo)NPMc?C#K4seqisg;P%8xD-=t|rRWwKn#`_*0OP12Vyl|G>U zFTVTH9J6s=4B0xfiNDJ)4-RFLM|=HWv7(tS#cx3t%QfL*aj>J4{mEZRCT4N2E-qP= zf-l47lExR!ao3lCsoc49r?QiE1|kt%9~(sxTMKq3#04PQSgH00A@3|&A6j>_l2y$@ zioTt}S4xR%!kd|Lr^7=P%HlOM<+dzwa=8%a52ccj>Z(3D8YkbvRG9)vgnZuI;)6|h zGOfaR+$eRa2rks#^y3-#|F9yqlW%bdt^NUP?|$_uWz$qR(VO_?OzL15il~|IHu&g_2$`&7wHB$vjL6dlMe)|$SFfKgl@8hNMbACp z*%g*VuFa}vg2k*=ANAaXYu73jp30O=8RX%Z=e~g#k5R`?EVwDw$q`6&re?my z?c$hp89OzQ`HxnyUJU-VWv}qI$YLxjOmXhG&l=>(Yh$yb3%!ZY^roKTdHY!IrP0~j zw{P!+f>qSRcO&4O$;v`f92x9reVMq=; z5R3t%3P@@ZmrUxSU40gs0k5#?y^6RQRV`gz^9@?T2}Lx-Y@+CDJxp&Xj7Q*0PZsga z&baUtR_00{FV=t4ve$M3T%DZITD8jR$yg)u;!R|Cve*AiPx@K)eDWn)(AE)NG@QL{ z+qR|}TDl>Jz{mp#IWhQ{CbhzF-%y0>b@_IH*|KE|{vCXK#Fqy)rL>3{z#Wmx@##Em zJWXMjh(a6<53d;<95{9A6f-(Nv5wW^hOslVJ(=jG5$11^-DGc0Ah+0uXExJ#pNgm3*CImf7A|Nt%n;U zYZF604*aI#QN^GglPH~p6$pD2$wxFn$~&N!XGph$SvBMo?)LD02YJQHa8{;plS zxUKQM?|qN4NKRLgX-M9d$D!}w-qg$Wackd>wSglk5|J_hGJ>ooI0b5Ydx28|0t7q#B*!v z)6JKM5G`VaFnF5mmP+Gnv?-qv#z5f#SpDcEmC=pvIGvE3W=194{K7WU@qt9*Adf@F z+X8^Ge&dZdZr{EgpRLv_02+TBG9G6(=tTmP_wTkJjqj ztKmJh@a`bm9Y&kgD>~FO4)LKSf~;84lw*&0))CKnCh0xnd!z6uC#ksAd3owvOi?oh zWnFG#HA`g-A!u$cva)3qq8pxgWkeh0wLvmO_#zGi@#&|ZX7|aU>4Y>@h)@dty?gia zdNL+mPK4+YynHQS81!^3%p=yDB`#)p`6_LVY89@$O1!#?vtdeMS(Ay=$>>-V{Yen@ z2I1-;T+0i(*ieKK547@C`OvZRjx)(8sXT|}-i+%M9Ogj_v8329DO6XkM(Ec;lh+uL zWWgR+Lo{)8#zT{O5rIP-k!js@LL$oj`}ea#VQ?_Xp>G2T!Z=!k9~Ek?GpcBUsW)!1 z4Va1OUWF0n`2|*|40pbSXhr#+<5eOuP zPLJBIkZqalH|QvIf~TH(ium#tRo6w?EN-dw^2;x?9;Umr;k;y0w*sC^LS7DlC`>&q zg^2iL&g0MLK`)i5{UKU~mxFa#SQtSg=tx7^cvF{wXWW?0itf})0UOBW!Q$1af);_t z8m~l))TILw*mdZ8pK)v}jKdCXu@7E3oh!urc7h=UM8~R?`9-(eWx|US1h?p1^GxM< zQCl1s6hr1RU=-;dWV#Xqkxc3?Q>(KfmR%@gf5timU_@6Z-JO4>PxM()^)^9%5iISJ9_9L(5aH`YEtD{*~a=@GFM|9uW{$ zXw2jE{NTjlw~gi2h@?Oh+NL?3AFp;*u# zi0otxsWwMxXW^n8-8&X#bxY_$pmnL0N8A8*AVI0iEw4<)D~-I>_^*_%E2_tdH?})$ zQ`Jr3rr?bHM3>-|yS`l1X1CRhfztQ4TZ4%LNvH}fY3W?C14Tx062|}luK*WP!z}i8B;1+1fkYiM52NeX-is*D57?zFUHn!m_D>ckeSS# znb=GwCYin{F1m4P^$UpFg$qBxEL^y<8>K?6Zc1@mMJX1#kusi}WF{%L=!GP|dmjID zZgO*hnv+Sx&_WWB*KIS=ACc~ijZ3xbID`|ZM;lHj70U?6}H0(&CqHj$O^;YcnlQ-hTO~i?b!T^tHpxmz6-0*Fe1#LFh9rO5;SxoS{XDDXT z(4752y@lRk3>p|z=yca1A%T8G&9W{Ltd4i%Zu{&g{ES&@0mC6smk)>P15C+E4rT7>&ewusBW0N z8nR@~SJz|(It_G}(HEM0C0>I)ifsp0$pV#Hk#dwKoJy09&!T%cP;I}rN3lzDZyNnt zt77TyO5M`ju6I@VYgMees@-!xE||~6Q)0Uq6)%aGA&J+;F7cY!L$fR5U^QceR8&kk zN*0oorDKM?#;$MX#=>UPHsA2w1!KlkvpHJ|(`mt^sIIiNNF8!}C&14h_qW(eIA@B` zu7r6JC%ykn5Iz7_=0b-%tD}x;*30EB z+WWOnft@Gi^6wYr^3F@rUjyE1e*o@J^!6a77vTT^4_!$_K~z`?tyx=)WXD;q%enRG zd-wF*dS_?7_HK5GEhpaC2oWVRNGJ~`&IN%2LP82i@J1va-~|bIH1EJuxX1xTLGTiR zgcKw~Y$qgQQQ{=adUkeZXL_c4dis9)T&s$&PR;bpUcHtn?VdiTE?<51-|DX#y0o;! zIcJQK_bW;%O6mLc`T*^Z1Vp6}!UCtYwKdQ4@cjWGALmq*e<%hTu=-3%gLo6-k1~j!=Ex?V(W8ge)85m-53$tV*!xNti%*6{TQGlQe-T-Qf#q>z?t}+!b z$6md_C=*hgcG16@C!rX~8OJkCF^#Mykn^-5l;R>HvIQW1oYkB=vl$pU@B!!P*D zOUn=sYN()l_TItjp-pTI30qMr(^{=osZ>s=pDtX}LOFpGvfL`~UpWX`foFS#RzY1M z*0W1sX=ANbYGPCNtv*r2b3En1D6;8KCkMsD z;&VkTxcXv^HF(N1tu7&N*|%a5!-OCyzO=j~nu1TcVrp8N(E*8PF>Hm6D47uz!*CR_ zsWrCX0T|reTso>A%?|_grv;jZ36Hs$2&-)QO<#r*W3@#KMH*zrgDlM4sk?l+Rk~0K zf*|h4FdS#q4e!oJ<54n5h(+v?ExDX7&+MT^5(3d%Hnry@6jWl-0Hsr+{SLTP`@Eij zkhGRa>N?aZtQ5AymfVpvCEk)(-K+*b3}P#`tM;C=9|oac^63~OC4_pM9ml%~uds|| zKbroSPAC~GDo8p{y9b9536>3X2nA-GI;k8<$leyVh2pthkOq-ECtiJa@H-KrZL1+kYf$qI!6-`w1sMpL*+=D|$W)fgrS_F}B9qy@S#!PV#tx?AYwK%(QxyfDkB=hX_M}jl z6*dkfk0!5_d?%asqr-?t9IDX*g#2LMoWb!6o}CP`>2MOxBfa!gLKnyJAmsD(FjYc= zO7*#VxHYE|{LjP#SiXnRBx>Q)@D>9INED=RDEBoaL1B`$kW z5Pd?4$hI&5tX3&~CJfhz>~I#r+>GEU{7i00Q6qAkW!DMm!4()`Pz{2DHiCep$0^=@ zzgF_sCc~~AV^fkrc!AJo%Y}n9N&2IoWop;5+9D~XM?I!&-*;w5!FV`vxyv#D!8Zmp z{7K*yKc>hkv!3B>C5%56C9iNgw)l*yB2(HE^puiVjE2#rFa#}UGTVd*HK&}kA!p*D zMX?>N?(Vk4euNO91X7F!quwldL5dQkWxsemm_HW;4w4V7$@5;aSiwpxtcN$7E2&)Z zoWQc}!T95@-J|S6lwMM5&S=E>98_GdRPslZTF`o}>J^GFDzc35#4Vf9w(s>gOPkF` zx$GxN3iYBOg=@7gEB=xY^HQu21-su25&@6OW-sjMdV1F(q^et+1u;r9f7VcpteY0>T*sgyb&gUl89o@#EzGS!&-h>o6#}nJ49i+lhpz~ z4_t!Lpio$<7B2R?+Zkdj(+OrQf5+Bh#CfKRCh%|p9d?j)0&w`>#ziZLk z+IaIO1b;18l?_MJYWdK0p{#kD9!;jQ+W2(2x|u|sG&#Z|1-Z%;jKm-V9LOh6DHE7S zx%#PY7f3hT7hWip;uvvsW1}6$t7-OPy`D~nZ&7CU9IPo{jFuVV0xBh;T)&?c(*ZTe zTPVyQ{*(!bNF?bxp-UFu#{PmpRH}aVxcfIcwx7p5c}MC|%tXuLyNsrizT_3^4ttxn z+wC+XNm7;c<6M0!pZjd)r+rfd`xqup(O zXO!6mkI>cCRYI%`S&rUxkeV)p^k|I7)#6+LLRp$=p*&cyiNdR%3YqD|R9MIi;iZUX zc}aE9%!i-HSV({IvY2;K1M5WP!^centhD`~mBpyDs?#?d3t{qF@^DBO7Mq{Z!1A=i z2m6JPKHNd`Y&tMGIr%*M?6U~X{eFKsotDdGINMpTr+Ay?1|v_R?)uL@aH$|wSogHt@B z4y6g_IF30ud)+?~n1o>%$FY_c;6Mdc_=ZBE$ET!)ffzCvAUNp+98VNv@n$$OAne~X zX4BRA&-VteZ%;Pj7!fjLY{zxqsaD@=G=^9Q&Ie{B1eyDb&gHAsDn2e=yjZW-(F#s* zb#qJr`V)#iMAR_4`TZYsJQtS_`t|{qfQig->?=6!?EmWC_MdFO91g$oFVRYtHHEa7nr`tSp9x^w3a z2mu-@Fl`#^Q3c)5KS_dFP&gjc8P{>nNDEE+U8tmz^na`W!05MriM-n;&m;HA%K@$Y ziuZSKS)a|nXm9*GmEwOemLI9X19QOMA+3##4TKy(8!;{PxR9EuL5D`8*6T(49UMeq zMySwi%n|{J6Yu!OIBlo;>~yY#OXTaXpL};{^$Xscr<}Ab_m}$KWe~0wPkR;9~)DO0)T%BSyaQB_cTK zklN?Huf1cvcD@M~6+|y8nF0Y&7XHIl5Ty~{QDuw+&-=${nV@ogef{qC{|-m(d04>Z zlIf$H81?-Eq=o<;sxa9=!u^Qy(@&DG-e~;w58nKq^_hp8ldO%50hFLXrE?+*S{xGz84 zh#CyTu?15@Iy!>@4hTU<2>eD<=V_r85`})#G}_tCQn5-D;?Mbs^_2;50FC&G#FqE+ z|y1aj+`C=2*v^^O$)Wyq(KM%njoWVqG0@5NCd{8R2v{I%Hs zRNTLk(l!8q(p$BG!{0I>q2X|pBa1l3#S(5~iwKZ7@-r6ce>B7mfW`3=uq|ti~|F>=4fhVFT+z=o-vB}XCv;cvD zCF~4RvMg2b!t2-SakTB&L)RJE)}YzQmRk_=q34cKWAWoln+3cZ!!pc_HZh0I_Z

    H#lP0P-?ObdI9MARa57CUw;^2v^Mcib7XIV{fr0h)>({&8-h7T@ zr%wBEQ@y!)sna>Y#2AShT-iB}+v^>nzu}bEYi*+7+LN(3b*LVc&Q*1nIi+T?+SV)mcgw{K(VFfydVNWyx(9{6Ea?C5K2>pMF; zNRG`&ECAsc*|y;X1dKw#CvbB})Icv;!TJY}|D%v=QsG~b(HWz-FgrvdjhHA!PBj1X z07mKcz&i7Dq6RV3>#BU`0T06uO$euG1siBtcg+hr7&AYu(7%Q;paHTVXFB8?Xns1^ z0)qi*Wj)XhpFjYthBiUbhz*p?QsY?H10Lv59}Et=)7I7&bZvMeniyO&t9dR~h0h0Q zOOg(%4KmR_h)Pv0=Xj`Cb mqNcYtL{m<+Z9q=I(ENXu_dZEj@>GQY00004Tx062|}luK*WP!z}i8B;1+1fkYiM52NeX-is*D57?zFUHn!m_D>ckeSS# znb=GwCYin{F1m4P^$UpFg$qBxEL^y<8>K?6Zc1@mMJX1#kusi}WF{%L=!GP|dmjID zZgO*hnv+Sx&_WWB*KIS=ACc~ijZ3xbID`|ZM;lHj70U?6}H0(&CqHj$O^;YcnlQ-hTO~i?b!T^tHpxmz6-0*Fe1#LFh9rO5;SxoS{XDDXT z(4752y@lRk3>p|z=yca1A%T8G&9W{Ltd4i%Zu{&g{ES&@0mC6smk)>P15C+E4rT7>&ewusBW0N z8nR@~SJz|(It_G}(HEM0C0>I)ifsp0$pV#Hk#dwKoJy09&!T%cP;I}rN3lzDZyNnt zt77TyO5M`ju6I@VYgMees@-!xE||~6Q)0Uq6)%aGA&J+;F7cY!L$fR5U^QceR8&kk zN*0oorDKM?#;$MX#=>UPHsA2w1!KlkvpHJ|(`mt^sIIiNNF8!}C&14h_qW(eIA@B` zu7r6JC%ykn5Iz7_=0b-%tD}x;*30EB z+WWOnft@Gi^6wYr^3F@rUjyE1e*o@J^!6a77vTT^FE2?%K~#7F?VSm5WXE}!``t5x z!Hos50QSIMBzL*g@({&XVkn8SmB@|`J5lT;6~|8O_>QZb@>woPPAXNYxSUkUm8&F| zRjI@&U3M(Xrp4HjC`wvVTrT(Ea!)K4z~UUtU}iAaJM;DH!NbD<*j=t^RZ^AK>Y-ov zfA!yg|NZyzhT723kof=U9yFk7nhBU`n%&*qwr$@7%69`q*L5WGeV^xdgWuhFgkiY8 zzTRv$O$5qjvjYPIsO)Z7-;MexiZYpuVHmYq?f(*G(QM>#T~{hg^(0b~cGL$j_ffSY zsk;`!h@OO_dUn9S<&xZiV8R;xC>2SAmr9CLQr(fEvZEwbIse3D6nQK(Y7FwHJq4rID2c}>IIA)mk}neD);3PrUo zYsYTfj`kLobO?ti$N+twRH>v&-a@ALM+(`H2i&%0DJn|DB%jVG=#CO5P-UX&S_Q+i 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 UcIYP4A^-pY07*qoM6N<$f{W=({Qv*} diff --git a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Small.png b/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Small.png deleted file mode 100644 index 026e5582f3658791990ead3c9f1240545384be48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2377 zcmV-P3AXl$P)4Tx062|}luK*WP!z}i8B;1+1fkYiM52NeX-is*D57?zFUHn!m_D>ckeSS# znb=GwCYin{F1m4P^$UpFg$qBxEL^y<8>K?6Zc1@mMJX1#kusi}WF{%L=!GP|dmjID zZgO*hnv+Sx&_WWB*KIS=ACc~ijZ3xbID`|ZM;lHj70U?6}H0(&CqHj$O^;YcnlQ-hTO~i?b!T^tHpxmz6-0*Fe1#LFh9rO5;SxoS{XDDXT z(4752y@lRk3>p|z=yca1A%T8G&9W{Ltd4i%Zu{&g{ES&@0mC6smk)>P15C+E4rT7>&ewusBW0N z8nR@~SJz|(It_G}(HEM0C0>I)ifsp0$pV#Hk#dwKoJy09&!T%cP;I}rN3lzDZyNnt zt77TyO5M`ju6I@VYgMees@-!xE||~6Q)0Uq6)%aGA&J+;F7cY!L$fR5U^QceR8&kk zN*0oorDKM?#;$MX#=>UPHsA2w1!KlkvpHJ|(`mt^sIIiNNF8!}C&14h_qW(eIA@B` zu7r6JC%ykn5Iz7_=0b-%tD}x;*30EB z+WWOnft@Gi^6wYr^3F@rUjyE1e*o@J^!6a77vTT^20}?hK~zW$g;qO{Bv%>z?yIW0 z`ZYa0(=(oZ*&Fz^;57)zLV^H^1c4AjazNw=A%u|#uth-PAK<_Ukcbc&BH#xQcYOe8*kdU`71DbTGixH4iqa!1JmiYo_;qJX7Ew)Pgl z84odB!FEQFVtDVd00?ir!`deuF@gnyA_*>93}7u1_5}7GjQoHHAM!GnLgIVQrd41U zn3lix{BwK8OGN<-^-g((+I6e@A&oM|+RDL#=xIqdbrU@4Z>e3OrI3e@ZN z*Y&#Or92m_Vx^hMWp0CwRY+xopN!qC>vBgMRyG}8h{8tWtz(-QHz8~oRR^xN)Ah7^ zQ1ObH4~?4|f9d5+Tuzs4!jw?73|{&$4bqgf4pIxgreauxRVd3&r|gKsgTu;f1WB{H zt@tX2V`HE9m#3_$C?#gd;xM>=vp7rPuKi}QF{`FfCuAGDBI~{&*@ZQ?I2D`Og6n7+ zi>!*#=-5{=G>>_@9pg3c_c?FMf+SxSMVImCwCRN~?&QDHwQ$JJ0Y1zFI z;t}UZL}MRL6gwrl!8{3S#9(k@ta83U1%$Zfw1`n>S)t^*HlMGXCR6)}xRRN+cTmsX zKdALJl$H-N(v!KGZYmr6x%V};W866SMu-)=dF$y$4`WnBD?l z!Mol5ZKMC`{o!z+*Bff;Rb+=O-Upg-tUZvx0I>nfsdX+1tKZMl9VU~K4Vd8+t=+C(?=(0 zG@ImO_reov0J*{>b9xB4dLNVS^m=`071nh+ohtZ;!~gC#bdWu&Ms(n7L-aJIPGj<|MT{k|dzeLZXWQo3Y ze*TZs4}bi`-ODcW4-b+A^0F-95nQ&2@k0ZT9OXdr{rd`fsU&hmfV}(adzar>)P4Hh zi@OcscF(-@xBvb|HzhuuczeAb{H^O6ybp1vDJ*%e?tj3w&Qg6!!7N)ow^)92(enNA zMcU+P`nvl5Ps(2|-ScPjZ--DPUgTjk8jZ(ey#565V9=YMiHkWtjD%oYT{Q9X%ga=< z+wrfvbnk2Q3;Mw;#jgXQvuIU)6@mom*+JTjVdL-}K}2x&_WHAPKb?(R3*)TU>#nQX z?3*1cZqwlpM=yV*UPF|U5fv5&KBz%iN}Qe8FA~@~i?^t%vdk9?c6M<H%Ruz?MqOHum&=w$bX*^f9oL#$J6V*AM-K(-BXbksdNn=)#S zCdXB^hHj1b_oXz|rrK&sbRG&&_0=mm|AY2l_whPs7a9L^#@}Q(J)FY-5srW!9YO7> z%^S)97C41XpkE;fc%_s=pfG8xt#u+jk|Bn_KPmdqQK$&6h}y1x4i6J=LMOoPE~Vmv vHI3e?O4?2PODMLTrb{w!w|ZsSO4Tx062|}luK*WP!z}i8B;1+1fkYiM52NeX-is*D57?zFUHn!m_D>ckeSS# znb=GwCYin{F1m4P^$UpFg$qBxEL^y<8>K?6Zc1@mMJX1#kusi}WF{%L=!GP|dmjID zZgO*hnv+Sx&_WWB*KIS=ACc~ijZ3xbID`|ZM;lHj70U?6}H0(&CqHj$O^;YcnlQ-hTO~i?b!T^tHpxmz6-0*Fe1#LFh9rO5;SxoS{XDDXT z(4752y@lRk3>p|z=yca1A%T8G&9W{Ltd4i%Zu{&g{ES&@0mC6smk)>P15C+E4rT7>&ewusBW0N z8nR@~SJz|(It_G}(HEM0C0>I)ifsp0$pV#Hk#dwKoJy09&!T%cP;I}rN3lzDZyNnt zt77TyO5M`ju6I@VYgMees@-!xE||~6Q)0Uq6)%aGA&J+;F7cY!L$fR5U^QceR8&kk zN*0oorDKM?#;$MX#=>UPHsA2w1!KlkvpHJ|(`mt^sIIiNNF8!}C&14h_qW(eIA@B` zu7r6JC%ykn5Iz7_=0b-%tD}x;*30EB z+WWOnft@Gi^6wYr^3F@rUjyE1e*o@J^!6a77vTT^6hlcwK~!i3wOU)OB*$5@>&DlM--OXz4jjc!1Oz7VfPsg^G9dzq2SoCOkbnpB5b=h%$U;I$;Q{gx z1q2AmQgDcp7-2g=)=q4%&z{{qd+sxH=H5Nim#X5ct~q_q&MvkSLus~8)n9-8_0|9X z_1E9kOXuh38DpGtr4*%<5MnBLqW)k3&-t#I=Km|d5W)i1#l^*ZKA*vTa7sg&VVG%V zqd>PT3(JV(*sTAd!!v$VjHpcDOw({e+R@RGmg_ikr%nR)B<93nDOqDGwEgF3>R`>jmX}Gozady37#soavou z0t6^#c{5$-n-FChLk9d9NU3J0Nvf)H8bIvfygT0F;Pg%m&&SGDkO5KC?l0}C6~(`w~p~d z*UU}@KLkR#Q|&^KF0rH)s)+VxjV&RgHNSs-*m<-oq%bVm6FhFwE!K-75nj#X9*?7V zG#Z6ri1na1<3t5b&-FIfHqmA15Pmmz?_lM?W|m4+z=M8aAQM@itC!1VGaOF{H+7BG zXu^!=ggeX5&XwJ9d15QOI$v{^9JN5m9nvMe$c|?LNAj?Iv}f(JnC%t!`&J*b!Uv4> z^H??9M2yv>#oAe~pd#@S`+`%wT2+zidfolS1L$?DxV2CBsh|)wH#fJswrYkz!8jq9 z)Mk|66HNN6f$Avda!zfi+w-@N8ply9R7aBZ6hwo^6g@!5TBD}wYLcHwE~8Qu+liBN zE?l@!tJRDO&zPmuKDHR{ly?+@5M~oHc4DkEs@e>VMQjry7EL^ci zdVAg;?0_beYf(m%a>BcuND}k$uruNV)~ofDr{sym0Q}$;GLphcl(68wC@^ceS{}{& zs*Tx2P#udvKpp6XN*3l8JU4%^zaI-dt8vpxqbe3;zuix0vQS%qr*^E)*q?}wAVpID z*nE5_hP%VN7kA=z3}h03BpA460brWP!w!h%y1!3BI8erq}02}LL@ z$;J$QWB@EFK0V8QCH5j^d3l~M)l2Q_NqhUmiEZp}LByC$;4OqJmS??6zaRAC!=zPh z&R6QmC`n`j1c?>XCRHUVZ0S?qKk(^@a>*&d&L+y2uyZ<}_5qm_a4?)*Nd$i(!WJ~9 zI4t?v>Y7h{=#P!*q#Vhv)Q$q>p8lXvY#U;%G8Rz4s)$$JlOr~VY7Rk|}uO>3@ z78agbJi2v2Ta+L?jm7fy1|8CP97S#v(ufSSv6x4pEz&{!V+4Mze*|_nGZM@j6J;r` zc(q^b9E=f$5Ik5w{l0&~I-v@q zqfo*B1ew2v9Ve1*LZKseNs63^dPLGf};kCP-WJW>!xNiqy$@gXI8oJ1T!8D1bB<$Tc()~MV;6v4L99;V$*FUGQ#xiy!B zCyukK0452rRG1DPiBP3E;T1hGX^-J!uInw-m*K?Y=2(ppbmU;P7RQZZeh*=JGHHzb zRZezFmCHnWqrGDu>Vy&2?j3jiiJv1mCZJKNSf6!XK2d|%&3|ANTo%a!LWY-L<9w5` z6`Qt{g#X%b4_Gk!f!OJ;w_1yg#Lf2lXjElNn82rbQjY{+K!+nD#7)ND-odq#@3f#= zY$$9xPAi_b#I27Y{>5>55;Z8v?d`9(+eKt3uurvIUs+y<ct$6CunUF76>hiXummZEL1nekk*(-SvXEL#T}`z(TNyl69NCO<0&DP7-&#+=)LbCvv0U-Gr)Oa|u6IL$9z_ z@;bdf5KGU?RVwpGCqK%`fj}6DKL7`ostg=B?&@>PoIB0t?I_Y`g!UYgaQjIs*|a$h zVP}3}4#&h`R2hdZ{GJZ>3zc6IbbAsU?e4*_2ZWRqu_%cXQH+IN9)!TVEG6Kq1sNmR zLB-`1Nk+uzwgX!vIwC^B+EHap=vBw@qOixA7>pVx!;i<|O`9KcyHc(_)$hC(MpdMk z%S*L;2agb1pDR~~!*3G8;eV7w_x5m9-KH!b#<~3iXJ`MTb92so?M@ix`n`jlyLW8s zm@}V~R}sb%v4rT)C{m^pq2XkLG%nI_6GBGXaHPN}Lhc+R1F0gNiKTmKsv3Z%s@)z; zM%`M~&3T)h!S!+XrJOy0!C|7|aE_=pV-?2hM<-89c~6P|y1o0si%a*S@NhE0F_DM9 zEq*Hz7nDLqfp@JNt>XyiB9?;XxXx=3rQHY0Q4>Pu74d{Ni(&-FY?;y%cq^~e%CVS( z+cMgY#Z^XNh&bIQKz#O7GAvgXN~O8M=!v7&W*ptJ*&adxIF+14lbcHU`Fvr1`4@ZL z|IS%=r0QGrurl`vs*q%Lqhv9WB}SThepQsD$moH^x^OgXK}>|KC!3V2P?CaWP3m*= zaYEua5Xg*qhjW|5hmr&yY*R9f#RW!ob)JA@6Cw}|aG<3XSQ7^F^ZeS$O)!_%LZ zbNZ7aDipo-%_lp(%}H>_;)C_|YeeiNiQ;J@O#SeQQYjG_qK<%;>Z1^G2-cWZ;4ews zlF3`}FfgUBV_?9l%;||I!mUr_t$u$L1U|-MBinpG7$e4Q_6K#5yhg|vyJv3UM?`Wc zlS2~}F_)et{h^|#rU+`}xOv4N!jBIbURLCfyDko+mW34}-D333MExwK-@r?UHWzGm ze*p<+JZNwmt@zX4tTH9&bS-8$#^LNLM%Kg0Hm6%M!aI^?p)?66RuTtFMu<(I7zvr2 zX+@nd^(733ghbFz^Y8msv6xr1(P+Sfqi`I{D~$FzgT0s;lgiIvq?1is`VV*vgQ=Wr zD%*CzfL(1Mri0S;rsEP(W^97RV~=HWvKi0GnFghFcw$@JaTr}%T4c;lUo*8bNSeBw zB1t)?>rdl{?md-^aB{wBc=4o)GmgJFgff~II323vxQ?SJX1JkisYEe zadiRb#wJ62&{j^_AZWHshff*KdjB^%IOKVpXCtPyY@lh+G#_A};>U#q_Dq^XAl#+z zn8s=E*UE##--V(Nh13Zk9pzoP-*dMSJB5q)!HX9!BKJE!KAub_p69)1IcJP86B@qn z<8=)csGwLZ;uYYG;|HxlGVTL(ievP8a&j^p4lxZ1E+hf>`&A71@sb@y(f0N>5Ca&l z3G4OxLoN$peu8{h|FrT`3xEcH#~Gf6$k}B3oF^Dp?< zM#vzi1?D(*oL7s*e_B}hZncVl%yA%SJ4_3tL9B*rq~lHsJ-~;8IZXYOS<|!nOa)yK zvbx&X*(Ialuw2qNn}%panXyo6=tcX#vETkw+ji8>zmO+iI+Fz4m!jxWr}K2T`?vG+ ze|Mqb+cw^&&N$Nb^J=vU>F|VBs|D=>sO!35!W{3hAVYw!-@W^GZ?GJNEbny@a3K?A zDhi=GpVe?$YAo-a#3Di|icJ8ku++Hl!|*9o_kZJO0O~ z7o*_$#!r)5OH+t5e~xJRi}4?C9ezHE9Hd!Bi17lB?TqPhDZ9D32_<0zW;d0fLy*CT zifI~(X`%~G5B{Bdcl*Q3INU8B6!JrOhgL)Sg$C2$&g9^^gWj{f^U566$+iC=PrV6A z_mu-$d^Y#|3(l`4@ufsY<@`$uR}N`p0H217&4C?#czD?DcA+gaF$XwMGD%s}5VPju z;(Qc4H@Cp(A(OV)IG;z(4gtC#&M?XRi^0L?_f_Fcnih+Mm5^t@qT^Rq_G#tUbAR@t z{hXnM@ui~sZ?@foKx1tDWn84$r?=77$0Xh=_IQ!&pOI+)ki*6!ZDbMM}k$N&fIsm z+igS!C=wm#m3qEz6pSaZ;?TZ(w-p39|B4u5kl@M!LLn0c=NZ!Xa6U{{5^eJPu^L!k z{RHWi$R4SE(*3KiSgwuvJPZPIcszIBWdIcFgEVl$5z;5# zDiA8+clU2HBNxxWl3)4B-#z-n$osL3_Fx6dL{!4;C>A0Y6p1IaZ4w4d2}(B1)Io%{ z5cY8)vbWm|!je$Smc}t_W4xl_>jYMUHDfF;Oxc9ZDi{aoSDzw(`dRYzXCfEOn7I=4|$HV{0>t%_Bpy-`}mqy%m zrzM?wY68S&WH5t49|!d$dMptx)iKIUgcY74Mh#a(5Q1(khDuxy*f;F>5uK2b8yn>L z&yX+wCK)c{D1KM07~xp2FxtT_7ldiJ#$@n>OP4O8j<4DX5$MBw*xj(cb^zDi-Q7u& zygz;f_dO{-ZIcwH!8%2ZvSkpgUJPqmB28*jXUw$=!?x)88F_FstWsqv)QJWS+j7*?bznv`0LdT7x~#Z9R8 zT2rJg-B-B#^zTjfen)FG|IlF%BPx>PFS^#ti1L^ez`&%nYj~k*RDc!Jpbv>}`o4iX z37Uw<1U8H22Xh+kjW_69Eqz_AFWEq+@G#`K5IN26AqU{$el=>!sgFadPAyu6GG;u?menB6EY#t9BsB;66ym%<^(Hw+dM zHRdd|IBpVfT^TZ_pM*?oJMi4GUPD?8Zscj)!ez{@DEXKorFXyz_sZvS$xh<1Rr5ZZ zvtNNr8h*H|hKoI9M1yLu!VTcHP!jSJ++VD$u;nEgg*%?xb94B09qZ)cie=kf&RUw{ z;=a0DDfz1xxDahj32!sD)5=Y^Bwo24{^#xg#7fCtM11yb;zIM&zK zan#{$0tmA?z+e!k8o}~+bNmHZMi68v_1Tb(TN(Oxj(xFc|GvX-N|j4T=?4TF?NS{5 znRFa%SFc`u{q@&@8{Ie;9)JAtot>Ti{e2VWFcSID#>U2t8#nNNKV32B*RNm40eHv5jlzs=bZUZT^8el`fA00yEc z5`c`1`!eXvU@@zON89ype7K%=BU_30rJX3Bh)39blkg)%-MC0qm0!DO( z;QUOegAU;{#P`{xi;GKI-CDX4b%y+ml6K*^G73l&Z|$In0eI>qO~+~prV6a5^whRf s9y3C-8OGCrXXABk+B)|qrDE;>0}q$V>GEj)HUIzs07*qoM6N<$f&d_Y$N&HU diff --git a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png b/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png deleted file mode 100644 index f5aeede0d57c432971903240fda430c81a4b2408..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10124 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 diff --git a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png b/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png deleted file mode 100644 index 315b88149b1b0ab1ebbbb42f442e23683c2d95e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9299 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 B8>#>R diff --git a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png b/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png deleted file mode 100644 index 3e305f9977af5bb0690c370482ccf85824b588ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15913 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

    8vw*T zj}{2V*>%F_CapdOkaWSxi40Z`m|WR+0L1K(kz$a+4GuNHAMM^_J6OOJKduzU8!DEkfkQG00Y( zli{nywI)2+i5!^Ccrf=J?|28x94s2^CPu`Qd<(;T4QjU>;TkkIhf&``wr?LQl{MJyz#h#2&12xuigD>rYcTql}CQ;I^Q(qTTAY(g;FUg))U`C~hh}1Q(dQ`zpfJ zq|>|=IHQh>v?O#&Q9B0F6JgV+UC2r+FLJHBuyW1&7EIKFxa0o;g{KbS1UwWu00000 LNkvXXu0mjfruzw( diff --git a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-iPadPro@2x.png b/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-iPadPro@2x.png deleted file mode 100644 index 4f193923ffa89f668d2ee72e09b9adbbfe824579..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27492 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 diff --git a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon.png b/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon.png deleted file mode 100644 index d4f21ab137d642ca4cd08cc8886865e358d7f82f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5667 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 diff --git a/examples/CorePlotGallery/Plot Gallery-tvOS/Assets.xcassets/Contents.json b/examples/CorePlotGallery/Plot Gallery-tvOS/Assets.xcassets/Contents.json index da4a164c9..73c00596a 100644 --- a/examples/CorePlotGallery/Plot Gallery-tvOS/Assets.xcassets/Contents.json +++ b/examples/CorePlotGallery/Plot Gallery-tvOS/Assets.xcassets/Contents.json @@ -1,6 +1,6 @@ { "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/examples/CorePlotGallery/Plot Gallery-tvOS/Assets.xcassets/LaunchImage.launchimage/Contents.json b/examples/CorePlotGallery/Plot Gallery-tvOS/Assets.xcassets/LaunchImage.launchimage/Contents.json deleted file mode 100644 index f4a929b0d..000000000 --- a/examples/CorePlotGallery/Plot Gallery-tvOS/Assets.xcassets/LaunchImage.launchimage/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "orientation" : "landscape", - "idiom" : "tv", - "extent" : "full-screen", - "minimum-system-version" : "11.0", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "tv", - "filename" : "LaunchImage.png", - "extent" : "full-screen", - "minimum-system-version" : "9.0", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/examples/CorePlotGallery/Plot Gallery-tvOS/Assets.xcassets/LaunchImage.launchimage/LaunchImage.png b/examples/CorePlotGallery/Plot Gallery-tvOS/Assets.xcassets/LaunchImage.launchimage/LaunchImage.png deleted file mode 100644 index d0ba363b2243965c029b3733915c42f189a89002..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37274 zcmeI)!B5jr9Ki86F`!ct6Au!jNi$=Nhqc`p%9?EvHiadEWX@#V7*MovU1wXeaswqX z-Z*$d6HGkmfwM>b2aJhlZyq%9Um&sV29ya`Jn&sY*8bk_*Vp&5e?sH1IvtS!7*RYyW@Z9>mwe02-iD06=Pxn2|*4{)-r@JbDeTr9a zDJfZ14l8nvrTy1CP!)_ES*Cl&5oN(hr!3rz&O7G(9o43+MPq5DRCo14T1|~4Q))6j zTut55QmU3o<&>VB{S}7QMO&}CmR+^1Mq$SA^oAMSO2cxdQyCqPlm@HN9@vKNZ*Q=P z1%IM{V!ioA%WT=Y;{^F5-TY{*H@~7gR%1DM{G+Df7Si34o^Wr~?EZM+_HIoy*jrFL ztRNbU6a+tm7VcB6WSDw0TuUmOR&&asL%pR%t6|v>TlED!*s-uA66(zkCz_2+q>dh# zC^FP7%_+fYj-2ieoiOU#Da8F>b=P4b{&MU33nA`^a%rsU#r}L-3!tvP+xc+m=6bxZ z|NM|T_jxtO1)IQ0KmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=JDCQ;^Y{yS)JT zuYXz}(DnfZC_n)UPPT$iSGA3p-xg@-r?vCr{e?8=;bfl&T0+qmi=JR8KmiI+fC3bt z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun z0u-PC1t>tl|5NaKZev}D!Dr>tSd|V8$JT*?b{`xz4jT$kfC3bt00k&O!HH3@HgM|A Wrik6xYAb%f6;ZxBUD_U>d;S;hP?QP) From 8e41998979dd6cccbed0c9d68fc05ad27c8f76ba Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 18 Sep 2022 09:33:19 -0400 Subject: [PATCH 100/245] Added os: definition to the Travis configuration file. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index c4c9d4238..c6a988f52 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,5 @@ language: objective-c +os: osx osx_image: xcode13.4 jobs: From 247f29dac03f54c6e2a0c5d11e6521221dbaec09 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 18 Sep 2022 10:18:45 -0400 Subject: [PATCH 101/245] Update ci.yml Update the Xcode version in the GitHub CI workflow. --- .github/workflows/ci.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d94c4399d..8779debe4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,11 +12,11 @@ jobs: UnitTests: name: Unit Tests runs-on: macOS-latest - env: - DEVELOPER_DIR: /Applications/Xcode_12.2.app/Contents/Developer steps: - name: Checkout uses: actions/checkout@v2 + with: + xcode-version: latest-stable - name: Run unit tests for macOS run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests Mac" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO @@ -45,6 +45,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v2 + with: + xcode-version: latest-stable - name: spm's xcodebuild - ${{ matrix.destination }} run: xcodebuild clean build -scheme "${{ matrix.scheme }}" -destination "${{ matrix.destination }}" -configuration Release From b9142c5058121fd2b516701b2c170b1ab4d3ce5b Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 18 Sep 2022 11:06:37 -0400 Subject: [PATCH 102/245] Update ci.yml Update the Xcode version in the GitHub CI workflow. --- .github/workflows/ci.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8779debe4..82afbb538 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,12 +1,6 @@ name: "core-plot CI" -on: - push: - branches: - - "*" - pull_request: - branches: - - "*" +on: [push, pull_request] jobs: UnitTests: @@ -15,6 +9,9 @@ jobs: steps: - name: Checkout uses: actions/checkout@v2 + + - name: Set Xcode version + uses: maxim-lobanov/setup-xcode@v1 with: xcode-version: latest-stable @@ -22,7 +19,7 @@ jobs: run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests Mac" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO - name: Run unit tests for iOS - run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests iOS" -sdk "iphonesimulator" -destination "name=iPhone 12 Pro" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO + run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests iOS" -sdk "iphonesimulator" -destination "name=iPhone 14 Pro" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO - name: Run unit tests for tvOS run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests tvOS" -sdk "appletvsimulator" -destination "name=Apple TV 4K" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO @@ -36,7 +33,7 @@ jobs: matrix: destination: [ - "platform=iOS Simulator,name=iPhone 12 Pro", + "platform=iOS Simulator,name=iPhone 14 Pro", "platform=macOS,variant=Mac Catalyst", "platform=macOS", "platform=tvOS Simulator,name=Apple TV 4k", @@ -45,6 +42,9 @@ jobs: steps: - name: Checkout uses: actions/checkout@v2 + + - name: Set Xcode version + uses: maxim-lobanov/setup-xcode@v1 with: xcode-version: latest-stable From 3f8c3af655fa5a2f1936813a21a7d7d92cc84480 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 18 Sep 2022 11:09:42 -0400 Subject: [PATCH 103/245] Update ci.yml --- .github/workflows/ci.yml | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 82afbb538..bb9c34c50 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,11 +10,6 @@ jobs: - name: Checkout uses: actions/checkout@v2 - - name: Set Xcode version - uses: maxim-lobanov/setup-xcode@v1 - with: - xcode-version: latest-stable - - name: Run unit tests for macOS run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests Mac" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO @@ -27,8 +22,6 @@ jobs: SPM: name: Verify SPM build runs-on: macOS-latest - env: - DEVELOPER_DIR: /Applications/Xcode_12.2.app/Contents/Developer strategy: matrix: destination: @@ -43,10 +36,5 @@ jobs: - name: Checkout uses: actions/checkout@v2 - - name: Set Xcode version - uses: maxim-lobanov/setup-xcode@v1 - with: - xcode-version: latest-stable - - name: spm's xcodebuild - ${{ matrix.destination }} run: xcodebuild clean build -scheme "${{ matrix.scheme }}" -destination "${{ matrix.destination }}" -configuration Release From 7862b72666b49d88aff60469d02345232c36f1a3 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 18 Sep 2022 11:22:33 -0400 Subject: [PATCH 104/245] Update ci.yml Use iPhone 13 simulator --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bb9c34c50..e49137331 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,7 @@ jobs: run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests Mac" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO - name: Run unit tests for iOS - run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests iOS" -sdk "iphonesimulator" -destination "name=iPhone 14 Pro" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO + run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests iOS" -sdk "iphonesimulator" -destination "name=iPhone 13 Pro" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO - name: Run unit tests for tvOS run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests tvOS" -sdk "appletvsimulator" -destination "name=Apple TV 4K" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO @@ -26,7 +26,7 @@ jobs: matrix: destination: [ - "platform=iOS Simulator,name=iPhone 14 Pro", + "platform=iOS Simulator,name=iPhone 13 Pro", "platform=macOS,variant=Mac Catalyst", "platform=macOS", "platform=tvOS Simulator,name=Apple TV 4k", From b0777496f04b81b10a41078e12b05fd78c0dcfba Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Wed, 21 Sep 2022 18:27:39 -0400 Subject: [PATCH 105/245] Fixed deprecated function warnings. --- framework/Source/NSCoderExtensions.m | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/framework/Source/NSCoderExtensions.m b/framework/Source/NSCoderExtensions.m index 3c063e555..117b63a36 100644 --- a/framework/Source/NSCoderExtensions.m +++ b/framework/Source/NSCoderExtensions.m @@ -73,18 +73,19 @@ -(void)encodeCPTRect:(CGRect)rect forKey:(nonnull NSString *)key * @note The current implementation only works with named color spaces. **/ #if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunused-parameter" -#endif -(void)encodeCGColorSpace:(nullable CGColorSpaceRef)colorSpace forKey:(nonnull NSString *)key { -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST NSLog(@"Color space encoding is not supported on iOS. Decoding will return a generic RGB color space."); -#pragma clang diagnostic pop +} + #else +-(void)encodeCGColorSpace:(nullable CGColorSpaceRef)colorSpace forKey:(nonnull NSString *)key +{ if ( colorSpace ) { CFDataRef iccProfile = NULL; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" // CGColorSpaceCopyICCProfile() is deprecated as of macOS 10.13 if ( CGColorSpaceCopyICCData ) { iccProfile = CGColorSpaceCopyICCData(colorSpace); @@ -92,13 +93,15 @@ -(void)encodeCGColorSpace:(nullable CGColorSpaceRef)colorSpace forKey:(nonnull N else { iccProfile = CGColorSpaceCopyICCProfile(colorSpace); } +#pragma clang diagnostic pop [self encodeObject:(__bridge NSData *)iccProfile forKey:key]; CFRelease(iccProfile); } -#endif } +#endif + /// @cond void CPTPathApplierFunc(void *__nullable info, const CGPathElement *__nonnull element) @@ -345,10 +348,6 @@ -(CGRect)decodeCPTRectForKey:(nonnull NSString *)key * @return The new path. * @note The current implementation only works with named color spaces. **/ -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunused-parameter" -#endif -(nullable CGColorSpaceRef)newCGColorSpaceDecodeForKey:(nonnull NSString *)key { CGColorSpaceRef colorSpace = NULL; @@ -356,11 +355,12 @@ -(nullable CGColorSpaceRef)newCGColorSpaceDecodeForKey:(nonnull NSString *)key #if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST NSLog(@"Color space decoding is not supported on iOS. Using generic RGB color space."); colorSpace = CGColorSpaceCreateDeviceRGB(); -#pragma clang diagnostic pop #else NSData *iccProfile = [self decodeObjectOfClass:[NSData class] forKey:key]; if ( iccProfile ) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" // CGColorSpaceCreateWithICCProfile() is deprecated as of macOS 10.13 if ( CGColorSpaceCreateWithICCData ) { colorSpace = CGColorSpaceCreateWithICCData((__bridge CFDataRef)iccProfile); @@ -368,6 +368,7 @@ -(nullable CGColorSpaceRef)newCGColorSpaceDecodeForKey:(nonnull NSString *)key else { colorSpace = CGColorSpaceCreateWithICCProfile((__bridge CFDataRef)iccProfile); } +#pragma clang diagnostic pop } else { NSLog(@"Color space not available for key '%@'. Using generic RGB color space.", key); From c4c9c0cc9342c0c41aaae1d68517864316be5147 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Wed, 21 Sep 2022 18:39:15 -0400 Subject: [PATCH 106/245] Updated the DatePlot example app to use Core Plot via the Swift Package Manager. --- .../DatePlot.xcodeproj/project.pbxproj | 71 +++++++++---------- 1 file changed, 33 insertions(+), 38 deletions(-) diff --git a/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj b/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj index d76f303bd..a1072c3de 100644 --- a/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj +++ b/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj @@ -3,12 +3,10 @@ archiveVersion = 1; classes = { }; - objectVersion = 47; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ - 076185040F3CB17800A89A76 /* CorePlot.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 076184C10F3CAD5900A89A76 /* CorePlot.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 0761850B0F3CB1E800A89A76 /* CorePlot.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 076184C10F3CAD5900A89A76 /* CorePlot.framework */; }; 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; BC8E737D0FC0B3CF00DF8511 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC8E737C0FC0B3CF00DF8511 /* QuartzCore.framework */; }; @@ -16,6 +14,7 @@ C3A14440197DE35F0048F1FF /* DateController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3A1443F197DE35F0048F1FF /* DateController.swift */; }; C3D0A1A720E0183A00BA2921 /* DatePlot.xib in Resources */ = {isa = PBXBuildFile; fileRef = C3D0A1A920E0183A00BA2921 /* DatePlot.xib */; }; C3D3937419FD6E3500148319 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C3D3937319FD6E3500148319 /* Images.xcassets */; }; + C3F244B428DBC2FC008DB9A1 /* CorePlot in Frameworks */ = {isa = PBXBuildFile; productRef = C3F244B328DBC2FC008DB9A1 /* CorePlot */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -26,13 +25,6 @@ remoteGlobalIDString = 8DC2EF5B0486A6940098B216; remoteInfo = CorePlot; }; - 076184CF0F3CAE1100A89A76 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 076184BC0F3CAD5900A89A76 /* CorePlot.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = 8DC2EF4F0486A6940098B216; - remoteInfo = CorePlot; - }; 07E0DF7F109C4E9500F108D2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 076184BC0F3CAD5900A89A76 /* CorePlot.xcodeproj */; @@ -70,20 +62,6 @@ }; /* End PBXContainerItemProxy section */ -/* Begin PBXCopyFilesBuildPhase section */ - 90AF4F830F36D09E00753D26 /* Copy Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 076185040F3CB17800A89A76 /* CorePlot.framework in Copy Frameworks */, - ); - name = "Copy Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - /* Begin PBXFileReference section */ 071BCBD61079EBE00045E43D /* CorePlot.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CorePlot.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 076184BC0F3CAD5900A89A76 /* CorePlot.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = CorePlot.xcodeproj; path = ../../framework/CorePlot.xcodeproj; sourceTree = SOURCE_ROOT; }; @@ -101,6 +79,7 @@ C3C3CBBF19EA07F600A0296A /* CorePlotWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotWarnings.xcconfig; path = ../../framework/xcconfig/CorePlotWarnings.xcconfig; sourceTree = ""; }; C3D0A1B620E0184100BA2921 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/DatePlot.xib; sourceTree = ""; }; C3D3937319FD6E3500148319 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = DatePlot/Images.xcassets; sourceTree = ""; }; + C3F2449F28DBC025008DB9A1 /* Core Plot */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = "Core Plot"; path = ../..; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -108,9 +87,9 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0761850B0F3CB1E800A89A76 /* CorePlot.framework in Frameworks */, 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, BC8E737D0FC0B3CF00DF8511 /* QuartzCore.framework in Frameworks */, + C3F244B428DBC2FC008DB9A1 /* CorePlot in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -172,6 +151,7 @@ isa = PBXGroup; children = ( 076184BC0F3CAD5900A89A76 /* CorePlot.xcodeproj */, + C3F2449E28DBC025008DB9A1 /* Packages */, 080E96DDFE201D6D7F000001 /* Classes */, C33E19A219832EEA00182AF2 /* Other Sources */, 29B97317FDCFA39411CA2CEA /* Resources */, @@ -212,6 +192,14 @@ name = "Other Sources"; sourceTree = ""; }; + C3F2449E28DBC025008DB9A1 /* Packages */ = { + isa = PBXGroup; + children = ( + C3F2449F28DBC025008DB9A1 /* Core Plot */, + ); + name = Packages; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -221,15 +209,16 @@ buildPhases = ( 8D1107290486CEB800E47090 /* Resources */, 8D11072E0486CEB800E47090 /* Frameworks */, - 90AF4F830F36D09E00753D26 /* Copy Frameworks */, 8D11072C0486CEB800E47090 /* Sources */, ); buildRules = ( ); dependencies = ( - 076184D00F3CAE1100A89A76 /* PBXTargetDependency */, ); name = DatePlot; + packageProductDependencies = ( + C3F244B328DBC2FC008DB9A1 /* CorePlot */, + ); productInstallPath = "$(HOME)/Applications"; productName = CPTTestApp; productReference = 8D1107320486CEB800E47090 /* DatePlot.app */; @@ -345,14 +334,6 @@ }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXTargetDependency section */ - 076184D00F3CAE1100A89A76 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = CorePlot; - targetProxy = 076184CF0F3CAE1100A89A76 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - /* Begin PBXVariantGroup section */ 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = { isa = PBXVariantGroup; @@ -400,7 +381,10 @@ GCC_PREPROCESSOR_DEFINITIONS = ""; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@loader_path/../Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = DatePlot; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -426,10 +410,14 @@ GCC_PREPROCESSOR_DEFINITIONS = ""; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@loader_path/../Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = DatePlot; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; SWIFT_VERSION = 5.0; }; name = Release; @@ -491,6 +479,13 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCSwiftPackageProductDependency section */ + C3F244B328DBC2FC008DB9A1 /* CorePlot */ = { + isa = XCSwiftPackageProductDependency; + productName = CorePlot; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; } From 9ca288d6e84f0480e8d183166fa244906d515fd6 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Wed, 21 Sep 2022 18:58:08 -0400 Subject: [PATCH 107/245] Added missing private headers to the Swift Package Manager umbrella header. Fixed issue #460. --- framework/CorePlot.xcodeproj/project.pbxproj | 164 ++++++++++++++++--- framework/SPM Umbrella Header/CorePlot.h | 85 ++++++++++ scripts/generate_spm_sources_layout.sh | 3 +- spm/Sources/core-plot/include/CorePlot.h | 2 +- 4 files changed, 231 insertions(+), 23 deletions(-) create mode 100644 framework/SPM Umbrella Header/CorePlot.h diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 76b7ef8a5..3433a3d0f 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 47; + objectVersion = 54; objects = { /* Begin PBXAggregateTarget section */ @@ -775,6 +775,27 @@ remoteGlobalIDString = C37EA5C91BC83F2A0091C8F7; remoteInfo = "CorePlot tvOS"; }; + C3F244C028DBCBA1008DB9A1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = C36BE54226FF6857004287F2; + remoteInfo = "Update SPM Files"; + }; + C3F244C228DBCBAE008DB9A1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = C36BE54226FF6857004287F2; + remoteInfo = "Update SPM Files"; + }; + C3F244C428DBCBB4008DB9A1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = C36BE54226FF6857004287F2; + remoteInfo = "Update SPM Files"; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ @@ -1044,6 +1065,7 @@ C3DA34CA107AD7710051DA02 /* _CPTXYTheme.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTXYTheme.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; C3DA34CB107AD7710051DA02 /* _CPTXYTheme.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTXYTheme.h; sourceTree = ""; }; C3EE4E971A6C1E890098F4E6 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + C3F244BF28DBCABB008DB9A1 /* CorePlot.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CorePlot.h; sourceTree = ""; }; C3F31DE71045EB470058520A /* CPTPlotGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlotGroup.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; C3F31DE81045EB470058520A /* CPTPlotGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTPlotGroup.h; sourceTree = ""; }; C3F97F1C17A9E07B00A52FF2 /* CPTFunctionDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTFunctionDataSource.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; @@ -1414,6 +1436,7 @@ C38A0AA61A4621BC00D45436 /* Platform Specific */, 9021E4920FC5C6DD00443472 /* Documentation */, C3B25EDE1AC23A7D0063CCD8 /* CocoaPods */, + C3F244BE28DBCABB008DB9A1 /* SPM Umbrella Header */, 32C88DFF0371C24200C91783 /* Other Sources */, 089C1665FE841158C02AAC07 /* Resources */, 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */, @@ -1774,6 +1797,14 @@ name = Tests; sourceTree = ""; }; + C3F244BE28DBCABB008DB9A1 /* SPM Umbrella Header */ = { + isa = PBXGroup; + children = ( + C3F244BF28DBCABB008DB9A1 /* CorePlot.h */, + ); + path = "SPM Umbrella Header"; + sourceTree = ""; + }; E1620CBB100F034700A84E77 /* Tests */ = { isa = PBXGroup; children = ( @@ -2133,6 +2164,7 @@ buildRules = ( ); dependencies = ( + C3F244C128DBCBA1008DB9A1 /* PBXTargetDependency */, ); name = "CorePlot Mac"; productInstallPath = "$(HOME)/Library/Frameworks"; @@ -2152,6 +2184,7 @@ buildRules = ( ); dependencies = ( + C3F244C528DBCBB4008DB9A1 /* PBXTargetDependency */, ); name = "CorePlot tvOS"; productName = "CorePlot-iOS"; @@ -2188,6 +2221,7 @@ buildRules = ( ); dependencies = ( + C3F244C328DBCBAE008DB9A1 /* PBXTargetDependency */, ); name = "CorePlot iOS"; productName = "CorePlot-iOS"; @@ -2332,6 +2366,7 @@ }; C36BE54626FF6865004287F2 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -2833,6 +2868,21 @@ target = C37EA5C91BC83F2A0091C8F7 /* CorePlot tvOS */; targetProxy = C3B4D4951BC997F600450C37 /* PBXContainerItemProxy */; }; + C3F244C128DBCBA1008DB9A1 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = C36BE54226FF6857004287F2 /* Update SPM Files */; + targetProxy = C3F244C028DBCBA1008DB9A1 /* PBXContainerItemProxy */; + }; + C3F244C328DBCBAE008DB9A1 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = C36BE54226FF6857004287F2 /* Update SPM Files */; + targetProxy = C3F244C228DBCBAE008DB9A1 /* PBXContainerItemProxy */; + }; + C3F244C528DBCBB4008DB9A1 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = C36BE54226FF6857004287F2 /* Update SPM Files */; + targetProxy = C3F244C428DBCBB4008DB9A1 /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ @@ -2927,7 +2977,11 @@ INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles"; PRODUCT_NAME = UnitTests; SDKROOT = macosx; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/MacOnly $(SRCROOT)/PlatformSpecific"; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/Source", + "$(SRCROOT)/MacOnly", + "$(SRCROOT)/PlatformSpecific", + ); }; name = Debug; }; @@ -2939,7 +2993,11 @@ INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles"; PRODUCT_NAME = UnitTests; SDKROOT = macosx; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/MacOnly $(SRCROOT)/PlatformSpecific"; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/Source", + "$(SRCROOT)/MacOnly", + "$(SRCROOT)/PlatformSpecific", + ); }; name = Release; }; @@ -2956,7 +3014,11 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; SDKROOT = macosx; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/MacOnly $(SRCROOT)/PlatformSpecific"; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/Source", + "$(SRCROOT)/MacOnly", + "$(SRCROOT)/PlatformSpecific", + ); WRAPPER_EXTENSION = framework; }; name = Debug; @@ -2974,7 +3036,11 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; SDKROOT = macosx; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/MacOnly $(SRCROOT)/PlatformSpecific"; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/Source", + "$(SRCROOT)/MacOnly", + "$(SRCROOT)/PlatformSpecific", + ); WRAPPER_EXTENSION = framework; }; name = Release; @@ -3083,12 +3149,19 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-tvOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; SDKROOT = appletvos; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/Source", + "$(SRCROOT)/PlatformSpecific", + ); }; name = Debug; }; @@ -3102,12 +3175,19 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-tvOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; SDKROOT = appletvos; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/Source", + "$(SRCROOT)/PlatformSpecific", + ); }; name = Release; }; @@ -3116,12 +3196,19 @@ baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; buildSettings = { INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-tvOSTests-Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/Source", + "$(SRCROOT)/PlatformSpecific", + ); }; name = Debug; }; @@ -3130,12 +3217,19 @@ baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; buildSettings = { INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-tvOSTests-Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/Source", + "$(SRCROOT)/PlatformSpecific", + ); }; name = Release; }; @@ -3149,13 +3243,20 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-iOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/Source", + "$(SRCROOT)/PlatformSpecific", + ); }; name = Debug; }; @@ -3169,13 +3270,20 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-iOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/Source", + "$(SRCROOT)/PlatformSpecific", + ); }; name = Release; }; @@ -3184,13 +3292,20 @@ baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; buildSettings = { INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-iOSTests-Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/Source", + "$(SRCROOT)/PlatformSpecific", + ); }; name = Debug; }; @@ -3199,13 +3314,20 @@ baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; buildSettings = { INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-iOSTests-Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/Source $(SRCROOT)/PlatformSpecific"; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/Source", + "$(SRCROOT)/PlatformSpecific", + ); }; name = Release; }; diff --git a/framework/SPM Umbrella Header/CorePlot.h b/framework/SPM Umbrella Header/CorePlot.h new file mode 100644 index 000000000..c29bc294c --- /dev/null +++ b/framework/SPM Umbrella Header/CorePlot.h @@ -0,0 +1,85 @@ +#import + +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST +#import +#import +#else +#import +#endif + +#import "CPTAnimation.h" +#import "CPTAnimationOperation.h" +#import "CPTAnimationPeriod.h" +#import "CPTAnnotation.h" +#import "CPTAnnotationHostLayer.h" +#import "CPTAxis.h" +#import "CPTAxisLabel.h" +#import "CPTAxisSet.h" +#import "CPTAxisTitle.h" +#import "CPTBarPlot.h" +#import "CPTBorderedLayer.h" +#import "CPTCalendarFormatter.h" +#import "CPTColor.h" +#import "CPTColorSpace.h" +#import "CPTConstraints.h" +#import "CPTDefinitions.h" +#import "CPTExceptions.h" +#import "CPTFill.h" +#import "CPTFunctionDataSource.h" +#import "CPTGradient.h" +#import "CPTGraph.h" +#import "CPTGraphHostingView.h" +#import "CPTImage.h" +#import "CPTLayer.h" +#import "CPTLayerAnnotation.h" +#import "CPTLegend.h" +#import "CPTLegendEntry.h" +#import "CPTLimitBand.h" +#import "CPTLineCap.h" +#import "CPTLineStyle.h" +#import "CPTMutableLineStyle.h" +#import "CPTMutableNumericData+TypeConversion.h" +#import "CPTMutableNumericData.h" +#import "CPTMutablePlotRange.h" +#import "CPTMutableShadow.h" +#import "CPTMutableTextStyle.h" +#import "CPTNumericData+TypeConversion.h" +#import "CPTNumericData.h" +#import "CPTNumericDataType.h" +#import "CPTPathExtensions.h" +#import "CPTPieChart.h" +#import "CPTPlatformSpecificCategories.h" +#import "CPTPlatformSpecificDefines.h" +#import "CPTPlatformSpecificFunctions.h" +#import "CPTPlot.h" +#import "CPTPlotArea.h" +#import "CPTPlotAreaFrame.h" +#import "CPTPlotRange.h" +#import "CPTPlotSpace.h" +#import "CPTPlotSpaceAnnotation.h" +#import "CPTPlotSymbol.h" +#import "CPTRangePlot.h" +#import "CPTResponder.h" +#import "CPTScatterPlot.h" +#import "CPTShadow.h" +#import "CPTTextLayer.h" +#import "CPTTextStyle.h" +#import "CPTTheme.h" +#import "CPTTimeFormatter.h" +#import "CPTTradingRangePlot.h" +#import "CPTUtilities.h" +#import "CPTXYAxis.h" +#import "CPTXYAxisSet.h" +#import "CPTXYGraph.h" +#import "CPTXYPlotSpace.h" + +// Private Headers +#import "CPTAxisLabelGroup.h" +#import "CPTDebugQuickLook.h" +#import "CPTDerivedXYGraph.h" +#import "CPTGridLineGroup.h" +#import "CPTGridLines.h" +#import "CPTPlotGroup.h" +#import "NSCoderExtensions.h" +#import "NSDecimalNumberExtensions.h" +#import "NSNumberExtensions.h" diff --git a/scripts/generate_spm_sources_layout.sh b/scripts/generate_spm_sources_layout.sh index a817e767e..a77c38a3d 100755 --- a/scripts/generate_spm_sources_layout.sh +++ b/scripts/generate_spm_sources_layout.sh @@ -22,7 +22,8 @@ function generate_spm_public_headers() { \! -name "CorePlot-CocoaTouch.h" \ \! -name "mainpage.h" \ -type f -not -path "*/MacOnly/*" \ - -not -path "framework/CorePlot.h" | sed "s| \([^/]\)|:\1|g" + -not -path "framework/CorePlot.h" \ + -not -path "framework/CocoaPods/CorePlot.h" | sed "s| \([^/]\)|:\1|g" ) SRC_ROOT="$(pwd)" diff --git a/spm/Sources/core-plot/include/CorePlot.h b/spm/Sources/core-plot/include/CorePlot.h index c0d510e52..d9d423c2a 120000 --- a/spm/Sources/core-plot/include/CorePlot.h +++ b/spm/Sources/core-plot/include/CorePlot.h @@ -1 +1 @@ -../../../../framework/CocoaPods/CorePlot.h \ No newline at end of file +../../../../framework/SPM Umbrella Header/CorePlot.h \ No newline at end of file From 9c15658bd711a654543de68f5d5d4e1a6b1a62d0 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 2 Oct 2022 10:39:13 -0400 Subject: [PATCH 108/245] Refactored point alignment functions to eliminate repeated code. --- framework/Source/CPTRangePlot.m | 60 ++++++++++++------------------- framework/Source/CPTScatterPlot.m | 21 +++++------ 2 files changed, 31 insertions(+), 50 deletions(-) diff --git a/framework/Source/CPTRangePlot.m b/framework/Source/CPTRangePlot.m index 667e2863c..3ac874097 100644 --- a/framework/Source/CPTRangePlot.m +++ b/framework/Source/CPTRangePlot.m @@ -487,46 +487,30 @@ -(void)alignViewPointsToUserSpace:(nonnull CGPointError *)viewPoints withContext { // Align to device pixels if there is a data line. // Otherwise, align to view space, so fills are sharp at edges. + CPTAlignPointFunction alignmentFunction = CPTAlignIntegralPointToUserSpace; + if ( self.barLineStyle.lineWidth > CPTFloat(0.0)) { - dispatch_apply(dataCount, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t i) { - if ( drawPointFlags[i] ) { - CGFloat x = viewPoints[i].x; - CGFloat y = viewPoints[i].y; - CGPoint pos = CPTAlignPointToUserSpace(context, CPTPointMake(viewPoints[i].x, viewPoints[i].y)); - viewPoints[i].x = pos.x; - viewPoints[i].y = pos.y; - - pos = CPTAlignPointToUserSpace(context, CPTPointMake(x, viewPoints[i].high)); - viewPoints[i].high = pos.y; - pos = CPTAlignPointToUserSpace(context, CPTPointMake(x, viewPoints[i].low)); - viewPoints[i].low = pos.y; - pos = CPTAlignPointToUserSpace(context, CPTPointMake(viewPoints[i].left, y)); - viewPoints[i].left = pos.x; - pos = CPTAlignPointToUserSpace(context, CPTPointMake(viewPoints[i].right, y)); - viewPoints[i].right = pos.x; - } - }); - } - else { - dispatch_apply(dataCount, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t i) { - if ( drawPointFlags[i] ) { - CGFloat x = viewPoints[i].x; - CGFloat y = viewPoints[i].y; - CGPoint pos = CPTAlignIntegralPointToUserSpace(context, CPTPointMake(viewPoints[i].x, viewPoints[i].y)); - viewPoints[i].x = pos.x; - viewPoints[i].y = pos.y; - - pos = CPTAlignIntegralPointToUserSpace(context, CPTPointMake(x, viewPoints[i].high)); - viewPoints[i].high = pos.y; - pos = CPTAlignIntegralPointToUserSpace(context, CPTPointMake(x, viewPoints[i].low)); - viewPoints[i].low = pos.y; - pos = CPTAlignIntegralPointToUserSpace(context, CPTPointMake(viewPoints[i].left, y)); - viewPoints[i].left = pos.x; - pos = CPTAlignIntegralPointToUserSpace(context, CPTPointMake(viewPoints[i].right, y)); - viewPoints[i].right = pos.x; - } - }); + alignmentFunction = CPTAlignPointToUserSpace; } + + dispatch_apply(dataCount, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t i) { + if ( drawPointFlags[i] ) { + CGFloat x = viewPoints[i].x; + CGFloat y = viewPoints[i].y; + CGPoint pos = alignmentFunction(context, CPTPointMake(viewPoints[i].x, viewPoints[i].y)); + viewPoints[i].x = pos.x; + viewPoints[i].y = pos.y; + + pos = alignmentFunction(context, CPTPointMake(x, viewPoints[i].high)); + viewPoints[i].high = pos.y; + pos = alignmentFunction(context, CPTPointMake(x, viewPoints[i].low)); + viewPoints[i].low = pos.y; + pos = alignmentFunction(context, CPTPointMake(viewPoints[i].left, y)); + viewPoints[i].left = pos.x; + pos = alignmentFunction(context, CPTPointMake(viewPoints[i].right, y)); + viewPoints[i].right = pos.x; + } + }); } -(NSInteger)extremeDrawnPointIndexForFlags:(nonnull BOOL *)pointDrawFlags numberOfPoints:(NSUInteger)dataCount extremeNumIsLowerBound:(BOOL)isLowerBound diff --git a/framework/Source/CPTScatterPlot.m b/framework/Source/CPTScatterPlot.m index 2747a884a..744569609 100644 --- a/framework/Source/CPTScatterPlot.m +++ b/framework/Source/CPTScatterPlot.m @@ -661,20 +661,17 @@ -(void)alignViewPointsToUserSpace:(nonnull CGPoint *)viewPoints withContext:(non { // Align to device pixels if there is a data line. // Otherwise, align to view space, so fills are sharp at edges. + CPTAlignPointFunction alignmentFunction = CPTAlignIntegralPointToUserSpace; + if ( self.dataLineStyle.lineWidth > CPTFloat(0.0)) { - dispatch_apply(dataCount, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t i) { - if ( drawPointFlags[i] ) { - viewPoints[i] = CPTAlignPointToUserSpace(context, viewPoints[i]); - } - }); - } - else { - dispatch_apply(dataCount, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t i) { - if ( drawPointFlags[i] ) { - viewPoints[i] = CPTAlignIntegralPointToUserSpace(context, viewPoints[i]); - } - }); + alignmentFunction = CPTAlignPointToUserSpace; } + + dispatch_apply(dataCount, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t i) { + if ( drawPointFlags[i] ) { + viewPoints[i] = alignmentFunction(context, viewPoints[i]); + } + }); } -(NSInteger)extremeDrawnPointIndexForFlags:(nonnull BOOL *)pointDrawFlags numberOfPoints:(NSUInteger)dataCount extremeNumIsLowerBound:(BOOL)isLowerBound From 7c9c563796d97b2759e32fa0aab91d6c384e2fd7 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Mon, 3 Oct 2022 20:36:48 -0400 Subject: [PATCH 109/245] Replaced explicit comparisons with nil and NULL with more compact equivalent expressions. --- .../CorePlotGallery/src/ios/AppDelegate.m | 4 +- .../src/ios/RootViewController.m | 2 +- .../src/ios/ThemeTableViewController.m | 2 +- .../src/plots/CurvedScatterPlot.m | 4 +- .../CorePlotGallery/src/shared/PlotGallery.m | 8 ++-- .../CorePlotGallery/src/shared/PlotItem.m | 6 +-- .../src/tvOS/RootViewControllerTV.m | 2 +- .../src/tvOS/ThemeTableViewControllerTV.m | 2 +- examples/DropPlot/CPTPlotDocument.m | 4 +- .../PlatformSpecific/CPTGraphHostingView.m | 4 +- .../CPTTextStylePlatformSpecific.m | 14 +++--- framework/Source/CPTBarPlot.m | 10 ++--- framework/Source/CPTGradient.m | 44 +++++++++---------- framework/Source/CPTNumericData.m | 2 +- framework/Source/CPTPieChart.m | 2 +- framework/Source/CPTPlot.m | 2 +- framework/Source/CPTRangePlot.m | 6 +-- framework/Source/CPTScatterPlot.m | 4 +- framework/Source/CPTTheme.m | 2 +- framework/Source/CPTTradingRangePlot.m | 18 ++++---- 20 files changed, 72 insertions(+), 70 deletions(-) diff --git a/examples/CorePlotGallery/src/ios/AppDelegate.m b/examples/CorePlotGallery/src/ios/AppDelegate.m index d74aa8ef2..0a8329208 100644 --- a/examples/CorePlotGallery/src/ios/AppDelegate.m +++ b/examples/CorePlotGallery/src/ios/AppDelegate.m @@ -37,7 +37,9 @@ -(BOOL)application:(nonnull UIApplication *__unused)application didFinishLaunchi -(BOOL)splitViewController:(UISplitViewController *__unused)splitViewController collapseSecondaryViewController:(UIViewController *)secondaryViewController ontoPrimaryViewController:(UIViewController *__unused)primaryViewController { - if ( [secondaryViewController isKindOfClass:[UINavigationController class]] && [((UINavigationController *)secondaryViewController).topViewController isKindOfClass:[DetailViewController class]] && (((DetailViewController *)((UINavigationController *)secondaryViewController).topViewController).detailItem == nil)) { + if ( [secondaryViewController isKindOfClass:[UINavigationController class]] && + [((UINavigationController *)secondaryViewController).topViewController isKindOfClass:[DetailViewController class]] && + (((DetailViewController *)((UINavigationController *)secondaryViewController).topViewController).detailItem == nil)) { // Return YES to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded. return YES; } diff --git a/examples/CorePlotGallery/src/ios/RootViewController.m b/examples/CorePlotGallery/src/ios/RootViewController.m index 94be858ae..57ef00ef7 100644 --- a/examples/CorePlotGallery/src/ios/RootViewController.m +++ b/examples/CorePlotGallery/src/ios/RootViewController.m @@ -99,7 +99,7 @@ -(nonnull UITableViewCell *)tableView:(nonnull UITableView *)tv cellForRowAtInde UITableViewCell *cell = [tv dequeueReusableCellWithIdentifier:cellId]; - if ( cell == nil ) { + if ( !cell ) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId]; cell.accessoryType = UITableViewCellAccessoryNone; } diff --git a/examples/CorePlotGallery/src/ios/ThemeTableViewController.m b/examples/CorePlotGallery/src/ios/ThemeTableViewController.m index 2a7a8a858..bca9dbdca 100644 --- a/examples/CorePlotGallery/src/ios/ThemeTableViewController.m +++ b/examples/CorePlotGallery/src/ios/ThemeTableViewController.m @@ -74,7 +74,7 @@ -(nonnull UITableViewCell *)tableView:(nonnull UITableView *)tableView cellForRo UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; - if ( cell == nil ) { + if ( !cell ) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } diff --git a/examples/CorePlotGallery/src/plots/CurvedScatterPlot.m b/examples/CorePlotGallery/src/plots/CurvedScatterPlot.m index 7695a6e7b..148898a66 100644 --- a/examples/CorePlotGallery/src/plots/CurvedScatterPlot.m +++ b/examples/CorePlotGallery/src/plots/CurvedScatterPlot.m @@ -69,7 +69,7 @@ -(void)generateData self.plotData = contentArray; } - if ( self.plotData1 == nil ) { + if ( !self.plotData1 ) { NSMutableArray *> *contentArray = [NSMutableArray array]; NSArray *> *dataArray = self.plotData; @@ -96,7 +96,7 @@ -(void)generateData self.plotData1 = contentArray; } - if ( self.plotData2 == nil ) { + if ( !self.plotData2 ) { NSMutableArray *> *contentArray = [NSMutableArray array]; NSArray *> *dataArray = self.plotData1; diff --git a/examples/CorePlotGallery/src/shared/PlotGallery.m b/examples/CorePlotGallery/src/shared/PlotGallery.m index ee8c88a2b..e3a03cb14 100644 --- a/examples/CorePlotGallery/src/shared/PlotGallery.m +++ b/examples/CorePlotGallery/src/shared/PlotGallery.m @@ -38,7 +38,7 @@ @implementation PlotGallery size_t memSize = sizeof(Class) * (size_t)numClasses; Class *classes = (__unsafe_unretained Class *)malloc(memSize); - if ((classes == NULL) && memSize ) { + if ( !classes && memSize ) { return [NSArray array]; } @@ -78,7 +78,7 @@ @implementation PlotGallery +(nonnull PlotGallery *)sharedPlotGallery { @synchronized ( self ) { - if ( sharedPlotGallery == nil ) { + if ( !sharedPlotGallery ) { sharedPlotGallery = [[self alloc] init]; } } @@ -88,7 +88,7 @@ +(nonnull PlotGallery *)sharedPlotGallery +(id)allocWithZone:(NSZone *)zone { @synchronized ( self ) { - if ( sharedPlotGallery == nil ) { + if ( !sharedPlotGallery ) { return [super allocWithZone:zone]; } } @@ -100,7 +100,7 @@ -(nonnull instancetype)init Class thisClass = [self class]; @synchronized ( thisClass ) { - if ( sharedPlotGallery == nil ) { + if ( !sharedPlotGallery ) { if ((self = [super init])) { sharedPlotGallery = self; plotItems = [[NSMutableArray alloc] init]; diff --git a/examples/CorePlotGallery/src/shared/PlotItem.m b/examples/CorePlotGallery/src/shared/PlotItem.m index 30ea4ef36..a96a8872d 100644 --- a/examples/CorePlotGallery/src/shared/PlotItem.m +++ b/examples/CorePlotGallery/src/shared/PlotItem.m @@ -230,7 +230,7 @@ -(void)formatAllGraphs -(nonnull CPTNativeImage *)image { - if ( self.cachedImage == nil ) { + if ( !self.cachedImage ) { CGRect imageFrame = CGRectMake(0, 0, 400, 300); UIView *imageView = [[UIView alloc] initWithFrame:imageFrame]; [imageView setOpaque:YES]; @@ -275,7 +275,7 @@ -(nonnull CPTNativeImage *)image -(nonnull CPTNativeImage *)image { - if ( self.cachedImage == nil ) { + if ( !self.cachedImage ) { CGRect imageFrame = CGRectMake(0, 0, 400, 300); NSView *imageView = [[NSView alloc] initWithFrame:NSRectFromCGRect(imageFrame)]; @@ -300,7 +300,7 @@ -(nonnull CPTNativeImage *)image -(void)applyTheme:(nullable CPTTheme *)theme toGraph:(nonnull CPTGraph *)graph withDefault:(nullable CPTTheme *)defaultTheme { - if ( theme == nil ) { + if ( !theme ) { [graph applyTheme:defaultTheme]; } else if ( ![theme isKindOfClass:[NSNull class]] ) { diff --git a/examples/CorePlotGallery/src/tvOS/RootViewControllerTV.m b/examples/CorePlotGallery/src/tvOS/RootViewControllerTV.m index 63615f612..3a73f36ce 100644 --- a/examples/CorePlotGallery/src/tvOS/RootViewControllerTV.m +++ b/examples/CorePlotGallery/src/tvOS/RootViewControllerTV.m @@ -104,7 +104,7 @@ -(UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPa UITableViewCell *cell = [tv dequeueReusableCellWithIdentifier:cellId]; - if ( cell == nil ) { + if ( !cell ) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId]; cell.accessoryType = UITableViewCellAccessoryNone; } diff --git a/examples/CorePlotGallery/src/tvOS/ThemeTableViewControllerTV.m b/examples/CorePlotGallery/src/tvOS/ThemeTableViewControllerTV.m index 4e867d9ce..c304be146 100644 --- a/examples/CorePlotGallery/src/tvOS/ThemeTableViewControllerTV.m +++ b/examples/CorePlotGallery/src/tvOS/ThemeTableViewControllerTV.m @@ -74,7 +74,7 @@ -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NS UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; - if ( cell == nil ) { + if ( !cell ) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } diff --git a/examples/DropPlot/CPTPlotDocument.m b/examples/DropPlot/CPTPlotDocument.m index 762ae0b7c..5cacd0c82 100644 --- a/examples/DropPlot/CPTPlotDocument.m +++ b/examples/DropPlot/CPTPlotDocument.m @@ -141,7 +141,7 @@ -(nullable NSData *)dataOfType:(nonnull NSString *__unused)typeName error:(NSErr // For applications targeted for Panther or earlier systems, you should use the deprecated API -dataRepresentationOfType:. In this case you can also choose to override -fileWrapperRepresentationOfType: or -writeToFile:ofType: instead. - if ( outError != NULL ) { + if ( outError ) { *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL]; } return nil; @@ -225,7 +225,7 @@ -(BOOL)readFromData:(nonnull NSData *)data ofType:(NSString *)typeName error:(NS self.maximumValueForYAxis = maxY; } - if ( outError != NULL ) { + if ( outError ) { *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL]; } return YES; diff --git a/framework/PlatformSpecific/CPTGraphHostingView.m b/framework/PlatformSpecific/CPTGraphHostingView.m index 97933f4eb..f6f3b1334 100644 --- a/framework/PlatformSpecific/CPTGraphHostingView.m +++ b/framework/PlatformSpecific/CPTGraphHostingView.m @@ -612,7 +612,7 @@ -(void)observeValueForKeyPath:(nullable NSString *)keyPath ofObject:(nullable id -(void)setHostedGraph:(nullable CPTGraph *)newGraph { - NSParameterAssert((newGraph == nil) || [newGraph isKindOfClass:[CPTGraph class]]); + NSParameterAssert(!newGraph || [newGraph isKindOfClass:[CPTGraph class]]); if ( newGraph != hostedGraph ) { self.wantsLayer = YES; @@ -1058,7 +1058,7 @@ -(void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection -(void)setHostedGraph:(nullable CPTGraph *)newLayer { - NSParameterAssert((newLayer == nil) || [newLayer isKindOfClass:[CPTGraph class]]); + NSParameterAssert(!newLayer || [newLayer isKindOfClass:[CPTGraph class]]); if ( newLayer == hostedGraph ) { return; diff --git a/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m b/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m index 80d0303f6..5a36b7e78 100644 --- a/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m +++ b/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m @@ -98,7 +98,7 @@ -(nonnull CPTDictionary *)attributes NSFont *styleFont = self.font; NSString *fontName = self.fontName; - if ((styleFont == nil) && fontName ) { + if ( !styleFont && fontName ) { styleFont = [NSFont fontWithName:fontName size:self.fontSize]; } @@ -243,7 +243,7 @@ -(CGSize)sizeWithTextStyle:(nullable CPTTextStyle *)style **/ -(void)drawInRect:(CGRect)rect withTextStyle:(nullable CPTTextStyle *)style inContext:(nonnull CGContextRef)context { - if ( style.color == nil ) { + if ( !style.color ) { return; } @@ -257,7 +257,7 @@ -(void)drawInRect:(CGRect)rect withTextStyle:(nullable CPTTextStyle *)style inCo NSFont *theFont = style.font; NSString *fontName = style.fontName; - if ((theFont == nil) && fontName ) { + if ( !theFont && fontName ) { theFont = [NSFont fontWithName:fontName size:style.fontSize]; } @@ -361,7 +361,7 @@ -(nonnull CPTDictionary *)attributes UIFont *styleFont = self.font; NSString *fontName = self.fontName; - if ((styleFont == nil) && fontName ) { + if ( !styleFont && fontName ) { styleFont = [UIFont fontWithName:fontName size:self.fontSize]; } @@ -480,7 +480,7 @@ -(CGSize)sizeWithTextStyle:(nullable CPTTextStyle *)style **/ -(void)drawInRect:(CGRect)rect withTextStyle:(nullable CPTTextStyle *)style inContext:(nonnull CGContextRef)context { - if ( style.color == nil ) { + if ( !style.color ) { return; } @@ -513,7 +513,7 @@ -(void)drawInRect:(CGRect)rect withTextStyle:(nullable CPTTextStyle *)style inCo UIFont *theFont = style.font; NSString *fontName = style.fontName; - if ((theFont == nil) && fontName ) { + if ( !theFont && fontName ) { theFont = [UIFont fontWithName:fontName size:style.fontSize]; } @@ -530,7 +530,7 @@ -(void)drawInRect:(CGRect)rect withTextStyle:(nullable CPTTextStyle *)style inCo [styleColor set]; UIFont *theFont = self.font; - if ( theFont == nil ) { + if ( !theFont ) { theFont = [UIFont fontWithName:style.fontName size:style.fontSize]; } diff --git a/framework/Source/CPTBarPlot.m b/framework/Source/CPTBarPlot.m index 1cadfb46d..d6170a171 100644 --- a/framework/Source/CPTBarPlot.m +++ b/framework/Source/CPTBarPlot.m @@ -880,14 +880,14 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context CPTMutableNumericData *cachedLocations = [self cachedNumbersForField:CPTBarPlotFieldBarLocation]; CPTMutableNumericData *cachedLengths = [self cachedNumbersForField:CPTBarPlotFieldBarTip]; - if ((cachedLocations == nil) || (cachedLengths == nil)) { + if ( !cachedLocations || !cachedLengths ) { return; } BOOL basesVary = self.barBasesVary; CPTMutableNumericData *cachedBases = [self cachedNumbersForField:CPTBarPlotFieldBarBase]; - if ( basesVary && (cachedBases == nil)) { + if ( basesVary && !cachedBases ) { return; } @@ -1157,7 +1157,7 @@ -(nullable CPTFill *)barFillForIndex:(NSUInteger)idx { CPTFill *theBarFill = [self cachedValueForKey:CPTBarPlotBindingBarFills recordIndex:idx]; - if ((theBarFill == nil) || (theBarFill == [CPTPlot nilData])) { + if ( !theBarFill || (theBarFill == [CPTPlot nilData])) { theBarFill = self.fill; } @@ -1168,7 +1168,7 @@ -(nullable CPTLineStyle *)barLineStyleForIndex:(NSUInteger)idx { CPTLineStyle *theBarLineStyle = [self cachedValueForKey:CPTBarPlotBindingBarLineStyles recordIndex:idx]; - if ((theBarLineStyle == nil) || (theBarLineStyle == [CPTPlot nilData])) { + if ( !theBarLineStyle || (theBarLineStyle == [CPTPlot nilData])) { theBarLineStyle = self.lineStyle; } @@ -1179,7 +1179,7 @@ -(nonnull NSNumber *)barWidthForIndex:(NSUInteger)idx { NSNumber *theBarWidth = [self cachedValueForKey:CPTBarPlotBindingBarWidths recordIndex:idx]; - if ((theBarWidth == nil) || (theBarWidth == [CPTPlot nilData])) { + if ( !theBarWidth || (theBarWidth == [CPTPlot nilData])) { theBarWidth = self.barWidth; } diff --git a/framework/Source/CPTGradient.m b/framework/Source/CPTGradient.m index 733666854..707955965 100644 --- a/framework/Source/CPTGradient.m +++ b/framework/Source/CPTGradient.m @@ -159,7 +159,7 @@ -(nonnull id)copyWithZone:(nullable NSZone *)zone CPTGradientElement *currentElement = self.elementList; - while ( currentElement != NULL ) { + while ( currentElement ) { [copy addElement:currentElement]; currentElement = currentElement->nextElement; } @@ -186,7 +186,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder CPTGradientElement *currentElement = self.elementList; - while ( currentElement != NULL ) { + while ( currentElement ) { [coder encodeCGFloat:currentElement->color.red forKey:[NSString stringWithFormat:@"red%lu", (unsigned long)count]]; [coder encodeCGFloat:currentElement->color.green forKey:[NSString stringWithFormat:@"green%lu", (unsigned long)count]]; [coder encodeCGFloat:currentElement->color.blue forKey:[NSString stringWithFormat:@"blue%lu", (unsigned long)count]]; @@ -695,7 +695,7 @@ -(CPTGradient *)gradientWithAlphaComponent:(CGFloat)alpha CPTGradientElement *curElement = self.elementList; CPTGradientElement tempElement; - while ( curElement != NULL ) { + while ( curElement ) { tempElement = *curElement; tempElement.color.alpha = alpha; [newGradient addElement:&tempElement]; @@ -789,7 +789,7 @@ -(CGColorRef)newColorStopAtIndex:(NSUInteger)idx { CPTGradientElement *element = [self elementAtIndex:idx]; - if ( element != NULL ) { + if ( element ) { #if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST CGFloat colorComponents[4] = { element->color.red, element->color.green, element->color.blue, element->color.alpha }; return CGColorCreate(self.colorspace.cgColorSpace, colorComponents); @@ -917,7 +917,7 @@ -(BOOL)isOpaque CPTGradientElement *list = self.elementList; - while ( opaqueGradient && (list != NULL)) { + while ( opaqueGradient && list ) { opaqueGradient = opaqueGradient && (list->color.alpha >= CPTFloat(1.0)); list = list->nextElement; } @@ -1183,7 +1183,7 @@ -(void)addElement:(nonnull CPTGradientElement *)newElement { CPTGradientElement *curElement = self.elementList; - if ((curElement == NULL) || (newElement->position < curElement->position)) { + if ( !curElement || (newElement->position < curElement->position)) { CPTGradientElement *tmpNext = curElement; CPTGradientElement *newElementList = calloc(1, sizeof(CPTGradientElement)); if ( newElementList ) { @@ -1193,7 +1193,7 @@ -(void)addElement:(nonnull CPTGradientElement *)newElement } } else { - while ( curElement->nextElement != NULL && + while ( curElement->nextElement && !((curElement->position <= newElement->position) && (newElement->position < curElement->nextElement->position))) { curElement = curElement->nextElement; @@ -1210,7 +1210,7 @@ -(CPTGradientElement)removeElementAtIndex:(NSUInteger)idx { CPTGradientElement removedElement; - if ( self.elementList != NULL ) { + if ( self.elementList ) { if ( idx == 0 ) { CPTGradientElement *tmpNext = self.elementList; self.elementList = tmpNext->nextElement; @@ -1223,7 +1223,7 @@ -(CPTGradientElement)removeElementAtIndex:(NSUInteger)idx NSUInteger count = 1; // we want to start one ahead CPTGradientElement *currentElement = self.elementList; - while ( currentElement->nextElement != NULL ) { + while ( currentElement->nextElement ) { if ( count == idx ) { CPTGradientElement *tmpNext = currentElement->nextElement; currentElement->nextElement = currentElement->nextElement->nextElement; @@ -1255,7 +1255,7 @@ -(CPTGradientElement)removeElementAtPosition:(CGFloat)position CPTGradientElement removedElement; CPTGradientElement *curElement = self.elementList; - if ( curElement != NULL ) { + if ( curElement ) { if ( curElement->position == position ) { CPTGradientElement *tmpNext = self.elementList; self.elementList = curElement->nextElement; @@ -1266,7 +1266,7 @@ -(CPTGradientElement)removeElementAtPosition:(CGFloat)position return removedElement; } else { - while ( curElement->nextElement != NULL ) { + while ( curElement->nextElement ) { if ( curElement->nextElement->position == position ) { CPTGradientElement *tmpNext = curElement->nextElement; curElement->nextElement = curElement->nextElement->nextElement; @@ -1295,7 +1295,7 @@ -(void)removeAllElements { CPTGradientElement *element = self.elementList; - while ( element != NULL ) { + while ( element ) { CPTGradientElement *elementToRemove = element; element = element->nextElement; free(elementToRemove); @@ -1309,7 +1309,7 @@ -(nullable CPTGradientElement *)elementAtIndex:(NSUInteger)idx NSUInteger count = 0; CPTGradientElement *currentElement = self.elementList; - while ( currentElement != NULL ) { + while ( currentElement ) { if ( count == idx ) { return currentElement; } @@ -1349,7 +1349,7 @@ void CPTLinearEvaluation(void *__nullable info, const CGFloat *__nonnull in, CGF // This grabs the first two colors in the sequence CPTGradientElement *color1 = gradient.elementList; - if ( color1 == NULL ) { + if ( !color1 ) { out[0] = out[1] = out[2] = out[3] = CPTFloat(1.0); return; } @@ -1357,12 +1357,12 @@ void CPTLinearEvaluation(void *__nullable info, const CGFloat *__nonnull in, CGF CPTGradientElement *color2 = color1->nextElement; // make sure first color and second color are on other sides of position - while ( color2 != NULL && color2->position < position ) { + while ( color2 && color2->position < position ) { color1 = color2; color2 = color1->nextElement; } // if we don't have another color then make next color the same color - if ( color2 == NULL ) { + if ( !color2 ) { color2 = color1; } @@ -1415,7 +1415,7 @@ void CPTChromaticEvaluation(void *__nullable info, const CGFloat *__nonnull in, // This grabs the first two colors in the sequence CPTGradientElement *color1 = gradient.elementList; - if ( color1 == NULL ) { + if ( !color1 ) { out[0] = out[1] = out[2] = out[3] = CPTFloat(1.0); return; } @@ -1426,13 +1426,13 @@ void CPTChromaticEvaluation(void *__nullable info, const CGFloat *__nonnull in, CGFloat c2[4]; // make sure first color and second color are on other sides of position - while ( color2 != NULL && color2->position < position ) { + while ( color2 && color2->position < position ) { color1 = color2; color2 = color1->nextElement; } // if we don't have another color then make next color the same color - if ( color2 == NULL ) { + if ( !color2 ) { color2 = color1; } @@ -1492,7 +1492,7 @@ void CPTInverseChromaticEvaluation(void *__nullable info, const CGFloat *__nonnu // This grabs the first two colors in the sequence CPTGradientElement *color1 = gradient.elementList; - if ( color1 == NULL ) { + if ( !color1 ) { out[0] = out[1] = out[2] = out[3] = CPTFloat(1.0); return; } @@ -1503,13 +1503,13 @@ void CPTInverseChromaticEvaluation(void *__nullable info, const CGFloat *__nonnu CGFloat c2[4]; // make sure first color and second color are on other sides of position - while ( color2 != NULL && color2->position < position ) { + while ( color2 && color2->position < position ) { color1 = color2; color2 = color1->nextElement; } // if we don't have another color then make next color the same color - if ( color2 == NULL ) { + if ( !color2 ) { color2 = color1; } diff --git a/framework/Source/CPTNumericData.m b/framework/Source/CPTNumericData.m index 86f0d2728..f2336a597 100644 --- a/framework/Source/CPTNumericData.m +++ b/framework/Source/CPTNumericData.m @@ -435,7 +435,7 @@ -(void)commonInitWithData:(nonnull NSData *)newData CPTNumberArray *theShape = shapeArray; - if ( theShape == nil ) { + if ( !theShape ) { self.shape = @[@(self.numberOfSamples)]; } else { diff --git a/framework/Source/CPTPieChart.m b/framework/Source/CPTPieChart.m index d90481349..9860c7014 100644 --- a/framework/Source/CPTPieChart.m +++ b/framework/Source/CPTPieChart.m @@ -773,7 +773,7 @@ -(nullable CPTFill *)sliceFillForIndex:(NSUInteger)idx { CPTFill *currentFill = [self cachedValueForKey:CPTPieChartBindingPieSliceFills recordIndex:idx]; - if ((currentFill == nil) || (currentFill == [CPTPlot nilData])) { + if ( !currentFill || (currentFill == [CPTPlot nilData])) { currentFill = [CPTFill fillWithColor:[CPTPieChart defaultPieSliceColorForIndex:idx]]; } diff --git a/framework/Source/CPTPlot.m b/framework/Source/CPTPlot.m index b9a9c3605..fbf714b03 100644 --- a/framework/Source/CPTPlot.m +++ b/framework/Source/CPTPlot.m @@ -1668,7 +1668,7 @@ -(void)relabel else { newLabelLayer = [self cachedValueForKey:CPTPlotBindingDataLabels recordIndex:i]; - if (((newLabelLayer == nil) || (newLabelLayer == nilObject)) && plotProvidesLabels ) { + if ((!newLabelLayer || (newLabelLayer == nilObject)) && plotProvidesLabels ) { if ( hasAttributedFormatter ) { NSAttributedString *labelString = [dataLabelFormatter attributedStringForObjectValue:dataValue withDefaultAttributes:textAttributes]; newLabelLayer = [[CPTTextLayer alloc] initWithAttributedText:labelString]; diff --git a/framework/Source/CPTRangePlot.m b/framework/Source/CPTRangePlot.m index 3ac874097..bfe9bfc65 100644 --- a/framework/Source/CPTRangePlot.m +++ b/framework/Source/CPTRangePlot.m @@ -694,7 +694,7 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context CPTMutableNumericData *xValueData = [self cachedNumbersForField:CPTRangePlotFieldX]; CPTMutableNumericData *yValueData = [self cachedNumbersForField:CPTRangePlotFieldY]; - if ((xValueData == nil) || (yValueData == nil)) { + if ( !xValueData || !yValueData ) { return; } NSUInteger dataCount = self.cachedDataCount; @@ -1010,7 +1010,7 @@ -(nullable CPTLineStyle *)barLineStyleForIndex:(NSUInteger)idx { CPTLineStyle *theBarLineStyle = [self cachedValueForKey:CPTRangePlotBindingBarLineStyles recordIndex:idx]; - if ((theBarLineStyle == nil) || (theBarLineStyle == [CPTPlot nilData])) { + if ( !theBarLineStyle || (theBarLineStyle == [CPTPlot nilData])) { theBarLineStyle = self.barLineStyle; } @@ -1021,7 +1021,7 @@ -(nonnull NSNumber *)barWidthForIndex:(NSUInteger)idx { NSNumber *theBarWidth = [self cachedValueForKey:CPTRangePlotBindingBarWidths recordIndex:idx]; - if ((theBarWidth == nil) || (theBarWidth == [CPTPlot nilData])) { + if ( !theBarWidth || (theBarWidth == [CPTPlot nilData])) { theBarWidth = @(self.barWidth); } diff --git a/framework/Source/CPTScatterPlot.m b/framework/Source/CPTScatterPlot.m index 744569609..b03b01747 100644 --- a/framework/Source/CPTScatterPlot.m +++ b/framework/Source/CPTScatterPlot.m @@ -456,7 +456,7 @@ -(nullable CPTPlotSymbol *)plotSymbolForRecordIndex:(NSUInteger)idx { CPTPlotSymbol *symbol = [self cachedValueForKey:CPTScatterPlotBindingPlotSymbols recordIndex:idx]; - if ((symbol == nil) || (symbol == [CPTPlot nilData])) { + if ( !symbol || (symbol == [CPTPlot nilData])) { symbol = self.plotSymbol; } @@ -785,7 +785,7 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context CPTMutableNumericData *xValueData = [self cachedNumbersForField:CPTScatterPlotFieldX]; CPTMutableNumericData *yValueData = [self cachedNumbersForField:CPTScatterPlotFieldY]; - if ((xValueData == nil) || (yValueData == nil)) { + if ( !xValueData || !yValueData ) { return; } NSUInteger dataCount = self.cachedDataCount; diff --git a/framework/Source/CPTTheme.m b/framework/Source/CPTTheme.m index 2a94ef890..b14669ce4 100644 --- a/framework/Source/CPTTheme.m +++ b/framework/Source/CPTTheme.m @@ -134,7 +134,7 @@ +(BOOL)supportsSecureCoding size_t memSize = sizeof(Class) * (size_t)numClasses; Class *classes = (__unsafe_unretained Class *)malloc(memSize); - if ((classes == NULL) && memSize ) { + if ( !classes && memSize ) { return [NSArray array]; } diff --git a/framework/Source/CPTTradingRangePlot.m b/framework/Source/CPTTradingRangePlot.m index b5e1fa72c..a26a0406d 100644 --- a/framework/Source/CPTTradingRangePlot.m +++ b/framework/Source/CPTTradingRangePlot.m @@ -624,7 +624,7 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context if ( sampleCount == 0 ) { return; } - if ((opens == nil) || (highs == nil) || (lows == nil) || (closes == nil)) { + if ( !opens || !highs || !lows || !closes ) { return; } @@ -1113,7 +1113,7 @@ -(nullable CPTFill *)increaseFillForIndex:(NSUInteger)idx { CPTFill *theFill = [self cachedValueForKey:CPTTradingRangePlotBindingIncreaseFills recordIndex:idx]; - if ((theFill == nil) || (theFill == [CPTPlot nilData])) { + if ( !theFill || (theFill == [CPTPlot nilData])) { theFill = self.increaseFill; } @@ -1124,7 +1124,7 @@ -(nullable CPTFill *)decreaseFillForIndex:(NSUInteger)idx { CPTFill *theFill = [self cachedValueForKey:CPTTradingRangePlotBindingDecreaseFills recordIndex:idx]; - if ((theFill == nil) || (theFill == [CPTPlot nilData])) { + if ( !theFill || (theFill == [CPTPlot nilData])) { theFill = self.decreaseFill; } @@ -1135,7 +1135,7 @@ -(nullable CPTLineStyle *)lineStyleForIndex:(NSUInteger)idx { CPTLineStyle *theLineStyle = [self cachedValueForKey:CPTTradingRangePlotBindingLineStyles recordIndex:idx]; - if ((theLineStyle == nil) || (theLineStyle == [CPTPlot nilData])) { + if ( !theLineStyle || (theLineStyle == [CPTPlot nilData])) { theLineStyle = self.lineStyle; } @@ -1146,11 +1146,11 @@ -(nullable CPTLineStyle *)increaseLineStyleForIndex:(NSUInteger)idx { CPTLineStyle *theLineStyle = [self cachedValueForKey:CPTTradingRangePlotBindingIncreaseLineStyles recordIndex:idx]; - if ((theLineStyle == nil) || (theLineStyle == [CPTPlot nilData])) { + if ( !theLineStyle || (theLineStyle == [CPTPlot nilData])) { theLineStyle = self.increaseLineStyle; } - if ( theLineStyle == nil ) { + if ( !theLineStyle ) { theLineStyle = [self lineStyleForIndex:idx]; } @@ -1161,11 +1161,11 @@ -(nullable CPTLineStyle *)decreaseLineStyleForIndex:(NSUInteger)idx { CPTLineStyle *theLineStyle = [self cachedValueForKey:CPTTradingRangePlotBindingDecreaseLineStyles recordIndex:idx]; - if ((theLineStyle == nil) || (theLineStyle == [CPTPlot nilData])) { + if ( !theLineStyle || (theLineStyle == [CPTPlot nilData])) { theLineStyle = self.decreaseLineStyle; } - if ( theLineStyle == nil ) { + if ( !theLineStyle ) { theLineStyle = [self lineStyleForIndex:idx]; } @@ -1176,7 +1176,7 @@ -(nonnull NSNumber *)barWidthForIndex:(NSUInteger)idx { NSNumber *theBarWidth = [self cachedValueForKey:CPTTradingRangePlotBindingBarWidths recordIndex:idx]; - if ((theBarWidth == nil) || (theBarWidth == [CPTPlot nilData])) { + if ( !theBarWidth || (theBarWidth == [CPTPlot nilData])) { theBarWidth = @(self.barWidth); } From bc7ab66163218abda0cf48cc5b0158e685435aba Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Mon, 3 Oct 2022 20:46:56 -0400 Subject: [PATCH 110/245] Fixed a compiler warning in the DropPlot example app. --- examples/DropPlot/NSString+ParseCSV.m | 53 +++++++++++++-------------- 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/examples/DropPlot/NSString+ParseCSV.m b/examples/DropPlot/NSString+ParseCSV.m index 7a9bbde09..4c168bf8e 100644 --- a/examples/DropPlot/NSString+ParseCSV.m +++ b/examples/DropPlot/NSString+ParseCSV.m @@ -15,44 +15,41 @@ -(CPTStringArray *)arrayByParsingCSVLine for ( NSUInteger i = 0; i < theFields.count; i++ ) { NSString *theField = theFields[i]; - switch ( inField ) { - case NO: - if (([theField hasPrefix:@"\""] == YES) && ([theField hasSuffix:@"\""] == NO)) { - inField = YES; - [theConcatenatedField appendString:theField]; - [theConcatenatedField appendString:@","]; + if ( inField ) { + [theConcatenatedField appendString:theField]; + if ( [theField hasSuffix:@"\""] == YES ) { + NSString *field = [theConcatenatedField stringByTrimmingCharactersInSet:quotedCharacterSet]; + if ( isRemoveWhitespace ) { + [theArray addObject:[field stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]]; } else { - if ( isRemoveWhitespace ) { - [theArray addObject:[theField stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]]; - } - else { - [theArray addObject:theField]; - } + [theArray addObject:field]; } - break; - - case YES: + [theConcatenatedField setString:@""]; + inField = NO; + } + else { + [theConcatenatedField appendString:@","]; + } + } + else { + if (([theField hasPrefix:@"\""] == YES) && ([theField hasSuffix:@"\""] == NO)) { + inField = YES; [theConcatenatedField appendString:theField]; - if ( [theField hasSuffix:@"\""] == YES ) { - NSString *field = [theConcatenatedField stringByTrimmingCharactersInSet:quotedCharacterSet]; - if ( isRemoveWhitespace ) { - [theArray addObject:[field stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]]; - } - else { - [theArray addObject:field]; - } - [theConcatenatedField setString:@""]; - inField = NO; + [theConcatenatedField appendString:@","]; + } + else { + if ( isRemoveWhitespace ) { + [theArray addObject:[theField stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]]; } else { - [theConcatenatedField appendString:@","]; + [theArray addObject:theField]; } - break; + } } } + return theArray; - // TODO: Check this for potential memory leaks, not sure that the array is autoreleased } @end From 0a7787cff51973ee55a767eff549db506975ff83 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Mon, 3 Oct 2022 20:49:59 -0400 Subject: [PATCH 111/245] Replaced explicit comparisons with YES and NO with more compact equivalent expressions. --- examples/DropPlot/NSString+ParseCSV.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/DropPlot/NSString+ParseCSV.m b/examples/DropPlot/NSString+ParseCSV.m index 4c168bf8e..217774057 100644 --- a/examples/DropPlot/NSString+ParseCSV.m +++ b/examples/DropPlot/NSString+ParseCSV.m @@ -17,7 +17,7 @@ -(CPTStringArray *)arrayByParsingCSVLine NSString *theField = theFields[i]; if ( inField ) { [theConcatenatedField appendString:theField]; - if ( [theField hasSuffix:@"\""] == YES ) { + if ( [theField hasSuffix:@"\""] ) { NSString *field = [theConcatenatedField stringByTrimmingCharactersInSet:quotedCharacterSet]; if ( isRemoveWhitespace ) { [theArray addObject:[field stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]]; @@ -33,7 +33,7 @@ -(CPTStringArray *)arrayByParsingCSVLine } } else { - if (([theField hasPrefix:@"\""] == YES) && ([theField hasSuffix:@"\""] == NO)) { + if ( [theField hasPrefix:@"\""] && ![theField hasSuffix:@"\""] ) { inField = YES; [theConcatenatedField appendString:theField]; [theConcatenatedField appendString:@","]; From 3a1f1468395505bd57ecc9ad13bd74ec4d864391 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Mon, 3 Oct 2022 21:03:00 -0400 Subject: [PATCH 112/245] Removed references to unused LaunchImage assets. --- .../CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj | 2 -- examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj | 2 -- 2 files changed, 4 deletions(-) diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj index 7af62cb3c..1de6107dc 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj @@ -399,7 +399,6 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CLANG_ENABLE_OBJC_ARC = YES; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; @@ -419,7 +418,6 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CLANG_ENABLE_OBJC_ARC = YES; COPY_PHASE_STRIP = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; diff --git a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj index 39b01ba62..784726d24 100644 --- a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj +++ b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj @@ -1094,7 +1094,6 @@ baseConfigurationReference = C3C0DF2719D86B5E00631CAD /* CorePlotWarnings.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; @@ -1122,7 +1121,6 @@ baseConfigurationReference = C3C0DF2719D86B5E00631CAD /* CorePlotWarnings.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; From 49fe549f2d1b652a82ca0f8d9dd01fe2d4b77b3a Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Tue, 4 Oct 2022 20:28:41 -0400 Subject: [PATCH 113/245] Updated Doxygen configuration files to version 1.9.5. --- documentation/doxygen/doxygen touch.config | 636 +++++++++++++-------- documentation/doxygen/doxygen.config | 636 +++++++++++++-------- 2 files changed, 820 insertions(+), 452 deletions(-) diff --git a/documentation/doxygen/doxygen touch.config b/documentation/doxygen/doxygen touch.config index 02c87a1fe..b8ba65b32 100644 --- a/documentation/doxygen/doxygen touch.config +++ b/documentation/doxygen/doxygen touch.config @@ -1,4 +1,4 @@ -# Doxyfile 1.8.18 +# Doxyfile 1.9.5 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -12,6 +12,16 @@ # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). +# +# Note: +# +# Use doxygen to compare the used configuration file with the template +# configuration file: +# doxygen -x [configFile] +# Use doxygen to compare the used configuration file with the template +# configuration file without replacing the environment variables or CMake type +# replacement variables: +# doxygen -x_noenv [configFile] #--------------------------------------------------------------------------- # Project related configuration options @@ -51,25 +61,37 @@ PROJECT_BRIEF = "Cocoa plotting framework for macOS, iOS, and tvOS" # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy # the logo to the output directory. -PROJECT_LOGO = "$(SOURCE_ROOT)/../documentation/core-plot-logo.png" +PROJECT_LOGO = $(SOURCE_ROOT)/../documentation/core-plot-logo.png # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. -OUTPUT_DIRECTORY = "$(SOURCE_ROOT)/CorePlotTouchDocs.docset" +OUTPUT_DIRECTORY = $(SOURCE_ROOT)/CorePlotTouchDocs.docset -# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- -# directories (in 2 levels) under the output directory of each output format and -# will distribute the generated files over these directories. Enabling this +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096 +# sub-directories (in 2 levels) under the output directory of each output format +# and will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where # putting all generated files in the same directory would otherwise causes -# performance problems for the file system. +# performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to +# control the number of sub-directories. # The default value is: NO. CREATE_SUBDIRS = NO +# Controls the number of sub-directories that will be created when +# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every +# level increment doubles the number of directories, resulting in 4096 +# directories at level 8 which is the default and also the maximum value. The +# sub-directories are organized in 2 levels, the first level always has a fixed +# numer of 16 directories. +# Minimum value: 0, maximum value: 8, default value: 8. +# This tag requires that the tag CREATE_SUBDIRS is set to YES. + +CREATE_SUBDIRS_LEVEL = 8 + # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode @@ -81,26 +103,18 @@ ALLOW_UNICODE_NAMES = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, -# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), -# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, -# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), -# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, -# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, -# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, -# Ukrainian and Vietnamese. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian, +# Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English +# (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek, +# Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with +# English messages), Korean, Korean-en (Korean with English messages), Latvian, +# Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, +# Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, +# Swedish, Turkish, Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English -# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all generated output in the proper direction. -# Possible values are: None, LTR, RTL and Context. -# The default value is: None. - -OUTPUT_TEXT_DIRECTION = None - # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. @@ -217,6 +231,14 @@ QT_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO +# By default Python docstrings are displayed as preformatted text and doxygen's +# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the +# doxygen's special commands can be used and the contents of the docstring +# documentation blocks is shown as doxygen documentation. +# The default value is: YES. + +PYTHON_DOCSTRING = YES + # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. # The default value is: YES. @@ -240,16 +262,16 @@ TAB_SIZE = 4 # the documentation. An alias has the form: # name=value # For example adding -# "sideeffect=@par Side Effects:\n" +# "sideeffect=@par Side Effects:^^" # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading -# "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines (in the resulting output). You can put ^^ in the value part of an -# alias to insert a newline as if a physical newline was in the original file. -# When you need a literal { or } or , in the value part of an alias you have to -# escape them by means of a backslash (\), this can lead to conflicts with the -# commands \{ and \} for these it is advised to use the version @{ and @} or use -# a double escape (\\{ and \\}) +# "Side Effects:". Note that you cannot put \n's in the value part of an alias +# to insert newlines (in the resulting output). You can put ^^ in the value part +# of an alias to insert a newline as if a physical newline was in the original +# file. When you need a literal { or } or , in the value part of an alias you +# have to escape them by means of a backslash (\), this can lead to conflicts +# with the commands \{ and \} for these it is advised to use the version @{ and +# @} or use a double escape (\\{ and \\}) ALIASES = "YES=@ref YES" \ "NO=@ref NO" \ @@ -313,8 +335,8 @@ OPTIMIZE_OUTPUT_SLICE = NO # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, JavaScript, -# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL, -# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: +# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice, +# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: # FortranFree, unknown formatted Fortran: Fortran. In the later case the parser # tries to guess whether the code is fixed or free formatted code, this is the # default for Fortran type files). For instance to make doxygen treat .inc files @@ -324,7 +346,10 @@ OPTIMIZE_OUTPUT_SLICE = NO # Note: For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. +# the files are not read by doxygen. When specifying no_extension you should add +# * to the FILE_PATTERNS. +# +# Note see also the list of default file extension mappings. EXTENSION_MAPPING = @@ -355,11 +380,11 @@ TOC_INCLUDE_HEADINGS = 0 AUTOLINK_SUPPORT = YES -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# If you use STL classes (i.e. std#string, std#vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should set this # tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); -# versus func(std::string) {}). This also make the inheritance and collaboration +# definitions whose arguments contain STL classes (e.g. func(std#string); +# versus func(std#string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. # The default value is: NO. @@ -458,6 +483,19 @@ TYPEDEF_HIDES_STRUCT = YES LOOKUP_CACHE_SIZE = 0 +# The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use +# during processing. When set to 0 doxygen will based this on the number of +# cores available in the system. You can set it explicitly to a value larger +# than 0 to get more control over the balance between CPU load and processing +# speed. At this moment only the input processing can be done using multiple +# threads. Since this is still an experimental feature the default is set to 1, +# which effectively disables parallel processing. Please report any issues you +# encounter. Generating dot graphs in parallel is controlled by the +# DOT_NUM_THREADS setting. +# Minimum value: 0, maximum value: 32, default value: 1. + +NUM_PROC_THREADS = 1 + #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- @@ -521,6 +559,13 @@ EXTRACT_LOCAL_METHODS = YES EXTRACT_ANON_NSPACES = NO +# If this flag is set to YES, the name of an unnamed parameter in a declaration +# will be determined by the corresponding definition. By default unnamed +# parameters remain unnamed in the output. +# The default value is: YES. + +RESOLVE_UNNAMED_PARAMS = YES + # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation @@ -558,12 +603,20 @@ HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO -# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES, upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# (including Cygwin) ands Mac users are advised to set this option to NO. -# The default value is: system dependent. +# With the correct setting of option CASE_SENSE_NAMES doxygen will better be +# able to match the capabilities of the underlying filesystem. In case the +# filesystem is case sensitive (i.e. it supports files in the same directory +# whose names only differ in casing), the option must be set to YES to properly +# deal with such files in case they appear in the input. For filesystems that +# are not case sensitive the option should be set to NO to properly deal with +# output files written for symbols that only differ in casing, such as for two +# classes, one named CLASS and the other named Class, and to also support +# references to files without having to specify the exact matching casing. On +# Windows (including Cygwin) and MacOS, users should typically set this option +# to NO, whereas on Linux or other Unix flavors it should typically be set to +# YES. +# Possible values are: SYSTEM, NO and YES. +# The default value is: SYSTEM. CASE_SENSE_NAMES = NO @@ -581,6 +634,12 @@ HIDE_SCOPE_NAMES = NO HIDE_COMPOUND_REFERENCE= NO +# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class +# will show which file needs to be included to use the class. +# The default value is: YES. + +SHOW_HEADERFILE = YES + # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. @@ -738,13 +797,14 @@ FILE_VERSION_FILTER = # output files in an output format independent way. To create the layout file # that represents doxygen's defaults, run doxygen with the -l option. You can # optionally specify a file name after the option, if omitted DoxygenLayout.xml -# will be used as the name of the layout file. +# will be used as the name of the layout file. See also section "Changing the +# layout of pages" for information. # # Note that if you run doxygen from a directory containing a file called # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. -LAYOUT_FILE = "$(SOURCE_ROOT)/../documentation/doxygen/DoxygenLayout.xml" +LAYOUT_FILE = $(SOURCE_ROOT)/../documentation/doxygen/DoxygenLayout.xml # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib @@ -784,24 +844,35 @@ WARNINGS = YES WARN_IF_UNDOCUMENTED = YES # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some parameters -# in a documented function, or documenting parameters that don't exist or using -# markup commands wrongly. +# potential errors in the documentation, such as documenting some parameters in +# a documented function twice, or documenting parameters that don't exist or +# using markup commands wrongly. # The default value is: YES. WARN_IF_DOC_ERROR = YES +# If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete +# function parameter documentation. If set to NO, doxygen will accept that some +# parameters have no documentation without warning. +# The default value is: YES. + +WARN_IF_INCOMPLETE_DOC = YES + # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return -# value. If set to NO, doxygen will only warn about wrong or incomplete -# parameter documentation, but not about the absence of documentation. If -# EXTRACT_ALL is set to YES then this flag will automatically be disabled. +# value. If set to NO, doxygen will only warn about wrong parameter +# documentation, but not about the absence of documentation. If EXTRACT_ALL is +# set to YES then this flag will automatically be disabled. See also +# WARN_IF_INCOMPLETE_DOC # The default value is: NO. WARN_NO_PARAMDOC = YES # If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when -# a warning is encountered. +# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS +# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but +# at the end of the doxygen process doxygen will return with a non-zero status. +# Possible values are: NO, YES and FAIL_ON_WARNINGS. # The default value is: NO. WARN_AS_ERROR = NO @@ -812,13 +883,27 @@ WARN_AS_ERROR = NO # and the warning text. Optionally the format may contain $version, which will # be replaced by the version of the file (if it could be obtained via # FILE_VERSION_FILTER) +# See also: WARN_LINE_FORMAT # The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" +# In the $text part of the WARN_FORMAT command it is possible that a reference +# to a more specific place is given. To make it easier to jump to this place +# (outside of doxygen) the user can define a custom "cut" / "paste" string. +# Example: +# WARN_LINE_FORMAT = "'vi $file +$line'" +# See also: WARN_FORMAT +# The default value is: at line $line of file $file. + +WARN_LINE_FORMAT = "at line $line of file $file" + # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard -# error (stderr). +# error (stderr). In case the file specified cannot be opened for writing the +# warning and error messages are written to standard error. When as file - is +# specified the warning and error messages are written to standard output +# (stdout). WARN_LOGFILE = @@ -838,12 +923,23 @@ INPUT = "$(SOURCE_ROOT)/Source" \ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: https://www.gnu.org/software/libiconv/) for the list of -# possible encodings. +# documentation (see: +# https://www.gnu.org/software/libiconv/) for the list of possible encodings. +# See also: INPUT_FILE_ENCODING # The default value is: UTF-8. INPUT_ENCODING = UTF-8 +# This tag can be used to specify the character encoding of the source files +# that doxygen parses The INPUT_FILE_ENCODING tag can be used to specify +# character encoding on a per file pattern basis. Doxygen will compare the file +# name with each pattern and apply the encoding instead of the default +# INPUT_ENCODING) if there is a match. The character encodings are a list of the +# form: pattern=encoding (like *.php=ISO-8859-1). See cfg_input_encoding +# "INPUT_ENCODING" for further information on supported encodings. + +INPUT_FILE_ENCODING = + # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and # *.h) to filter out the source-files in the directories. @@ -852,12 +948,14 @@ INPUT_ENCODING = UTF-8 # need to set EXTENSION_MAPPING for the extension otherwise the files are not # read by doxygen. # +# Note the list of default checked file patterns might differ from the list of +# default file extension mappings. +# # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, -# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, -# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment), -# *.doc (to be provided as doxygen C comment), *.txt (to be provided as doxygen -# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, +# *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, +# *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C +# comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, # *.vhdl, *.ucf, *.qsf and *.ice. FILE_PATTERNS = @@ -901,7 +999,7 @@ EXCLUDE_PATTERNS = *Tests.* \ # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test +# ANamespace#AClass, ANamespace#*Test # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories use the pattern */test/* @@ -949,6 +1047,11 @@ IMAGE_PATH = "$(SOURCE_ROOT)/../documentation/images/" # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. # +# Note that doxygen will use the data processed and written to standard output +# for further processing, therefore nothing else, like debug statements or used +# commands (so in case of a Windows batch file always use @echo OFF), should be +# written to standard output. +# # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. @@ -990,6 +1093,15 @@ FILTER_SOURCE_PATTERNS = USE_MDFILE_AS_MAINPAGE = +# The Fortran standard specifies that for fixed formatted Fortran code all +# characters from position 72 are to be considered as comment. A common +# extension is to allow longer lines before the automatic comment starts. The +# setting FORTRAN_COMMENT_AFTER will also make it possible that longer lines can +# be processed before the automatic comment starts. +# Minimum value: 7, maximum value: 10000, default value: 72. + +FORTRAN_COMMENT_AFTER = 72 + #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- @@ -1077,16 +1189,24 @@ USE_HTAGS = NO VERBATIM_HEADERS = YES # If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the -# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the -# cost of reduced performance. This can be particularly helpful with template -# rich C++ code for which doxygen's built-in parser lacks the necessary type -# information. +# clang parser (see: +# http://clang.llvm.org/) for more accurate parsing at the cost of reduced +# performance. This can be particularly helpful with template rich C++ code for +# which doxygen's built-in parser lacks the necessary type information. # Note: The availability of this option depends on whether or not doxygen was # generated with the -Duse_libclang=ON option for CMake. # The default value is: NO. CLANG_ASSISTED_PARSING = NO +# If the CLANG_ASSISTED_PARSING tag is set to YES and the CLANG_ADD_INC_PATHS +# tag is set to YES then doxygen will add the directory of each input to the +# include path. +# The default value is: YES. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +CLANG_ADD_INC_PATHS = YES + # If clang assisted parsing is enabled you can provide the compiler with command # line options that you would normally use when invoking the compiler. Note that # the include paths will already be set by doxygen for the files and directories @@ -1096,10 +1216,13 @@ CLANG_ASSISTED_PARSING = NO CLANG_OPTIONS = # If clang assisted parsing is enabled you can provide the clang parser with the -# path to the compilation database (see: -# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) used when the files -# were built. This is equivalent to specifying the "-p" option to a clang tool, -# such as clang-check. These options will then be passed to the parser. +# path to the directory containing a file called compile_commands.json. This +# file is the compilation database (see: +# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the +# options used when the source files were built. This is equivalent to +# specifying the -p option to a clang tool, such as clang-check. These options +# will then be passed to the parser. Any options specified with CLANG_OPTIONS +# will be added as well. # Note: The availability of this option depends on whether or not doxygen was # generated with the -Duse_libclang=ON option for CMake. @@ -1116,13 +1239,6 @@ CLANG_DATABASE_PATH = ALPHABETICAL_INDEX = YES -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in -# which the alphabetical index list will be split. -# Minimum value: 1, maximum value: 20, default value: 5. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -COLS_IN_ALPHA_INDEX = 5 - # In case all classes in a project start with a common prefix, all classes will # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag # can be used to specify a prefix (or a list of prefixes) that should be ignored @@ -1221,9 +1337,26 @@ HTML_EXTRA_STYLESHEET = HTML_EXTRA_FILES = +# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output +# should be rendered with a dark or light theme. Default setting AUTO_LIGHT +# enables light output unless the user preference is dark output. Other options +# are DARK to always use dark mode, LIGHT to always use light mode, AUTO_DARK to +# default to dark mode unless the user prefers light mode, and TOGGLE to let the +# user toggle between dark and light mode via a button. +# Possible values are: LIGHT Always generate light output., DARK Always generate +# dark output., AUTO_LIGHT Automatically set the mode according to the user +# preference, use light mode if no preference is set (the default)., AUTO_DARK +# Automatically set the mode according to the user preference, use dark mode if +# no preference is set. and TOGGLE Allow to user to switch between light and +# dark mode via a button.. +# The default value is: AUTO_LIGHT. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE = AUTO_LIGHT + # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to -# this color. Hue is specified as an angle on a colorwheel, see +# this color. Hue is specified as an angle on a color-wheel, see # https://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. @@ -1233,7 +1366,7 @@ HTML_EXTRA_FILES = HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors -# in the HTML output. For a value of 0 the output will use grayscales only. A +# in the HTML output. For a value of 0 the output will use gray-scales only. A # value of 255 will produce the most vivid colors. # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1294,10 +1427,11 @@ HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: https://developer.apple.com/xcode/), introduced with OSX -# 10.5 (Leopard). To create a documentation set, doxygen will generate a -# Makefile in the HTML output directory. Running make will produce the docset in -# that directory and running make install will install the docset in +# environment (see: +# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To +# create a documentation set, doxygen will generate a Makefile in the HTML +# output directory. Running make will produce the docset in that directory and +# running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at # startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy # genXcode/_index.html for more information. @@ -1314,6 +1448,13 @@ GENERATE_DOCSET = YES DOCSET_FEEDNAME = "Core Plot (iOS)" +# This tag determines the URL of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDURL = + # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. # com.mycompany.MyDocSet. Doxygen will append .docset to the name. @@ -1339,8 +1480,12 @@ DOCSET_PUBLISHER_NAME = "Core Plot" # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on -# Windows. +# on Windows. In the beginning of 2021 Microsoft took the original page, with +# a.o. the download links, offline the HTML help workshop was already many years +# in maintenance mode). You can download the HTML help workshop from the web +# archives at Installation executable (see: +# http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo +# ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe). # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML @@ -1370,7 +1515,7 @@ CHM_FILE = HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated -# (YES) or that it should be included in the master .chm file (NO). +# (YES) or that it should be included in the main .chm file (NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. @@ -1415,7 +1560,8 @@ QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace -# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). +# (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1423,8 +1569,8 @@ QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual- -# folders). +# Folders (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1432,16 +1578,16 @@ QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom -# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- -# filters). +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- -# filters). +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = @@ -1453,9 +1599,9 @@ QHP_CUST_FILTER_ATTRS = QHP_SECT_FILTER_ATTRS = -# The QHG_LOCATION tag can be used to specify the location of Qt's -# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the -# generated .qhp file. +# The QHG_LOCATION tag can be used to specify the location (absolute path +# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to +# run qhelpgenerator on the generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = @@ -1498,16 +1644,28 @@ DISABLE_INDEX = NO # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the # HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can -# further fine-tune the look of the index. As an example, the default style -# sheet generated by doxygen has an example that shows how to put an image at -# the root of the tree instead of the PROJECT_NAME. Since the tree basically has -# the same information as the tab index, you could consider setting -# DISABLE_INDEX to YES when enabling this option. +# further fine tune the look of the index (see "Fine-tuning the output"). As an +# example, the default style sheet generated by doxygen has an example that +# shows how to put an image at the root of the tree instead of the PROJECT_NAME. +# Since the tree basically has the same information as the tab index, you could +# consider setting DISABLE_INDEX to YES when enabling this option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = YES +# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the +# FULL_SIDEBAR option determines if the side bar is limited to only the treeview +# area (value NO) or if it should extend to the full height of the window (value +# YES). Setting this to YES gives a layout similar to +# https://docs.readthedocs.io with more room for contents, but less room for the +# project logo, title, and description. If either GENERATE_TREEVIEW or +# DISABLE_INDEX is set to NO, this option has no effect. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FULL_SIDEBAR = NO + # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. # @@ -1532,12 +1690,19 @@ TREEVIEW_WIDTH = 250 EXT_LINKS_IN_WINDOW = NO +# If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email +# addresses. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +OBFUSCATE_EMAILS = YES + # If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg # tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see # https://inkscape.org) to generate formulas as SVG images instead of PNGs for # the HTML output. These images will generally look nicer at scaled resolutions. -# Possible values are: png The default and svg Looks nicer but requires the -# pdf2svg tool. +# Possible values are: png (the default) and svg (looks nicer but requires the +# pdf2svg or inkscape tool). # The default value is: png. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1552,17 +1717,6 @@ HTML_FORMULA_FORMAT = png FORMULA_FONTSIZE = 10 -# Use the FORMULA_TRANSPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_TRANSPARENT = YES - # The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands # to create new LaTeX commands to be used in formulas as building blocks. See # the section "Including formulas" for details. @@ -1580,11 +1734,29 @@ FORMULA_MACROFILE = USE_MATHJAX = NO +# With MATHJAX_VERSION it is possible to specify the MathJax version to be used. +# Note that the different versions of MathJax have different requirements with +# regards to the different settings, so it is possible that also other MathJax +# settings have to be changed when switching between the different MathJax +# versions. +# Possible values are: MathJax_2 and MathJax_3. +# The default value is: MathJax_2. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_VERSION = MathJax_2 + # When MathJax is enabled you can set the default output format to be used for -# the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/latest/output.html) for more details. +# the MathJax output. For more details about the output format see MathJax +# version 2 (see: +# http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3 +# (see: +# http://docs.mathjax.org/en/latest/web/components/output.html). # Possible values are: HTML-CSS (which is slower, but has the best -# compatibility), NativeMML (i.e. MathML) and SVG. +# compatibility. This is the name for Mathjax version 2, for MathJax version 3 +# this will be translated into chtml), NativeMML (i.e. MathML. Only supported +# for NathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This +# is the name for Mathjax version 3, for MathJax version 2 this will be +# translated into HTML-CSS) and SVG. # The default value is: HTML-CSS. # This tag requires that the tag USE_MATHJAX is set to YES. @@ -1597,22 +1769,29 @@ MATHJAX_FORMAT = HTML-CSS # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of -# MathJax from https://www.mathjax.org before deployment. -# The default value is: https://cdn.jsdelivr.net/npm/mathjax@2. +# MathJax from https://www.mathjax.org before deployment. The default value is: +# - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2 +# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3 # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://www.mathjax.org/mathjax # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example +# for MathJax version 2 (see https://docs.mathjax.org/en/v2.7-latest/tex.html +# #tex-and-latex-extensions): # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# For example for MathJax version 3 (see +# http://docs.mathjax.org/en/latest/input/tex/extensions/index.html): +# MATHJAX_EXTENSIONS = ams # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site -# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# (see: +# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. @@ -1659,7 +1838,8 @@ SERVER_BASED_SEARCH = NO # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: https://xapian.org/). +# Xapian (see: +# https://xapian.org/). # # See the section "External Indexing and Searching" for details. # The default value is: NO. @@ -1672,8 +1852,9 @@ EXTERNAL_SEARCH = NO # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: https://xapian.org/). See the section "External Indexing and -# Searching" for details. +# Xapian (see: +# https://xapian.org/). See the section "External Indexing and Searching" for +# details. # This tag requires that the tag SEARCHENGINE is set to YES. SEARCHENGINE_URL = @@ -1782,29 +1963,31 @@ PAPER_TYPE = letter EXTRA_PACKAGES = -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the -# generated LaTeX document. The header should contain everything until the first -# chapter. If it is left blank doxygen will generate a standard header. See -# section "Doxygen usage" for information on how to let doxygen write the -# default header to a separate file. +# The LATEX_HEADER tag can be used to specify a user-defined LaTeX header for +# the generated LaTeX document. The header should contain everything until the +# first chapter. If it is left blank doxygen will generate a standard header. It +# is highly recommended to start with a default header using +# doxygen -w latex new_header.tex new_footer.tex new_stylesheet.sty +# and then modify the file new_header.tex. See also section "Doxygen usage" for +# information on how to generate the default header that doxygen normally uses. # -# Note: Only use a user-defined header if you know what you are doing! The -# following commands have a special meaning inside the header: $title, -# $datetime, $date, $doxygenversion, $projectname, $projectnumber, -# $projectbrief, $projectlogo. Doxygen will replace $title with the empty -# string, for the replacement values of the other commands the user is referred -# to HTML_HEADER. +# Note: Only use a user-defined header if you know what you are doing! +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. The following +# commands have a special meaning inside the header (and footer): For a +# description of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_HEADER = -# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the -# generated LaTeX document. The footer should contain everything after the last -# chapter. If it is left blank doxygen will generate a standard footer. See +# The LATEX_FOOTER tag can be used to specify a user-defined LaTeX footer for +# the generated LaTeX document. The footer should contain everything after the +# last chapter. If it is left blank doxygen will generate a standard footer. See # LATEX_HEADER for more information on how to generate a default footer and what -# special commands can be used inside the footer. -# -# Note: Only use a user-defined footer if you know what you are doing! +# special commands can be used inside the footer. See also section "Doxygen +# usage" for information on how to generate the default footer that doxygen +# normally uses. Note: Only use a user-defined footer if you know what you are +# doing! # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_FOOTER = @@ -1837,9 +2020,11 @@ LATEX_EXTRA_FILES = PDF_HYPERLINKS = YES -# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate -# the PDF file directly from the LaTeX files. Set this option to YES, to get a -# higher quality PDF documentation. +# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as +# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX +# files. Set this option to YES, to get a higher quality PDF documentation. +# +# See also section LATEX_CMD_NAME for selecting the engine. # The default value is: YES. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1847,8 +2032,7 @@ USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode # command to the generated LaTeX files. This will instruct LaTeX to keep running -# if errors occur, instead of asking the user for help. This option is also used -# when generating formulas in HTML. +# if errors occur, instead of asking the user for help. # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1861,16 +2045,6 @@ LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO -# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source -# code with syntax highlighting in the LaTeX output. -# -# Note that which sources are shown also depends on other settings such as -# SOURCE_BROWSER. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_SOURCE_CODE = NO - # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. See # https://en.wikipedia.org/wiki/BibTeX and \cite for more info. @@ -1951,16 +2125,6 @@ RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = -# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code -# with syntax highlighting in the RTF output. -# -# Note that which sources are shown also depends on other settings such as -# SOURCE_BROWSER. -# The default value is: NO. -# This tag requires that the tag GENERATE_RTF is set to YES. - -RTF_SOURCE_CODE = NO - #--------------------------------------------------------------------------- # Configuration options related to the man page output #--------------------------------------------------------------------------- @@ -2057,15 +2221,6 @@ GENERATE_DOCBOOK = NO DOCBOOK_OUTPUT = docbook -# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the -# program listings (including syntax highlighting and cross-referencing -# information) to the DOCBOOK output. Note that enabling this will significantly -# increase the size of the DOCBOOK output. -# The default value is: NO. -# This tag requires that the tag GENERATE_DOCBOOK is set to YES. - -DOCBOOK_PROGRAMLISTING = NO - #--------------------------------------------------------------------------- # Configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- @@ -2152,7 +2307,8 @@ SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by the -# preprocessor. +# preprocessor. Note that the INCLUDE_PATH is not recursive, so the setting of +# RECURSIVE has no effect here. # This tag requires that the tag SEARCH_INCLUDES is set to YES. INCLUDE_PATH = @@ -2178,10 +2334,10 @@ PREDEFINED = TARGET_OS_IPHONE \ TARGET_OS_SIMULATOR \ NS_DESIGNATED_INITIALIZER \ NS_RETURNS_INNER_POINTER \ - "NS_ENUM(_type,_name)=enum _name : _type _name; enum _name : _type " \ - "NS_CLOSED_ENUM(_type,_name)=enum _name : _type _name; enum _name : _type " \ - "NS_OPTIONS(_type,_name)=enum _name : _type _name; enum _name : _type " \ - "NS_SWIFT_NAME(_name)= " \ + "NS_ENUM(_type,_name)=enum _name : _type _name; enum _name : _type" \ + "NS_CLOSED_ENUM(_type,_name)=enum _name : _type _name; enum _name : _type" \ + "NS_OPTIONS(_type,_name)=enum _name : _type _name; enum _name : _type" \ + "NS_SWIFT_NAME(_name)=" \ cpt_deprecated \ cpt_swift_enum \ cpt_swift_struct @@ -2228,7 +2384,7 @@ TAGFILES = "$(SOURCE_ROOT)/../documentation/doxygen/doxygen-cocoa- # tag file that is based on the input files it reads. See section "Linking to # external documentation" for more information about the usage of tag files. -GENERATE_TAGFILE = "$(SOURCE_ROOT)/../documentation/doxygen/core-plot-touch-tags.xml" +GENERATE_TAGFILE = $(SOURCE_ROOT)/../documentation/doxygen/core-plot-touch-tags.xml # If the ALLEXTERNALS tag is set to YES, all external class will be listed in # the class index. If set to NO, only the inherited external classes will be @@ -2255,15 +2411,6 @@ EXTERNAL_PAGES = YES # Configuration options related to the dot tool #--------------------------------------------------------------------------- -# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram -# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to -# NO turns the diagrams off. Note that this option also works with HAVE_DOT -# disabled, but it is recommended to install and use dot, since it yields more -# powerful graphs. -# The default value is: YES. - -CLASS_DIAGRAMS = YES - # You can include diagrams made with dia in doxygen documentation. Doxygen will # then run dia to produce the diagram and insert it in the documentation. The # DIA_PATH tag allows you to specify the directory where the dia binary resides. @@ -2296,35 +2443,50 @@ HAVE_DOT = YES DOT_NUM_THREADS = 0 -# When you want a differently looking font in the dot files that doxygen -# generates you can specify the font name using DOT_FONTNAME. You need to make -# sure dot is able to find the font, which can be done by putting it in a -# standard location or by setting the DOTFONTPATH environment variable or by -# setting DOT_FONTPATH to the directory containing the font. -# The default value is: Helvetica. +# DOT_COMMON_ATTR is common attributes for nodes, edges and labels of +# subgraphs. When you want a differently looking font in the dot files that +# doxygen generates you can specify fontname, fontcolor and fontsize attributes. +# For details please see Node, +# Edge and Graph Attributes specification You need to make sure dot is able +# to find the font, which can be done by putting it in a standard location or by +# setting the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the +# directory containing the font. Default graphviz fontsize is 14. +# The default value is: fontname=Helvetica,fontsize=10. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_COMMON_ATTR = "fontname=\"Lucinda Grande\",fontsize=10" + +# DOT_EDGE_ATTR is concatenated with DOT_COMMON_ATTR. For elegant style you can +# add 'arrowhead=open, arrowtail=open, arrowsize=0.5'. Complete documentation about +# arrows shapes. +# The default value is: labelfontname=Helvetica,labelfontsize=10. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_FONTNAME = "Lucinda Grande" +DOT_EDGE_ATTR = "labelfontname=\"Lucinda Grande\",labelfontsize=10" -# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of -# dot graphs. -# Minimum value: 4, maximum value: 24, default value: 10. +# DOT_NODE_ATTR is concatenated with DOT_COMMON_ATTR. For view without boxes +# around nodes set 'shape=plain' or 'shape=plaintext' Shapes specification +# The default value is: shape=box,height=0.2,width=0.4. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_FONTSIZE = 10 +DOT_NODE_ATTR = "shape=box,height=0.2,width=0.4" -# By default doxygen will tell dot to use the default font as specified with -# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set -# the path where dot can find it using this tag. +# You can set the path where dot can find font specified with fontname in +# DOT_COMMON_ATTR and others dot attributes. # This tag requires that the tag HAVE_DOT is set to YES. DOT_FONTPATH = -# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for -# each documented class showing the direct and indirect inheritance relations. -# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO. +# If the CLASS_GRAPH tag is set to YES (or GRAPH) then doxygen will generate a +# graph for each documented class showing the direct and indirect inheritance +# relations. In case HAVE_DOT is set as well dot will be used to draw the graph, +# otherwise the built-in generator will be used. If the CLASS_GRAPH tag is set +# to TEXT the direct and indirect inheritance relations will be shown as texts / +# links. +# Possible values are: NO, YES, TEXT and GRAPH. # The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. CLASS_GRAPH = YES @@ -2338,7 +2500,8 @@ CLASS_GRAPH = YES COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for -# groups, showing the direct groups dependencies. +# groups, showing the direct groups dependencies. See also the chapter Grouping +# in the manual. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2361,10 +2524,32 @@ UML_LOOK = NO # but if the number exceeds 15, the total amount of fields shown is limited to # 10. # Minimum value: 0, maximum value: 100, default value: 10. -# This tag requires that the tag HAVE_DOT is set to YES. +# This tag requires that the tag UML_LOOK is set to YES. UML_LIMIT_NUM_FIELDS = 10 +# If the DOT_UML_DETAILS tag is set to NO, doxygen will show attributes and +# methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS +# tag is set to YES, doxygen will add type and arguments for attributes and +# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, doxygen +# will not generate fields with class member information in the UML graphs. The +# class diagrams will look similar to the default class diagrams but using UML +# notation for the relationships. +# Possible values are: NO, YES and NONE. +# The default value is: NO. +# This tag requires that the tag UML_LOOK is set to YES. + +DOT_UML_DETAILS = NO + +# The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters +# to display on a single line. If the actual line length exceeds this threshold +# significantly it will wrapped across multiple lines. Some heuristics are apply +# to avoid ugly line breaks. +# Minimum value: 0, maximum value: 1000, default value: 17. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_WRAP_THRESHOLD = 17 + # If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and # collaboration graphs will show the relations between templates and their # instances. @@ -2431,6 +2616,13 @@ GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES +# The DIR_GRAPH_MAX_DEPTH tag can be used to limit the maximum number of levels +# of child directories generated in directory dependency graphs by dot. +# Minimum value: 1, maximum value: 25, default value: 1. +# This tag requires that the tag DIRECTORY_GRAPH is set to YES. + +DIR_GRAPH_MAX_DEPTH = 1 + # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. For an explanation of the image formats see the section # output formats in the documentation of the dot tool (Graphviz (see: @@ -2462,7 +2654,7 @@ INTERACTIVE_SVG = NO # found. If left blank, it is assumed the dot tool can be found in the path. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_PATH = /usr/local/bin/ +DOT_PATH = /opt/homebrew/bin # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the \dotfile @@ -2484,10 +2676,10 @@ MSCFILE_DIRS = DIAFILE_DIRS = # When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the -# path where java can find the plantuml.jar file. If left blank, it is assumed -# PlantUML is not used or called during a preprocessing step. Doxygen will -# generate a warning when it encounters a \startuml command in this case and -# will not generate output for the diagram. +# path where java can find the plantuml.jar file or to the filename of jar file +# to be used. If left blank, it is assumed PlantUML is not used or called during +# a preprocessing step. Doxygen will generate a warning when it encounters a +# \startuml command in this case and will not generate output for the diagram. PLANTUML_JAR_PATH = @@ -2525,18 +2717,6 @@ DOT_GRAPH_MAX_NODES = 100 MAX_DOT_GRAPH_DEPTH = 0 -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not seem -# to support this out of the box. -# -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_TRANSPARENT = YES - # Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) support @@ -2549,14 +2729,18 @@ DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page # explaining the meaning of the various boxes and arrows in the dot generated # graphs. +# Note: This tag requires that UML_LOOK isn't set, i.e. the doxygen internal +# graphical representation for inheritance and collaboration diagrams is used. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. GENERATE_LEGEND = YES -# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot +# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate # files that are used to generate the various graphs. +# +# Note: This setting is not only used for dot files but also for msc temporary +# files. # The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. DOT_CLEANUP = YES diff --git a/documentation/doxygen/doxygen.config b/documentation/doxygen/doxygen.config index ca7444467..73dd7f1df 100644 --- a/documentation/doxygen/doxygen.config +++ b/documentation/doxygen/doxygen.config @@ -1,4 +1,4 @@ -# Doxyfile 1.8.18 +# Doxyfile 1.9.5 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -12,6 +12,16 @@ # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). +# +# Note: +# +# Use doxygen to compare the used configuration file with the template +# configuration file: +# doxygen -x [configFile] +# Use doxygen to compare the used configuration file with the template +# configuration file without replacing the environment variables or CMake type +# replacement variables: +# doxygen -x_noenv [configFile] #--------------------------------------------------------------------------- # Project related configuration options @@ -51,25 +61,37 @@ PROJECT_BRIEF = "Cocoa plotting framework for macOS, iOS, and tvOS" # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy # the logo to the output directory. -PROJECT_LOGO = "$(SOURCE_ROOT)/../documentation/core-plot-logo.png" +PROJECT_LOGO = $(SOURCE_ROOT)/../documentation/core-plot-logo.png # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. -OUTPUT_DIRECTORY = "$(SOURCE_ROOT)/CorePlotDocs.docset" +OUTPUT_DIRECTORY = $(SOURCE_ROOT)/CorePlotDocs.docset -# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- -# directories (in 2 levels) under the output directory of each output format and -# will distribute the generated files over these directories. Enabling this +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096 +# sub-directories (in 2 levels) under the output directory of each output format +# and will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where # putting all generated files in the same directory would otherwise causes -# performance problems for the file system. +# performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to +# control the number of sub-directories. # The default value is: NO. CREATE_SUBDIRS = NO +# Controls the number of sub-directories that will be created when +# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every +# level increment doubles the number of directories, resulting in 4096 +# directories at level 8 which is the default and also the maximum value. The +# sub-directories are organized in 2 levels, the first level always has a fixed +# numer of 16 directories. +# Minimum value: 0, maximum value: 8, default value: 8. +# This tag requires that the tag CREATE_SUBDIRS is set to YES. + +CREATE_SUBDIRS_LEVEL = 8 + # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode @@ -81,26 +103,18 @@ ALLOW_UNICODE_NAMES = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, -# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), -# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, -# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), -# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, -# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, -# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, -# Ukrainian and Vietnamese. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian, +# Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English +# (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek, +# Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with +# English messages), Korean, Korean-en (Korean with English messages), Latvian, +# Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, +# Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, +# Swedish, Turkish, Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English -# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all generated output in the proper direction. -# Possible values are: None, LTR, RTL and Context. -# The default value is: None. - -OUTPUT_TEXT_DIRECTION = None - # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. @@ -217,6 +231,14 @@ QT_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO +# By default Python docstrings are displayed as preformatted text and doxygen's +# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the +# doxygen's special commands can be used and the contents of the docstring +# documentation blocks is shown as doxygen documentation. +# The default value is: YES. + +PYTHON_DOCSTRING = YES + # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. # The default value is: YES. @@ -240,16 +262,16 @@ TAB_SIZE = 4 # the documentation. An alias has the form: # name=value # For example adding -# "sideeffect=@par Side Effects:\n" +# "sideeffect=@par Side Effects:^^" # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading -# "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines (in the resulting output). You can put ^^ in the value part of an -# alias to insert a newline as if a physical newline was in the original file. -# When you need a literal { or } or , in the value part of an alias you have to -# escape them by means of a backslash (\), this can lead to conflicts with the -# commands \{ and \} for these it is advised to use the version @{ and @} or use -# a double escape (\\{ and \\}) +# "Side Effects:". Note that you cannot put \n's in the value part of an alias +# to insert newlines (in the resulting output). You can put ^^ in the value part +# of an alias to insert a newline as if a physical newline was in the original +# file. When you need a literal { or } or , in the value part of an alias you +# have to escape them by means of a backslash (\), this can lead to conflicts +# with the commands \{ and \} for these it is advised to use the version @{ and +# @} or use a double escape (\\{ and \\}) ALIASES = "YES=@ref YES" \ "NO=@ref NO" \ @@ -313,8 +335,8 @@ OPTIMIZE_OUTPUT_SLICE = NO # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, JavaScript, -# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL, -# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: +# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice, +# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: # FortranFree, unknown formatted Fortran: Fortran. In the later case the parser # tries to guess whether the code is fixed or free formatted code, this is the # default for Fortran type files). For instance to make doxygen treat .inc files @@ -324,7 +346,10 @@ OPTIMIZE_OUTPUT_SLICE = NO # Note: For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. +# the files are not read by doxygen. When specifying no_extension you should add +# * to the FILE_PATTERNS. +# +# Note see also the list of default file extension mappings. EXTENSION_MAPPING = @@ -355,11 +380,11 @@ TOC_INCLUDE_HEADINGS = 0 AUTOLINK_SUPPORT = YES -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# If you use STL classes (i.e. std#string, std#vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should set this # tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); -# versus func(std::string) {}). This also make the inheritance and collaboration +# definitions whose arguments contain STL classes (e.g. func(std#string); +# versus func(std#string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. # The default value is: NO. @@ -458,6 +483,19 @@ TYPEDEF_HIDES_STRUCT = YES LOOKUP_CACHE_SIZE = 0 +# The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use +# during processing. When set to 0 doxygen will based this on the number of +# cores available in the system. You can set it explicitly to a value larger +# than 0 to get more control over the balance between CPU load and processing +# speed. At this moment only the input processing can be done using multiple +# threads. Since this is still an experimental feature the default is set to 1, +# which effectively disables parallel processing. Please report any issues you +# encounter. Generating dot graphs in parallel is controlled by the +# DOT_NUM_THREADS setting. +# Minimum value: 0, maximum value: 32, default value: 1. + +NUM_PROC_THREADS = 1 + #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- @@ -521,6 +559,13 @@ EXTRACT_LOCAL_METHODS = YES EXTRACT_ANON_NSPACES = NO +# If this flag is set to YES, the name of an unnamed parameter in a declaration +# will be determined by the corresponding definition. By default unnamed +# parameters remain unnamed in the output. +# The default value is: YES. + +RESOLVE_UNNAMED_PARAMS = YES + # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation @@ -558,12 +603,20 @@ HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO -# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES, upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# (including Cygwin) ands Mac users are advised to set this option to NO. -# The default value is: system dependent. +# With the correct setting of option CASE_SENSE_NAMES doxygen will better be +# able to match the capabilities of the underlying filesystem. In case the +# filesystem is case sensitive (i.e. it supports files in the same directory +# whose names only differ in casing), the option must be set to YES to properly +# deal with such files in case they appear in the input. For filesystems that +# are not case sensitive the option should be set to NO to properly deal with +# output files written for symbols that only differ in casing, such as for two +# classes, one named CLASS and the other named Class, and to also support +# references to files without having to specify the exact matching casing. On +# Windows (including Cygwin) and MacOS, users should typically set this option +# to NO, whereas on Linux or other Unix flavors it should typically be set to +# YES. +# Possible values are: SYSTEM, NO and YES. +# The default value is: SYSTEM. CASE_SENSE_NAMES = NO @@ -581,6 +634,12 @@ HIDE_SCOPE_NAMES = NO HIDE_COMPOUND_REFERENCE= NO +# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class +# will show which file needs to be included to use the class. +# The default value is: YES. + +SHOW_HEADERFILE = YES + # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. @@ -738,13 +797,14 @@ FILE_VERSION_FILTER = # output files in an output format independent way. To create the layout file # that represents doxygen's defaults, run doxygen with the -l option. You can # optionally specify a file name after the option, if omitted DoxygenLayout.xml -# will be used as the name of the layout file. +# will be used as the name of the layout file. See also section "Changing the +# layout of pages" for information. # # Note that if you run doxygen from a directory containing a file called # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. -LAYOUT_FILE = "$(SOURCE_ROOT)/../documentation/doxygen/DoxygenLayout.xml" +LAYOUT_FILE = $(SOURCE_ROOT)/../documentation/doxygen/DoxygenLayout.xml # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib @@ -784,24 +844,35 @@ WARNINGS = YES WARN_IF_UNDOCUMENTED = YES # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some parameters -# in a documented function, or documenting parameters that don't exist or using -# markup commands wrongly. +# potential errors in the documentation, such as documenting some parameters in +# a documented function twice, or documenting parameters that don't exist or +# using markup commands wrongly. # The default value is: YES. WARN_IF_DOC_ERROR = YES +# If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete +# function parameter documentation. If set to NO, doxygen will accept that some +# parameters have no documentation without warning. +# The default value is: YES. + +WARN_IF_INCOMPLETE_DOC = YES + # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return -# value. If set to NO, doxygen will only warn about wrong or incomplete -# parameter documentation, but not about the absence of documentation. If -# EXTRACT_ALL is set to YES then this flag will automatically be disabled. +# value. If set to NO, doxygen will only warn about wrong parameter +# documentation, but not about the absence of documentation. If EXTRACT_ALL is +# set to YES then this flag will automatically be disabled. See also +# WARN_IF_INCOMPLETE_DOC # The default value is: NO. WARN_NO_PARAMDOC = YES # If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when -# a warning is encountered. +# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS +# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but +# at the end of the doxygen process doxygen will return with a non-zero status. +# Possible values are: NO, YES and FAIL_ON_WARNINGS. # The default value is: NO. WARN_AS_ERROR = NO @@ -812,13 +883,27 @@ WARN_AS_ERROR = NO # and the warning text. Optionally the format may contain $version, which will # be replaced by the version of the file (if it could be obtained via # FILE_VERSION_FILTER) +# See also: WARN_LINE_FORMAT # The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" +# In the $text part of the WARN_FORMAT command it is possible that a reference +# to a more specific place is given. To make it easier to jump to this place +# (outside of doxygen) the user can define a custom "cut" / "paste" string. +# Example: +# WARN_LINE_FORMAT = "'vi $file +$line'" +# See also: WARN_FORMAT +# The default value is: at line $line of file $file. + +WARN_LINE_FORMAT = "at line $line of file $file" + # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard -# error (stderr). +# error (stderr). In case the file specified cannot be opened for writing the +# warning and error messages are written to standard error. When as file - is +# specified the warning and error messages are written to standard output +# (stdout). WARN_LOGFILE = @@ -840,12 +925,23 @@ INPUT = "$(SOURCE_ROOT)/CorePlot.h" \ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: https://www.gnu.org/software/libiconv/) for the list of -# possible encodings. +# documentation (see: +# https://www.gnu.org/software/libiconv/) for the list of possible encodings. +# See also: INPUT_FILE_ENCODING # The default value is: UTF-8. INPUT_ENCODING = UTF-8 +# This tag can be used to specify the character encoding of the source files +# that doxygen parses The INPUT_FILE_ENCODING tag can be used to specify +# character encoding on a per file pattern basis. Doxygen will compare the file +# name with each pattern and apply the encoding instead of the default +# INPUT_ENCODING) if there is a match. The character encodings are a list of the +# form: pattern=encoding (like *.php=ISO-8859-1). See cfg_input_encoding +# "INPUT_ENCODING" for further information on supported encodings. + +INPUT_FILE_ENCODING = + # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and # *.h) to filter out the source-files in the directories. @@ -854,12 +950,14 @@ INPUT_ENCODING = UTF-8 # need to set EXTENSION_MAPPING for the extension otherwise the files are not # read by doxygen. # +# Note the list of default checked file patterns might differ from the list of +# default file extension mappings. +# # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, -# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, -# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment), -# *.doc (to be provided as doxygen C comment), *.txt (to be provided as doxygen -# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, +# *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, +# *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C +# comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, # *.vhdl, *.ucf, *.qsf and *.ice. FILE_PATTERNS = @@ -903,7 +1001,7 @@ EXCLUDE_PATTERNS = *Tests.* \ # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test +# ANamespace#AClass, ANamespace#*Test # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories use the pattern */test/* @@ -951,6 +1049,11 @@ IMAGE_PATH = "$(SOURCE_ROOT)/../documentation/images/" # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. # +# Note that doxygen will use the data processed and written to standard output +# for further processing, therefore nothing else, like debug statements or used +# commands (so in case of a Windows batch file always use @echo OFF), should be +# written to standard output. +# # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. @@ -992,6 +1095,15 @@ FILTER_SOURCE_PATTERNS = USE_MDFILE_AS_MAINPAGE = +# The Fortran standard specifies that for fixed formatted Fortran code all +# characters from position 72 are to be considered as comment. A common +# extension is to allow longer lines before the automatic comment starts. The +# setting FORTRAN_COMMENT_AFTER will also make it possible that longer lines can +# be processed before the automatic comment starts. +# Minimum value: 7, maximum value: 10000, default value: 72. + +FORTRAN_COMMENT_AFTER = 72 + #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- @@ -1079,16 +1191,24 @@ USE_HTAGS = NO VERBATIM_HEADERS = YES # If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the -# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the -# cost of reduced performance. This can be particularly helpful with template -# rich C++ code for which doxygen's built-in parser lacks the necessary type -# information. +# clang parser (see: +# http://clang.llvm.org/) for more accurate parsing at the cost of reduced +# performance. This can be particularly helpful with template rich C++ code for +# which doxygen's built-in parser lacks the necessary type information. # Note: The availability of this option depends on whether or not doxygen was # generated with the -Duse_libclang=ON option for CMake. # The default value is: NO. CLANG_ASSISTED_PARSING = NO +# If the CLANG_ASSISTED_PARSING tag is set to YES and the CLANG_ADD_INC_PATHS +# tag is set to YES then doxygen will add the directory of each input to the +# include path. +# The default value is: YES. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +CLANG_ADD_INC_PATHS = YES + # If clang assisted parsing is enabled you can provide the compiler with command # line options that you would normally use when invoking the compiler. Note that # the include paths will already be set by doxygen for the files and directories @@ -1098,10 +1218,13 @@ CLANG_ASSISTED_PARSING = NO CLANG_OPTIONS = # If clang assisted parsing is enabled you can provide the clang parser with the -# path to the compilation database (see: -# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) used when the files -# were built. This is equivalent to specifying the "-p" option to a clang tool, -# such as clang-check. These options will then be passed to the parser. +# path to the directory containing a file called compile_commands.json. This +# file is the compilation database (see: +# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the +# options used when the source files were built. This is equivalent to +# specifying the -p option to a clang tool, such as clang-check. These options +# will then be passed to the parser. Any options specified with CLANG_OPTIONS +# will be added as well. # Note: The availability of this option depends on whether or not doxygen was # generated with the -Duse_libclang=ON option for CMake. @@ -1118,13 +1241,6 @@ CLANG_DATABASE_PATH = ALPHABETICAL_INDEX = YES -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in -# which the alphabetical index list will be split. -# Minimum value: 1, maximum value: 20, default value: 5. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -COLS_IN_ALPHA_INDEX = 5 - # In case all classes in a project start with a common prefix, all classes will # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag # can be used to specify a prefix (or a list of prefixes) that should be ignored @@ -1223,9 +1339,26 @@ HTML_EXTRA_STYLESHEET = HTML_EXTRA_FILES = +# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output +# should be rendered with a dark or light theme. Default setting AUTO_LIGHT +# enables light output unless the user preference is dark output. Other options +# are DARK to always use dark mode, LIGHT to always use light mode, AUTO_DARK to +# default to dark mode unless the user prefers light mode, and TOGGLE to let the +# user toggle between dark and light mode via a button. +# Possible values are: LIGHT Always generate light output., DARK Always generate +# dark output., AUTO_LIGHT Automatically set the mode according to the user +# preference, use light mode if no preference is set (the default)., AUTO_DARK +# Automatically set the mode according to the user preference, use dark mode if +# no preference is set. and TOGGLE Allow to user to switch between light and +# dark mode via a button.. +# The default value is: AUTO_LIGHT. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE = AUTO_LIGHT + # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to -# this color. Hue is specified as an angle on a colorwheel, see +# this color. Hue is specified as an angle on a color-wheel, see # https://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. @@ -1235,7 +1368,7 @@ HTML_EXTRA_FILES = HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors -# in the HTML output. For a value of 0 the output will use grayscales only. A +# in the HTML output. For a value of 0 the output will use gray-scales only. A # value of 255 will produce the most vivid colors. # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1296,10 +1429,11 @@ HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: https://developer.apple.com/xcode/), introduced with OSX -# 10.5 (Leopard). To create a documentation set, doxygen will generate a -# Makefile in the HTML output directory. Running make will produce the docset in -# that directory and running make install will install the docset in +# environment (see: +# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To +# create a documentation set, doxygen will generate a Makefile in the HTML +# output directory. Running make will produce the docset in that directory and +# running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at # startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy # genXcode/_index.html for more information. @@ -1316,6 +1450,13 @@ GENERATE_DOCSET = YES DOCSET_FEEDNAME = "Core Plot" +# This tag determines the URL of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDURL = + # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. # com.mycompany.MyDocSet. Doxygen will append .docset to the name. @@ -1341,8 +1482,12 @@ DOCSET_PUBLISHER_NAME = "Core Plot" # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on -# Windows. +# on Windows. In the beginning of 2021 Microsoft took the original page, with +# a.o. the download links, offline the HTML help workshop was already many years +# in maintenance mode). You can download the HTML help workshop from the web +# archives at Installation executable (see: +# http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo +# ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe). # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML @@ -1372,7 +1517,7 @@ CHM_FILE = HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated -# (YES) or that it should be included in the master .chm file (NO). +# (YES) or that it should be included in the main .chm file (NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. @@ -1417,7 +1562,8 @@ QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace -# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). +# (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1425,8 +1571,8 @@ QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual- -# folders). +# Folders (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1434,16 +1580,16 @@ QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom -# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- -# filters). +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- -# filters). +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = @@ -1455,9 +1601,9 @@ QHP_CUST_FILTER_ATTRS = QHP_SECT_FILTER_ATTRS = -# The QHG_LOCATION tag can be used to specify the location of Qt's -# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the -# generated .qhp file. +# The QHG_LOCATION tag can be used to specify the location (absolute path +# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to +# run qhelpgenerator on the generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = @@ -1500,16 +1646,28 @@ DISABLE_INDEX = NO # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the # HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can -# further fine-tune the look of the index. As an example, the default style -# sheet generated by doxygen has an example that shows how to put an image at -# the root of the tree instead of the PROJECT_NAME. Since the tree basically has -# the same information as the tab index, you could consider setting -# DISABLE_INDEX to YES when enabling this option. +# further fine tune the look of the index (see "Fine-tuning the output"). As an +# example, the default style sheet generated by doxygen has an example that +# shows how to put an image at the root of the tree instead of the PROJECT_NAME. +# Since the tree basically has the same information as the tab index, you could +# consider setting DISABLE_INDEX to YES when enabling this option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = YES +# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the +# FULL_SIDEBAR option determines if the side bar is limited to only the treeview +# area (value NO) or if it should extend to the full height of the window (value +# YES). Setting this to YES gives a layout similar to +# https://docs.readthedocs.io with more room for contents, but less room for the +# project logo, title, and description. If either GENERATE_TREEVIEW or +# DISABLE_INDEX is set to NO, this option has no effect. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FULL_SIDEBAR = NO + # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. # @@ -1534,12 +1692,19 @@ TREEVIEW_WIDTH = 250 EXT_LINKS_IN_WINDOW = NO +# If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email +# addresses. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +OBFUSCATE_EMAILS = YES + # If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg # tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see # https://inkscape.org) to generate formulas as SVG images instead of PNGs for # the HTML output. These images will generally look nicer at scaled resolutions. -# Possible values are: png The default and svg Looks nicer but requires the -# pdf2svg tool. +# Possible values are: png (the default) and svg (looks nicer but requires the +# pdf2svg or inkscape tool). # The default value is: png. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1554,17 +1719,6 @@ HTML_FORMULA_FORMAT = png FORMULA_FONTSIZE = 10 -# Use the FORMULA_TRANSPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_TRANSPARENT = YES - # The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands # to create new LaTeX commands to be used in formulas as building blocks. See # the section "Including formulas" for details. @@ -1582,11 +1736,29 @@ FORMULA_MACROFILE = USE_MATHJAX = NO +# With MATHJAX_VERSION it is possible to specify the MathJax version to be used. +# Note that the different versions of MathJax have different requirements with +# regards to the different settings, so it is possible that also other MathJax +# settings have to be changed when switching between the different MathJax +# versions. +# Possible values are: MathJax_2 and MathJax_3. +# The default value is: MathJax_2. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_VERSION = MathJax_2 + # When MathJax is enabled you can set the default output format to be used for -# the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/latest/output.html) for more details. +# the MathJax output. For more details about the output format see MathJax +# version 2 (see: +# http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3 +# (see: +# http://docs.mathjax.org/en/latest/web/components/output.html). # Possible values are: HTML-CSS (which is slower, but has the best -# compatibility), NativeMML (i.e. MathML) and SVG. +# compatibility. This is the name for Mathjax version 2, for MathJax version 3 +# this will be translated into chtml), NativeMML (i.e. MathML. Only supported +# for NathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This +# is the name for Mathjax version 3, for MathJax version 2 this will be +# translated into HTML-CSS) and SVG. # The default value is: HTML-CSS. # This tag requires that the tag USE_MATHJAX is set to YES. @@ -1599,22 +1771,29 @@ MATHJAX_FORMAT = HTML-CSS # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of -# MathJax from https://www.mathjax.org before deployment. -# The default value is: https://cdn.jsdelivr.net/npm/mathjax@2. +# MathJax from https://www.mathjax.org before deployment. The default value is: +# - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2 +# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3 # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://www.mathjax.org/mathjax # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example +# for MathJax version 2 (see https://docs.mathjax.org/en/v2.7-latest/tex.html +# #tex-and-latex-extensions): # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# For example for MathJax version 3 (see +# http://docs.mathjax.org/en/latest/input/tex/extensions/index.html): +# MATHJAX_EXTENSIONS = ams # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site -# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# (see: +# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. @@ -1661,7 +1840,8 @@ SERVER_BASED_SEARCH = NO # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: https://xapian.org/). +# Xapian (see: +# https://xapian.org/). # # See the section "External Indexing and Searching" for details. # The default value is: NO. @@ -1674,8 +1854,9 @@ EXTERNAL_SEARCH = NO # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: https://xapian.org/). See the section "External Indexing and -# Searching" for details. +# Xapian (see: +# https://xapian.org/). See the section "External Indexing and Searching" for +# details. # This tag requires that the tag SEARCHENGINE is set to YES. SEARCHENGINE_URL = @@ -1784,29 +1965,31 @@ PAPER_TYPE = letter EXTRA_PACKAGES = -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the -# generated LaTeX document. The header should contain everything until the first -# chapter. If it is left blank doxygen will generate a standard header. See -# section "Doxygen usage" for information on how to let doxygen write the -# default header to a separate file. +# The LATEX_HEADER tag can be used to specify a user-defined LaTeX header for +# the generated LaTeX document. The header should contain everything until the +# first chapter. If it is left blank doxygen will generate a standard header. It +# is highly recommended to start with a default header using +# doxygen -w latex new_header.tex new_footer.tex new_stylesheet.sty +# and then modify the file new_header.tex. See also section "Doxygen usage" for +# information on how to generate the default header that doxygen normally uses. # -# Note: Only use a user-defined header if you know what you are doing! The -# following commands have a special meaning inside the header: $title, -# $datetime, $date, $doxygenversion, $projectname, $projectnumber, -# $projectbrief, $projectlogo. Doxygen will replace $title with the empty -# string, for the replacement values of the other commands the user is referred -# to HTML_HEADER. +# Note: Only use a user-defined header if you know what you are doing! +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. The following +# commands have a special meaning inside the header (and footer): For a +# description of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_HEADER = -# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the -# generated LaTeX document. The footer should contain everything after the last -# chapter. If it is left blank doxygen will generate a standard footer. See +# The LATEX_FOOTER tag can be used to specify a user-defined LaTeX footer for +# the generated LaTeX document. The footer should contain everything after the +# last chapter. If it is left blank doxygen will generate a standard footer. See # LATEX_HEADER for more information on how to generate a default footer and what -# special commands can be used inside the footer. -# -# Note: Only use a user-defined footer if you know what you are doing! +# special commands can be used inside the footer. See also section "Doxygen +# usage" for information on how to generate the default footer that doxygen +# normally uses. Note: Only use a user-defined footer if you know what you are +# doing! # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_FOOTER = @@ -1839,9 +2022,11 @@ LATEX_EXTRA_FILES = PDF_HYPERLINKS = YES -# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate -# the PDF file directly from the LaTeX files. Set this option to YES, to get a -# higher quality PDF documentation. +# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as +# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX +# files. Set this option to YES, to get a higher quality PDF documentation. +# +# See also section LATEX_CMD_NAME for selecting the engine. # The default value is: YES. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1849,8 +2034,7 @@ USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode # command to the generated LaTeX files. This will instruct LaTeX to keep running -# if errors occur, instead of asking the user for help. This option is also used -# when generating formulas in HTML. +# if errors occur, instead of asking the user for help. # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1863,16 +2047,6 @@ LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO -# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source -# code with syntax highlighting in the LaTeX output. -# -# Note that which sources are shown also depends on other settings such as -# SOURCE_BROWSER. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_SOURCE_CODE = NO - # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. See # https://en.wikipedia.org/wiki/BibTeX and \cite for more info. @@ -1953,16 +2127,6 @@ RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = -# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code -# with syntax highlighting in the RTF output. -# -# Note that which sources are shown also depends on other settings such as -# SOURCE_BROWSER. -# The default value is: NO. -# This tag requires that the tag GENERATE_RTF is set to YES. - -RTF_SOURCE_CODE = NO - #--------------------------------------------------------------------------- # Configuration options related to the man page output #--------------------------------------------------------------------------- @@ -2059,15 +2223,6 @@ GENERATE_DOCBOOK = NO DOCBOOK_OUTPUT = docbook -# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the -# program listings (including syntax highlighting and cross-referencing -# information) to the DOCBOOK output. Note that enabling this will significantly -# increase the size of the DOCBOOK output. -# The default value is: NO. -# This tag requires that the tag GENERATE_DOCBOOK is set to YES. - -DOCBOOK_PROGRAMLISTING = NO - #--------------------------------------------------------------------------- # Configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- @@ -2154,7 +2309,8 @@ SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by the -# preprocessor. +# preprocessor. Note that the INCLUDE_PATH is not recursive, so the setting of +# RECURSIVE has no effect here. # This tag requires that the tag SEARCH_INCLUDES is set to YES. INCLUDE_PATH = @@ -2178,10 +2334,10 @@ INCLUDE_FILE_PATTERNS = PREDEFINED = TARGET_OS_OSX \ NS_DESIGNATED_INITIALIZER \ NS_RETURNS_INNER_POINTER \ - "NS_ENUM(_type,_name)=enum _name : _type _name; enum _name : _type " \ - "NS_CLOSED_ENUM(_type,_name)=enum _name : _type _name; enum _name : _type " \ - "NS_OPTIONS(_type,_name)=enum _name : _type _name; enum _name : _type " \ - "NS_SWIFT_NAME(_name)= " \ + "NS_ENUM(_type,_name)=enum _name : _type _name; enum _name : _type" \ + "NS_CLOSED_ENUM(_type,_name)=enum _name : _type _name; enum _name : _type" \ + "NS_OPTIONS(_type,_name)=enum _name : _type _name; enum _name : _type" \ + "NS_SWIFT_NAME(_name)=" \ cpt_deprecated \ cpt_swift_enum \ cpt_swift_struct @@ -2228,7 +2384,7 @@ TAGFILES = "$(SOURCE_ROOT)/../documentation/doxygen/doxygen-cocoa- # tag file that is based on the input files it reads. See section "Linking to # external documentation" for more information about the usage of tag files. -GENERATE_TAGFILE = "$(SOURCE_ROOT)/../documentation/doxygen/core-plot-tags.xml" +GENERATE_TAGFILE = $(SOURCE_ROOT)/../documentation/doxygen/core-plot-tags.xml # If the ALLEXTERNALS tag is set to YES, all external class will be listed in # the class index. If set to NO, only the inherited external classes will be @@ -2255,15 +2411,6 @@ EXTERNAL_PAGES = YES # Configuration options related to the dot tool #--------------------------------------------------------------------------- -# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram -# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to -# NO turns the diagrams off. Note that this option also works with HAVE_DOT -# disabled, but it is recommended to install and use dot, since it yields more -# powerful graphs. -# The default value is: YES. - -CLASS_DIAGRAMS = YES - # You can include diagrams made with dia in doxygen documentation. Doxygen will # then run dia to produce the diagram and insert it in the documentation. The # DIA_PATH tag allows you to specify the directory where the dia binary resides. @@ -2296,35 +2443,50 @@ HAVE_DOT = YES DOT_NUM_THREADS = 0 -# When you want a differently looking font in the dot files that doxygen -# generates you can specify the font name using DOT_FONTNAME. You need to make -# sure dot is able to find the font, which can be done by putting it in a -# standard location or by setting the DOTFONTPATH environment variable or by -# setting DOT_FONTPATH to the directory containing the font. -# The default value is: Helvetica. +# DOT_COMMON_ATTR is common attributes for nodes, edges and labels of +# subgraphs. When you want a differently looking font in the dot files that +# doxygen generates you can specify fontname, fontcolor and fontsize attributes. +# For details please see Node, +# Edge and Graph Attributes specification You need to make sure dot is able +# to find the font, which can be done by putting it in a standard location or by +# setting the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the +# directory containing the font. Default graphviz fontsize is 14. +# The default value is: fontname=Helvetica,fontsize=10. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_COMMON_ATTR = "fontname=\"Lucinda Grande\",fontsize=10" + +# DOT_EDGE_ATTR is concatenated with DOT_COMMON_ATTR. For elegant style you can +# add 'arrowhead=open, arrowtail=open, arrowsize=0.5'. Complete documentation about +# arrows shapes. +# The default value is: labelfontname=Helvetica,labelfontsize=10. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_FONTNAME = "Lucinda Grande" +DOT_EDGE_ATTR = "labelfontname=\"Lucinda Grande\",labelfontsize=10" -# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of -# dot graphs. -# Minimum value: 4, maximum value: 24, default value: 10. +# DOT_NODE_ATTR is concatenated with DOT_COMMON_ATTR. For view without boxes +# around nodes set 'shape=plain' or 'shape=plaintext' Shapes specification +# The default value is: shape=box,height=0.2,width=0.4. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_FONTSIZE = 10 +DOT_NODE_ATTR = "shape=box,height=0.2,width=0.4" -# By default doxygen will tell dot to use the default font as specified with -# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set -# the path where dot can find it using this tag. +# You can set the path where dot can find font specified with fontname in +# DOT_COMMON_ATTR and others dot attributes. # This tag requires that the tag HAVE_DOT is set to YES. DOT_FONTPATH = -# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for -# each documented class showing the direct and indirect inheritance relations. -# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO. +# If the CLASS_GRAPH tag is set to YES (or GRAPH) then doxygen will generate a +# graph for each documented class showing the direct and indirect inheritance +# relations. In case HAVE_DOT is set as well dot will be used to draw the graph, +# otherwise the built-in generator will be used. If the CLASS_GRAPH tag is set +# to TEXT the direct and indirect inheritance relations will be shown as texts / +# links. +# Possible values are: NO, YES, TEXT and GRAPH. # The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. CLASS_GRAPH = YES @@ -2338,7 +2500,8 @@ CLASS_GRAPH = YES COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for -# groups, showing the direct groups dependencies. +# groups, showing the direct groups dependencies. See also the chapter Grouping +# in the manual. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2361,10 +2524,32 @@ UML_LOOK = NO # but if the number exceeds 15, the total amount of fields shown is limited to # 10. # Minimum value: 0, maximum value: 100, default value: 10. -# This tag requires that the tag HAVE_DOT is set to YES. +# This tag requires that the tag UML_LOOK is set to YES. UML_LIMIT_NUM_FIELDS = 10 +# If the DOT_UML_DETAILS tag is set to NO, doxygen will show attributes and +# methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS +# tag is set to YES, doxygen will add type and arguments for attributes and +# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, doxygen +# will not generate fields with class member information in the UML graphs. The +# class diagrams will look similar to the default class diagrams but using UML +# notation for the relationships. +# Possible values are: NO, YES and NONE. +# The default value is: NO. +# This tag requires that the tag UML_LOOK is set to YES. + +DOT_UML_DETAILS = NO + +# The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters +# to display on a single line. If the actual line length exceeds this threshold +# significantly it will wrapped across multiple lines. Some heuristics are apply +# to avoid ugly line breaks. +# Minimum value: 0, maximum value: 1000, default value: 17. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_WRAP_THRESHOLD = 17 + # If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and # collaboration graphs will show the relations between templates and their # instances. @@ -2431,6 +2616,13 @@ GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES +# The DIR_GRAPH_MAX_DEPTH tag can be used to limit the maximum number of levels +# of child directories generated in directory dependency graphs by dot. +# Minimum value: 1, maximum value: 25, default value: 1. +# This tag requires that the tag DIRECTORY_GRAPH is set to YES. + +DIR_GRAPH_MAX_DEPTH = 1 + # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. For an explanation of the image formats see the section # output formats in the documentation of the dot tool (Graphviz (see: @@ -2462,7 +2654,7 @@ INTERACTIVE_SVG = NO # found. If left blank, it is assumed the dot tool can be found in the path. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_PATH = /usr/local/bin/ +DOT_PATH = /opt/homebrew/bin # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the \dotfile @@ -2484,10 +2676,10 @@ MSCFILE_DIRS = DIAFILE_DIRS = # When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the -# path where java can find the plantuml.jar file. If left blank, it is assumed -# PlantUML is not used or called during a preprocessing step. Doxygen will -# generate a warning when it encounters a \startuml command in this case and -# will not generate output for the diagram. +# path where java can find the plantuml.jar file or to the filename of jar file +# to be used. If left blank, it is assumed PlantUML is not used or called during +# a preprocessing step. Doxygen will generate a warning when it encounters a +# \startuml command in this case and will not generate output for the diagram. PLANTUML_JAR_PATH = @@ -2525,18 +2717,6 @@ DOT_GRAPH_MAX_NODES = 100 MAX_DOT_GRAPH_DEPTH = 0 -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not seem -# to support this out of the box. -# -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_TRANSPARENT = YES - # Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) support @@ -2549,14 +2729,18 @@ DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page # explaining the meaning of the various boxes and arrows in the dot generated # graphs. +# Note: This tag requires that UML_LOOK isn't set, i.e. the doxygen internal +# graphical representation for inheritance and collaboration diagrams is used. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. GENERATE_LEGEND = YES -# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot +# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate # files that are used to generate the various graphs. +# +# Note: This setting is not only used for dot files but also for msc temporary +# files. # The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. DOT_CLEANUP = YES From 0f5e2b3871d29d6388f15e297b70f2efc0ffb906 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Tue, 4 Oct 2022 20:29:44 -0400 Subject: [PATCH 114/245] Run documentation scripts on every build. --- framework/CorePlot.xcodeproj/project.pbxproj | 52 ++++++++++---------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 3433a3d0f..68092f5de 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -821,48 +821,48 @@ 073FB02E0FC991A3007A728E /* CPTAxisLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTAxisLabel.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; 073FB02F0FC991A3007A728E /* CPTAxisLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAxisLabel.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; 0772B43710E24D5C009CD04C /* CPTTradingRangePlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTTradingRangePlot.h; sourceTree = ""; }; - 0772B43810E24D5C009CD04C /* CPTTradingRangePlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTTradingRangePlot.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 0772B43810E24D5C009CD04C /* CPTTradingRangePlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTTradingRangePlot.m; sourceTree = ""; }; 0772C9250FE2F71600EC4C16 /* CPTTheme.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTTheme.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; 0772C9260FE2F71600EC4C16 /* CPTTheme.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTTheme.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; 0772C92D0FE2F89000EC4C16 /* _CPTDarkGradientTheme.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTDarkGradientTheme.h; sourceTree = ""; }; 0772C92E0FE2F89000EC4C16 /* _CPTDarkGradientTheme.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = _CPTDarkGradientTheme.m; sourceTree = ""; }; 0783DD530FBF097E006C3696 /* CPTXYAxis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTXYAxis.h; sourceTree = ""; }; - 0783DD540FBF097E006C3696 /* CPTXYAxis.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTXYAxis.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 0783DD540FBF097E006C3696 /* CPTXYAxis.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTXYAxis.m; sourceTree = ""; }; 078F42D90FACC075006E670B /* NSNumberExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = NSNumberExtensions.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; 078F42DA0FACC075006E670B /* NSNumberExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = NSNumberExtensions.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; 07975C410F3B816600DE45DC /* CPTXYAxisSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTXYAxisSet.h; sourceTree = ""; }; - 07975C420F3B816600DE45DC /* CPTXYAxisSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTXYAxisSet.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 07975C420F3B816600DE45DC /* CPTXYAxisSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTXYAxisSet.m; sourceTree = ""; }; 07975C470F3B818800DE45DC /* CPTAxis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTAxis.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 07975C480F3B818800DE45DC /* CPTAxis.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAxis.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 07975C480F3B818800DE45DC /* CPTAxis.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAxis.m; sourceTree = ""; }; 07983EF40F2F9A3D008C8618 /* CPTXYGraph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTXYGraph.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 07983EF50F2F9A3D008C8618 /* CPTXYGraph.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTXYGraph.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 07983EF50F2F9A3D008C8618 /* CPTXYGraph.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTXYGraph.m; sourceTree = ""; }; 0799E0930F2BB5F300790525 /* CPTBarPlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTBarPlot.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 0799E0940F2BB5F300790525 /* CPTBarPlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTBarPlot.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 0799E0940F2BB5F300790525 /* CPTBarPlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTBarPlot.m; sourceTree = ""; }; 0799E0970F2BB6E800790525 /* CPTXYPlotSpace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTXYPlotSpace.h; sourceTree = ""; }; 079FC0B20FB975500037E990 /* CPTColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTColor.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; 079FC0B30FB975500037E990 /* CPTColor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTColor.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; 079FC0BB0FB9762B0037E990 /* CPTColorSpace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTColorSpace.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; 079FC0BC0FB9762B0037E990 /* CPTColorSpace.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTColorSpace.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; 07A2E6FA102DF47900809BC5 /* CPTTimeFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTTimeFormatter.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 07A2E6FB102DF47900809BC5 /* CPTTimeFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTTimeFormatter.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 07A2E6FB102DF47900809BC5 /* CPTTimeFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTTimeFormatter.m; sourceTree = ""; }; 07AEF1FD10BBE1F10012BEFF /* CPTResponder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTResponder.h; sourceTree = ""; }; 07B69A5B12B6215000F4C16C /* CPTTextStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTTextStyle.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 07B69A5C12B6215000F4C16C /* CPTTextStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTTextStyle.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 07B69A5C12B6215000F4C16C /* CPTTextStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTTextStyle.m; sourceTree = ""; }; 07B69B1512B62ABB00F4C16C /* CPTMutableLineStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTMutableLineStyle.h; sourceTree = ""; }; 07B69B1612B62ABB00F4C16C /* CPTMutableLineStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTMutableLineStyle.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; 07BF0D630F2B70B8002FCEA7 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; 07BF0D700F2B718F002FCEA7 /* CPTGraph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTGraph.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 07BF0D710F2B718F002FCEA7 /* CPTGraph.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTGraph.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 07BF0D710F2B718F002FCEA7 /* CPTGraph.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTGraph.m; sourceTree = ""; }; 07BF0D760F2B723A002FCEA7 /* CPTPlotAreaFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTPlotAreaFrame.h; sourceTree = ""; }; 07BF0D770F2B723A002FCEA7 /* CPTPlotAreaFrame.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlotAreaFrame.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; 07BF0D7A0F2B72B0002FCEA7 /* CPTPlotSpace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTPlotSpace.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 07BF0D7B0F2B72B0002FCEA7 /* CPTPlotSpace.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlotSpace.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 07BF0D7B0F2B72B0002FCEA7 /* CPTPlotSpace.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlotSpace.m; sourceTree = ""; }; 07BF0D7E0F2B72F6002FCEA7 /* CPTPlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTPlot.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 07BF0D7F0F2B72F6002FCEA7 /* CPTPlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlot.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 07BF0D7F0F2B72F6002FCEA7 /* CPTPlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlot.m; sourceTree = ""; }; 07BF0D820F2B7340002FCEA7 /* CPTAxisSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTAxisSet.h; sourceTree = ""; }; 07BF0D830F2B7340002FCEA7 /* CPTAxisSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAxisSet.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 07BF0D950F2B73CA002FCEA7 /* CPTScatterPlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTScatterPlot.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 07BF0D960F2B73CA002FCEA7 /* CPTScatterPlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTScatterPlot.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 07BF0D950F2B73CA002FCEA7 /* CPTScatterPlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTScatterPlot.h; sourceTree = ""; }; + 07BF0D960F2B73CA002FCEA7 /* CPTScatterPlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTScatterPlot.m; sourceTree = ""; }; 07BF0DF10F2B7BFB002FCEA7 /* CPTDefinitions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTDefinitions.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; 07BF0DF20F2B7BFB002FCEA7 /* CPTDefinitions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTDefinitions.m; sourceTree = ""; }; 07C467990FE1A24C00299939 /* CPTMutableTextStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTMutableTextStyle.h; sourceTree = ""; }; @@ -912,8 +912,8 @@ 8DC2EF5B0486A6940098B216 /* CorePlot.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CorePlot.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9021E5690FC69B2900443472 /* doxygen.config */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; lineEnding = 0; name = doxygen.config; path = ../documentation/doxygen/doxygen.config; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = ""; }; 906156BC0F375598001B75FC /* CPTLineStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLineStyle.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 906156BD0F375598001B75FC /* CPTLineStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLineStyle.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 90AF4FB90F36D39700753D26 /* CPTXYPlotSpace.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTXYPlotSpace.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 906156BD0F375598001B75FC /* CPTLineStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLineStyle.m; sourceTree = ""; }; + 90AF4FB90F36D39700753D26 /* CPTXYPlotSpace.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTXYPlotSpace.m; sourceTree = ""; }; A92C00B71DCB2085A92BE0A9 /* _CPTAnimationNSDecimalPeriod.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTAnimationNSDecimalPeriod.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; A92C0563E082D1C1E249FA6F /* _CPTAnimationCGSizePeriod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTAnimationCGSizePeriod.h; sourceTree = ""; }; A92C0685ACE3281299F10F73 /* _CPTAnimationNSDecimalPeriod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTAnimationNSDecimalPeriod.h; sourceTree = ""; }; @@ -931,11 +931,11 @@ BC55023010059F22005DF982 /* _CPTStocksTheme.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTStocksTheme.h; sourceTree = ""; }; BC55023110059F22005DF982 /* _CPTStocksTheme.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = _CPTStocksTheme.m; sourceTree = ""; }; BC74A32E10FC402600E7E90D /* CPTPieChart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTPieChart.h; sourceTree = ""; }; - BC74A32F10FC402600E7E90D /* CPTPieChart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPieChart.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + BC74A32F10FC402600E7E90D /* CPTPieChart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPieChart.m; sourceTree = ""; }; BCFC7C3510921FDB00DAECAA /* CPTAxisTitle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTAxisTitle.h; sourceTree = ""; }; BCFC7C3610921FDB00DAECAA /* CPTAxisTitle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAxisTitle.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; C30550EB1399BE5400E0151F /* CPTLegendEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLegendEntry.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - C30550EC1399BE5400E0151F /* CPTLegendEntry.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLegendEntry.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C30550EC1399BE5400E0151F /* CPTLegendEntry.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLegendEntry.m; sourceTree = ""; }; C30E979F14B290520012204A /* DoxygenLayout.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = DoxygenLayout.xml; path = ../documentation/doxygen/DoxygenLayout.xml; sourceTree = ""; }; C318F4AB11EA188700595FF9 /* CPTLimitBand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLimitBand.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; C318F4AC11EA188700595FF9 /* CPTLimitBand.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLimitBand.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; @@ -969,11 +969,11 @@ C3490DF520E028D80089F309 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/CorePlot-iOS-Info.plist"; sourceTree = ""; }; C3490DF720E028DC0089F309 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/CorePlot-tvOS-Info.plist"; sourceTree = ""; }; C349DCB2151AAFBF00BFD6A7 /* CPTCalendarFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTCalendarFormatter.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - C349DCB3151AAFBF00BFD6A7 /* CPTCalendarFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTCalendarFormatter.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C349DCB3151AAFBF00BFD6A7 /* CPTCalendarFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTCalendarFormatter.m; sourceTree = ""; }; C34AFE6911021D010041675A /* CPTPlotSymbol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTPlotSymbol.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; C34AFE6A11021D010041675A /* CPTPlotSymbol.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlotSymbol.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; C34BF5BA10A67633007F0894 /* CPTPlotArea.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTPlotArea.h; sourceTree = ""; }; - C34BF5BB10A67633007F0894 /* CPTPlotArea.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlotArea.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C34BF5BB10A67633007F0894 /* CPTPlotArea.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlotArea.m; sourceTree = ""; }; C34F570D19D8CE5500446248 /* CorePlotWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotWarnings.xcconfig; path = xcconfig/CorePlotWarnings.xcconfig; sourceTree = ""; }; C3564CBD22A2D0E1000A54C9 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; C36468A80FE5533F0064B186 /* CPTTextStyleTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTTextStyleTests.h; sourceTree = ""; }; @@ -991,7 +991,7 @@ C38A09781A46185200D45436 /* CorePlot.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CorePlot.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C38A09821A46185300D45436 /* UnitTests iOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "UnitTests iOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; C38A0A531A461F9700D45436 /* CPTTextStylePlatformSpecific.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPTTextStylePlatformSpecific.h; path = PlatformSpecific/CPTTextStylePlatformSpecific.h; sourceTree = SOURCE_ROOT; }; - C38A0A541A461F9700D45436 /* CPTTextStylePlatformSpecific.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CPTTextStylePlatformSpecific.m; path = PlatformSpecific/CPTTextStylePlatformSpecific.m; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C38A0A541A461F9700D45436 /* CPTTextStylePlatformSpecific.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CPTTextStylePlatformSpecific.m; path = PlatformSpecific/CPTTextStylePlatformSpecific.m; sourceTree = SOURCE_ROOT; }; C38A0A591A4620B800D45436 /* CPTImagePlatformSpecific.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CPTImagePlatformSpecific.m; path = PlatformSpecific/CPTImagePlatformSpecific.m; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; C38A0B181A46264500D45436 /* CPTPlatformSpecificCategories.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPTPlatformSpecificCategories.h; path = PlatformSpecific/CPTPlatformSpecificCategories.h; sourceTree = SOURCE_ROOT; }; C38A0B191A46264500D45436 /* CPTPlatformSpecificCategories.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CPTPlatformSpecificCategories.m; path = PlatformSpecific/CPTPlatformSpecificCategories.m; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; @@ -1003,14 +1003,14 @@ C38A0B281A46265300D45436 /* CPTGraphHostingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CPTGraphHostingView.m; path = PlatformSpecific/CPTGraphHostingView.m; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; C38DD49111A04B7A002A68E7 /* CPTGridLineGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTGridLineGroup.h; sourceTree = ""; }; C38DD49211A04B7A002A68E7 /* CPTGridLineGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTGridLineGroup.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - C3920AC21395B6500045F3BB /* CPTLegend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLegend.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - C3920AC31395B6500045F3BB /* CPTLegend.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLegend.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C3920AC21395B6500045F3BB /* CPTLegend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLegend.h; sourceTree = ""; }; + C3920AC31395B6500045F3BB /* CPTLegend.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLegend.m; sourceTree = ""; }; C3978E0413CE653B00A420D9 /* NSCoderExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSCoderExtensions.h; sourceTree = ""; }; C3978E0513CE653B00A420D9 /* NSCoderExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSCoderExtensions.m; sourceTree = ""; }; C3A695E3146A19BC00AF5653 /* CPTMutablePlotRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTMutablePlotRange.h; sourceTree = ""; }; C3A695E4146A19BC00AF5653 /* CPTMutablePlotRange.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTMutablePlotRange.m; sourceTree = ""; }; C3AFC9CF0FB62969005DFFDC /* CPTImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTImage.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - C3AFC9D00FB62969005DFFDC /* CPTImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTImage.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C3AFC9D00FB62969005DFFDC /* CPTImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTImage.m; sourceTree = ""; }; C3B235631009931400970270 /* doxygen-cocoa-tags.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = "doxygen-cocoa-tags.xml"; path = "../documentation/doxygen/doxygen-cocoa-tags.xml"; sourceTree = ""; }; C3B25EDF1AC23A7D0063CCD8 /* CorePlot.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CorePlot.h; sourceTree = ""; }; C3BB3C8C1C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTAnimationNSNumberPeriod.h; sourceTree = ""; }; @@ -1027,7 +1027,7 @@ C3C9CB0C165DB4D500739006 /* CPTAnimationOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTAnimationOperation.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; C3C9CB0D165DB4D500739006 /* CPTAnimationOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAnimationOperation.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; C3C9CB11165DB50300739006 /* CPTAnimationPeriod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTAnimationPeriod.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - C3C9CB12165DB50300739006 /* CPTAnimationPeriod.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAnimationPeriod.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C3C9CB12165DB50300739006 /* CPTAnimationPeriod.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAnimationPeriod.m; sourceTree = ""; }; C3C9CB15165DB52C00739006 /* _CPTAnimationCGFloatPeriod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTAnimationCGFloatPeriod.h; sourceTree = ""; }; C3C9CB16165DB52C00739006 /* _CPTAnimationCGFloatPeriod.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = _CPTAnimationCGFloatPeriod.m; sourceTree = ""; }; C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotDebug.xcconfig; path = xcconfig/CorePlotDebug.xcconfig; sourceTree = ""; }; @@ -1071,7 +1071,7 @@ C3F97F1C17A9E07B00A52FF2 /* CPTFunctionDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTFunctionDataSource.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; C3F97F1D17A9E07B00A52FF2 /* CPTFunctionDataSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTFunctionDataSource.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; C3FF6EF00FFFA51D00AF0496 /* mainpage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mainpage.h; path = Source/mainpage.h; sourceTree = ""; }; - D0C0477B12D6560900DA8047 /* CPTRangePlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTRangePlot.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + D0C0477B12D6560900DA8047 /* CPTRangePlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTRangePlot.m; sourceTree = ""; }; D0C0477C12D6560900DA8047 /* CPTRangePlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTRangePlot.h; sourceTree = ""; }; E1620CBC100F03A100A84E77 /* CPTThemeTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTThemeTests.h; sourceTree = ""; }; E1620CBD100F03A100A84E77 /* CPTThemeTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTThemeTests.m; sourceTree = ""; }; @@ -2353,6 +2353,7 @@ /* Begin PBXShellScriptBuildPhase section */ 9021E49D0FC5C9DC00443472 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -2397,6 +2398,7 @@ }; C38A09921A4618B600D45436 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); From 8eb5e5df281a35ad5bd4350e0fb35c430067d1b3 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Tue, 4 Oct 2022 20:37:37 -0400 Subject: [PATCH 115/245] Fixed typos and broken links in the documentation. --- framework/Source/CPTAxis.m | 6 +++--- framework/Source/CPTGraph.m | 4 ++-- framework/Source/NSCoderExtensions.m | 16 ++++++++-------- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/framework/Source/CPTAxis.m b/framework/Source/CPTAxis.m index 618df3346..8fa1eaac2 100644 --- a/framework/Source/CPTAxis.m +++ b/framework/Source/CPTAxis.m @@ -490,8 +490,8 @@ @implementation CPTAxis * - @ref majorTickLength = @num{5.0} * - @ref labelOffset = @num{2.0} * - @ref minorTickLabelOffset = @num{2.0} - * - @ref labelRotation= @num{0.0} - * - @ref minorTickLabelRotation= @num{0.0} + * - @ref labelRotation = @num{0.0} + * - @ref minorTickLabelRotation = @num{0.0} * - @ref labelAlignment = #CPTAlignmentCenter * - @ref minorTickLabelAlignment = #CPTAlignmentCenter * - @ref title = @nil @@ -503,7 +503,7 @@ @implementation CPTAxis * - @ref tickLabelDirection = #CPTSignNone * - @ref minorTickLabelDirection = #CPTSignNone * - @ref majorGridLineStyle = @nil - * - @ref minorGridLineStyle= @nil + * - @ref minorGridLineStyle = @nil * - @ref axisLineCapMin = @nil * - @ref axisLineCapMax = @nil * - @ref labelingOrigin = @num{0} diff --git a/framework/Source/CPTGraph.m b/framework/Source/CPTGraph.m index a1299975c..30024d692 100644 --- a/framework/Source/CPTGraph.m +++ b/framework/Source/CPTGraph.m @@ -192,8 +192,8 @@ @implementation CPTGraph * - @ref needsDisplayOnBoundsChange = @YES * * The new graph will have a @ref plotAreaFrame with a frame equal to the graph’s bounds, - * a @ref defaultPlotSpace created with the @link CPTGraph::newPlotSpace -newPlotSpace @endlink method, - * and an @ref axisSet created with the @link CPTGraph::newAxisSet -newAxisSet @endlink method. + * a @ref defaultPlotSpace created with the @link CPTGraph(AbstractFactoryMethods)::newPlotSpace -newPlotSpace @endlink method, + * and an @ref axisSet created with the @link CPTGraph(AbstractFactoryMethods)::newAxisSet -newAxisSet @endlink method. * * @param newFrame The frame rectangle. * @return The initialized CPTGraph object. diff --git a/framework/Source/NSCoderExtensions.m b/framework/Source/NSCoderExtensions.m index 117b63a36..c22b50308 100644 --- a/framework/Source/NSCoderExtensions.m +++ b/framework/Source/NSCoderExtensions.m @@ -267,7 +267,7 @@ -(void)encodeDecimal:(NSDecimal)number forKey:(nonnull NSString *)key #pragma mark Decoding /** @brief Decodes and returns a number that was previously encoded with - * @link NSCoder::encodeCGFloat:forKey: -encodeCGFloat:forKey: @endlink + * @link NSCoder(CPTExtensions)::encodeCGFloat:forKey: -encodeCGFloat:forKey: @endlink * and associated with the string @par{key}. * @param key The key associated with the number. * @return The number as a @ref CGFloat. @@ -282,7 +282,7 @@ -(CGFloat)decodeCGFloatForKey:(nonnull NSString *)key } /** @brief Decodes and returns a point that was previously encoded with - * @link NSCoder::encodeCPTPoint:forKey: -encodeCPTPoint:forKey: @endlink + * @link NSCoder(CPTExtensions)::encodeCPTPoint:forKey: -encodeCPTPoint:forKey: @endlink * and associated with the string @par{key}. * @param key The key associated with the point. * @return The point. @@ -302,7 +302,7 @@ -(CGPoint)decodeCPTPointForKey:(nonnull NSString *)key } /** @brief Decodes and returns a size that was previously encoded with - * @link NSCoder::encodeCPTSize:forKey: -encodeCPTSize:forKey:@endlink + * @link NSCoder(CPTExtensions)::encodeCPTSize:forKey: -encodeCPTSize:forKey:@endlink * and associated with the string @par{key}. * @param key The key associated with the size. * @return The size. @@ -322,7 +322,7 @@ -(CGSize)decodeCPTSizeForKey:(nonnull NSString *)key } /** @brief Decodes and returns a rectangle that was previously encoded with - * @link NSCoder::encodeCPTRect:forKey: -encodeCPTRect:forKey:@endlink + * @link NSCoder(CPTExtensions)::encodeCPTRect:forKey: -encodeCPTRect:forKey:@endlink * and associated with the string @par{key}. * @param key The key associated with the rectangle. * @return The rectangle. @@ -342,7 +342,7 @@ -(CGRect)decodeCPTRectForKey:(nonnull NSString *)key } /** @brief Decodes and returns an new color space object that was previously encoded with - * @link NSCoder::encodeCGColorSpace:forKey: -encodeCGColorSpace:forKey:@endlink + * @link NSCoder(CPTExtensions)::encodeCGColorSpace:forKey: -encodeCGColorSpace:forKey:@endlink * and associated with the string @par{key}. * @param key The key associated with the color space. * @return The new path. @@ -380,7 +380,7 @@ -(nullable CGColorSpaceRef)newCGColorSpaceDecodeForKey:(nonnull NSString *)key } /** @brief Decodes and returns a new path object that was previously encoded with - * @link NSCoder::encodeCGPath:forKey: -encodeCGPath:forKey:@endlink + * @link NSCoder(CPTExtensions)::encodeCGPath:forKey: -encodeCGPath:forKey:@endlink * and associated with the string @par{key}. * @param key The key associated with the path. * @return The new path. @@ -448,7 +448,7 @@ -(nullable CGPathRef)newCGPathDecodeForKey:(nonnull NSString *)key } /** @brief Decodes and returns a new image object that was previously encoded with - * @link NSCoder::encodeCGImage:forKey: -encodeCGImage:forKey:@endlink + * @link NSCoder(CPTExtensions)::encodeCGImage:forKey: -encodeCGImage:forKey:@endlink * and associated with the string @par{key}. * @param key The key associated with the image. * @return The new image. @@ -526,7 +526,7 @@ -(nullable CGImageRef)newCGImageDecodeForKey:(nonnull NSString *)key } /** @brief Decodes and returns a decimal number that was previously encoded with - * @link NSCoder::encodeDecimal:forKey: -encodeDecimal:forKey:@endlink + * @link NSCoder(CPTExtensions)::encodeDecimal:forKey: -encodeDecimal:forKey:@endlink * and associated with the string @par{key}. * @param key The key associated with the number. * @return The number as an @ref NSDecimal. From d3b140e8d36ab8653b0dbb0aa4898a5c0548d8ec Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Fri, 2 Dec 2022 18:53:14 -0500 Subject: [PATCH 116/245] Updated the code formatting script to remove the hard-coded path to the uncrustify tool. --- scripts/format_core_plot.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/format_core_plot.sh b/scripts/format_core_plot.sh index da418670a..a3ac5fc32 100755 --- a/scripts/format_core_plot.sh +++ b/scripts/format_core_plot.sh @@ -1,5 +1,7 @@ #!/bin/sh +uncrustify=`which uncrustify` + file_list=`find ".." -name "*.[mh]" \! -iregex ".*/build/.*" -type f | sed "s| \([^/]\)|:\1|g"` for file in $file_list @@ -8,7 +10,7 @@ do file2indent=`echo $file | sed "s|:| |g"` echo "Indenting file '$file2indent'" #!/bin/bash -"/usr/local/bin/uncrustify" -l OC -f "$file2indent" -c "./uncrustify.cfg" -o "./indentoutput.tmp" +"$uncrustify" -l OC -f "$file2indent" -c "./uncrustify.cfg" -o "./indentoutput.tmp" # remove spaces before category names to keep Doxygen happy and fix other uncrustify bugs cat "./indentoutput.tmp" | \ From b3906d211c38be52903d9efe878895abbccb59d5 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Fri, 2 Dec 2022 18:53:42 -0500 Subject: [PATCH 117/245] Updated the uncrustify config to version 0.76. --- scripts/uncrustify.cfg | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/uncrustify.cfg b/scripts/uncrustify.cfg index 6442fac4a..20f548cef 100644 --- a/scripts/uncrustify.cfg +++ b/scripts/uncrustify.cfg @@ -1,4 +1,4 @@ -# Uncrustify-0.75.0 +# Uncrustify-0.76.0_f newlines = auto input_tab_size = 4 output_tab_size = 4 @@ -512,6 +512,7 @@ nl_template_args = false nl_template_end = false nl_oc_msg_args = false nl_oc_msg_args_min_params = 0 +nl_oc_msg_args_max_code_width = 0 nl_fdef_brace = force nl_fdef_brace_cond = force nl_cpp_ldef_brace = ignore @@ -803,6 +804,7 @@ pp_indent_in_guard = true pp_define_at_level = false pp_include_at_level = false pp_ignore_define_body = false +pp_multiline_define_body_indent = 8 pp_indent_case = true pp_indent_func_def = true pp_indent_extern = true @@ -823,6 +825,7 @@ debug_line_number_to_protocol = 0 debug_timeout = 0 debug_truncate = 0 debug_sort_the_tracks = true +debug_decode_the_flags = false set_numbering_for_html_output = false # option(s) with 'not default' value: 366 # From 30ce4de5fcd3303c34d2cac6fd8a8e4b04de4719 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 3 Dec 2022 06:40:56 -0500 Subject: [PATCH 118/245] Updated ci.yml to use latest versions. --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e49137331..4aa32d991 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,7 +8,7 @@ jobs: runs-on: macOS-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Run unit tests for macOS run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests Mac" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO @@ -26,7 +26,7 @@ jobs: matrix: destination: [ - "platform=iOS Simulator,name=iPhone 13 Pro", + "platform=iOS Simulator,name=iPhone 14 Pro", "platform=macOS,variant=Mac Catalyst", "platform=macOS", "platform=tvOS Simulator,name=Apple TV 4k", From 21b019967dc76d309ad64ab14adb5c6ae1864bd0 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 3 Dec 2022 07:09:41 -0500 Subject: [PATCH 119/245] Updated ci.yml to use latest versions. --- .github/workflows/ci.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4aa32d991..fb213e649 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,10 +14,10 @@ jobs: run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests Mac" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO - name: Run unit tests for iOS - run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests iOS" -sdk "iphonesimulator" -destination "name=iPhone 13 Pro" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO + run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests iOS" -sdk "iphonesimulator" -destination "name=Any iOS Simulator Device" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO - name: Run unit tests for tvOS - run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests tvOS" -sdk "appletvsimulator" -destination "name=Apple TV 4K" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO + run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests tvOS" -sdk "appletvsimulator" -destination "name=Any tvOS Simulator Device" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO SPM: name: Verify SPM build @@ -26,15 +26,15 @@ jobs: matrix: destination: [ - "platform=iOS Simulator,name=iPhone 14 Pro", + "platform=iOS Simulator,name=Any iOS Simulator Device", "platform=macOS,variant=Mac Catalyst", "platform=macOS", - "platform=tvOS Simulator,name=Apple TV 4k", + "platform=tvOS Simulator,name=Any tvOS Simulator Device", ] scheme: ["CorePlot"] steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: spm's xcodebuild - ${{ matrix.destination }} run: xcodebuild clean build -scheme "${{ matrix.scheme }}" -destination "${{ matrix.destination }}" -configuration Release From 37ac34f9fe0b4664074ae0e4e23a20548c3010a7 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 3 Dec 2022 07:24:53 -0500 Subject: [PATCH 120/245] Updated ci.yml to use specific iOS and tvOS devices. --- .github/workflows/ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fb213e649..e0570cc96 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,10 +14,10 @@ jobs: run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests Mac" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO - name: Run unit tests for iOS - run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests iOS" -sdk "iphonesimulator" -destination "name=Any iOS Simulator Device" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO + run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests iOS" -sdk "iphonesimulator" -destination "name=iPhone 14 Pro" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO - name: Run unit tests for tvOS - run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests tvOS" -sdk "appletvsimulator" -destination "name=Any tvOS Simulator Device" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO + run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests tvOS" -sdk "appletvsimulator" -destination "name=Apple TV 4K (2nd generation)" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO SPM: name: Verify SPM build @@ -26,10 +26,10 @@ jobs: matrix: destination: [ - "platform=iOS Simulator,name=Any iOS Simulator Device", + "platform=iOS Simulator,name=iPhone 14 Pro", "platform=macOS,variant=Mac Catalyst", "platform=macOS", - "platform=tvOS Simulator,name=Any tvOS Simulator Device", + "platform=tvOS Simulator,name=Apple TV 4K (2nd generation)", ] scheme: ["CorePlot"] steps: From 298d7e744372bd64d78e212b9f8b67e670c54e7b Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Wed, 14 Dec 2022 20:02:08 -0500 Subject: [PATCH 121/245] Updated Mac minimum deployment target to 10.13 and other fixes for compatibility with Xcode 14. --- documentation/changelog.markdown | 6 ++--- .../xcschemes/CPTTestApp-iPad.xcscheme | 2 +- .../project.pbxproj | 2 +- .../xcschemes/CPTTestApp-iPhone.xcscheme | 2 +- .../CPTTestApp.xcodeproj/project.pbxproj | 6 ++--- .../xcschemes/CPTTestApp.xcscheme | 2 +- .../Plot_Gallery.xcodeproj/project.pbxproj | 4 ++-- .../xcschemes/Plot Gallery-Mac.xcscheme | 2 +- .../xcschemes/Plot Gallery-iOS.xcscheme | 2 +- .../xcschemes/Plot Gallery-tvOS.xcscheme | 2 +- .../DatePlot.xcodeproj/project.pbxproj | 4 ++-- .../xcshareddata/xcschemes/DatePlot.xcscheme | 2 +- .../DropPlot.xcodeproj/project.pbxproj | 4 ++-- .../xcshareddata/xcschemes/DropPlot.xcscheme | 2 +- .../project.pbxproj | 4 ++-- .../xcschemes/minorTickFormatter.xcscheme | 2 +- .../RangePlot.xcodeproj/project.pbxproj | 4 ++-- .../xcshareddata/xcschemes/RangePlot.xcscheme | 2 +- framework/CorePlot.xcodeproj/project.pbxproj | 15 ++----------- .../xcschemes/CorePlot Mac.xcscheme | 2 +- .../xcschemes/CorePlot iOS.xcscheme | 2 +- .../xcschemes/CorePlot tvOS.xcscheme | 2 +- .../xcschemes/Documentation-Mac.xcscheme | 2 +- .../xcschemes/Documentation-iOS.xcscheme | 2 +- .../xcschemes/Universal Library.xcscheme | 2 +- .../xcschemes/Universal XCFramework.xcscheme | 2 +- .../Universal iOS Framework.xcscheme | 2 +- .../Universal tvOS Framework.xcscheme | 2 +- .../xcschemes/Update SPM Files.xcscheme | 2 +- framework/Source/NSCoderExtensions.m | 22 ++----------------- framework/xcconfig/CorePlot.xcconfig | 2 +- 31 files changed, 42 insertions(+), 71 deletions(-) diff --git a/documentation/changelog.markdown b/documentation/changelog.markdown index 5bc6e0e8e..1efbfc69e 100644 --- a/documentation/changelog.markdown +++ b/documentation/changelog.markdown @@ -2,15 +2,15 @@ ## Release Notes -This release updates Core Plot to be compatible with Xcode 12, Mac Catalyst, and the Swift Package Manager. It adds support for the Swift Package Manager and Mac Catalyst. +This release updates Core Plot to be compatible with Xcode 14, Mac Catalyst, and the Swift Package Manager. It adds support for the Swift Package Manager and Mac Catalyst. -The Mac deployment target is now macOS 10.10. The iOS deployment target has changed to iOS 12.0. The tvOS deployment target has changed to tvOS 12.0. The iOS static library is obsolete and has been removed. +The Mac deployment target is now macOS 10.13. The iOS deployment target has changed to iOS 12.0. The tvOS deployment target has changed to tvOS 12.0. The iOS static library is obsolete and has been removed. ## Details - **New**: Mac Catalyst support - **New**: Swift Package Manager support -- **Changed**: Updated the deployment targets for all supported operating systems for the minimums required by Xcode 12. The Mac deployment target is now macOS 10.10. The iOS deployment target is now iOS 12.0. The tvOS deployment target is now tvOS 12.0. +- **Changed**: Updated the deployment targets for all supported operating systems for the minimums required by Xcode 14. The Mac deployment target is now macOS 10.13. The iOS deployment target is now iOS 12.0. The tvOS deployment target is now tvOS 12.0. - **Changed**: Miscellaneous bug fixes and cleanup. - **Removed**: Removed the iOS static library. diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme index 6cde07714..b5a803a71 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme @@ -1,6 +1,6 @@ Date: Sun, 1 Jan 2023 21:31:40 -0500 Subject: [PATCH 122/245] Use the release and debug .xconfig files for all of the example apps in addition to the Core Plot framework. Removed obsolete build settings from all projects. Removed build setting overrides for all settings defined in the .xconfig files in all projects. --- .../CPTTestApp-iPad.xcodeproj/project.pbxproj | 57 +++------- ..._Prefix.pch => CPTTestApp-iPad_Prefix.pch} | 0 .../project.pbxproj | 65 ++--------- .../CPTTestApp.xcodeproj/project.pbxproj | 56 +++------- .../Plot_Gallery.xcodeproj/project.pbxproj | 102 +++--------------- .../DatePlot.xcodeproj/project.pbxproj | 59 ++-------- .../DropPlot.xcodeproj/project.pbxproj | 47 ++------ .../project.pbxproj | 52 ++------- .../RangePlot.xcodeproj/project.pbxproj | 54 ++-------- framework/CorePlot.xcodeproj/project.pbxproj | 44 -------- framework/xcconfig/CorePlot.xcconfig | 10 +- framework/xcconfig/CorePlotDebug.xcconfig | 4 + framework/xcconfig/CorePlotRelease.xcconfig | 4 + 13 files changed, 104 insertions(+), 450 deletions(-) rename examples/CPTTestApp-iPad/{CPTTestApp_iPad_Prefix.pch => CPTTestApp-iPad_Prefix.pch} (100%) diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj index 1de6107dc..f374a8896 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj @@ -100,10 +100,13 @@ 28D7ACF60DDB3853001CB0EB /* CPTTestApp_iPadViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTTestApp_iPadViewController.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; 28D7ACF70DDB3853001CB0EB /* CPTTestApp_iPadViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTTestApp_iPadViewController.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 32CA4F630368D1EE00C91783 /* CPTTestApp_iPad_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTTestApp_iPad_Prefix.pch; sourceTree = ""; }; + 32CA4F630368D1EE00C91783 /* CPTTestApp-iPad_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CPTTestApp-iPad_Prefix.pch"; sourceTree = ""; }; BC65758E116549890008F594 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; C36E7CC519DE1C1F00EDEACB /* CorePlotWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotWarnings.xcconfig; path = ../../framework/xcconfig/CorePlotWarnings.xcconfig; sourceTree = ""; }; C37A40E120E0320500C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/CPTTestApp_iPad-Info.plist"; sourceTree = ""; }; + C39B4CEF29622F8700ABA414 /* CorePlot.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlot.xcconfig; path = ../../framework/xcconfig/CorePlot.xcconfig; sourceTree = ""; }; + C39B4CF029622F8700ABA414 /* CorePlotDebug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotDebug.xcconfig; path = ../../framework/xcconfig/CorePlotDebug.xcconfig; sourceTree = ""; }; + C39B4CF129622F8700ABA414 /* CorePlotRelease.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotRelease.xcconfig; path = ../../framework/xcconfig/CorePlotRelease.xcconfig; sourceTree = ""; }; C3CD283817DE9C59008EED1E /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; C3D0A20520E019C900BA2921 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/CPTTestApp_iPadViewController.xib; sourceTree = ""; }; C3D0A20720E019CD00BA2921 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainWindow.xib; sourceTree = ""; }; @@ -168,8 +171,11 @@ 29B97315FDCFA39411CA2CEA /* Other Sources */ = { isa = PBXGroup; children = ( - 32CA4F630368D1EE00C91783 /* CPTTestApp_iPad_Prefix.pch */, + 32CA4F630368D1EE00C91783 /* CPTTestApp-iPad_Prefix.pch */, 29B97316FDCFA39411CA2CEA /* main.m */, + C39B4CEF29622F8700ABA414 /* CorePlot.xcconfig */, + C39B4CF029622F8700ABA414 /* CorePlotDebug.xcconfig */, + C39B4CF129622F8700ABA414 /* CorePlotRelease.xcconfig */, C36E7CC519DE1C1F00EDEACB /* CorePlotWarnings.xcconfig */, ); name = "Other Sources"; @@ -395,58 +401,30 @@ /* Begin XCBuildConfiguration section */ 1D6058940D05DD3E006BFB54 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C36E7CC519DE1C1F00EDEACB /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4CF029622F8700ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_OBJC_ARC = YES; - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = CPTTestApp_iPad_Prefix.pch; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/CPTTestApp_iPad-Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = org.CorePlot.CPTTestAppiPad; PRODUCT_NAME = "CPTTestApp-iPad"; - SUPPORTS_MACCATALYST = YES; }; name = Debug; }; 1D6058950D05DD3E006BFB54 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C36E7CC519DE1C1F00EDEACB /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4CF129622F8700ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_OBJC_ARC = YES; - COPY_PHASE_STRIP = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = CPTTestApp_iPad_Prefix.pch; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/CPTTestApp_iPad-Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = org.CorePlot.CPTTestAppiPad; PRODUCT_NAME = "CPTTestApp-iPad"; - SUPPORTS_MACCATALYST = YES; - VALIDATE_PRODUCT = YES; }; name = Release; }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C36E7CC519DE1C1F00EDEACB /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4CF029622F8700ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - ONLY_ACTIVE_ARCH = YES; - OTHER_LDFLAGS = ( - "-ObjC", - "-all_load", - ); SDKROOT = iphoneos; SYMROOT = "$(SRCROOT)/../../build"; TARGETED_DEVICE_FAMILY = "2,6"; @@ -455,19 +433,8 @@ }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C36E7CC519DE1C1F00EDEACB /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4CF129622F8700ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = s; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; - OTHER_LDFLAGS = ( - "-ObjC", - "-all_load", - ); SDKROOT = iphoneos; SYMROOT = "$(SRCROOT)/../../build"; TARGETED_DEVICE_FAMILY = "2,6"; diff --git a/examples/CPTTestApp-iPad/CPTTestApp_iPad_Prefix.pch b/examples/CPTTestApp-iPad/CPTTestApp-iPad_Prefix.pch similarity index 100% rename from examples/CPTTestApp-iPad/CPTTestApp_iPad_Prefix.pch rename to examples/CPTTestApp-iPad/CPTTestApp-iPad_Prefix.pch diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj index 1981798c0..3ab242bdf 100644 --- a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj @@ -110,6 +110,9 @@ C359603619CE34FB005CDFB9 /* ScatterPlotController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScatterPlotController.swift; sourceTree = ""; }; C359603B19CE352A005CDFB9 /* CPTTestApp-iPhone-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = "CPTTestApp-iPhone-Bridging-Header.h"; sourceTree = ""; }; C37A40F020E0322D00C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = Base.lproj/Info.plist; sourceTree = ""; }; + C39B4D392962343B00ABA414 /* CorePlotDebug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotDebug.xcconfig; path = ../../framework/xcconfig/CorePlotDebug.xcconfig; sourceTree = ""; }; + C39B4D462962343B00ABA414 /* CorePlotRelease.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotRelease.xcconfig; path = ../../framework/xcconfig/CorePlotRelease.xcconfig; sourceTree = ""; }; + C39B4D472962343B00ABA414 /* CorePlot.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlot.xcconfig; path = ../../framework/xcconfig/CorePlot.xcconfig; sourceTree = ""; }; C3B9F9D317503CDD001CCC50 /* BlueTexture.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = BlueTexture.png; sourceTree = ""; }; C3C3CBDE19EA125D00A0296A /* CorePlotWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotWarnings.xcconfig; path = ../../framework/xcconfig/CorePlotWarnings.xcconfig; sourceTree = ""; }; C3CD283D17DE9C95008EED1E /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; @@ -177,6 +180,9 @@ isa = PBXGroup; children = ( C359603B19CE352A005CDFB9 /* CPTTestApp-iPhone-Bridging-Header.h */, + C39B4D472962343B00ABA414 /* CorePlot.xcconfig */, + C39B4D392962343B00ABA414 /* CorePlotDebug.xcconfig */, + C39B4D462962343B00ABA414 /* CorePlotRelease.xcconfig */, C3C3CBDE19EA125D00A0296A /* CorePlotWarnings.xcconfig */, ); name = "Other Sources"; @@ -429,75 +435,34 @@ /* Begin XCBuildConfiguration section */ 1D6058940D05DD3E006BFB54 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C3CBDE19EA125D00A0296A /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4D392962343B00ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_OBJC_ARC = YES; - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = CPTTestApp_iPhone_Prefix.pch; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ""; - OTHER_LDFLAGS = ( - "-all_load", - "-ObjC", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.CorePlot.CPTTestAppiPhone; PRODUCT_NAME = "CPTTestApp-iPhone"; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; - SUPPORTS_MACCATALYST = YES; SWIFT_OBJC_BRIDGING_HEADER = "CPTTestApp-iPhone-Bridging-Header.h"; - SWIFT_VERSION = 5.0; }; name = Debug; }; 1D6058950D05DD3E006BFB54 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C3CBDE19EA125D00A0296A /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4D462962343B00ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_OBJC_ARC = YES; - COPY_PHASE_STRIP = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = CPTTestApp_iPhone_Prefix.pch; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ""; - OTHER_LDFLAGS = ( - "-all_load", - "-ObjC", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.CorePlot.CPTTestAppiPhone; PRODUCT_NAME = "CPTTestApp-iPhone"; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; - SUPPORTS_MACCATALYST = YES; SWIFT_OBJC_BRIDGING_HEADER = "CPTTestApp-iPhone-Bridging-Header.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; }; name = Release; }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C3CBDE19EA125D00A0296A /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4D392962343B00ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/Frameworks"; - ONLY_ACTIVE_ARCH = YES; - OTHER_LDFLAGS = "-ObjC"; - PROVISIONING_PROFILE = ""; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; SDKROOT = iphoneos; SYMROOT = "$(SRCROOT)/../../build"; TARGETED_DEVICE_FAMILY = "1,2,6"; @@ -506,20 +471,10 @@ }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C3CBDE19EA125D00A0296A /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4D462962343B00ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = s; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/Frameworks"; - ONLY_ACTIVE_ARCH = YES; - OTHER_LDFLAGS = "-ObjC"; - PROVISIONING_PROFILE = ""; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; SDKROOT = iphoneos; SYMROOT = "$(SRCROOT)/../../build"; TARGETED_DEVICE_FAMILY = "1,2,6"; diff --git a/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj b/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj index 7ee872906..9577e407b 100644 --- a/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj @@ -115,6 +115,9 @@ C38017DF124132610052B00D /* SelectionDemoController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SelectionDemoController.h; path = Source/SelectionDemoController.h; sourceTree = ""; }; C38017E0124132610052B00D /* SelectionDemoController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SelectionDemoController.m; path = Source/SelectionDemoController.m; sourceTree = ""; }; C3880C3919DCD6A000ED0618 /* CorePlotWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotWarnings.xcconfig; path = ../../framework/xcconfig/CorePlotWarnings.xcconfig; sourceTree = ""; }; + C39B4BEE2962136300ABA414 /* CorePlotDebug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotDebug.xcconfig; path = ../../framework/xcconfig/CorePlotDebug.xcconfig; sourceTree = ""; }; + C39B4BFB2962136300ABA414 /* CorePlotRelease.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotRelease.xcconfig; path = ../../framework/xcconfig/CorePlotRelease.xcconfig; sourceTree = ""; }; + C39B4BFC2962136300ABA414 /* CorePlot.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlot.xcconfig; path = ../../framework/xcconfig/CorePlot.xcconfig; sourceTree = ""; }; C3D0A1A320E017E400BA2921 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/AxisDemo.xib; sourceTree = ""; }; C3D0A1A420E017E400BA2921 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/CPTTestApp.xib; sourceTree = ""; }; C3D0A1A520E017E400BA2921 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/PlotSymbolDemo.xib; sourceTree = ""; }; @@ -215,6 +218,9 @@ children = ( 32CA4F630368D1EE00C91783 /* CPTTestApp_Prefix.pch */, 29B97316FDCFA39411CA2CEA /* main.m */, + C39B4BFC2962136300ABA414 /* CorePlot.xcconfig */, + C39B4BEE2962136300ABA414 /* CorePlotDebug.xcconfig */, + C39B4BFB2962136300ABA414 /* CorePlotRelease.xcconfig */, C3880C3919DCD6A000ED0618 /* CorePlotWarnings.xcconfig */, ); name = "Other Sources"; @@ -443,83 +449,45 @@ /* Begin XCBuildConfiguration section */ C01FCF4B08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3880C3919DCD6A000ED0618 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4BEE2962136300ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_MODEL_TUNING = G5; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = CPTTestApp_Prefix.pch; - GCC_PREPROCESSOR_DEFINITIONS = ""; - GCC_TREAT_WARNINGS_AS_ERRORS = YES; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks @executable_path/../Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = CPTTestApp; }; name = Debug; }; C01FCF4C08A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3880C3919DCD6A000ED0618 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4BFB2962136300ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_MODEL_TUNING = G5; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = CPTTestApp_Prefix.pch; - GCC_PREPROCESSOR_DEFINITIONS = ""; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks @executable_path/../Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = CPTTestApp; }; name = Release; }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3880C3919DCD6A000ED0618 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4BEE2962136300ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - DEAD_CODE_STRIPPING = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.13; - ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; - SYMROOT = "$(PROJECT_DIR)/../../build"; + SYMROOT = "$(SRCROOT)/../../build"; }; name = Debug; }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3880C3919DCD6A000ED0618 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4BFB2962136300ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - DEAD_CODE_STRIPPING = YES; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = s; - GCC_PREPROCESSOR_DEFINITIONS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.13; SDKROOT = macosx; - SYMROOT = "$(PROJECT_DIR)/../../build"; + SYMROOT = "$(SRCROOT)/../../build"; }; name = Release; }; diff --git a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj index b66dbd929..332d1fdb6 100644 --- a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj +++ b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj @@ -319,6 +319,9 @@ C3D2FE6219FF1D03002CD4D6 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = img/Images.xcassets; sourceTree = ""; }; C3D70BA4175EB29E00F27173 /* ImageDemo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ImageDemo.h; path = src/plots/ImageDemo.h; sourceTree = ""; }; C3D70BA5175EB29E00F27173 /* ImageDemo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = ImageDemo.m; path = src/plots/ImageDemo.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C3E4280729626F81007C2758 /* CorePlotDebug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotDebug.xcconfig; path = ../../framework/xcconfig/CorePlotDebug.xcconfig; sourceTree = ""; }; + C3E4281229626F81007C2758 /* CorePlot.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlot.xcconfig; path = ../../framework/xcconfig/CorePlot.xcconfig; sourceTree = ""; }; + C3E4281329626F81007C2758 /* CorePlotRelease.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotRelease.xcconfig; path = ../../framework/xcconfig/CorePlotRelease.xcconfig; sourceTree = ""; }; C3EF42FC19FC75810060791A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = "Plot Gallery-Mac/Images.xcassets"; sourceTree = ""; }; C3F34F1312AB2598008FBDC3 /* DonutChart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DonutChart.h; path = src/plots/DonutChart.h; sourceTree = ""; }; C3F34F1412AB2598008FBDC3 /* DonutChart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = DonutChart.m; path = src/plots/DonutChart.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; @@ -458,6 +461,9 @@ 4F22FFAC12342DB1006BF615 /* PlotGallery.m */, C3457A4B17AD7C5D000880F3 /* PiNumberFormatter.h */, C3457A4C17AD7C5D000880F3 /* PiNumberFormatter.m */, + C3E4281229626F81007C2758 /* CorePlot.xcconfig */, + C3E4280729626F81007C2758 /* CorePlotDebug.xcconfig */, + C3E4281329626F81007C2758 /* CorePlotRelease.xcconfig */, C3C0DF2719D86B5E00631CAD /* CorePlotWarnings.xcconfig */, ); name = Shared; @@ -998,100 +1004,51 @@ /* Begin XCBuildConfiguration section */ C01FCF4B08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C0DF2719D86B5E00631CAD /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C3E4280729626F81007C2758 /* CorePlotDebug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_MODEL_TUNING = G5; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Plot_Gallery_Mac-Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.13; - OTHER_LDFLAGS = ( - "-ObjC", - "-all_load", - ); - PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.Plot-Gallery-Mac"; PRODUCT_NAME = "Plot Gallery"; - RUN_CLANG_STATIC_ANALYZER = YES; SDKROOT = macosx; }; name = Debug; }; C01FCF4C08A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C0DF2719D86B5E00631CAD /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C3E4281329626F81007C2758 /* CorePlotRelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_MODEL_TUNING = G5; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Plot_Gallery_Mac-Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.13; - OTHER_LDFLAGS = ( - "-ObjC", - "-all_load", - ); - PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.Plot-Gallery-Mac"; PRODUCT_NAME = "Plot Gallery"; - RUN_CLANG_STATIC_ANALYZER = YES; SDKROOT = macosx; }; name = Release; }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C0DF2719D86B5E00631CAD /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C3E4280729626F81007C2758 /* CorePlotDebug.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - DEAD_CODE_STRIPPING = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = Plot_Gallery_Prefix.pch; - ONLY_ACTIVE_ARCH = YES; - OTHER_LDFLAGS = ( - "-ObjC", - "-all_load", - ); SYMROOT = "$(PROJECT_DIR)/../../build"; }; name = Debug; }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C0DF2719D86B5E00631CAD /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C3E4281329626F81007C2758 /* CorePlotRelease.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - DEAD_CODE_STRIPPING = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = s; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = Plot_Gallery_Prefix.pch; - OTHER_LDFLAGS = ( - "-ObjC", - "-all_load", - ); SYMROOT = "$(PROJECT_DIR)/../../build"; }; name = Release; }; C30D8B0A1BCAF99D0003BB70 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C0DF2719D86B5E00631CAD /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C3E4280729626F81007C2758 /* CorePlotDebug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; @@ -1100,7 +1057,6 @@ COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", @@ -1108,7 +1064,6 @@ INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Plot_Gallery_tvOS-Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.Plot-Gallery-tvOS"; PRODUCT_NAME = "Plot Gallery-tvOS"; SDKROOT = appletvos; TARGETED_DEVICE_FAMILY = 3; @@ -1118,7 +1073,7 @@ }; C30D8B0B1BCAF99D0003BB70 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C0DF2719D86B5E00631CAD /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C3E4281329626F81007C2758 /* CorePlotRelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; @@ -1127,11 +1082,9 @@ COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; - GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Plot_Gallery_tvOS-Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.Plot-Gallery-tvOS"; PRODUCT_NAME = "Plot Gallery-tvOS"; SDKROOT = appletvos; TARGETED_DEVICE_FAMILY = 3; @@ -1142,54 +1095,27 @@ }; C34CB5431BC9A76A009270A0 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C0DF2719D86B5E00631CAD /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C3E4280729626F81007C2758 /* CorePlotDebug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Plot_Gallery_iOS-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.Plot-Gallery-iOS"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; - SUPPORTS_MACCATALYST = YES; TARGETED_DEVICE_FAMILY = "1,2,6"; }; name = Debug; }; C34CB5441BC9A76A009270A0 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C0DF2719D86B5E00631CAD /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C3E4281329626F81007C2758 /* CorePlotRelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = YES; - COPY_PHASE_STRIP = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Plot_Gallery_iOS-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.Plot-Gallery-iOS"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; - SUPPORTS_MACCATALYST = YES; TARGETED_DEVICE_FAMILY = "1,2,6"; - VALIDATE_PRODUCT = YES; }; name = Release; }; diff --git a/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj b/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj index 179790732..37b813868 100644 --- a/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj +++ b/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj @@ -75,6 +75,9 @@ C33E19A7198330CA00182AF2 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = Source/AppDelegate.swift; sourceTree = ""; }; C37A409820E030B500C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = Base.lproj/Info.plist; sourceTree = ""; }; C385066522A9CC740086BAD5 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + C39B4BED296212A800ABA414 /* CorePlot.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlot.xcconfig; path = ../../framework/xcconfig/CorePlot.xcconfig; sourceTree = ""; }; + C39B4BFD2962169F00ABA414 /* CorePlotDebug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotDebug.xcconfig; path = ../../framework/xcconfig/CorePlotDebug.xcconfig; sourceTree = ""; }; + C39B4BFE2962169F00ABA414 /* CorePlotRelease.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotRelease.xcconfig; path = ../../framework/xcconfig/CorePlotRelease.xcconfig; sourceTree = ""; }; C3A1443F197DE35F0048F1FF /* DateController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DateController.swift; path = Source/DateController.swift; sourceTree = ""; }; C3C3CBBF19EA07F600A0296A /* CorePlotWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotWarnings.xcconfig; path = ../../framework/xcconfig/CorePlotWarnings.xcconfig; sourceTree = ""; }; C3D0A1B620E0184100BA2921 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/DatePlot.xib; sourceTree = ""; }; @@ -187,6 +190,9 @@ C33E19A219832EEA00182AF2 /* Other Sources */ = { isa = PBXGroup; children = ( + C39B4BED296212A800ABA414 /* CorePlot.xcconfig */, + C39B4BFD2962169F00ABA414 /* CorePlotDebug.xcconfig */, + C39B4BFE2962169F00ABA414 /* CorePlotRelease.xcconfig */, C3C3CBBF19EA07F600A0296A /* CorePlotWarnings.xcconfig */, ); name = "Other Sources"; @@ -364,78 +370,40 @@ /* Begin XCBuildConfiguration section */ C01FCF4B08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C3CBBF19EA07F600A0296A /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4BFD2962169F00ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - DEAD_CODE_STRIPPING = YES; - GCC_DYNAMIC_NO_PIC = NO; - GCC_MODEL_TUNING = G5; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = DatePlot_Prefix.pch; - GCC_PREPROCESSOR_DEFINITIONS = ""; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@loader_path/../Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = DatePlot; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; }; name = Debug; }; C01FCF4C08A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C3CBBF19EA07F600A0296A /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4BFE2962169F00ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_MODEL_TUNING = G5; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = DatePlot_Prefix.pch; - GCC_PREPROCESSOR_DEFINITIONS = ""; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@loader_path/../Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = DatePlot; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.0; }; name = Release; }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C3CBBF19EA07F600A0296A /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4BFD2962169F00ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - DEAD_CODE_STRIPPING = YES; - ENABLE_TESTABILITY = YES; - FRAMEWORK_SEARCH_PATHS = ""; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.13; - ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; SYMROOT = "$(SRCROOT)/../../build"; }; @@ -443,15 +411,8 @@ }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C3CBBF19EA07F600A0296A /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4BFE2962169F00ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - DEAD_CODE_STRIPPING = YES; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = s; - GCC_PREPROCESSOR_DEFINITIONS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.13; SDKROOT = macosx; SYMROOT = "$(SRCROOT)/../../build"; }; diff --git a/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj b/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj index 329b66781..23a905ed1 100644 --- a/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj +++ b/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj @@ -104,6 +104,9 @@ C3564D1722A2D115000A54C9 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = ""; }; C3564D1822A2D115000A54C9 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; C37A40A820E0314800C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = Base.lproj/Info.plist; sourceTree = ""; }; + C39B4CE629622B5D00ABA414 /* CorePlotDebug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotDebug.xcconfig; path = ../../framework/xcconfig/CorePlotDebug.xcconfig; sourceTree = ""; }; + C39B4CE729622B5D00ABA414 /* CorePlot.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlot.xcconfig; path = ../../framework/xcconfig/CorePlot.xcconfig; sourceTree = ""; }; + C39B4CE829622B5D00ABA414 /* CorePlotRelease.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotRelease.xcconfig; path = ../../framework/xcconfig/CorePlotRelease.xcconfig; sourceTree = ""; }; C3D3937719FD705000148319 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = DropPlot/Images.xcassets; sourceTree = ""; }; C3D6210E19DF72E000652CE7 /* CorePlotWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotWarnings.xcconfig; path = ../../framework/xcconfig/CorePlotWarnings.xcconfig; sourceTree = ""; }; C3DA082A20E00C3C00F73704 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/CPTPlotDocument.xib; sourceTree = ""; }; @@ -183,6 +186,9 @@ children = ( 32DBCF750370BD2300C91783 /* DropPlot_Prefix.pch */, 2A37F4B0FDCFA73011CA2CEA /* main.m */, + C39B4CE729622B5D00ABA414 /* CorePlot.xcconfig */, + C39B4CE629622B5D00ABA414 /* CorePlotDebug.xcconfig */, + C39B4CE829622B5D00ABA414 /* CorePlotRelease.xcconfig */, C3D6210E19DF72E000652CE7 /* CorePlotWarnings.xcconfig */, ); name = "Other Sources"; @@ -407,63 +413,35 @@ /* Begin XCBuildConfiguration section */ C05733C808A9546B00998B17 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3D6210E19DF72E000652CE7 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4CE629622B5D00ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - DEAD_CODE_STRIPPING = YES; - GCC_DYNAMIC_NO_PIC = NO; - GCC_MODEL_TUNING = G5; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = DropPlot_Prefix.pch; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = DropPlot; }; name = Debug; }; C05733C908A9546B00998B17 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3D6210E19DF72E000652CE7 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4CE829622B5D00ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_MODEL_TUNING = G5; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = DropPlot_Prefix.pch; - HEADER_SEARCH_PATHS = ""; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = DropPlot; }; name = Release; }; C05733CC08A9546B00998B17 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3D6210E19DF72E000652CE7 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4CE629622B5D00ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; DEAD_CODE_STRIPPING = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - MACOSX_DEPLOYMENT_TARGET = 10.13; - ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; SYMROOT = "$(SRCROOT)/../../build"; }; @@ -471,14 +449,9 @@ }; C05733CD08A9546B00998B17 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3D6210E19DF72E000652CE7 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4CE829622B5D00ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; DEAD_CODE_STRIPPING = YES; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = s; - MACOSX_DEPLOYMENT_TARGET = 10.13; SDKROOT = macosx; SYMROOT = "$(SRCROOT)/../../build"; }; diff --git a/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj b/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj index 9bb7fadbe..a16636dfa 100644 --- a/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj +++ b/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj @@ -101,6 +101,9 @@ C3564CFD22A2D107000A54C9 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; C37A40B620E0316900C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = Base.lproj/Info.plist; sourceTree = ""; }; C37FFB5D19E1ECF0003F34C5 /* CorePlotWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotWarnings.xcconfig; path = ../../framework/xcconfig/CorePlotWarnings.xcconfig; sourceTree = ""; }; + C39B4CE929622DED00ABA414 /* CorePlotRelease.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotRelease.xcconfig; path = ../../framework/xcconfig/CorePlotRelease.xcconfig; sourceTree = ""; }; + C39B4CEA29622DEE00ABA414 /* CorePlot.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlot.xcconfig; path = ../../framework/xcconfig/CorePlot.xcconfig; sourceTree = ""; }; + C39B4CEB29622DEE00ABA414 /* CorePlotDebug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotDebug.xcconfig; path = ../../framework/xcconfig/CorePlotDebug.xcconfig; sourceTree = ""; }; C3D0A1DA20E0195F00BA2921 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/minorTickFormatter.xib; sourceTree = ""; }; C3D3937B19FD732200148319 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = minorTickFormatter/Images.xcassets; sourceTree = ""; }; /* End PBXFileReference section */ @@ -191,6 +194,9 @@ children = ( 32CA4F630368D1EE00C91783 /* minorTickFormatter_Prefix.pch */, 29B97316FDCFA39411CA2CEA /* main.m */, + C39B4CEA29622DEE00ABA414 /* CorePlot.xcconfig */, + C39B4CEB29622DEE00ABA414 /* CorePlotDebug.xcconfig */, + C39B4CE929622DED00ABA414 /* CorePlotRelease.xcconfig */, C37FFB5D19E1ECF0003F34C5 /* CorePlotWarnings.xcconfig */, ); name = "Other Sources"; @@ -381,65 +387,34 @@ /* Begin XCBuildConfiguration section */ C01FCF4B08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C37FFB5D19E1ECF0003F34C5 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4CEB29622DEE00ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - DEAD_CODE_STRIPPING = YES; - GCC_DYNAMIC_NO_PIC = NO; - GCC_MODEL_TUNING = G5; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = minorTickFormatter_Prefix.pch; - GCC_PREPROCESSOR_DEFINITIONS = ""; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = minorTickFormatter; }; name = Debug; }; C01FCF4C08A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C37FFB5D19E1ECF0003F34C5 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4CE929622DED00ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_MODEL_TUNING = G5; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = minorTickFormatter_Prefix.pch; - GCC_PREPROCESSOR_DEFINITIONS = ""; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = minorTickFormatter; }; name = Release; }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C37FFB5D19E1ECF0003F34C5 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4CEB29622DEE00ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - DEAD_CODE_STRIPPING = YES; - ENABLE_TESTABILITY = YES; - FRAMEWORK_SEARCH_PATHS = ""; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.13; - ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; SYMROOT = "$(SRCROOT)/../../build"; }; @@ -447,15 +422,8 @@ }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C37FFB5D19E1ECF0003F34C5 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4CE929622DED00ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - DEAD_CODE_STRIPPING = YES; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = s; - GCC_PREPROCESSOR_DEFINITIONS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.13; SDKROOT = macosx; SYMROOT = "$(SRCROOT)/../../build"; }; diff --git a/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj b/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj index 064c71acb..360c8e8d4 100644 --- a/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj +++ b/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj @@ -101,6 +101,9 @@ C3564CBC22A2D0E1000A54C9 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; C37A40C420E0318900C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = Base.lproj/Info.plist; sourceTree = ""; }; C37FFB6019E1EEB6003F34C5 /* CorePlotWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotWarnings.xcconfig; path = ../../framework/xcconfig/CorePlotWarnings.xcconfig; sourceTree = ""; }; + C39B4CEC29622ECC00ABA414 /* CorePlot.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlot.xcconfig; path = ../../framework/xcconfig/CorePlot.xcconfig; sourceTree = ""; }; + C39B4CED29622ECC00ABA414 /* CorePlotRelease.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotRelease.xcconfig; path = ../../framework/xcconfig/CorePlotRelease.xcconfig; sourceTree = ""; }; + C39B4CEE29622ECC00ABA414 /* CorePlotDebug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotDebug.xcconfig; path = ../../framework/xcconfig/CorePlotDebug.xcconfig; sourceTree = ""; }; C3D0A18A20E0179F00BA2921 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/RangePlot.xib; sourceTree = ""; }; C3D3938119FD786F00148319 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = RangePlot/Images.xcassets; sourceTree = ""; }; /* End PBXFileReference section */ @@ -191,6 +194,9 @@ children = ( 32CA4F630368D1EE00C91783 /* RangePlot_Prefix.pch */, 29B97316FDCFA39411CA2CEA /* main.m */, + C39B4CEC29622ECC00ABA414 /* CorePlot.xcconfig */, + C39B4CEE29622ECC00ABA414 /* CorePlotDebug.xcconfig */, + C39B4CED29622ECC00ABA414 /* CorePlotRelease.xcconfig */, C37FFB6019E1EEB6003F34C5 /* CorePlotWarnings.xcconfig */, ); name = "Other Sources"; @@ -245,7 +251,7 @@ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1420; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "RangePlot" */; compatibilityVersion = "Xcode 6.3"; @@ -381,65 +387,34 @@ /* Begin XCBuildConfiguration section */ C01FCF4B08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C37FFB6019E1EEB6003F34C5 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4CEE29622ECC00ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - DEAD_CODE_STRIPPING = YES; - GCC_DYNAMIC_NO_PIC = NO; - GCC_MODEL_TUNING = G5; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = RangePlot_Prefix.pch; - GCC_PREPROCESSOR_DEFINITIONS = ""; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = RangePlot; }; name = Debug; }; C01FCF4C08A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C37FFB6019E1EEB6003F34C5 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4CED29622ECC00ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_MODEL_TUNING = G5; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = RangePlot_Prefix.pch; - GCC_PREPROCESSOR_DEFINITIONS = ""; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = RangePlot; }; name = Release; }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C37FFB6019E1EEB6003F34C5 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4CEE29622ECC00ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - DEAD_CODE_STRIPPING = YES; - ENABLE_TESTABILITY = YES; - FRAMEWORK_SEARCH_PATHS = ""; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.13; - ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; SYMROOT = "$(SRCROOT)/../../build"; }; @@ -447,15 +422,8 @@ }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C37FFB6019E1EEB6003F34C5 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39B4CED29622ECC00ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - DEAD_CODE_STRIPPING = YES; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = s; - GCC_PREPROCESSOR_DEFINITIONS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.13; SDKROOT = macosx; SYMROOT = "$(SRCROOT)/../../build"; }; diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index e2725c5e7..82ea8ace8 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -3014,7 +3014,6 @@ FRAMEWORK_VERSION = A; INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-Info.plist"; INSTALL_PATH = "@rpath"; - PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; SDKROOT = macosx; USER_HEADER_SEARCH_PATHS = ( @@ -3036,7 +3035,6 @@ FRAMEWORK_VERSION = A; INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-Info.plist"; INSTALL_PATH = "@rpath"; - PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; SDKROOT = macosx; USER_HEADER_SEARCH_PATHS = ( @@ -3054,9 +3052,6 @@ buildSettings = { CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CURRENT_PROJECT_VERSION = 2.3; - ENABLE_TESTABILITY = YES; - GCC_NO_COMMON_BLOCKS = YES; - ONLY_ACTIVE_ARCH = YES; }; name = Debug; }; @@ -3066,17 +3061,13 @@ buildSettings = { CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CURRENT_PROJECT_VERSION = 2.3; - GCC_NO_COMMON_BLOCKS = YES; }; name = Release; }; 9021E49F0FC5C9DD00443472 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - COMBINE_HIDPI_IMAGES = YES; DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = Documentation; }; name = Debug; @@ -3084,10 +3075,8 @@ 9021E4A00FC5C9DD00443472 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = Documentation; ZERO_LINK = NO; }; @@ -3114,10 +3103,7 @@ C37EA5C71BC83E900091C8F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - COMBINE_HIDPI_IMAGES = YES; DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; SUPPORTED_PLATFORMS = "appletvsimulator appletvos"; @@ -3127,10 +3113,8 @@ C37EA5C81BC83E900091C8F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; SUPPORTED_PLATFORMS = "appletvsimulator appletvos"; @@ -3154,7 +3138,6 @@ "@loader_path/Frameworks", ); MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; SDKROOT = appletvos; USER_HEADER_SEARCH_PATHS = ( @@ -3180,7 +3163,6 @@ "@loader_path/Frameworks", ); MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; SDKROOT = appletvos; USER_HEADER_SEARCH_PATHS = ( @@ -3201,7 +3183,6 @@ "@loader_path/Frameworks", ); MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; USER_HEADER_SEARCH_PATHS = ( @@ -3222,7 +3203,6 @@ "@loader_path/Frameworks", ); MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; USER_HEADER_SEARCH_PATHS = ( @@ -3248,7 +3228,6 @@ "@loader_path/Frameworks", ); MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -3275,7 +3254,6 @@ "@loader_path/Frameworks", ); MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CorePlot; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -3297,7 +3275,6 @@ "@loader_path/Frameworks", ); MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -3319,7 +3296,6 @@ "@loader_path/Frameworks", ); MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -3333,10 +3309,7 @@ C38A09941A4618B600D45436 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - COMBINE_HIDPI_IMAGES = YES; DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = "Documentation-Mac copy"; }; name = Debug; @@ -3344,10 +3317,8 @@ C38A09951A4618B600D45436 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = "Documentation-Mac copy"; ZERO_LINK = NO; }; @@ -3356,10 +3327,7 @@ C38A09991A46193F00D45436 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - COMBINE_HIDPI_IMAGES = YES; DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = "Documentation-iOS copy"; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; @@ -3369,10 +3337,8 @@ C38A099A1A46193F00D45436 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = "Documentation-iOS copy"; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; @@ -3383,10 +3349,7 @@ C3A546821BC1A817005C1BBC /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - COMBINE_HIDPI_IMAGES = YES; DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; @@ -3396,10 +3359,8 @@ C3A546831BC1A817005C1BBC /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; @@ -3410,10 +3371,7 @@ C3AC175E244B594800E7380C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - COMBINE_HIDPI_IMAGES = YES; DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; @@ -3423,10 +3381,8 @@ C3AC175F244B594800E7380C /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; diff --git a/framework/xcconfig/CorePlot.xcconfig b/framework/xcconfig/CorePlot.xcconfig index 8fd7bbe68..02685cc2e 100644 --- a/framework/xcconfig/CorePlot.xcconfig +++ b/framework/xcconfig/CorePlot.xcconfig @@ -6,7 +6,10 @@ IPHONEOS_DEPLOYMENT_TARGET = 12.0 MACOSX_DEPLOYMENT_TARGET = 10.13 TVOS_DEPLOYMENT_TARGET = 12.0 +SWIFT_VERSION = 5.0 + SYMROOT = $(PROJECT_DIR)/../build +PRODUCT_BUNDLE_IDENTIFIER = com.CorePlot.$(PRODUCT_NAME:rfc1034identifier) ALWAYS_SEARCH_USER_PATHS = NO BUILD_LIBRARY_FOR_DISTRIBUTION = YES @@ -19,8 +22,10 @@ DEAD_CODE_STRIPPING = YES DEBUG_INFORMATION_FORMAT = dwarf-with-dsym GCC_C_LANGUAGE_STANDARD = c99 GCC_DYNAMIC_NO_PIC = NO +GCC_INCREASE_PRECOMPILED_HEADER_SHARING = YES +GCC_NO_COMMON_BLOCKS = YES GCC_PRECOMPILE_PREFIX_HEADER = YES -GCC_PREFIX_HEADER = CorePlot_Prefix.pch +GCC_PREFIX_HEADER = $(PROJECT_NAME)_Prefix.pch LINKER_DISPLAYS_MANGLED_NAMES = NO OTHER_LDFLAGS = -ObjC RUN_CLANG_STATIC_ANALYZER = YES @@ -29,5 +34,4 @@ SKIP_INSTALL = YES STRIP_STYLE = debugging STRIP_SWIFT_SYMBOLS = YES SUPPORTS_MACCATALYST = YES -SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule" -USE_HEADERMAP = NO +USE_HEADERMAP = YES diff --git a/framework/xcconfig/CorePlotDebug.xcconfig b/framework/xcconfig/CorePlotDebug.xcconfig index b4bcbc7e7..bf5535be1 100644 --- a/framework/xcconfig/CorePlotDebug.xcconfig +++ b/framework/xcconfig/CorePlotDebug.xcconfig @@ -3,8 +3,12 @@ ONLY_ACTIVE_ARCH = YES VALIDATE_PRODUCT = NO DEPLOYMENT_POSTPROCESSING = NO +ENABLE_TESTABILITY = YES STRIP_INSTALLED_PRODUCT = NO GCC_OPTIMIZATION_LEVEL = 0 GCC_PREPROCESSOR_DEFINITIONS = DEBUG=1 $(inherited) ENABLE_NS_ASSERTIONS = YES COPY_PHASE_STRIP = NO + +SWIFT_COMPILATION_MODE = singlefile +SWIFT_OPTIMIZATION_LEVEL = -Onone diff --git a/framework/xcconfig/CorePlotRelease.xcconfig b/framework/xcconfig/CorePlotRelease.xcconfig index 8d9600513..fbe55a059 100644 --- a/framework/xcconfig/CorePlotRelease.xcconfig +++ b/framework/xcconfig/CorePlotRelease.xcconfig @@ -3,7 +3,11 @@ ONLY_ACTIVE_ARCH = NO VALIDATE_PRODUCT = YES DEPLOYMENT_POSTPROCESSING = YES +ENABLE_TESTABILITY = NO STRIP_INSTALLED_PRODUCT = YES GCC_OPTIMIZATION_LEVEL = s ENABLE_NS_ASSERTIONS = NO COPY_PHASE_STRIP = YES + +SWIFT_COMPILATION_MODE = wholemodule +SWIFT_OPTIMIZATION_LEVEL = -O From abcb8967be06f7e044661460a0a256f2b7fb7676 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 1 Jan 2023 21:53:35 -0500 Subject: [PATCH 123/245] Removed the Universal Library target. It's no longer needed since the static library has been removed. --- framework/CorePlot.xcodeproj/project.pbxproj | 56 -------------------- 1 file changed, 56 deletions(-) diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 82ea8ace8..432a8c8f5 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -51,17 +51,6 @@ name = "Documentation-iOS"; productName = Documentation; }; - C38A09961A46193F00D45436 /* Universal Library */ = { - isa = PBXAggregateTarget; - buildConfigurationList = C38A09981A46193F00D45436 /* Build configuration list for PBXAggregateTarget "Universal Library" */; - buildPhases = ( - C38A09971A46193F00D45436 /* ShellScript */, - ); - dependencies = ( - ); - name = "Universal Library"; - productName = Documentation; - }; C3A5467F1BC1A817005C1BBC /* Universal iOS Framework */ = { isa = PBXAggregateTarget; buildConfigurationList = C3A546811BC1A817005C1BBC /* Build configuration list for PBXAggregateTarget "Universal iOS Framework" */; @@ -2295,7 +2284,6 @@ C36BE54226FF6857004287F2 /* Update SPM Files */, 9021E49E0FC5C9DC00443472 /* Documentation-Mac */, C38A09911A4618B600D45436 /* Documentation-iOS */, - C38A09961A46193F00D45436 /* Universal Library */, C3A5467F1BC1A817005C1BBC /* Universal iOS Framework */, C37EA5C41BC83E900091C8F7 /* Universal tvOS Framework */, C3AC175B244B594800E7380C /* Universal XCFramework */, @@ -2410,19 +2398,6 @@ shellPath = /bin/sh; shellScript = "# Build the doxygen documentation for the project and load the docset into Xcode.\n\n# Use the following to adjust the value of the $DOXYGEN_PATH User-Defined Setting:\n# Binary install location: /Applications/Doxygen.app/Contents/Resources/doxygen\n# Source build install location: /usr/local/bin/doxygen\n\n# Graphical class diagrams require Graphviz.\n# Graphviz.app is available free online\n# http://www.graphviz.org/Download_macos.php\n\n# If the config file doesn't exist, run 'doxygen -g \"${SOURCE_ROOT}/../documentation/doxygen/doxygen touch.config\"' to\n# a get default file.\n\nDOXYGEN_FOLDER=\"${SOURCE_ROOT}/../documentation/doxygen\"\n\nif ! [ -f \"${DOXYGEN_FOLDER}/doxygen.config\" ]\nthen\necho doxygen config file does not exist\n${DOXYGEN_PATH} -g \"${DOXYGEN_FOLDER}/doxygen.config\"\nfi\n\n# Run doxygen on the updated config file.\n# Note: doxygen creates a Makefile that does most of the heavy lifting.\n${DOXYGEN_PATH} \"${SOURCE_ROOT}/../documentation/doxygen/doxygen touch.config\"\n\n# make a copy of the html docs\nDOCS_FOLDER=\"${SOURCE_ROOT}/../documentation/html/iOS\"\nmkdir -p \"${DOCS_FOLDER}\"\ncp -R \"${SOURCE_ROOT}/CorePlotTouchDocs.docset/html/\" \"${DOCS_FOLDER}\"\nrm -Rf \"${SOURCE_ROOT}/CorePlotTouchDocs.docset\"\nrm -f \"${DOCS_FOLDER}/Info.plist\"\nrm -f \"${DOCS_FOLDER}/Makefile\"\nrm -f \"${DOCS_FOLDER}/Nodes.xml\"\nrm -f \"${DOCS_FOLDER}/Tokens.xml\"\n\n# Fix capitalization for GitHub pages\ncd \"${DOCS_FOLDER}\"\nls _*.* | while read a; do n=$(echo $a | sed -e 's/^_//'); mv \"$a\" \"$n\"; done\nls *.html | xargs sed -i '' 's/\\\"_/\\\"/g'\nls *.js | xargs sed -i '' 's/\\\"_/\\\"/g'\nls *.map | xargs sed -i '' 's/\\\"$_/\\\"$/g'\n\nexit 0\n"; }; - C38A09971A46193F00D45436 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\nUFW_TARGET=\"CorePlot-CocoaTouch\"\nUFW_BUILD_DIR=\"${PROJECT_DIR}/../build\"\n\n# Use the latest iphoneos SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"iphoneos.*$\")\nwhile read -r line; do\nUFW_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_SDK_VERSION=$(echo \"${UFW_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\nUFW_IPHONE_DIR=\"${UFW_BUILD_DIR}/Release-iphoneos\"\nUFW_SIMULATOR_DIR=\"${UFW_BUILD_DIR}/Release-iphonesimulator\"\nUFW_UNIVERSAL_DIR=\"${UFW_BUILD_DIR}/Release-universal\"\nUFW_HEADER_DIR=\"${UFW_UNIVERSAL_DIR}/CorePlotHeaders\"\nUFW_EXE_PATH=\"libCorePlot-CocoaTouch.a\"\n\n# Build Framework\n\nrm -rf \"${UFW_UNIVERSAL_DIR}\"\n\nxcodebuild -scheme \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphoneos${UFW_SDK_VERSION} clean build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -scheme \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphonesimulator${UFW_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n\nmkdir -p \"${UFW_UNIVERSAL_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\nlipo -create -output \"${UFW_UNIVERSAL_DIR}/${UFW_EXE_PATH}\" \"${UFW_IPHONE_DIR}/${UFW_EXE_PATH}\" \"${UFW_SIMULATOR_DIR}/${UFW_EXE_PATH}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: lipo failed\"; exit 1; fi\n\n# copy header files\nmkdir -p \"${UFW_HEADER_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\ncp \"${SOURCE_ROOT}/CorePlot-CocoaTouch.h\" \"${UFW_HEADER_DIR}\"\ncp \"${SOURCE_ROOT}/iPhoneOnly/\"[!_]*.h \"${UFW_HEADER_DIR}/\"\ncp \"${SOURCE_ROOT}/Source/\"[!_]*.h \"${UFW_HEADER_DIR}/\"\n\nrm \"${UFW_HEADER_DIR}/\"*Tests.*\n"; - }; C3A546801BC1A817005C1BBC /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -3324,28 +3299,6 @@ }; name = Release; }; - C38A09991A46193F00D45436 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; - PRODUCT_NAME = "Documentation-iOS copy"; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - }; - name = Debug; - }; - C38A099A1A46193F00D45436 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; - PRODUCT_NAME = "Documentation-iOS copy"; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - ZERO_LINK = NO; - }; - name = Release; - }; C3A546821BC1A817005C1BBC /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3492,15 +3445,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C38A09981A46193F00D45436 /* Build configuration list for PBXAggregateTarget "Universal Library" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C38A09991A46193F00D45436 /* Debug */, - C38A099A1A46193F00D45436 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; C3A546811BC1A817005C1BBC /* Build configuration list for PBXAggregateTarget "Universal iOS Framework" */ = { isa = XCConfigurationList; buildConfigurations = ( From c096af113b73d35dd48ecce7120076ed64986fe6 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 1 Jan 2023 21:55:04 -0500 Subject: [PATCH 124/245] The universal framework targets should always run and not be based on dependency analysis. --- framework/CorePlot.xcodeproj/project.pbxproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 432a8c8f5..9242f16b0 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -2373,6 +2373,7 @@ }; C37EA5C51BC83E900091C8F7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -2400,6 +2401,7 @@ }; C3A546801BC1A817005C1BBC /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); From 6da58c3c43fc2ca531fb9f8b4534f8ad2219d946 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 1 Jan 2023 21:57:35 -0500 Subject: [PATCH 125/245] Removed the Universal Library build scheme. --- .../xcschemes/Universal Library.xcscheme | 76 ------------------- 1 file changed, 76 deletions(-) delete mode 100644 framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Universal Library.xcscheme diff --git a/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Universal Library.xcscheme b/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Universal Library.xcscheme deleted file mode 100644 index 37669683a..000000000 --- a/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Universal Library.xcscheme +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From fddf2462c93ef05ce54308aa0e74a6661cdea7d2 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Mon, 2 Jan 2023 10:43:08 -0500 Subject: [PATCH 126/245] Removed .xconfig settings from the project level, leaving them only on the individual targets. --- .../CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj | 2 -- .../CPTTestApp-iPhone.xcodeproj/project.pbxproj | 2 -- examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj | 2 -- examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj | 2 -- examples/DatePlot/DatePlot.xcodeproj/project.pbxproj | 2 -- examples/DropPlot/DropPlot.xcodeproj/project.pbxproj | 2 -- .../minorTickFormatter.xcodeproj/project.pbxproj | 2 -- examples/RangePlot/RangePlot.xcodeproj/project.pbxproj | 2 -- framework/CorePlot.xcodeproj/project.pbxproj | 2 -- 9 files changed, 18 deletions(-) diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj index f374a8896..c5ad7ef8c 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj @@ -423,7 +423,6 @@ }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4CF029622F8700ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { SDKROOT = iphoneos; SYMROOT = "$(SRCROOT)/../../build"; @@ -433,7 +432,6 @@ }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4CF129622F8700ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { SDKROOT = iphoneos; SYMROOT = "$(SRCROOT)/../../build"; diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj index 3ab242bdf..dbdbb3c7a 100644 --- a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj @@ -459,7 +459,6 @@ }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4D392962343B00ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/Frameworks"; @@ -471,7 +470,6 @@ }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4D462962343B00ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/Frameworks"; diff --git a/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj b/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj index 9577e407b..e73517c94 100644 --- a/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj @@ -475,7 +475,6 @@ }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4BEE2962136300ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { SDKROOT = macosx; SYMROOT = "$(SRCROOT)/../../build"; @@ -484,7 +483,6 @@ }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4BFB2962136300ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { SDKROOT = macosx; SYMROOT = "$(SRCROOT)/../../build"; diff --git a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj index 332d1fdb6..d5087ddbf 100644 --- a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj +++ b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj @@ -1032,7 +1032,6 @@ }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3E4280729626F81007C2758 /* CorePlotDebug.xcconfig */; buildSettings = { SYMROOT = "$(PROJECT_DIR)/../../build"; }; @@ -1040,7 +1039,6 @@ }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3E4281329626F81007C2758 /* CorePlotRelease.xcconfig */; buildSettings = { SYMROOT = "$(PROJECT_DIR)/../../build"; }; diff --git a/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj b/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj index 37b813868..74890cd31 100644 --- a/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj +++ b/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj @@ -402,7 +402,6 @@ }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4BFD2962169F00ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { SDKROOT = macosx; SYMROOT = "$(SRCROOT)/../../build"; @@ -411,7 +410,6 @@ }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4BFE2962169F00ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { SDKROOT = macosx; SYMROOT = "$(SRCROOT)/../../build"; diff --git a/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj b/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj index 23a905ed1..93da43852 100644 --- a/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj +++ b/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj @@ -439,7 +439,6 @@ }; C05733CC08A9546B00998B17 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4CE629622B5D00ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { DEAD_CODE_STRIPPING = YES; SDKROOT = macosx; @@ -449,7 +448,6 @@ }; C05733CD08A9546B00998B17 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4CE829622B5D00ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { DEAD_CODE_STRIPPING = YES; SDKROOT = macosx; diff --git a/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj b/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj index a16636dfa..ad88eea4d 100644 --- a/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj +++ b/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj @@ -413,7 +413,6 @@ }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4CEB29622DEE00ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { SDKROOT = macosx; SYMROOT = "$(SRCROOT)/../../build"; @@ -422,7 +421,6 @@ }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4CE929622DED00ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { SDKROOT = macosx; SYMROOT = "$(SRCROOT)/../../build"; diff --git a/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj b/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj index 360c8e8d4..b1b848705 100644 --- a/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj +++ b/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj @@ -413,7 +413,6 @@ }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4CEE29622ECC00ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { SDKROOT = macosx; SYMROOT = "$(SRCROOT)/../../build"; @@ -422,7 +421,6 @@ }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4CED29622ECC00ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { SDKROOT = macosx; SYMROOT = "$(SRCROOT)/../../build"; diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 9242f16b0..0b7e7e511 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -3025,7 +3025,6 @@ }; 1DEB91B208733DA50010E9CD /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; buildSettings = { CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CURRENT_PROJECT_VERSION = 2.3; @@ -3034,7 +3033,6 @@ }; 1DEB91B308733DA50010E9CD /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; buildSettings = { CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CURRENT_PROJECT_VERSION = 2.3; From 4a0eb94034a109d304a440b073e8dc7aaa9aa1a5 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 8 Jan 2023 07:48:13 -0500 Subject: [PATCH 127/245] Enabled new warnings in the .xconfig files and fixed resulting warnings. --- .../Plot_Gallery.xcodeproj/project.pbxproj | 1 - examples/DatePlot/Source/DateController.swift | 2 +- framework/CorePlot.xcodeproj/project.pbxproj | 4 +- .../PlatformSpecific/CPTGraphHostingView.m | 3 ++ framework/Source/NSCoderExtensions.m | 9 ++++ framework/xcconfig/CorePlot.xcconfig | 43 +++++++++++++++++++ framework/xcconfig/CorePlotDebug.xcconfig | 7 ++- framework/xcconfig/CorePlotRelease.xcconfig | 8 +++- framework/xcconfig/CorePlotWarnings.xcconfig | 22 ++++++++++ 9 files changed, 90 insertions(+), 9 deletions(-) diff --git a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj index d5087ddbf..ba8058cb7 100644 --- a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj +++ b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj @@ -1054,7 +1054,6 @@ CLANG_ENABLE_OBJC_ARC = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; - GCC_DYNAMIC_NO_PIC = NO; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", diff --git a/examples/DatePlot/Source/DateController.swift b/examples/DatePlot/Source/DateController.swift index fa77a2a96..dca590d32 100644 --- a/examples/DatePlot/Source/DateController.swift +++ b/examples/DatePlot/Source/DateController.swift @@ -13,7 +13,7 @@ class DateController : NSObject, CPTPlotDataSource { // MARK: - Initialization - override func awakeFromNib() + @MainActor override func awakeFromNib() { self.plotData = newPlotData() diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 0b7e7e511..7d0b7bafe 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -989,7 +989,7 @@ C38A0B1C1A46264500D45436 /* CPTPlatformSpecificFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPTPlatformSpecificFunctions.h; path = PlatformSpecific/CPTPlatformSpecificFunctions.h; sourceTree = SOURCE_ROOT; }; C38A0B1D1A46264500D45436 /* CPTPlatformSpecificFunctions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CPTPlatformSpecificFunctions.m; path = PlatformSpecific/CPTPlatformSpecificFunctions.m; sourceTree = SOURCE_ROOT; }; C38A0B271A46265300D45436 /* CPTGraphHostingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPTGraphHostingView.h; path = PlatformSpecific/CPTGraphHostingView.h; sourceTree = SOURCE_ROOT; }; - C38A0B281A46265300D45436 /* CPTGraphHostingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CPTGraphHostingView.m; path = PlatformSpecific/CPTGraphHostingView.m; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C38A0B281A46265300D45436 /* CPTGraphHostingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CPTGraphHostingView.m; path = PlatformSpecific/CPTGraphHostingView.m; sourceTree = SOURCE_ROOT; }; C38DD49111A04B7A002A68E7 /* CPTGridLineGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTGridLineGroup.h; sourceTree = ""; }; C38DD49211A04B7A002A68E7 /* CPTGridLineGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTGridLineGroup.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; C3920AC21395B6500045F3BB /* CPTLegend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLegend.h; sourceTree = ""; }; @@ -3026,7 +3026,6 @@ 1DEB91B208733DA50010E9CD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CURRENT_PROJECT_VERSION = 2.3; }; name = Debug; @@ -3034,7 +3033,6 @@ 1DEB91B308733DA50010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CURRENT_PROJECT_VERSION = 2.3; }; name = Release; diff --git a/framework/PlatformSpecific/CPTGraphHostingView.m b/framework/PlatformSpecific/CPTGraphHostingView.m index f6f3b1334..3bbe2e3f2 100644 --- a/framework/PlatformSpecific/CPTGraphHostingView.m +++ b/framework/PlatformSpecific/CPTGraphHostingView.m @@ -349,6 +349,8 @@ -(void)scrollWheel:(nonnull NSEvent *)theEvent BOOL handled = NO; if ( theGraph ) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wimplicit-fallthrough" switch ( theEvent.phase ) { case NSEventPhaseBegan: // Trackpad with no momentum scrolling. Fingers moved on trackpad. { @@ -418,6 +420,7 @@ -(void)scrollWheel:(nonnull NSEvent *)theEvent default: break; } +#pragma clang diagnostic pop } if ( !handled ) { diff --git a/framework/Source/NSCoderExtensions.m b/framework/Source/NSCoderExtensions.m index 5ab38ea4b..129a8d202 100644 --- a/framework/Source/NSCoderExtensions.m +++ b/framework/Source/NSCoderExtensions.m @@ -101,6 +101,8 @@ void CPTPathApplierFunc(void *__nullable info, const CGPathElement *__nonnull el elementData[@"type"] = @(element->type); +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wimplicit-fallthrough" switch ( element->type ) { case kCGPathElementAddCurveToPoint: // 3 points elementData[@"point3.x"] = @(element->points[2].x); @@ -119,6 +121,7 @@ void CPTPathApplierFunc(void *__nullable info, const CGPathElement *__nonnull el case kCGPathElementCloseSubpath: // 0 points break; } +#pragma clang diagnostic pop NSMutableArray *> *pathData = (__bridge NSMutableArray *> *) info; @@ -154,6 +157,8 @@ -(void)encodeCGPath:(nullable CGPathRef)path forKey:(nonnull NSString *)key CGPoint point; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wimplicit-fallthrough" switch ( type ) { case kCGPathElementAddCurveToPoint: // 3 points point.x = [elementData[@"point3.x"] cgFloatValue]; @@ -178,6 +183,7 @@ -(void)encodeCGPath:(nullable CGPathRef)path forKey:(nonnull NSString *)key case kCGPathElementCloseSubpath: // 0 points break; } +#pragma clang diagnostic pop } } @@ -384,6 +390,8 @@ -(nullable CGPathRef)newCGPathDecodeForKey:(nonnull NSString *)key CGPoint point2 = CGPointZero; CGPoint point3 = CGPointZero; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wimplicit-fallthrough" switch ( type ) { case kCGPathElementAddCurveToPoint: // 3 points newKey = [[NSString alloc] initWithFormat:@"%@[%lu].point3", key, (unsigned long)i]; @@ -402,6 +410,7 @@ -(nullable CGPathRef)newCGPathDecodeForKey:(nonnull NSString *)key case kCGPathElementCloseSubpath: // 0 points break; } +#pragma clang diagnostic pop switch ( type ) { case kCGPathElementMoveToPoint: diff --git a/framework/xcconfig/CorePlot.xcconfig b/framework/xcconfig/CorePlot.xcconfig index 02685cc2e..fb0fe03a1 100644 --- a/framework/xcconfig/CorePlot.xcconfig +++ b/framework/xcconfig/CorePlot.xcconfig @@ -13,20 +13,63 @@ PRODUCT_BUNDLE_IDENTIFIER = com.CorePlot.$(PRODUCT_NAME:rfc1034identifier) ALWAYS_SEARCH_USER_PATHS = NO BUILD_LIBRARY_FOR_DISTRIBUTION = YES + +CLANG_ENABLE_CODE_COVERAGE = YES CLANG_ENABLE_OBJC_ARC = YES +CLANG_ENABLE_OBJC_WEAK = NO +CLANG_LINK_OBJC_RUNTIME = $(LINK_OBJC_RUNTIME) CLANG_STATIC_ANALYZER_MODE = shallow CLANG_STATIC_ANALYZER_MODE_ON_ANALYZE_ACTION = deep + COMBINE_HIDPI_IMAGES = YES COPY_PHASE_STRIP = YES + DEAD_CODE_STRIPPING = YES DEBUG_INFORMATION_FORMAT = dwarf-with-dsym + GCC_C_LANGUAGE_STANDARD = c99 +GCC_CHAR_IS_UNSIGNED_CHAR = NO +GCC_CW_ASM_SYNTAX = YES GCC_DYNAMIC_NO_PIC = NO +GCC_ENABLE_ASM_KEYWORD = YES +GCC_ENABLE_BUILTIN_FUNCTIONS = YES +GCC_ENABLE_FLOATING_POINT_LIBRARY_CALLS = NO +GCC_ENABLE_KERNEL_DEVELOPMENT = NO +GCC_ENABLE_OBJC_EXCEPTIONS = YES +GCC_ENABLE_PASCAL_STRINGS = YES +GCC_ENABLE_TRIGRAPHS = NO +GCC_FAST_MATH = NO +GCC_GENERATE_DEBUGGING_SYMBOLS = YES GCC_INCREASE_PRECOMPILED_HEADER_SHARING = YES +GCC_INPUT_FILETYPE = automatic +GCC_LINK_WITH_DYNAMIC_LIBRARIES = YES GCC_NO_COMMON_BLOCKS = YES GCC_PRECOMPILE_PREFIX_HEADER = YES GCC_PREFIX_HEADER = $(PROJECT_NAME)_Prefix.pch +GCC_STRICT_ALIASING = YES +GCC_GENERATE_TEST_COVERAGE_FILES = NO +GCC_INLINES_ARE_PRIVATE_EXTERN = NO +GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO +GCC_REUSE_STRINGS = YES +GCC_SHORT_ENUMS = NO +GCC_SYMBOLS_PRIVATE_EXTERN = NO +GCC_THREADSAFE_STATICS = YES +GCC_UNROLL_LOOPS = YES +GCC_USE_STANDARD_INCLUDE_SEARCHING = YES + +SWIFT_DISABLE_SAFETY_CHECKS = NO +SWIFT_EMIT_LOC_STRINGS = NO +SWIFT_ENABLE_BARE_SLASH_REGEX = YES +SWIFT_ENFORCE_EXCLUSIVE_ACCESS = on +SWIFT_INSTALL_MODULE = YES +SWIFT_INSTALL_OBJC_HEADER = YES +SWIFT_PRECOMPILE_BRIDGING_HEADER = YES +SWIFT_REFLECTION_METADATA_LEVEL = all +SWIFT_SUPPRESS_WARNINGS = NO +SWIFT_TREAT_WARNINGS_AS_ERRORS = YES + LINKER_DISPLAYS_MANGLED_NAMES = NO +LOCALIZED_STRING_SWIFTUI_SUPPORT = YES OTHER_LDFLAGS = -ObjC RUN_CLANG_STATIC_ANALYZER = YES SEPARATE_STRIP = YES diff --git a/framework/xcconfig/CorePlotDebug.xcconfig b/framework/xcconfig/CorePlotDebug.xcconfig index bf5535be1..2afdfb09f 100644 --- a/framework/xcconfig/CorePlotDebug.xcconfig +++ b/framework/xcconfig/CorePlotDebug.xcconfig @@ -4,11 +4,14 @@ ONLY_ACTIVE_ARCH = YES VALIDATE_PRODUCT = NO DEPLOYMENT_POSTPROCESSING = NO ENABLE_TESTABILITY = YES +COPY_PHASE_STRIP = NO STRIP_INSTALLED_PRODUCT = NO + +ENABLE_NS_ASSERTIONS = YES GCC_OPTIMIZATION_LEVEL = 0 GCC_PREPROCESSOR_DEFINITIONS = DEBUG=1 $(inherited) -ENABLE_NS_ASSERTIONS = YES -COPY_PHASE_STRIP = NO +LLVM_LTO = YES_THIN SWIFT_COMPILATION_MODE = singlefile SWIFT_OPTIMIZATION_LEVEL = -Onone +SWIFT_STRICT_CONCURRENCY = complete diff --git a/framework/xcconfig/CorePlotRelease.xcconfig b/framework/xcconfig/CorePlotRelease.xcconfig index fbe55a059..15f3632c6 100644 --- a/framework/xcconfig/CorePlotRelease.xcconfig +++ b/framework/xcconfig/CorePlotRelease.xcconfig @@ -4,10 +4,14 @@ ONLY_ACTIVE_ARCH = NO VALIDATE_PRODUCT = YES DEPLOYMENT_POSTPROCESSING = YES ENABLE_TESTABILITY = NO +COPY_PHASE_STRIP = YES STRIP_INSTALLED_PRODUCT = YES -GCC_OPTIMIZATION_LEVEL = s + ENABLE_NS_ASSERTIONS = NO -COPY_PHASE_STRIP = YES +GCC_OPTIMIZATION_LEVEL = s +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) +LLVM_LTO = YES SWIFT_COMPILATION_MODE = wholemodule SWIFT_OPTIMIZATION_LEVEL = -O +SWIFT_STRICT_CONCURRENCY = minimal diff --git a/framework/xcconfig/CorePlotWarnings.xcconfig b/framework/xcconfig/CorePlotWarnings.xcconfig index 8c11ec296..e0b20ea64 100644 --- a/framework/xcconfig/CorePlotWarnings.xcconfig +++ b/framework/xcconfig/CorePlotWarnings.xcconfig @@ -1,11 +1,17 @@ ASSETCATALOG_WARNINGS = YES CLANG_ANALYZER_DEADCODE_DEADSTORES = YES +CLANG_ANALYZER_DIVIDE_BY_ZERO = YES CLANG_ANALYZER_GCD = YES +CLANG_ANALYZER_GCD_PERFORMANCE = YES +CLANG_ANALYZER_LIBKERN_RETAIN_COUNT = YES CLANG_ANALYZER_LOCALIZABILITY_EMPTY_CONTEXT = YES CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES CLANG_ANALYZER_MEMORY_MANAGEMENT = YES +CLANG_ANALYZER_MIG_CONVENTIONS = YES CLANG_ANALYZER_NONNULL = YES +CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES +CLANG_ANALYZER_NULL_DEREFERENCE = YES CLANG_ANALYZER_OBJC_ATSYNC = YES CLANG_ANALYZER_OBJC_COLLECTIONS = YES CLANG_ANALYZER_OBJC_DEALLOC = YES @@ -15,6 +21,7 @@ CLANG_ANALYZER_OBJC_NSCFERROR = YES CLANG_ANALYZER_OBJC_RETAIN_COUNT = YES CLANG_ANALYZER_OBJC_SELF_INIT = YES CLANG_ANALYZER_OBJC_UNUSED_IVARS = YES +CLANG_ANALYZER_OSOBJECT_C_STYLE_CAST = YES CLANG_ANALYZER_SECURITY_FLOATLOOPCOUNTER = YES CLANG_ANALYZER_SECURITY_INSECUREAPI_GETPW_GETS = YES CLANG_ANALYZER_SECURITY_INSECUREAPI_MKSTEMP = YES @@ -24,12 +31,21 @@ CLANG_ANALYZER_SECURITY_INSECUREAPI_UNCHECKEDRETURN = YES CLANG_ANALYZER_SECURITY_INSECUREAPI_VFORK = YES CLANG_ANALYZER_SECURITY_KEYCHAIN_API = YES +CLANG_TIDY_BUGPRONE_ASSERT_SIDE_EFFECT = YES +CLANG_TIDY_BUGPRONE_INFINITE_LOOP = YES +CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES +CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES + +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_INTEGER = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES + CLANG_WARN__ARC_BRIDGE_CAST_NONARC = YES CLANG_WARN__DUPLICATE_METHOD_MATCH = YES CLANG_WARN_ASSIGN_ENUM = YES CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES CLANG_WARN_BOOL_CONVERSION = YES CLANG_WARN_COMMA = YES +CLANG_WARN_COMPLETION_HANDLER_MISUSE = YES CLANG_WARN_CONSTANT_CONVERSION = YES CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES @@ -38,6 +54,8 @@ CLANG_WARN_DOCUMENTATION_COMMENTS = YES CLANG_WARN_EMPTY_BODY = YES CLANG_WARN_ENUM_CONVERSION = YES CLANG_WARN_FLOAT_CONVERSION = YES +CLANG_WARN_FRAMEWORK_INCLUDE_PRIVATE_FROM_PUBLIC = YES +CLANG_WARN_IMPLICIT_FALLTHROUGH = YES CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES CLANG_WARN_INFINITE_RECURSION = YES CLANG_WARN_INT_CONVERSION = YES @@ -82,9 +100,11 @@ GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = YES GCC_WARN_CHECK_SWITCH_STATEMENTS = YES GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES +GCC_WARN_INHIBIT_ALL_WARNINGS = NO GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES GCC_WARN_MISSING_PARENTHESES = YES GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = NO +GCC_WARN_PEDANTIC = NO GCC_WARN_SHADOW = YES GCC_WARN_SIGN_COMPARE = YES GCC_WARN_STRICT_SELECTOR_MATCH = NO @@ -98,6 +118,8 @@ GCC_WARN_UNUSED_PARAMETER = YES GCC_WARN_UNUSED_VALUE = YES GCC_WARN_UNUSED_VARIABLE = YES +IBC_ERRORS = YES +IBC_NOTICES = YES IBC_WARNINGS = YES WARNING_CFLAGS = -Weverything -Wno-undef -Wno-switch-enum -Wno-float-equal -Wno-custom-atomic-properties -Wno-pedantic -Wno-documentation -Wno-documentation-unknown-command -Wno-partial-availability -Wno-objc-messaging-id From bb9258362cb8636e0dec2b58f42ebc3d854d5352 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 8 Jan 2023 07:50:58 -0500 Subject: [PATCH 128/245] Fixed compiler errors in the iPhone CPTTestApp from the new build config settings. --- .../CPTTestApp-iPhone-Bridging-Header.h | 1 - .../project.pbxproj | 2 -- .../Classes/BarChartController.swift | 11 +++--- .../Classes/PieChartController.swift | 21 ++++++----- .../Classes/ScatterPlotController.swift | 36 +++++++++---------- 5 files changed, 33 insertions(+), 38 deletions(-) delete mode 100644 examples/CPTTestApp-iPhone/CPTTestApp-iPhone-Bridging-Header.h diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone-Bridging-Header.h b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone-Bridging-Header.h deleted file mode 100644 index cde174e4f..000000000 --- a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone-Bridging-Header.h +++ /dev/null @@ -1 +0,0 @@ -#import diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj index dbdbb3c7a..5e30b73e1 100644 --- a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj @@ -441,7 +441,6 @@ INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_NAME = "CPTTestApp-iPhone"; - SWIFT_OBJC_BRIDGING_HEADER = "CPTTestApp-iPhone-Bridging-Header.h"; }; name = Debug; }; @@ -453,7 +452,6 @@ INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_NAME = "CPTTestApp-iPhone"; - SWIFT_OBJC_BRIDGING_HEADER = "CPTTestApp-iPhone-Bridging-Header.h"; }; name = Release; }; diff --git a/examples/CPTTestApp-iPhone/Classes/BarChartController.swift b/examples/CPTTestApp-iPhone/Classes/BarChartController.swift index 5e5618f03..440a4537f 100644 --- a/examples/CPTTestApp-iPhone/Classes/BarChartController.swift +++ b/examples/CPTTestApp-iPhone/Classes/BarChartController.swift @@ -1,7 +1,8 @@ import UIKit +import CorePlot class BarChartController : UIViewController, CPTBarPlotDataSource { - private var barGraph : CPTXYGraph? = nil + private let barGraph = CPTXYGraph(frame: .zero) // MARK: - Initialization @@ -10,7 +11,7 @@ class BarChartController : UIViewController, CPTBarPlotDataSource { super.viewDidAppear(animated) // Create graph from theme - let newGraph = CPTXYGraph(frame: .zero) + let newGraph = self.barGraph newGraph.apply(CPTTheme(named: .darkGradientTheme)) let hostingView = self.view as! CPTGraphHostingView @@ -125,18 +126,16 @@ class BarChartController : UIViewController, CPTBarPlotDataSource { barPlot2.barCornerRadius = 2.0 barPlot2.identifier = "Bar Plot 2" as NSString newGraph.add(barPlot2, to:plotSpace) - - self.barGraph = newGraph } // MARK: - Plot Data Source Methods - func numberOfRecords(for plot: CPTPlot) -> UInt + nonisolated func numberOfRecords(for plot: CPTPlot) -> UInt { return 16 } - func number(for plot: CPTPlot, field: UInt, record: UInt) -> Any? + nonisolated func number(for plot: CPTPlot, field: UInt, record: UInt) -> Any? { switch CPTBarPlotField(rawValue: Int(field))! { case .barLocation: diff --git a/examples/CPTTestApp-iPhone/Classes/PieChartController.swift b/examples/CPTTestApp-iPhone/Classes/PieChartController.swift index 3b99ed916..4aa4f6170 100644 --- a/examples/CPTTestApp-iPhone/Classes/PieChartController.swift +++ b/examples/CPTTestApp-iPhone/Classes/PieChartController.swift @@ -1,9 +1,10 @@ import UIKit +@preconcurrency import CorePlot class PieChartController : UIViewController, CPTPieChartDataSource, CPTPieChartDelegate { - private var pieGraph : CPTXYGraph? = nil + private let pieGraph = CPTXYGraph(frame: .zero) - let dataForChart = [20.0, 30.0, 60.0] + private let dataForChart = [20.0, 30.0, 60.0] // MARK: - Initialization @@ -12,7 +13,7 @@ class PieChartController : UIViewController, CPTPieChartDataSource, CPTPieChartD super.viewDidAppear(animated) // Create graph from theme - let newGraph = CPTXYGraph(frame: .zero) + let newGraph = self.pieGraph newGraph.apply(CPTTheme(named: .darkGradientTheme)) let hostingView = self.view as! CPTGraphHostingView @@ -43,18 +44,16 @@ class PieChartController : UIViewController, CPTPieChartDataSource, CPTPieChartD piePlot.borderLineStyle = CPTLineStyle() piePlot.delegate = self newGraph.add(piePlot) - - self.pieGraph = newGraph } // MARK: - Plot Data Source Methods - func numberOfRecords(for plot: CPTPlot) -> UInt + nonisolated func numberOfRecords(for plot: CPTPlot) -> UInt { return UInt(self.dataForChart.count) } - func number(for plot: CPTPlot, field: UInt, record: UInt) -> Any? + nonisolated func number(for plot: CPTPlot, field: UInt, record: UInt) -> Any? { if Int(record) > self.dataForChart.count { return nil @@ -70,7 +69,7 @@ class PieChartController : UIViewController, CPTPieChartDataSource, CPTPieChartD } } - func dataLabel(for plot: CPTPlot, record: UInt) -> CPTLayer? + nonisolated func dataLabel(for plot: CPTPlot, record: UInt) -> CPTLayer? { let label = CPTTextLayer(text:"\(record)") @@ -83,7 +82,7 @@ class PieChartController : UIViewController, CPTPieChartDataSource, CPTPieChartD return label } - func radialOffset(for piePlot: CPTPieChart, record recordIndex: UInt) -> CGFloat + nonisolated func radialOffset(for piePlot: CPTPieChart, record recordIndex: UInt) -> CGFloat { var offset: CGFloat = 0.0 @@ -96,7 +95,7 @@ class PieChartController : UIViewController, CPTPieChartDataSource, CPTPieChartD // MARK: - Delegate Methods - func pieChart(_ plot: CPTPieChart, sliceWasSelectedAtRecord idx: UInt) { - self.pieGraph?.title = "Selected index: \(idx)" + nonisolated func pieChart(_ plot: CPTPieChart, sliceWasSelectedAtRecord idx: UInt) { + self.pieGraph.title = "Selected index: \(idx)" } } diff --git a/examples/CPTTestApp-iPhone/Classes/ScatterPlotController.swift b/examples/CPTTestApp-iPhone/Classes/ScatterPlotController.swift index 76b3191ee..cb35b10b6 100644 --- a/examples/CPTTestApp-iPhone/Classes/ScatterPlotController.swift +++ b/examples/CPTTestApp-iPhone/Classes/ScatterPlotController.swift @@ -1,10 +1,22 @@ import UIKit +import CorePlot class ScatterPlotController : UIViewController, CPTScatterPlotDataSource, CPTAxisDelegate { - private var scatterGraph : CPTXYGraph? = nil + private let scatterGraph = CPTXYGraph(frame: .zero) typealias plotDataType = [CPTScatterPlotField : Double] - private var dataForPlot = [plotDataType]() + + private let dataForPlot = { + // Add some initial data + var contentArray = [plotDataType]() + for i in 0 ..< 60 { + let x = 1.0 + Double(i) * 0.05 + let y = 1.2 * Double(arc4random()) / Double(UInt32.max) + 1.2 + let dataPoint: plotDataType = [.X: x, .Y: y] + contentArray.append(dataPoint) + } + return contentArray + }() // MARK: - Initialization @@ -13,7 +25,7 @@ class ScatterPlotController : UIViewController, CPTScatterPlotDataSource, CPTAxi super.viewDidAppear(animated) // Create graph from theme - let newGraph = CPTXYGraph(frame: .zero) + let newGraph = self.scatterGraph newGraph.apply(CPTTheme(named: .darkGradientTheme)) let hostingView = self.view as! CPTGraphHostingView @@ -110,28 +122,16 @@ class ScatterPlotController : UIViewController, CPTScatterPlotDataSource, CPTAxi fadeInAnimation.fillMode = .forwards fadeInAnimation.toValue = 1.0 dataSourceLinePlot.add(fadeInAnimation, forKey: "animateOpacity") - - // Add some initial data - var contentArray = [plotDataType]() - for i in 0 ..< 60 { - let x = 1.0 + Double(i) * 0.05 - let y = 1.2 * Double(arc4random()) / Double(UInt32.max) + 1.2 - let dataPoint: plotDataType = [.X: x, .Y: y] - contentArray.append(dataPoint) - } - self.dataForPlot = contentArray - - self.scatterGraph = newGraph } // MARK: - Plot Data Source Methods - func numberOfRecords(for plot: CPTPlot) -> UInt + nonisolated func numberOfRecords(for plot: CPTPlot) -> UInt { return UInt(self.dataForPlot.count) } - func number(for plot: CPTPlot, field: UInt, record: UInt) -> Any? + nonisolated func number(for plot: CPTPlot, field: UInt, record: UInt) -> Any? { let plotField = CPTScatterPlotField(rawValue: Int(field)) @@ -151,7 +151,7 @@ class ScatterPlotController : UIViewController, CPTScatterPlotDataSource, CPTAxi // MARK: - Axis Delegate Methods - func axis(_ axis: CPTAxis, shouldUpdateAxisLabelsAtLocations locations: Set) -> Bool + nonisolated func axis(_ axis: CPTAxis, shouldUpdateAxisLabelsAtLocations locations: Set) -> Bool { if let formatter = axis.labelFormatter { let labelOffset = axis.labelOffset From 10fc53e42527df98a312348753acef1d3d2a71ea Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 21 Jan 2023 16:40:52 -0500 Subject: [PATCH 129/245] Removed the iOS and tvOS framework targets. lipo cannot combine device and simulator builds for Apple Silicon in the same output file because both use arm64. --- documentation/changelog.markdown | 4 + framework/CorePlot.xcodeproj/project.pbxproj | 114 ------------------ .../Universal iOS Framework.xcscheme | 76 ------------ .../Universal tvOS Framework.xcscheme | 58 --------- 4 files changed, 4 insertions(+), 248 deletions(-) delete mode 100644 framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Universal iOS Framework.xcscheme delete mode 100644 framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Universal tvOS Framework.xcscheme diff --git a/documentation/changelog.markdown b/documentation/changelog.markdown index 1efbfc69e..2d12ee19d 100644 --- a/documentation/changelog.markdown +++ b/documentation/changelog.markdown @@ -6,6 +6,9 @@ This release updates Core Plot to be compatible with Xcode 14, Mac Catalyst, and The Mac deployment target is now macOS 10.13. The iOS deployment target has changed to iOS 12.0. The tvOS deployment target has changed to tvOS 12.0. The iOS static library is obsolete and has been removed. +The iOS and tvOS framework targets have been removed because lipo cannot combine device and simulator builds for Apple Silicon in the same output file (both use arm64). Use the Universal XCFramework that contains all platforms and architectures instead. + + ## Details - **New**: Mac Catalyst support @@ -13,6 +16,7 @@ The Mac deployment target is now macOS 10.13. The iOS deployment target has chan - **Changed**: Updated the deployment targets for all supported operating systems for the minimums required by Xcode 14. The Mac deployment target is now macOS 10.13. The iOS deployment target is now iOS 12.0. The tvOS deployment target is now tvOS 12.0. - **Changed**: Miscellaneous bug fixes and cleanup. - **Removed**: Removed the iOS static library. +- **Removed**: Removed the iOS and tvOS framework targets. # Release 2.3 (January 10, 2020) diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 7d0b7bafe..f775ed0ca 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -29,17 +29,6 @@ name = "Update SPM Files"; productName = "Update SPM Files"; }; - C37EA5C41BC83E900091C8F7 /* Universal tvOS Framework */ = { - isa = PBXAggregateTarget; - buildConfigurationList = C37EA5C61BC83E900091C8F7 /* Build configuration list for PBXAggregateTarget "Universal tvOS Framework" */; - buildPhases = ( - C37EA5C51BC83E900091C8F7 /* ShellScript */, - ); - dependencies = ( - ); - name = "Universal tvOS Framework"; - productName = Documentation; - }; C38A09911A4618B600D45436 /* Documentation-iOS */ = { isa = PBXAggregateTarget; buildConfigurationList = C38A09931A4618B600D45436 /* Build configuration list for PBXAggregateTarget "Documentation-iOS" */; @@ -51,17 +40,6 @@ name = "Documentation-iOS"; productName = Documentation; }; - C3A5467F1BC1A817005C1BBC /* Universal iOS Framework */ = { - isa = PBXAggregateTarget; - buildConfigurationList = C3A546811BC1A817005C1BBC /* Build configuration list for PBXAggregateTarget "Universal iOS Framework" */; - buildPhases = ( - C3A546801BC1A817005C1BBC /* ShellScript */, - ); - dependencies = ( - ); - name = "Universal iOS Framework"; - productName = Documentation; - }; C3AC175B244B594800E7380C /* Universal XCFramework */ = { isa = PBXAggregateTarget; buildConfigurationList = C3AC175D244B594800E7380C /* Build configuration list for PBXAggregateTarget "Universal XCFramework" */; @@ -2284,8 +2262,6 @@ C36BE54226FF6857004287F2 /* Update SPM Files */, 9021E49E0FC5C9DC00443472 /* Documentation-Mac */, C38A09911A4618B600D45436 /* Documentation-iOS */, - C3A5467F1BC1A817005C1BBC /* Universal iOS Framework */, - C37EA5C41BC83E900091C8F7 /* Universal tvOS Framework */, C3AC175B244B594800E7380C /* Universal XCFramework */, ); }; @@ -2371,20 +2347,6 @@ shellPath = /bin/sh; shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${SOURCE_ROOT}/../scripts/generate_spm_sources_layout.sh\"\n"; }; - C37EA5C51BC83E900091C8F7 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\nUFW_TARGET=\"CorePlot tvOS\"\nUFW_BUILD_DIR=\"${PROJECT_DIR}/../build\"\n\n# Use the latest tvOS SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"appletvos.*$\")\nwhile read -r line; do\nUFW_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_SDK_VERSION=$(echo \"${UFW_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\nFRAMEWORK_NAME=\"${PROJECT_NAME}\"\n\nUFW_IPHONE_PATH=\"${UFW_BUILD_DIR}/Release-appletvos/${FRAMEWORK_NAME}.framework\"\nUFW_SIMULATOR_PATH=\"${UFW_BUILD_DIR}/Release-appletvsimulator/${FRAMEWORK_NAME}.framework\"\nUFW_UNIVERSAL_DIR=\"${UFW_BUILD_DIR}/Release-appletvuniversal\"\nUFW_FRAMEWORK=\"${UFW_UNIVERSAL_DIR}/${FRAMEWORK_NAME}.framework\"\n\n# Build Framework\n\nrm -rf \"${UFW_UNIVERSAL_DIR}\"\n\nxcodebuild -scheme \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk appletvos${UFW_SDK_VERSION} clean build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -scheme \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk appletvsimulator${UFW_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n\nmkdir -p \"${UFW_UNIVERSAL_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\ncp -r \"${UFW_IPHONE_PATH}/.\" \"${UFW_FRAMEWORK}\"\n\nlipo -create -output \"${UFW_FRAMEWORK}/${FRAMEWORK_NAME}\" \"${UFW_SIMULATOR_PATH}/${FRAMEWORK_NAME}\" \"${UFW_IPHONE_PATH}/${FRAMEWORK_NAME}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: lipo failed\"; exit 1; fi\n"; - }; C38A09921A4618B600D45436 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -2399,20 +2361,6 @@ shellPath = /bin/sh; shellScript = "# Build the doxygen documentation for the project and load the docset into Xcode.\n\n# Use the following to adjust the value of the $DOXYGEN_PATH User-Defined Setting:\n# Binary install location: /Applications/Doxygen.app/Contents/Resources/doxygen\n# Source build install location: /usr/local/bin/doxygen\n\n# Graphical class diagrams require Graphviz.\n# Graphviz.app is available free online\n# http://www.graphviz.org/Download_macos.php\n\n# If the config file doesn't exist, run 'doxygen -g \"${SOURCE_ROOT}/../documentation/doxygen/doxygen touch.config\"' to\n# a get default file.\n\nDOXYGEN_FOLDER=\"${SOURCE_ROOT}/../documentation/doxygen\"\n\nif ! [ -f \"${DOXYGEN_FOLDER}/doxygen.config\" ]\nthen\necho doxygen config file does not exist\n${DOXYGEN_PATH} -g \"${DOXYGEN_FOLDER}/doxygen.config\"\nfi\n\n# Run doxygen on the updated config file.\n# Note: doxygen creates a Makefile that does most of the heavy lifting.\n${DOXYGEN_PATH} \"${SOURCE_ROOT}/../documentation/doxygen/doxygen touch.config\"\n\n# make a copy of the html docs\nDOCS_FOLDER=\"${SOURCE_ROOT}/../documentation/html/iOS\"\nmkdir -p \"${DOCS_FOLDER}\"\ncp -R \"${SOURCE_ROOT}/CorePlotTouchDocs.docset/html/\" \"${DOCS_FOLDER}\"\nrm -Rf \"${SOURCE_ROOT}/CorePlotTouchDocs.docset\"\nrm -f \"${DOCS_FOLDER}/Info.plist\"\nrm -f \"${DOCS_FOLDER}/Makefile\"\nrm -f \"${DOCS_FOLDER}/Nodes.xml\"\nrm -f \"${DOCS_FOLDER}/Tokens.xml\"\n\n# Fix capitalization for GitHub pages\ncd \"${DOCS_FOLDER}\"\nls _*.* | while read a; do n=$(echo $a | sed -e 's/^_//'); mv \"$a\" \"$n\"; done\nls *.html | xargs sed -i '' 's/\\\"_/\\\"/g'\nls *.js | xargs sed -i '' 's/\\\"_/\\\"/g'\nls *.map | xargs sed -i '' 's/\\\"$_/\\\"$/g'\n\nexit 0\n"; }; - C3A546801BC1A817005C1BBC /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\nUFW_TARGET=\"CorePlot iOS\"\nUFW_BUILD_DIR=\"${PROJECT_DIR}/../build\"\n\n# Use the latest iphoneos SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"iphoneos.*$\")\nwhile read -r line; do\nUFW_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_SDK_VERSION=$(echo \"${UFW_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\nFRAMEWORK_NAME=\"${PROJECT_NAME}\"\n\nUFW_IPHONE_PATH=\"${UFW_BUILD_DIR}/Release-iphoneos/${FRAMEWORK_NAME}.framework\"\nUFW_SIMULATOR_PATH=\"${UFW_BUILD_DIR}/Release-iphonesimulator/${FRAMEWORK_NAME}.framework\"\nUFW_UNIVERSAL_DIR=\"${UFW_BUILD_DIR}/Release-iphoneuniversal\"\nUFW_FRAMEWORK=\"${UFW_UNIVERSAL_DIR}/${FRAMEWORK_NAME}.framework\"\n\n# Build Framework\n\nrm -rf \"${UFW_UNIVERSAL_DIR}\"\n\nxcodebuild -scheme \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphoneos${UFW_SDK_VERSION} clean build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -scheme \"${UFW_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphonesimulator${UFW_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n\nmkdir -p \"${UFW_UNIVERSAL_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\ncp -r \"${UFW_IPHONE_PATH}/.\" \"${UFW_FRAMEWORK}\"\n\nlipo -create -output \"${UFW_FRAMEWORK}/${FRAMEWORK_NAME}\" \"${UFW_SIMULATOR_PATH}/${FRAMEWORK_NAME}\" \"${UFW_IPHONE_PATH}/${FRAMEWORK_NAME}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: lipo failed\"; exit 1; fi\n"; - }; C3AC175C244B594800E7380C /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -3073,28 +3021,6 @@ }; name = Release; }; - C37EA5C71BC83E900091C8F7 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = appletvos; - SUPPORTED_PLATFORMS = "appletvsimulator appletvos"; - }; - name = Debug; - }; - C37EA5C81BC83E900091C8F7 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = appletvos; - SUPPORTED_PLATFORMS = "appletvsimulator appletvos"; - ZERO_LINK = NO; - }; - name = Release; - }; C37EA6901BC83F2A0091C8F7 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; @@ -3297,28 +3223,6 @@ }; name = Release; }; - C3A546821BC1A817005C1BBC /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - }; - name = Debug; - }; - C3A546831BC1A817005C1BBC /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - ZERO_LINK = NO; - }; - name = Release; - }; C3AC175E244B594800E7380C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3389,15 +3293,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C37EA5C61BC83E900091C8F7 /* Build configuration list for PBXAggregateTarget "Universal tvOS Framework" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C37EA5C71BC83E900091C8F7 /* Debug */, - C37EA5C81BC83E900091C8F7 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; C37EA68F1BC83F2A0091C8F7 /* Build configuration list for PBXNativeTarget "CorePlot tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -3443,15 +3338,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C3A546811BC1A817005C1BBC /* Build configuration list for PBXAggregateTarget "Universal iOS Framework" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C3A546821BC1A817005C1BBC /* Debug */, - C3A546831BC1A817005C1BBC /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; C3AC175D244B594800E7380C /* Build configuration list for PBXAggregateTarget "Universal XCFramework" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Universal iOS Framework.xcscheme b/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Universal iOS Framework.xcscheme deleted file mode 100644 index 9d578e501..000000000 --- a/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Universal iOS Framework.xcscheme +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Universal tvOS Framework.xcscheme b/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Universal tvOS Framework.xcscheme deleted file mode 100644 index 63b651c6d..000000000 --- a/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Universal tvOS Framework.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - From 7acd87d6d6c6cf68bb8c3571e200c8ea8fc6baa3 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 21 Jan 2023 16:55:48 -0500 Subject: [PATCH 130/245] Changed all framework and example projects to use the "new" Xcode build system rather than the legacy one. Fixed issue #468 with Carthage builds. --- .../CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj | 2 -- .../CPTTestApp-iPhone.xcodeproj/project.pbxproj | 2 -- examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj | 2 -- examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj | 2 -- examples/DatePlot/DatePlot.xcodeproj/project.pbxproj | 2 -- examples/DropPlot/DropPlot.xcodeproj/project.pbxproj | 2 -- .../minorTickFormatter.xcodeproj/project.pbxproj | 2 -- examples/RangePlot/RangePlot.xcodeproj/project.pbxproj | 2 -- framework/CorePlot.xcodeproj/project.pbxproj | 2 +- framework/xcconfig/CorePlot.xcconfig | 1 - 10 files changed, 1 insertion(+), 18 deletions(-) diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj index c5ad7ef8c..f800fc077 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj @@ -425,7 +425,6 @@ isa = XCBuildConfiguration; buildSettings = { SDKROOT = iphoneos; - SYMROOT = "$(SRCROOT)/../../build"; TARGETED_DEVICE_FAMILY = "2,6"; }; name = Debug; @@ -434,7 +433,6 @@ isa = XCBuildConfiguration; buildSettings = { SDKROOT = iphoneos; - SYMROOT = "$(SRCROOT)/../../build"; TARGETED_DEVICE_FAMILY = "2,6"; }; name = Release; diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj index 5e30b73e1..f10e34045 100644 --- a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj @@ -461,7 +461,6 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/Frameworks"; SDKROOT = iphoneos; - SYMROOT = "$(SRCROOT)/../../build"; TARGETED_DEVICE_FAMILY = "1,2,6"; }; name = Debug; @@ -472,7 +471,6 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/Frameworks"; SDKROOT = iphoneos; - SYMROOT = "$(SRCROOT)/../../build"; TARGETED_DEVICE_FAMILY = "1,2,6"; }; name = Release; diff --git a/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj b/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj index e73517c94..dcebc2f78 100644 --- a/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj @@ -477,7 +477,6 @@ isa = XCBuildConfiguration; buildSettings = { SDKROOT = macosx; - SYMROOT = "$(SRCROOT)/../../build"; }; name = Debug; }; @@ -485,7 +484,6 @@ isa = XCBuildConfiguration; buildSettings = { SDKROOT = macosx; - SYMROOT = "$(SRCROOT)/../../build"; }; name = Release; }; diff --git a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj index ba8058cb7..c7e2b3042 100644 --- a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj +++ b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj @@ -1033,14 +1033,12 @@ C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - SYMROOT = "$(PROJECT_DIR)/../../build"; }; name = Debug; }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - SYMROOT = "$(PROJECT_DIR)/../../build"; }; name = Release; }; diff --git a/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj b/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj index 74890cd31..5b6a7a170 100644 --- a/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj +++ b/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj @@ -404,7 +404,6 @@ isa = XCBuildConfiguration; buildSettings = { SDKROOT = macosx; - SYMROOT = "$(SRCROOT)/../../build"; }; name = Debug; }; @@ -412,7 +411,6 @@ isa = XCBuildConfiguration; buildSettings = { SDKROOT = macosx; - SYMROOT = "$(SRCROOT)/../../build"; }; name = Release; }; diff --git a/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj b/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj index 93da43852..ca9163c7d 100644 --- a/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj +++ b/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj @@ -442,7 +442,6 @@ buildSettings = { DEAD_CODE_STRIPPING = YES; SDKROOT = macosx; - SYMROOT = "$(SRCROOT)/../../build"; }; name = Debug; }; @@ -451,7 +450,6 @@ buildSettings = { DEAD_CODE_STRIPPING = YES; SDKROOT = macosx; - SYMROOT = "$(SRCROOT)/../../build"; }; name = Release; }; diff --git a/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj b/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj index ad88eea4d..0bf405945 100644 --- a/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj +++ b/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj @@ -415,7 +415,6 @@ isa = XCBuildConfiguration; buildSettings = { SDKROOT = macosx; - SYMROOT = "$(SRCROOT)/../../build"; }; name = Debug; }; @@ -423,7 +422,6 @@ isa = XCBuildConfiguration; buildSettings = { SDKROOT = macosx; - SYMROOT = "$(SRCROOT)/../../build"; }; name = Release; }; diff --git a/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj b/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj index b1b848705..9bb4f550b 100644 --- a/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj +++ b/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj @@ -415,7 +415,6 @@ isa = XCBuildConfiguration; buildSettings = { SDKROOT = macosx; - SYMROOT = "$(SRCROOT)/../../build"; }; name = Debug; }; @@ -423,7 +422,6 @@ isa = XCBuildConfiguration; buildSettings = { SDKROOT = macosx; - SYMROOT = "$(SRCROOT)/../../build"; }; name = Release; }; diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index f775ed0ca..966e86107 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -2373,7 +2373,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "UFW_MAC_TARGET=\"CorePlot Mac\"\nUFW_IOS_TARGET=\"CorePlot iOS\"\nUFW_TVOS_TARGET=\"CorePlot tvOS\"\n\nUFW_BUILD_DIR=\"${PROJECT_DIR}/../build\"\n\n# Mac SDK\n# Use the latest macOS SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"[^.]macosx.*$\")\nwhile read -r line; do\nUFW_MAC_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_MAC_SDK_VERSION=$(echo \"${UFW_MAC_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\n# iOS SDK\n# Use the latest iOS SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"iphoneos.*$\")\nwhile read -r line; do\nUFW_IOS_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_IOS_SDK_VERSION=$(echo \"${UFW_IOS_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\n# tvOS SDK\n# Use the latest tvOS SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"appletvos.*$\")\nwhile read -r line; do\nUFW_TVOS_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_TVOS_SDK_VERSION=$(echo \"${UFW_TVOS_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\nFRAMEWORK_NAME=\"${PROJECT_NAME}\"\n\nUFW_MAC_PATH=\"${UFW_BUILD_DIR}/Release/${FRAMEWORK_NAME}.framework\"\nUFW_CATALYST_PATH=\"${UFW_BUILD_DIR}/Release-maccatalyst/${FRAMEWORK_NAME}.framework\"\nUFW_IOS_PATH=\"${UFW_BUILD_DIR}/Release-iphoneos/${FRAMEWORK_NAME}.framework\"\nUFW_IOS_SIMULATOR_PATH=\"${UFW_BUILD_DIR}/Release-iphonesimulator/${FRAMEWORK_NAME}.framework\"\nUFW_TVOS_PATH=\"${UFW_BUILD_DIR}/Release-appletvos/${FRAMEWORK_NAME}.framework\"\nUFW_TVOS_SIMULATOR_PATH=\"${UFW_BUILD_DIR}/Release-appletvsimulator/${FRAMEWORK_NAME}.framework\"\n\nUFW_UNIVERSAL_DIR=\"${UFW_BUILD_DIR}/Release-universal\"\nUFW_FRAMEWORK=\"${UFW_UNIVERSAL_DIR}/${FRAMEWORK_NAME}.xcframework\"\n\n# Build Framework\n\nrm -rf \"${UFW_UNIVERSAL_DIR}\"\n\n# macOS\nxcodebuild -scheme \"${UFW_MAC_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk macosx${UFW_MAC_SDK_VERSION} clean build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n# Mac Catalyst\nxcodebuild -scheme \"${UFW_IOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphoneos${UFW_IOS_SDK_VERSION} -destination \"platform=macOS,variant=Mac Catalyst\" build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n# iOS\nxcodebuild -scheme \"${UFW_IOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphoneos${UFW_IOS_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -scheme \"${UFW_IOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphonesimulator${UFW_IOS_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n#tvOS\nxcodebuild -scheme \"${UFW_TVOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk appletvos${UFW_TVOS_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -scheme \"${UFW_TVOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk appletvsimulator${UFW_TVOS_SDK_VERSION} build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n\nmkdir -p \"${UFW_UNIVERSAL_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\nxcodebuild -create-xcframework -output \"${UFW_FRAMEWORK}\" \\\n -framework \"${UFW_MAC_PATH}\" \\\n -framework \"${UFW_CATALYST_PATH}\" \\\n -framework \"${UFW_IOS_PATH}\" \\\n -framework \"${UFW_IOS_SIMULATOR_PATH}\" \\\n -framework \"${UFW_TVOS_PATH}\" \\\n -framework \"${UFW_TVOS_SIMULATOR_PATH}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: create XCFramework failed\"; exit 1; fi\n\n"; + shellScript = "UFW_MAC_TARGET=\"CorePlot Mac\"\nUFW_IOS_TARGET=\"CorePlot iOS\"\nUFW_TVOS_TARGET=\"CorePlot tvOS\"\n\nUFW_BUILD_DIR=\"${PROJECT_DIR}/../build\"\n\n# Mac SDK\n# Use the latest macOS SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"[^.]macosx.*$\")\nwhile read -r line; do\nUFW_MAC_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_MAC_SDK_VERSION=$(echo \"${UFW_MAC_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\n# iOS SDK\n# Use the latest iOS SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"iphoneos.*$\")\nwhile read -r line; do\nUFW_IOS_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_IOS_SDK_VERSION=$(echo \"${UFW_IOS_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\n# tvOS SDK\n# Use the latest tvOS SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"appletvos.*$\")\nwhile read -r line; do\nUFW_TVOS_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_TVOS_SDK_VERSION=$(echo \"${UFW_TVOS_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\nFRAMEWORK_NAME=\"${PROJECT_NAME}\"\n\nUFW_MAC_PATH=\"${UFW_BUILD_DIR}/Release/${FRAMEWORK_NAME}.framework\"\nUFW_CATALYST_PATH=\"${UFW_BUILD_DIR}/Release-maccatalyst/${FRAMEWORK_NAME}.framework\"\nUFW_IOS_PATH=\"${UFW_BUILD_DIR}/Release-iphoneos/${FRAMEWORK_NAME}.framework\"\nUFW_IOS_SIMULATOR_PATH=\"${UFW_BUILD_DIR}/Release-iphonesimulator/${FRAMEWORK_NAME}.framework\"\nUFW_TVOS_PATH=\"${UFW_BUILD_DIR}/Release-appletvos/${FRAMEWORK_NAME}.framework\"\nUFW_TVOS_SIMULATOR_PATH=\"${UFW_BUILD_DIR}/Release-appletvsimulator/${FRAMEWORK_NAME}.framework\"\n\nUFW_UNIVERSAL_DIR=\"${UFW_BUILD_DIR}/Release-universal\"\nUFW_FRAMEWORK=\"${UFW_UNIVERSAL_DIR}/${FRAMEWORK_NAME}.xcframework\"\n\n# Build Framework\n\nrm -rf \"${UFW_UNIVERSAL_DIR}\"\n\n# macOS\nxcodebuild -scheme \"${UFW_MAC_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk macosx${UFW_MAC_SDK_VERSION} clean build SYMROOT=\"${UFW_BUILD_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n# Mac Catalyst\nxcodebuild -scheme \"${UFW_IOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphoneos${UFW_IOS_SDK_VERSION} -destination \"platform=macOS,variant=Mac Catalyst\" build SYMROOT=\"${UFW_BUILD_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n# iOS\nxcodebuild -scheme \"${UFW_IOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphoneos${UFW_IOS_SDK_VERSION} build SYMROOT=\"${UFW_BUILD_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -scheme \"${UFW_IOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphonesimulator${UFW_IOS_SDK_VERSION} build SYMROOT=\"${UFW_BUILD_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n#tvOS\nxcodebuild -scheme \"${UFW_TVOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk appletvos${UFW_TVOS_SDK_VERSION} build SYMROOT=\"${UFW_BUILD_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -scheme \"${UFW_TVOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk appletvsimulator${UFW_TVOS_SDK_VERSION} build SYMROOT=\"${UFW_BUILD_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n\nmkdir -p \"${UFW_UNIVERSAL_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\nxcodebuild -create-xcframework -output \"${UFW_FRAMEWORK}\" \\\n -framework \"${UFW_MAC_PATH}\" \\\n -framework \"${UFW_CATALYST_PATH}\" \\\n -framework \"${UFW_IOS_PATH}\" \\\n -framework \"${UFW_IOS_SIMULATOR_PATH}\" \\\n -framework \"${UFW_TVOS_PATH}\" \\\n -framework \"${UFW_TVOS_SIMULATOR_PATH}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: create XCFramework failed\"; exit 1; fi\n\n"; }; /* End PBXShellScriptBuildPhase section */ diff --git a/framework/xcconfig/CorePlot.xcconfig b/framework/xcconfig/CorePlot.xcconfig index fb0fe03a1..3a87e08fa 100644 --- a/framework/xcconfig/CorePlot.xcconfig +++ b/framework/xcconfig/CorePlot.xcconfig @@ -8,7 +8,6 @@ TVOS_DEPLOYMENT_TARGET = 12.0 SWIFT_VERSION = 5.0 -SYMROOT = $(PROJECT_DIR)/../build PRODUCT_BUNDLE_IDENTIFIER = com.CorePlot.$(PRODUCT_NAME:rfc1034identifier) ALWAYS_SEARCH_USER_PATHS = NO From 0ebfe1d6b0645dcdfd7aa6912d7411f81099055e Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 21 Jan 2023 19:34:17 -0500 Subject: [PATCH 131/245] Fixed code signing settings that were causing issues with the unit tests. --- framework/CorePlot.xcodeproj/project.pbxproj | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 966e86107..7345aacfd 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -2901,6 +2901,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; buildSettings = { + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlotTests-Info.plist"; INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles"; PRODUCT_NAME = UnitTests; @@ -2917,6 +2918,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; buildSettings = { + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlotTests-Info.plist"; INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles"; PRODUCT_NAME = UnitTests; @@ -3075,6 +3077,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; buildSettings = { + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-tvOSTests-Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -3095,6 +3098,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; buildSettings = { + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-tvOSTests-Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -3167,6 +3171,10 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-iOSTests-Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -3175,6 +3183,7 @@ ); MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; USER_HEADER_SEARCH_PATHS = ( @@ -3188,6 +3197,10 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-iOSTests-Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -3196,6 +3209,7 @@ ); MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; USER_HEADER_SEARCH_PATHS = ( From 9373befbea313bf78ccaf18b29947deb8a61246c Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 22 Jan 2023 09:25:08 -0500 Subject: [PATCH 132/245] Added logging statements in generate_spm_sources_layout.sh --- scripts/generate_spm_sources_layout.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/scripts/generate_spm_sources_layout.sh b/scripts/generate_spm_sources_layout.sh index a77c38a3d..8fc85e637 100755 --- a/scripts/generate_spm_sources_layout.sh +++ b/scripts/generate_spm_sources_layout.sh @@ -5,10 +5,15 @@ set -e SPM_SOURCES_PATH="$SOURCE_ROOT/../spm/Sources/core-plot" SPM_PUBLIC_HEADERS_PATH="$SPM_SOURCES_PATH/include" -# Delete all symbolik links from `spm` folder function cleanup() { + echo "Delete all symbolic links from spm folder" + echo "Deleted from $SPM_SOURCES_PATH" + rm -rf "$SPM_PUBLIC_HEADERS_PATH"/*.[hm] rm -rf "$SPM_SOURCES_PATH"/*.[hm] + + echo " Done" + echo "" } function generate_spm_public_headers() { From 0270ef300ccecfb480fedbc4c7943b50fc8ec21b Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 22 Jan 2023 09:27:51 -0500 Subject: [PATCH 133/245] Enabled "Run Build Script Phases in Parallel" for all builds. --- framework/xcconfig/CorePlot.xcconfig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/framework/xcconfig/CorePlot.xcconfig b/framework/xcconfig/CorePlot.xcconfig index 3a87e08fa..52f6e18e1 100644 --- a/framework/xcconfig/CorePlot.xcconfig +++ b/framework/xcconfig/CorePlot.xcconfig @@ -26,6 +26,8 @@ COPY_PHASE_STRIP = YES DEAD_CODE_STRIPPING = YES DEBUG_INFORMATION_FORMAT = dwarf-with-dsym +FUSE_BUILD_SCRIPT_PHASES = YES + GCC_C_LANGUAGE_STANDARD = c99 GCC_CHAR_IS_UNSIGNED_CHAR = NO GCC_CW_ASM_SYNTAX = YES From 83d5941f381686cb9d1669361d700bb22a214762 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 22 Jan 2023 09:44:41 -0500 Subject: [PATCH 134/245] Enabled "Run Build Script Phases in Parallel" for all targets in the CorePlot project. Don't use the .xcconfig file since that's not used by the script targets and is shared by the example apps. --- framework/CorePlot.xcodeproj/project.pbxproj | 2 ++ framework/xcconfig/CorePlot.xcconfig | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 7345aacfd..7cf2dd554 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -2977,6 +2977,7 @@ isa = XCBuildConfiguration; buildSettings = { CURRENT_PROJECT_VERSION = 2.3; + FUSE_BUILD_SCRIPT_PHASES = YES; }; name = Debug; }; @@ -2984,6 +2985,7 @@ isa = XCBuildConfiguration; buildSettings = { CURRENT_PROJECT_VERSION = 2.3; + FUSE_BUILD_SCRIPT_PHASES = YES; }; name = Release; }; diff --git a/framework/xcconfig/CorePlot.xcconfig b/framework/xcconfig/CorePlot.xcconfig index 52f6e18e1..3a87e08fa 100644 --- a/framework/xcconfig/CorePlot.xcconfig +++ b/framework/xcconfig/CorePlot.xcconfig @@ -26,8 +26,6 @@ COPY_PHASE_STRIP = YES DEAD_CODE_STRIPPING = YES DEBUG_INFORMATION_FORMAT = dwarf-with-dsym -FUSE_BUILD_SCRIPT_PHASES = YES - GCC_C_LANGUAGE_STANDARD = c99 GCC_CHAR_IS_UNSIGNED_CHAR = NO GCC_CW_ASM_SYNTAX = YES From 7a1146243aa819408e1aec8ac614331d7617d948 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 22 Jan 2023 10:21:08 -0500 Subject: [PATCH 135/245] Enabled "Parallelize build for command-line builds" for the CorePlot project. --- framework/CorePlot.xcodeproj/project.pbxproj | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 7cf2dd554..aa103130b 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -2219,6 +2219,7 @@ 0867D690FE84028FC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { + BuildIndependentTargetsInParallel = YES; LastUpgradeCheck = 1420; TargetAttributes = { 8DC2EF4F0486A6940098B216 = { @@ -2977,7 +2978,6 @@ isa = XCBuildConfiguration; buildSettings = { CURRENT_PROJECT_VERSION = 2.3; - FUSE_BUILD_SCRIPT_PHASES = YES; }; name = Debug; }; @@ -2985,7 +2985,6 @@ isa = XCBuildConfiguration; buildSettings = { CURRENT_PROJECT_VERSION = 2.3; - FUSE_BUILD_SCRIPT_PHASES = YES; }; name = Release; }; From d2643042e2c79f1ef71340d2d3ef22b4e5a2dc45 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 22 Jan 2023 10:47:43 -0500 Subject: [PATCH 136/245] Matrix the unit test CI builds to eliminate a build error and increase flexibility for future additions. --- .github/workflows/ci.yml | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e0570cc96..8c1f1a30c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,18 +6,32 @@ jobs: UnitTests: name: Unit Tests runs-on: macOS-latest + strategy: + matrix: + target: + [ + "UnitTests Mac", + "UnitTests iOS", + "UnitTests tvOS", + ] + sdk: + [ + "", + "iphonesimulator", + "appletvsimulator", + ] + destination: + [ + "", + "name=iPhone 14 Pro", + "name=Apple TV 4K (2nd generation)", + ] steps: - name: Checkout uses: actions/checkout@v3 - - name: Run unit tests for macOS - run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests Mac" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO - - - name: Run unit tests for iOS - run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests iOS" -sdk "iphonesimulator" -destination "name=iPhone 14 Pro" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO - - - name: Run unit tests for tvOS - run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests tvOS" -sdk "appletvsimulator" -destination "name=Apple TV 4K (2nd generation)" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO + - name: Run unit tests + run: xcodebuild -project framework/CorePlot.xcodeproj -target "${{ matrix.target }}" sdk "${{ matrix.sdk }}" -destination "${{ matrix.destination }}" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO SPM: name: Verify SPM build From a0f06588c88211ea05f9700cc29898486e8f3290 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 22 Jan 2023 11:19:29 -0500 Subject: [PATCH 137/245] Fixed the unit test CI matrix. --- .github/workflows/ci.yml | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8c1f1a30c..8f3be7cc3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,33 +5,29 @@ on: [push, pull_request] jobs: UnitTests: name: Unit Tests + run-name: Unit Tests (${{ matrix.target }}) runs-on: macOS-latest strategy: matrix: target: [ - "UnitTests Mac", - "UnitTests iOS", - "UnitTests tvOS", - ] - sdk: - [ - "", - "iphonesimulator", - "appletvsimulator", - ] - destination: - [ - "", - "name=iPhone 14 Pro", - "name=Apple TV 4K (2nd generation)", + Mac, + iOS, + tvOS, ] + include: + - target: iOS + sdk: iphonesimulator + destination: "name=iPhone 14 Pro" + - target: tvOS + sdk: appletvsimulator + destination: "name=Apple TV 4K (2nd generation)" steps: - name: Checkout uses: actions/checkout@v3 - name: Run unit tests - run: xcodebuild -project framework/CorePlot.xcodeproj -target "${{ matrix.target }}" sdk "${{ matrix.sdk }}" -destination "${{ matrix.destination }}" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO + run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests ${{ matrix.target }}" sdk "${{ matrix.sdk }}" -destination "${{ matrix.destination }}" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO SPM: name: Verify SPM build From d55af3ca7803b8c1ce2f659097b3eff574c9b345 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 22 Jan 2023 11:23:01 -0500 Subject: [PATCH 138/245] Removed invalid name from the ci.yml file. --- .github/workflows/ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8f3be7cc3..13293afe5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,7 +5,6 @@ on: [push, pull_request] jobs: UnitTests: name: Unit Tests - run-name: Unit Tests (${{ matrix.target }}) runs-on: macOS-latest strategy: matrix: From d1e1fcf17e1593a84132f589c6c0eab08fe5545d Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 22 Jan 2023 11:25:16 -0500 Subject: [PATCH 139/245] Fixed syntax error in ci.yml. --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 13293afe5..9043344e1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,7 +26,7 @@ jobs: uses: actions/checkout@v3 - name: Run unit tests - run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests ${{ matrix.target }}" sdk "${{ matrix.sdk }}" -destination "${{ matrix.destination }}" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO + run: xcodebuild -project framework/CorePlot.xcodeproj -target "UnitTests ${{ matrix.target }}" -sdk "${{ matrix.sdk }}" -destination "${{ matrix.destination }}" -configuration Release ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO SPM: name: Verify SPM build From 5967785ef62b11c904a5e517074e76048d014235 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 22 Jan 2023 11:33:26 -0500 Subject: [PATCH 140/245] Added missing sdk and destination values for Mac Unit Test CI builds. --- .github/workflows/ci.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9043344e1..a8736f30e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,12 +15,15 @@ jobs: tvOS, ] include: + - target: Mac + sdk: macosx + destination: "platform=macOS" - target: iOS sdk: iphonesimulator - destination: "name=iPhone 14 Pro" + destination: "platform=iOS Simulator,name=iPhone 14 Pro" - target: tvOS sdk: appletvsimulator - destination: "name=Apple TV 4K (2nd generation)" + destination: "platform=tvOS Simulator,name=Apple TV 4K (2nd generation)" steps: - name: Checkout uses: actions/checkout@v3 From 017f54c7e85d4274b1283ee09425358742710005 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 29 Jan 2023 08:41:09 -0500 Subject: [PATCH 141/245] Removed obsolete xcLanguageSpecificationIdentifier tags from the project files. --- .../CPTTestApp-iPad.xcodeproj/project.pbxproj | 4 +- .../Plot_Gallery.xcodeproj/project.pbxproj | 26 +-- .../DropPlot.xcodeproj/project.pbxproj | 2 +- framework/CorePlot.xcodeproj/project.pbxproj | 184 +++++++++--------- 4 files changed, 108 insertions(+), 108 deletions(-) diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj index f800fc077..3351fc55a 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj @@ -97,8 +97,8 @@ 1D6058910D05DD3D006BFB54 /* CPTTestApp-iPad.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "CPTTestApp-iPad.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 288765A40DF7441C002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - 28D7ACF60DDB3853001CB0EB /* CPTTestApp_iPadViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTTestApp_iPadViewController.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 28D7ACF70DDB3853001CB0EB /* CPTTestApp_iPadViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTTestApp_iPadViewController.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 28D7ACF60DDB3853001CB0EB /* CPTTestApp_iPadViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTTestApp_iPadViewController.h; sourceTree = ""; }; + 28D7ACF70DDB3853001CB0EB /* CPTTestApp_iPadViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTTestApp_iPadViewController.m; sourceTree = ""; }; 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 32CA4F630368D1EE00C91783 /* CPTTestApp-iPad_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CPTTestApp-iPad_Prefix.pch"; sourceTree = ""; }; BC65758E116549890008F594 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; diff --git a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj index c7e2b3042..20bfb5765 100644 --- a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj +++ b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj @@ -225,10 +225,10 @@ 4F22FF4A1234298E006BF615 /* Plot_Gallery_MacAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Plot_Gallery_MacAppDelegate.h; path = src/mac/Plot_Gallery_MacAppDelegate.h; sourceTree = ""; }; 4F22FF4B1234298E006BF615 /* Plot_Gallery_MacAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Plot_Gallery_MacAppDelegate.m; path = src/mac/Plot_Gallery_MacAppDelegate.m; sourceTree = ""; }; 4F22FF7B12342B5A006BF615 /* Plot_Gallery_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Plot_Gallery_Prefix.pch; sourceTree = ""; }; - 4F22FF9A12342D7C006BF615 /* CompositePlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CompositePlot.h; path = src/plots/CompositePlot.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 4F22FF9B12342D7C006BF615 /* CompositePlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CompositePlot.m; path = src/plots/CompositePlot.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 4F22FF9A12342D7C006BF615 /* CompositePlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CompositePlot.h; path = src/plots/CompositePlot.h; sourceTree = ""; }; + 4F22FF9B12342D7C006BF615 /* CompositePlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CompositePlot.m; path = src/plots/CompositePlot.m; sourceTree = ""; }; 4F22FF9C12342D7C006BF615 /* GradientScatterPlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GradientScatterPlot.h; path = src/plots/GradientScatterPlot.h; sourceTree = ""; }; - 4F22FF9D12342D7C006BF615 /* GradientScatterPlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = GradientScatterPlot.m; path = src/plots/GradientScatterPlot.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 4F22FF9D12342D7C006BF615 /* GradientScatterPlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = GradientScatterPlot.m; path = src/plots/GradientScatterPlot.m; sourceTree = ""; }; 4F22FF9E12342D7C006BF615 /* SimplePieChart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SimplePieChart.h; path = src/plots/SimplePieChart.h; sourceTree = ""; }; 4F22FF9F12342D7C006BF615 /* SimplePieChart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SimplePieChart.m; path = src/plots/SimplePieChart.m; sourceTree = ""; }; 4F22FFA012342D7C006BF615 /* SimpleScatterPlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SimpleScatterPlot.h; path = src/plots/SimpleScatterPlot.h; sourceTree = ""; }; @@ -237,7 +237,7 @@ 4F22FFA312342D7C006BF615 /* VerticalBarChart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VerticalBarChart.m; path = src/plots/VerticalBarChart.m; sourceTree = ""; }; 4F22FFAB12342DB1006BF615 /* PlotGallery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PlotGallery.h; path = src/shared/PlotGallery.h; sourceTree = ""; }; 4F22FFAC12342DB1006BF615 /* PlotGallery.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PlotGallery.m; path = src/shared/PlotGallery.m; sourceTree = ""; }; - 4F22FFAD12342DB1006BF615 /* PlotItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = PlotItem.h; path = src/shared/PlotItem.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 4F22FFAD12342DB1006BF615 /* PlotItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = PlotItem.h; path = src/shared/PlotItem.h; sourceTree = ""; }; 4F22FFAE12342DB1006BF615 /* PlotItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PlotItem.m; path = src/shared/PlotItem.m; sourceTree = ""; }; 4F22FFE7123431D2006BF615 /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = System/Library/Frameworks/Quartz.framework; sourceTree = SDKROOT; }; 4F35EBF3123611E3007C3389 /* PlotGalleryController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PlotGalleryController.h; path = src/mac/PlotGalleryController.h; sourceTree = ""; }; @@ -246,11 +246,11 @@ 4F35EBF6123611E3007C3389 /* PlotView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PlotView.m; path = src/mac/PlotView.m; sourceTree = ""; }; 4F35EC1D1236AE6E007C3389 /* CorePlot.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = CorePlot.xcodeproj; path = ../../framework/CorePlot.xcodeproj; sourceTree = SOURCE_ROOT; }; 4F8E1C12129077C200D2035F /* DatePlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DatePlot.h; path = src/plots/DatePlot.h; sourceTree = ""; }; - 4F8E1C13129077C200D2035F /* DatePlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = DatePlot.m; path = src/plots/DatePlot.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 4F8E1C13129077C200D2035F /* DatePlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = DatePlot.m; path = src/plots/DatePlot.m; sourceTree = ""; }; 4F8E1C84129083B000D2035F /* SteppedScatterPlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SteppedScatterPlot.h; path = src/plots/SteppedScatterPlot.h; sourceTree = ""; }; 4F8E1C85129083B000D2035F /* SteppedScatterPlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SteppedScatterPlot.m; path = src/plots/SteppedScatterPlot.m; sourceTree = ""; }; 4F8E1CC012908B0000D2035F /* AxisDemo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AxisDemo.h; path = src/plots/AxisDemo.h; sourceTree = ""; }; - 4F8E1CC112908B0000D2035F /* AxisDemo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = AxisDemo.m; path = src/plots/AxisDemo.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 4F8E1CC112908B0000D2035F /* AxisDemo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = AxisDemo.m; path = src/plots/AxisDemo.m; sourceTree = ""; }; 8D1107320486CEB800E47090 /* Plot Gallery.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Plot Gallery.app"; sourceTree = BUILT_PRODUCTS_DIR; }; C309C23323B3E12500DEDE9D /* PlotViewItem.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = PlotViewItem.xib; path = "Plot Gallery-Mac/PlotViewItem.xib"; sourceTree = ""; }; C309C23523B3E21500DEDE9D /* PlotViewItem.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = PlotViewItem.m; path = src/mac/PlotViewItem.m; sourceTree = ""; }; @@ -295,17 +295,17 @@ C360E1C413B18AAF007994B6 /* OHLCPlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OHLCPlot.h; path = src/plots/OHLCPlot.h; sourceTree = ""; }; C360E1C513B18AAF007994B6 /* OHLCPlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OHLCPlot.m; path = src/plots/OHLCPlot.m; sourceTree = ""; }; C360E1DE13B18CAE007994B6 /* CandlestickPlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CandlestickPlot.h; path = src/plots/CandlestickPlot.h; sourceTree = ""; }; - C360E1DF13B18CAE007994B6 /* CandlestickPlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CandlestickPlot.m; path = src/plots/CandlestickPlot.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C360E1DF13B18CAE007994B6 /* CandlestickPlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CandlestickPlot.m; path = src/plots/CandlestickPlot.m; sourceTree = ""; }; C367249113E103910070F47A /* LineCapDemo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LineCapDemo.h; path = src/plots/LineCapDemo.h; sourceTree = ""; }; C367249213E103910070F47A /* LineCapDemo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LineCapDemo.m; path = src/plots/LineCapDemo.m; sourceTree = ""; }; C39C4E3F13BFE1A900CD9194 /* LabelingPolicyDemo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LabelingPolicyDemo.h; path = src/plots/LabelingPolicyDemo.h; sourceTree = ""; }; - C39C4E4013BFE1A900CD9194 /* LabelingPolicyDemo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = LabelingPolicyDemo.m; path = src/plots/LabelingPolicyDemo.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C39C4E4013BFE1A900CD9194 /* LabelingPolicyDemo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = LabelingPolicyDemo.m; path = src/plots/LabelingPolicyDemo.m; sourceTree = ""; }; C39C4E4213BFE1B400CD9194 /* PlotSpaceDemo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PlotSpaceDemo.h; path = src/plots/PlotSpaceDemo.h; sourceTree = ""; }; C39C4E4313BFE1B400CD9194 /* PlotSpaceDemo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PlotSpaceDemo.m; path = src/plots/PlotSpaceDemo.m; sourceTree = ""; }; C3A14BEA13AEB7E700D103EA /* RangePlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RangePlot.h; path = src/plots/RangePlot.h; sourceTree = ""; }; C3A14BEB13AEB7E700D103EA /* RangePlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RangePlot.m; path = src/plots/RangePlot.m; sourceTree = ""; }; C3A31A5414DF782A00734AB7 /* ColoredBarChart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ColoredBarChart.h; path = src/plots/ColoredBarChart.h; sourceTree = ""; }; - C3A31A5514DF782A00734AB7 /* ColoredBarChart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = ColoredBarChart.m; path = src/plots/ColoredBarChart.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C3A31A5514DF782A00734AB7 /* ColoredBarChart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = ColoredBarChart.m; path = src/plots/ColoredBarChart.m; sourceTree = ""; }; C3B9C2691BCB237000BD560B /* DetailViewControllerTV.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DetailViewControllerTV.h; path = src/tvOS/DetailViewControllerTV.h; sourceTree = ""; }; C3B9C26A1BCB237000BD560B /* DetailViewControllerTV.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DetailViewControllerTV.m; path = src/tvOS/DetailViewControllerTV.m; sourceTree = ""; }; C3B9C26B1BCB237000BD560B /* RootViewControllerTV.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RootViewControllerTV.h; path = src/tvOS/RootViewControllerTV.h; sourceTree = ""; }; @@ -318,17 +318,17 @@ C3D0A1C920E018DE00BA2921 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; C3D2FE6219FF1D03002CD4D6 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = img/Images.xcassets; sourceTree = ""; }; C3D70BA4175EB29E00F27173 /* ImageDemo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ImageDemo.h; path = src/plots/ImageDemo.h; sourceTree = ""; }; - C3D70BA5175EB29E00F27173 /* ImageDemo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = ImageDemo.m; path = src/plots/ImageDemo.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C3D70BA5175EB29E00F27173 /* ImageDemo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = ImageDemo.m; path = src/plots/ImageDemo.m; sourceTree = ""; }; C3E4280729626F81007C2758 /* CorePlotDebug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotDebug.xcconfig; path = ../../framework/xcconfig/CorePlotDebug.xcconfig; sourceTree = ""; }; C3E4281229626F81007C2758 /* CorePlot.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlot.xcconfig; path = ../../framework/xcconfig/CorePlot.xcconfig; sourceTree = ""; }; C3E4281329626F81007C2758 /* CorePlotRelease.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotRelease.xcconfig; path = ../../framework/xcconfig/CorePlotRelease.xcconfig; sourceTree = ""; }; C3EF42FC19FC75810060791A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = "Plot Gallery-Mac/Images.xcassets"; sourceTree = ""; }; C3F34F1312AB2598008FBDC3 /* DonutChart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DonutChart.h; path = src/plots/DonutChart.h; sourceTree = ""; }; - C3F34F1412AB2598008FBDC3 /* DonutChart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = DonutChart.m; path = src/plots/DonutChart.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C3F34F1412AB2598008FBDC3 /* DonutChart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = DonutChart.m; path = src/plots/DonutChart.m; sourceTree = ""; }; C3F42A2614D3A75F0044B323 /* CurvedScatterPlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CurvedScatterPlot.h; path = src/plots/CurvedScatterPlot.h; sourceTree = ""; }; - C3F42A2714D3A75F0044B323 /* CurvedScatterPlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 2; name = CurvedScatterPlot.m; path = src/plots/CurvedScatterPlot.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C3F42A2714D3A75F0044B323 /* CurvedScatterPlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 2; name = CurvedScatterPlot.m; path = src/plots/CurvedScatterPlot.m; sourceTree = ""; }; C3F97F1717A9DE2000A52FF2 /* FunctionPlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FunctionPlot.h; path = src/plots/FunctionPlot.h; sourceTree = ""; }; - C3F97F1817A9DE2000A52FF2 /* FunctionPlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = FunctionPlot.m; path = src/plots/FunctionPlot.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C3F97F1817A9DE2000A52FF2 /* FunctionPlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = FunctionPlot.m; path = src/plots/FunctionPlot.m; sourceTree = ""; }; E9595DFA1C9973B9004129DA /* CurvedInterpolationDemo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CurvedInterpolationDemo.h; path = src/plots/CurvedInterpolationDemo.h; sourceTree = ""; }; E9595DFB1C9973B9004129DA /* CurvedInterpolationDemo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CurvedInterpolationDemo.m; path = src/plots/CurvedInterpolationDemo.m; sourceTree = ""; }; /* End PBXFileReference section */ diff --git a/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj b/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj index ca9163c7d..3043cdda8 100644 --- a/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj +++ b/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj @@ -90,7 +90,7 @@ /* Begin PBXFileReference section */ 1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 13E42FBA07B3F13500E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; - 2A37F4ACFDCFA73011CA2CEA /* CPTPlotDocument.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlotDocument.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 2A37F4ACFDCFA73011CA2CEA /* CPTPlotDocument.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlotDocument.m; sourceTree = ""; }; 2A37F4AEFDCFA73011CA2CEA /* CPTPlotDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTPlotDocument.h; sourceTree = ""; }; 2A37F4B0FDCFA73011CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 2A37F4C4FDCFA73011CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index aa103130b..dbe8208c0 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -766,95 +766,95 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 070064E7111F2BAA003DE087 /* CPTConstraints.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTConstraints.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 070064E8111F2BAA003DE087 /* CPTConstraints.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTConstraints.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 070064E7111F2BAA003DE087 /* CPTConstraints.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTConstraints.h; sourceTree = ""; }; + 070064E8111F2BAA003DE087 /* CPTConstraints.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTConstraints.m; sourceTree = ""; }; 070622300FDF1B250066A6C4 /* CPTPathExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTPathExtensions.h; sourceTree = ""; }; 070622310FDF1B250066A6C4 /* CPTPathExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTPathExtensions.m; sourceTree = ""; }; 0706223A0FDF215C0066A6C4 /* CPTBorderedLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTBorderedLayer.h; sourceTree = ""; }; - 0706223B0FDF215C0066A6C4 /* CPTBorderedLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTBorderedLayer.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 0706223B0FDF215C0066A6C4 /* CPTBorderedLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTBorderedLayer.m; sourceTree = ""; }; 070A73DA0F5D8C910014FA84 /* CPTDecimalNumberValueTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPTDecimalNumberValueTransformer.h; path = ../MacOnly/CPTDecimalNumberValueTransformer.h; sourceTree = ""; }; 070A73DB0F5D8C910014FA84 /* CPTDecimalNumberValueTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CPTDecimalNumberValueTransformer.m; path = ../MacOnly/CPTDecimalNumberValueTransformer.m; sourceTree = ""; }; 070CF7AE0F3CA7AB0001FFF4 /* CorePlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CorePlot.h; sourceTree = ""; }; 071F3CB810FBAB5900D0A7B6 /* License.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = License.txt; path = ../License.txt; sourceTree = SOURCE_ROOT; }; 072161E911D1F6BD009CC871 /* CPTAnnotationHostLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTAnnotationHostLayer.h; sourceTree = ""; }; - 072161EA11D1F6BD009CC871 /* CPTAnnotationHostLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAnnotationHostLayer.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 072161EA11D1F6BD009CC871 /* CPTAnnotationHostLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAnnotationHostLayer.m; sourceTree = ""; }; 0730F600109492D800E95162 /* UnitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 0730F64C109494D100E95162 /* CPTTestCase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTTestCase.h; sourceTree = ""; }; 0730F64D109494D100E95162 /* CPTTestCase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTTestCase.m; sourceTree = ""; }; 07321BBF0F37370D00F423D8 /* CPTExceptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTExceptions.h; sourceTree = ""; }; 07321BC00F37370D00F423D8 /* CPTExceptions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTExceptions.m; sourceTree = ""; }; 07321BC40F37382D00F423D8 /* CPTUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTUtilities.h; sourceTree = ""; }; - 07321BC50F37382D00F423D8 /* CPTUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTUtilities.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 073FB02E0FC991A3007A728E /* CPTAxisLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTAxisLabel.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 073FB02F0FC991A3007A728E /* CPTAxisLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAxisLabel.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 07321BC50F37382D00F423D8 /* CPTUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTUtilities.m; sourceTree = ""; }; + 073FB02E0FC991A3007A728E /* CPTAxisLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTAxisLabel.h; sourceTree = ""; }; + 073FB02F0FC991A3007A728E /* CPTAxisLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAxisLabel.m; sourceTree = ""; }; 0772B43710E24D5C009CD04C /* CPTTradingRangePlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTTradingRangePlot.h; sourceTree = ""; }; 0772B43810E24D5C009CD04C /* CPTTradingRangePlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTTradingRangePlot.m; sourceTree = ""; }; - 0772C9250FE2F71600EC4C16 /* CPTTheme.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTTheme.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 0772C9260FE2F71600EC4C16 /* CPTTheme.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTTheme.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 0772C9250FE2F71600EC4C16 /* CPTTheme.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTTheme.h; sourceTree = ""; }; + 0772C9260FE2F71600EC4C16 /* CPTTheme.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTTheme.m; sourceTree = ""; }; 0772C92D0FE2F89000EC4C16 /* _CPTDarkGradientTheme.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTDarkGradientTheme.h; sourceTree = ""; }; 0772C92E0FE2F89000EC4C16 /* _CPTDarkGradientTheme.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = _CPTDarkGradientTheme.m; sourceTree = ""; }; 0783DD530FBF097E006C3696 /* CPTXYAxis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTXYAxis.h; sourceTree = ""; }; 0783DD540FBF097E006C3696 /* CPTXYAxis.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTXYAxis.m; sourceTree = ""; }; - 078F42D90FACC075006E670B /* NSNumberExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = NSNumberExtensions.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 078F42DA0FACC075006E670B /* NSNumberExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = NSNumberExtensions.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 078F42D90FACC075006E670B /* NSNumberExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = NSNumberExtensions.h; sourceTree = ""; }; + 078F42DA0FACC075006E670B /* NSNumberExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = NSNumberExtensions.m; sourceTree = ""; }; 07975C410F3B816600DE45DC /* CPTXYAxisSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTXYAxisSet.h; sourceTree = ""; }; 07975C420F3B816600DE45DC /* CPTXYAxisSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTXYAxisSet.m; sourceTree = ""; }; - 07975C470F3B818800DE45DC /* CPTAxis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTAxis.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 07975C470F3B818800DE45DC /* CPTAxis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTAxis.h; sourceTree = ""; }; 07975C480F3B818800DE45DC /* CPTAxis.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAxis.m; sourceTree = ""; }; - 07983EF40F2F9A3D008C8618 /* CPTXYGraph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTXYGraph.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 07983EF40F2F9A3D008C8618 /* CPTXYGraph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTXYGraph.h; sourceTree = ""; }; 07983EF50F2F9A3D008C8618 /* CPTXYGraph.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTXYGraph.m; sourceTree = ""; }; - 0799E0930F2BB5F300790525 /* CPTBarPlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTBarPlot.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 0799E0930F2BB5F300790525 /* CPTBarPlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTBarPlot.h; sourceTree = ""; }; 0799E0940F2BB5F300790525 /* CPTBarPlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTBarPlot.m; sourceTree = ""; }; 0799E0970F2BB6E800790525 /* CPTXYPlotSpace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTXYPlotSpace.h; sourceTree = ""; }; - 079FC0B20FB975500037E990 /* CPTColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTColor.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 079FC0B30FB975500037E990 /* CPTColor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTColor.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 079FC0BB0FB9762B0037E990 /* CPTColorSpace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTColorSpace.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 079FC0BC0FB9762B0037E990 /* CPTColorSpace.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTColorSpace.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 07A2E6FA102DF47900809BC5 /* CPTTimeFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTTimeFormatter.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 079FC0B20FB975500037E990 /* CPTColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTColor.h; sourceTree = ""; }; + 079FC0B30FB975500037E990 /* CPTColor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTColor.m; sourceTree = ""; }; + 079FC0BB0FB9762B0037E990 /* CPTColorSpace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTColorSpace.h; sourceTree = ""; }; + 079FC0BC0FB9762B0037E990 /* CPTColorSpace.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTColorSpace.m; sourceTree = ""; }; + 07A2E6FA102DF47900809BC5 /* CPTTimeFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTTimeFormatter.h; sourceTree = ""; }; 07A2E6FB102DF47900809BC5 /* CPTTimeFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTTimeFormatter.m; sourceTree = ""; }; 07AEF1FD10BBE1F10012BEFF /* CPTResponder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTResponder.h; sourceTree = ""; }; - 07B69A5B12B6215000F4C16C /* CPTTextStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTTextStyle.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 07B69A5B12B6215000F4C16C /* CPTTextStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTTextStyle.h; sourceTree = ""; }; 07B69A5C12B6215000F4C16C /* CPTTextStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTTextStyle.m; sourceTree = ""; }; 07B69B1512B62ABB00F4C16C /* CPTMutableLineStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTMutableLineStyle.h; sourceTree = ""; }; - 07B69B1612B62ABB00F4C16C /* CPTMutableLineStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTMutableLineStyle.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 07B69B1612B62ABB00F4C16C /* CPTMutableLineStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTMutableLineStyle.m; sourceTree = ""; }; 07BF0D630F2B70B8002FCEA7 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; - 07BF0D700F2B718F002FCEA7 /* CPTGraph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTGraph.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 07BF0D700F2B718F002FCEA7 /* CPTGraph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTGraph.h; sourceTree = ""; }; 07BF0D710F2B718F002FCEA7 /* CPTGraph.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTGraph.m; sourceTree = ""; }; 07BF0D760F2B723A002FCEA7 /* CPTPlotAreaFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTPlotAreaFrame.h; sourceTree = ""; }; - 07BF0D770F2B723A002FCEA7 /* CPTPlotAreaFrame.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlotAreaFrame.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 07BF0D7A0F2B72B0002FCEA7 /* CPTPlotSpace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTPlotSpace.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 07BF0D770F2B723A002FCEA7 /* CPTPlotAreaFrame.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlotAreaFrame.m; sourceTree = ""; }; + 07BF0D7A0F2B72B0002FCEA7 /* CPTPlotSpace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTPlotSpace.h; sourceTree = ""; }; 07BF0D7B0F2B72B0002FCEA7 /* CPTPlotSpace.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlotSpace.m; sourceTree = ""; }; - 07BF0D7E0F2B72F6002FCEA7 /* CPTPlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTPlot.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 07BF0D7E0F2B72F6002FCEA7 /* CPTPlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTPlot.h; sourceTree = ""; }; 07BF0D7F0F2B72F6002FCEA7 /* CPTPlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlot.m; sourceTree = ""; }; 07BF0D820F2B7340002FCEA7 /* CPTAxisSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTAxisSet.h; sourceTree = ""; }; - 07BF0D830F2B7340002FCEA7 /* CPTAxisSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAxisSet.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 07BF0D830F2B7340002FCEA7 /* CPTAxisSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAxisSet.m; sourceTree = ""; }; 07BF0D950F2B73CA002FCEA7 /* CPTScatterPlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTScatterPlot.h; sourceTree = ""; }; 07BF0D960F2B73CA002FCEA7 /* CPTScatterPlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTScatterPlot.m; sourceTree = ""; }; - 07BF0DF10F2B7BFB002FCEA7 /* CPTDefinitions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTDefinitions.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 07BF0DF10F2B7BFB002FCEA7 /* CPTDefinitions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTDefinitions.h; sourceTree = ""; }; 07BF0DF20F2B7BFB002FCEA7 /* CPTDefinitions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTDefinitions.m; sourceTree = ""; }; 07C467990FE1A24C00299939 /* CPTMutableTextStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTMutableTextStyle.h; sourceTree = ""; }; 07C4679A0FE1A24C00299939 /* CPTMutableTextStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTMutableTextStyle.m; sourceTree = ""; }; - 07CA112D0FAC8F85000861CE /* CPTGradient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTGradient.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 07CA112E0FAC8F85000861CE /* CPTGradient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTGradient.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 07E10BAF11D1016B000B8DAB /* CPTPlotSpaceAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTPlotSpaceAnnotation.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 07E10BB011D1016B000B8DAB /* CPTPlotSpaceAnnotation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlotSpaceAnnotation.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 07E10BB411D10177000B8DAB /* CPTAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTAnnotation.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 07E10BB511D10177000B8DAB /* CPTAnnotation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAnnotation.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 07E10BB911D10183000B8DAB /* CPTLayerAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLayerAnnotation.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 07E10BBA11D10183000B8DAB /* CPTLayerAnnotation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLayerAnnotation.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 07CA112D0FAC8F85000861CE /* CPTGradient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTGradient.h; sourceTree = ""; }; + 07CA112E0FAC8F85000861CE /* CPTGradient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTGradient.m; sourceTree = ""; }; + 07E10BAF11D1016B000B8DAB /* CPTPlotSpaceAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTPlotSpaceAnnotation.h; sourceTree = ""; }; + 07E10BB011D1016B000B8DAB /* CPTPlotSpaceAnnotation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlotSpaceAnnotation.m; sourceTree = ""; }; + 07E10BB411D10177000B8DAB /* CPTAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTAnnotation.h; sourceTree = ""; }; + 07E10BB511D10177000B8DAB /* CPTAnnotation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAnnotation.m; sourceTree = ""; }; + 07E10BB911D10183000B8DAB /* CPTLayerAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLayerAnnotation.h; sourceTree = ""; }; + 07E10BBA11D10183000B8DAB /* CPTLayerAnnotation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLayerAnnotation.m; sourceTree = ""; }; 07FCF2C4115B54AE00E46606 /* _CPTSlateTheme.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTSlateTheme.h; sourceTree = ""; }; 07FCF2C5115B54AE00E46606 /* _CPTSlateTheme.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = _CPTSlateTheme.m; sourceTree = ""; }; 07FEBD60110B7E8B00E44D37 /* CPTScatterPlotTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTScatterPlotTests.h; sourceTree = ""; }; 07FEBD61110B7E8B00E44D37 /* CPTScatterPlotTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTScatterPlotTests.m; sourceTree = ""; }; - 32484B3F0F530E8B002151AD /* CPTPlotRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTPlotRange.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 32484B400F530E8B002151AD /* CPTPlotRange.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlotRange.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 32484B3F0F530E8B002151AD /* CPTPlotRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTPlotRange.h; sourceTree = ""; }; + 32484B400F530E8B002151AD /* CPTPlotRange.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlotRange.m; sourceTree = ""; }; 32DBCF5E0370ADEE00C91783 /* CorePlot_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CorePlot_Prefix.pch; sourceTree = ""; }; 4C422A620FB1FCD5000CAA43 /* CPTXYPlotSpaceTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTXYPlotSpaceTests.h; sourceTree = ""; }; 4C422A630FB1FCD5000CAA43 /* CPTXYPlotSpaceTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTXYPlotSpaceTests.m; sourceTree = ""; }; 4C97EEF7104D80C400B554F9 /* CPTNumericData+TypeConversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CPTNumericData+TypeConversion.h"; sourceTree = ""; }; 4C97EEF9104D80C400B554F9 /* CPTNumericData+TypeConversions_Generation.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; lineEnding = 0; path = "CPTNumericData+TypeConversions_Generation.py"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.python; }; - 4C97EEFA104D80C400B554F9 /* CPTNumericData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTNumericData.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 4C97EEFB104D80C400B554F9 /* CPTNumericData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTNumericData.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 4C97EEFA104D80C400B554F9 /* CPTNumericData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTNumericData.h; sourceTree = ""; }; + 4C97EEFB104D80C400B554F9 /* CPTNumericData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTNumericData.m; sourceTree = ""; }; 4C97EEFC104D80C400B554F9 /* CPTNumericDataType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTNumericDataType.h; sourceTree = ""; }; 4C97EEFD104D80C400B554F9 /* CPTNumericDataType.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTNumericDataType.m; sourceTree = ""; }; 4C97EF05104D80D400B554F9 /* CPTNumericDataTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTNumericDataTests.h; sourceTree = ""; }; @@ -862,15 +862,15 @@ 4C97EF07104D80D400B554F9 /* CPTNumericDataTypeConversionTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTNumericDataTypeConversionTests.h; sourceTree = ""; }; 4C97EF08104D80D400B554F9 /* CPTNumericDataTypeConversionTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTNumericDataTypeConversionTests.m; sourceTree = ""; }; 4C97EF10104D819100B554F9 /* CPTMutableNumericData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTMutableNumericData.h; sourceTree = ""; }; - 4C97EF11104D819100B554F9 /* CPTMutableNumericData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTMutableNumericData.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 4C97EF11104D819100B554F9 /* CPTMutableNumericData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTMutableNumericData.m; sourceTree = ""; }; 4C97EF4C104D843E00B554F9 /* license.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = license.txt; sourceTree = ""; }; - 4C9A745D0FB24C7200918464 /* CPTDataSourceTestCase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTDataSourceTestCase.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 4C9A745E0FB24C7200918464 /* CPTDataSourceTestCase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTDataSourceTestCase.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 4C9A745D0FB24C7200918464 /* CPTDataSourceTestCase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTDataSourceTestCase.h; sourceTree = ""; }; + 4C9A745E0FB24C7200918464 /* CPTDataSourceTestCase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTDataSourceTestCase.m; sourceTree = ""; }; 4CD23FFA0FFBE78400ADD2E2 /* CPTAxisLabelTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTAxisLabelTests.h; sourceTree = ""; }; 4CD23FFB0FFBE78400ADD2E2 /* CPTAxisLabelTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTAxisLabelTests.m; sourceTree = ""; }; - 4CD7E7E50F4B4F8200F9BCBB /* CPTTextLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTTextLayer.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 4CD7E7E60F4B4F8200F9BCBB /* CPTTextLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTTextLayer.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 4CD7E7EA0F4B4F9600F9BCBB /* CPTLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLayer.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 4CD7E7E50F4B4F8200F9BCBB /* CPTTextLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTTextLayer.h; sourceTree = ""; }; + 4CD7E7E60F4B4F8200F9BCBB /* CPTTextLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTTextLayer.m; sourceTree = ""; }; + 4CD7E7EA0F4B4F9600F9BCBB /* CPTLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLayer.h; sourceTree = ""; }; 4CD7E7EB0F4B4F9600F9BCBB /* CPTLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLayer.m; sourceTree = ""; }; 4CD7E7EE0F4B4FA700F9BCBB /* NSDecimalNumberExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSDecimalNumberExtensions.h; sourceTree = ""; }; 4CD7E7EF0F4B4FA700F9BCBB /* NSDecimalNumberExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSDecimalNumberExtensions.m; sourceTree = ""; }; @@ -878,16 +878,16 @@ 4CD7E9630F4B625900F9BCBB /* CPTUtilitiesTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTUtilitiesTests.m; sourceTree = ""; }; 8DC2EF5B0486A6940098B216 /* CorePlot.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CorePlot.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9021E5690FC69B2900443472 /* doxygen.config */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; lineEnding = 0; name = doxygen.config; path = ../documentation/doxygen/doxygen.config; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = ""; }; - 906156BC0F375598001B75FC /* CPTLineStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLineStyle.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 906156BC0F375598001B75FC /* CPTLineStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLineStyle.h; sourceTree = ""; }; 906156BD0F375598001B75FC /* CPTLineStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLineStyle.m; sourceTree = ""; }; 90AF4FB90F36D39700753D26 /* CPTXYPlotSpace.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTXYPlotSpace.m; sourceTree = ""; }; - A92C00B71DCB2085A92BE0A9 /* _CPTAnimationNSDecimalPeriod.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTAnimationNSDecimalPeriod.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + A92C00B71DCB2085A92BE0A9 /* _CPTAnimationNSDecimalPeriod.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTAnimationNSDecimalPeriod.m; sourceTree = ""; }; A92C0563E082D1C1E249FA6F /* _CPTAnimationCGSizePeriod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTAnimationCGSizePeriod.h; sourceTree = ""; }; A92C0685ACE3281299F10F73 /* _CPTAnimationNSDecimalPeriod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTAnimationNSDecimalPeriod.h; sourceTree = ""; }; - A92C087BF0913A6BA2363E40 /* _CPTAnimationCGSizePeriod.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTAnimationCGSizePeriod.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + A92C087BF0913A6BA2363E40 /* _CPTAnimationCGSizePeriod.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTAnimationCGSizePeriod.m; sourceTree = ""; }; A92C091B8592D9F32AC384CB /* _CPTAnimationPlotRangePeriod.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = _CPTAnimationPlotRangePeriod.m; sourceTree = ""; }; - A92C0AE447398AF62D584F9C /* _CPTAnimationCGPointPeriod.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTAnimationCGPointPeriod.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - A92C0C3DB583ED8FC2EFD9DB /* _CPTAnimationCGRectPeriod.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTAnimationCGRectPeriod.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + A92C0AE447398AF62D584F9C /* _CPTAnimationCGPointPeriod.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTAnimationCGPointPeriod.m; sourceTree = ""; }; + A92C0C3DB583ED8FC2EFD9DB /* _CPTAnimationCGRectPeriod.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTAnimationCGRectPeriod.m; sourceTree = ""; }; A92C0E154E8598EDE2EDEF2F /* _CPTAnimationCGPointPeriod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTAnimationCGPointPeriod.h; sourceTree = ""; }; A92C0E16290C226BC4BE3936 /* _CPTAnimationPlotRangePeriod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTAnimationPlotRangePeriod.h; sourceTree = ""; }; A92C0E876AE37EB30019586B /* _CPTAnimationCGRectPeriod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTAnimationCGRectPeriod.h; sourceTree = ""; }; @@ -900,12 +900,12 @@ BC74A32E10FC402600E7E90D /* CPTPieChart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTPieChart.h; sourceTree = ""; }; BC74A32F10FC402600E7E90D /* CPTPieChart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPieChart.m; sourceTree = ""; }; BCFC7C3510921FDB00DAECAA /* CPTAxisTitle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTAxisTitle.h; sourceTree = ""; }; - BCFC7C3610921FDB00DAECAA /* CPTAxisTitle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAxisTitle.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - C30550EB1399BE5400E0151F /* CPTLegendEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLegendEntry.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + BCFC7C3610921FDB00DAECAA /* CPTAxisTitle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAxisTitle.m; sourceTree = ""; }; + C30550EB1399BE5400E0151F /* CPTLegendEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLegendEntry.h; sourceTree = ""; }; C30550EC1399BE5400E0151F /* CPTLegendEntry.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLegendEntry.m; sourceTree = ""; }; C30E979F14B290520012204A /* DoxygenLayout.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = DoxygenLayout.xml; path = ../documentation/doxygen/DoxygenLayout.xml; sourceTree = ""; }; - C318F4AB11EA188700595FF9 /* CPTLimitBand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLimitBand.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - C318F4AC11EA188700595FF9 /* CPTLimitBand.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLimitBand.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C318F4AB11EA188700595FF9 /* CPTLimitBand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLimitBand.h; sourceTree = ""; }; + C318F4AC11EA188700595FF9 /* CPTLimitBand.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLimitBand.m; sourceTree = ""; }; C31908A41998168C00B61898 /* CorePlot.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlot.xcconfig; path = xcconfig/CorePlot.xcconfig; sourceTree = ""; }; C3226A451A69ED0900F77249 /* doxygen touch.config */ = {isa = PBXFileReference; lastKnownFileType = text; lineEnding = 0; name = "doxygen touch.config"; path = "../documentation/doxygen/doxygen touch.config"; sourceTree = ""; xcLanguageSpecificationIdentifier = ""; }; C3226A461A69ED1F00F77249 /* doxygen-cocoa-touch-tags.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = "doxygen-cocoa-touch-tags.xml"; path = "../documentation/doxygen/doxygen-cocoa-touch-tags.xml"; sourceTree = ""; }; @@ -913,32 +913,32 @@ C3226A531A69F6DF00F77249 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; C3226A571A69F6FA00F77249 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; C3286BFE15D8740100A436A8 /* _CPTMaskLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTMaskLayer.h; sourceTree = ""; }; - C3286BFF15D8740100A436A8 /* _CPTMaskLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTMaskLayer.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C3286BFF15D8740100A436A8 /* _CPTMaskLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTMaskLayer.m; sourceTree = ""; }; C32B391610AA4C78000470D4 /* CPTGridLines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTGridLines.h; sourceTree = ""; }; - C32B391710AA4C78000470D4 /* CPTGridLines.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTGridLines.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - C32EE1B413EC4AA800038266 /* CPTShadow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTShadow.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - C32EE1B513EC4AA800038266 /* CPTShadow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTShadow.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C32B391710AA4C78000470D4 /* CPTGridLines.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTGridLines.m; sourceTree = ""; }; + C32EE1B413EC4AA800038266 /* CPTShadow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTShadow.h; sourceTree = ""; }; + C32EE1B513EC4AA800038266 /* CPTShadow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTShadow.m; sourceTree = ""; }; C32EE1BF13EC4BE700038266 /* CPTMutableShadow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTMutableShadow.h; sourceTree = ""; }; C32EE1C013EC4BE700038266 /* CPTMutableShadow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTMutableShadow.m; sourceTree = ""; }; C3392A371225F667008DA6BD /* CPTNumericData+TypeConversion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CPTNumericData+TypeConversion.m"; sourceTree = ""; }; C3408C3C15FC1C3E004F1D70 /* _CPTBorderLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTBorderLayer.h; sourceTree = ""; }; - C3408C3D15FC1C3E004F1D70 /* _CPTBorderLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTBorderLayer.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - C34260180FAE096C00072842 /* _CPTFillImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = _CPTFillImage.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - C34260190FAE096C00072842 /* _CPTFillGradient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTFillGradient.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - C342601A0FAE096C00072842 /* CPTFill.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTFill.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - C342601B0FAE096C00072842 /* _CPTFillColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = _CPTFillColor.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - C342601C0FAE096C00072842 /* _CPTFillColor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTFillColor.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - C342601D0FAE096C00072842 /* _CPTFillImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTFillImage.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - C342601E0FAE096C00072842 /* _CPTFillGradient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = _CPTFillGradient.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - C342601F0FAE096C00072842 /* CPTFill.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTFill.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + C3408C3D15FC1C3E004F1D70 /* _CPTBorderLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTBorderLayer.m; sourceTree = ""; }; + C34260180FAE096C00072842 /* _CPTFillImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = _CPTFillImage.h; sourceTree = ""; }; + C34260190FAE096C00072842 /* _CPTFillGradient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTFillGradient.m; sourceTree = ""; }; + C342601A0FAE096C00072842 /* CPTFill.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTFill.m; sourceTree = ""; }; + C342601B0FAE096C00072842 /* _CPTFillColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = _CPTFillColor.h; sourceTree = ""; }; + C342601C0FAE096C00072842 /* _CPTFillColor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTFillColor.m; sourceTree = ""; }; + C342601D0FAE096C00072842 /* _CPTFillImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTFillImage.m; sourceTree = ""; }; + C342601E0FAE096C00072842 /* _CPTFillGradient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = _CPTFillGradient.h; sourceTree = ""; }; + C342601F0FAE096C00072842 /* CPTFill.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTFill.h; sourceTree = ""; }; C3490DF120E028CF0089F309 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/CorePlot-Info.plist"; sourceTree = ""; }; C3490DF320E028D30089F309 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/CorePlot-CocoaTouch-Info.plist"; sourceTree = ""; }; C3490DF520E028D80089F309 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/CorePlot-iOS-Info.plist"; sourceTree = ""; }; C3490DF720E028DC0089F309 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/CorePlot-tvOS-Info.plist"; sourceTree = ""; }; - C349DCB2151AAFBF00BFD6A7 /* CPTCalendarFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTCalendarFormatter.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + C349DCB2151AAFBF00BFD6A7 /* CPTCalendarFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTCalendarFormatter.h; sourceTree = ""; }; C349DCB3151AAFBF00BFD6A7 /* CPTCalendarFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTCalendarFormatter.m; sourceTree = ""; }; - C34AFE6911021D010041675A /* CPTPlotSymbol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTPlotSymbol.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - C34AFE6A11021D010041675A /* CPTPlotSymbol.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlotSymbol.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C34AFE6911021D010041675A /* CPTPlotSymbol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTPlotSymbol.h; sourceTree = ""; }; + C34AFE6A11021D010041675A /* CPTPlotSymbol.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlotSymbol.m; sourceTree = ""; }; C34BF5BA10A67633007F0894 /* CPTPlotArea.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTPlotArea.h; sourceTree = ""; }; C34BF5BB10A67633007F0894 /* CPTPlotArea.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlotArea.m; sourceTree = ""; }; C34F570D19D8CE5500446248 /* CorePlotWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotWarnings.xcconfig; path = xcconfig/CorePlotWarnings.xcconfig; sourceTree = ""; }; @@ -959,9 +959,9 @@ C38A09821A46185300D45436 /* UnitTests iOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "UnitTests iOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; C38A0A531A461F9700D45436 /* CPTTextStylePlatformSpecific.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPTTextStylePlatformSpecific.h; path = PlatformSpecific/CPTTextStylePlatformSpecific.h; sourceTree = SOURCE_ROOT; }; C38A0A541A461F9700D45436 /* CPTTextStylePlatformSpecific.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CPTTextStylePlatformSpecific.m; path = PlatformSpecific/CPTTextStylePlatformSpecific.m; sourceTree = SOURCE_ROOT; }; - C38A0A591A4620B800D45436 /* CPTImagePlatformSpecific.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CPTImagePlatformSpecific.m; path = PlatformSpecific/CPTImagePlatformSpecific.m; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C38A0A591A4620B800D45436 /* CPTImagePlatformSpecific.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CPTImagePlatformSpecific.m; path = PlatformSpecific/CPTImagePlatformSpecific.m; sourceTree = SOURCE_ROOT; }; C38A0B181A46264500D45436 /* CPTPlatformSpecificCategories.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPTPlatformSpecificCategories.h; path = PlatformSpecific/CPTPlatformSpecificCategories.h; sourceTree = SOURCE_ROOT; }; - C38A0B191A46264500D45436 /* CPTPlatformSpecificCategories.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CPTPlatformSpecificCategories.m; path = PlatformSpecific/CPTPlatformSpecificCategories.m; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C38A0B191A46264500D45436 /* CPTPlatformSpecificCategories.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CPTPlatformSpecificCategories.m; path = PlatformSpecific/CPTPlatformSpecificCategories.m; sourceTree = SOURCE_ROOT; }; C38A0B1A1A46264500D45436 /* CPTPlatformSpecificDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPTPlatformSpecificDefines.h; path = PlatformSpecific/CPTPlatformSpecificDefines.h; sourceTree = SOURCE_ROOT; }; C38A0B1B1A46264500D45436 /* CPTPlatformSpecificDefines.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CPTPlatformSpecificDefines.m; path = PlatformSpecific/CPTPlatformSpecificDefines.m; sourceTree = SOURCE_ROOT; }; C38A0B1C1A46264500D45436 /* CPTPlatformSpecificFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPTPlatformSpecificFunctions.h; path = PlatformSpecific/CPTPlatformSpecificFunctions.h; sourceTree = SOURCE_ROOT; }; @@ -969,14 +969,14 @@ C38A0B271A46265300D45436 /* CPTGraphHostingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPTGraphHostingView.h; path = PlatformSpecific/CPTGraphHostingView.h; sourceTree = SOURCE_ROOT; }; C38A0B281A46265300D45436 /* CPTGraphHostingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CPTGraphHostingView.m; path = PlatformSpecific/CPTGraphHostingView.m; sourceTree = SOURCE_ROOT; }; C38DD49111A04B7A002A68E7 /* CPTGridLineGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTGridLineGroup.h; sourceTree = ""; }; - C38DD49211A04B7A002A68E7 /* CPTGridLineGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTGridLineGroup.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C38DD49211A04B7A002A68E7 /* CPTGridLineGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTGridLineGroup.m; sourceTree = ""; }; C3920AC21395B6500045F3BB /* CPTLegend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLegend.h; sourceTree = ""; }; C3920AC31395B6500045F3BB /* CPTLegend.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLegend.m; sourceTree = ""; }; C3978E0413CE653B00A420D9 /* NSCoderExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSCoderExtensions.h; sourceTree = ""; }; C3978E0513CE653B00A420D9 /* NSCoderExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSCoderExtensions.m; sourceTree = ""; }; C3A695E3146A19BC00AF5653 /* CPTMutablePlotRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTMutablePlotRange.h; sourceTree = ""; }; C3A695E4146A19BC00AF5653 /* CPTMutablePlotRange.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTMutablePlotRange.m; sourceTree = ""; }; - C3AFC9CF0FB62969005DFFDC /* CPTImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTImage.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + C3AFC9CF0FB62969005DFFDC /* CPTImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTImage.h; sourceTree = ""; }; C3AFC9D00FB62969005DFFDC /* CPTImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTImage.m; sourceTree = ""; }; C3B235631009931400970270 /* doxygen-cocoa-tags.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = "doxygen-cocoa-tags.xml"; path = "../documentation/doxygen/doxygen-cocoa-tags.xml"; sourceTree = ""; }; C3B25EDF1AC23A7D0063CCD8 /* CorePlot.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CorePlot.h; sourceTree = ""; }; @@ -984,16 +984,16 @@ C3BB3C8D1C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = _CPTAnimationNSNumberPeriod.m; sourceTree = ""; }; C3BB93181B729BD200004527 /* CPTDebugQuickLook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTDebugQuickLook.h; sourceTree = ""; }; C3C032C710B8DEDC003A11B6 /* CPTAxisLabelGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTAxisLabelGroup.h; sourceTree = ""; }; - C3C032C810B8DEDC003A11B6 /* CPTAxisLabelGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAxisLabelGroup.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - C3C1C07E1790D3B400E8B1B7 /* CPTLayerTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLayerTests.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - C3C1C07F1790D3B400E8B1B7 /* CPTLayerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLayerTests.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - C3C2846F16584EB9006BA43C /* CPTAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTAnimation.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - C3C2847016584EB9006BA43C /* CPTAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAnimation.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C3C032C810B8DEDC003A11B6 /* CPTAxisLabelGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAxisLabelGroup.m; sourceTree = ""; }; + C3C1C07E1790D3B400E8B1B7 /* CPTLayerTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLayerTests.h; sourceTree = ""; }; + C3C1C07F1790D3B400E8B1B7 /* CPTLayerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLayerTests.m; sourceTree = ""; }; + C3C2846F16584EB9006BA43C /* CPTAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTAnimation.h; sourceTree = ""; }; + C3C2847016584EB9006BA43C /* CPTAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAnimation.m; sourceTree = ""; }; C3C2847316585085006BA43C /* _CPTAnimationTimingFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTAnimationTimingFunctions.h; sourceTree = ""; }; C3C2847416585085006BA43C /* _CPTAnimationTimingFunctions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = _CPTAnimationTimingFunctions.m; sourceTree = ""; }; - C3C9CB0C165DB4D500739006 /* CPTAnimationOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTAnimationOperation.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - C3C9CB0D165DB4D500739006 /* CPTAnimationOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAnimationOperation.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - C3C9CB11165DB50300739006 /* CPTAnimationPeriod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTAnimationPeriod.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + C3C9CB0C165DB4D500739006 /* CPTAnimationOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTAnimationOperation.h; sourceTree = ""; }; + C3C9CB0D165DB4D500739006 /* CPTAnimationOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAnimationOperation.m; sourceTree = ""; }; + C3C9CB11165DB50300739006 /* CPTAnimationPeriod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTAnimationPeriod.h; sourceTree = ""; }; C3C9CB12165DB50300739006 /* CPTAnimationPeriod.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAnimationPeriod.m; sourceTree = ""; }; C3C9CB15165DB52C00739006 /* _CPTAnimationCGFloatPeriod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTAnimationCGFloatPeriod.h; sourceTree = ""; }; C3C9CB16165DB52C00739006 /* _CPTAnimationCGFloatPeriod.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = _CPTAnimationCGFloatPeriod.m; sourceTree = ""; }; @@ -1005,12 +1005,12 @@ C3CAFB251229E41F00F5C989 /* CPTMutableNumericData+TypeConversion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CPTMutableNumericData+TypeConversion.m"; sourceTree = ""; }; C3CB561A122A9E9F00FBFB61 /* CPTMutableNumericDataTypeConversionTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTMutableNumericDataTypeConversionTests.h; sourceTree = ""; }; C3CB561B122A9E9F00FBFB61 /* CPTMutableNumericDataTypeConversionTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTMutableNumericDataTypeConversionTests.m; sourceTree = ""; }; - C3CCA03913E8D85800CE6DB1 /* _CPTConstraintsFixed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = _CPTConstraintsFixed.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - C3CCA03A13E8D85800CE6DB1 /* _CPTConstraintsFixed.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTConstraintsFixed.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - C3CCA03B13E8D85800CE6DB1 /* _CPTConstraintsRelative.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = _CPTConstraintsRelative.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - C3CCA03C13E8D85800CE6DB1 /* _CPTConstraintsRelative.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTConstraintsRelative.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - C3D3AD2B13DF8DCE0004EA73 /* CPTLineCap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLineCap.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - C3D3AD2C13DF8DCE0004EA73 /* CPTLineCap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLineCap.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C3CCA03913E8D85800CE6DB1 /* _CPTConstraintsFixed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = _CPTConstraintsFixed.h; sourceTree = ""; }; + C3CCA03A13E8D85800CE6DB1 /* _CPTConstraintsFixed.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTConstraintsFixed.m; sourceTree = ""; }; + C3CCA03B13E8D85800CE6DB1 /* _CPTConstraintsRelative.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = _CPTConstraintsRelative.h; sourceTree = ""; }; + C3CCA03C13E8D85800CE6DB1 /* _CPTConstraintsRelative.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTConstraintsRelative.m; sourceTree = ""; }; + C3D3AD2B13DF8DCE0004EA73 /* CPTLineCap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLineCap.h; sourceTree = ""; }; + C3D3AD2C13DF8DCE0004EA73 /* CPTLineCap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLineCap.m; sourceTree = ""; }; C3D68B83122201A700EB4863 /* CPTNumericDataTypeConversionPerformanceTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTNumericDataTypeConversionPerformanceTests.h; sourceTree = ""; }; C3D68B84122201A700EB4863 /* CPTNumericDataTypeConversionPerformanceTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTNumericDataTypeConversionPerformanceTests.m; sourceTree = ""; }; C3D979A213D2136600145DFF /* CPTPlotSpaceTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTPlotSpaceTests.h; sourceTree = ""; }; @@ -1029,14 +1029,14 @@ C3D979B713D2344000145DFF /* CPTLineStyleTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTLineStyleTests.m; sourceTree = ""; }; C3D979B913D2347300145DFF /* CPTFillTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTFillTests.h; sourceTree = ""; }; C3D979BA13D2347300145DFF /* CPTFillTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTFillTests.m; sourceTree = ""; }; - C3DA34CA107AD7710051DA02 /* _CPTXYTheme.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTXYTheme.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C3DA34CA107AD7710051DA02 /* _CPTXYTheme.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTXYTheme.m; sourceTree = ""; }; C3DA34CB107AD7710051DA02 /* _CPTXYTheme.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTXYTheme.h; sourceTree = ""; }; C3EE4E971A6C1E890098F4E6 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; C3F244BF28DBCABB008DB9A1 /* CorePlot.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CorePlot.h; sourceTree = ""; }; - C3F31DE71045EB470058520A /* CPTPlotGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlotGroup.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C3F31DE71045EB470058520A /* CPTPlotGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlotGroup.m; sourceTree = ""; }; C3F31DE81045EB470058520A /* CPTPlotGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTPlotGroup.h; sourceTree = ""; }; - C3F97F1C17A9E07B00A52FF2 /* CPTFunctionDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTFunctionDataSource.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - C3F97F1D17A9E07B00A52FF2 /* CPTFunctionDataSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTFunctionDataSource.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + C3F97F1C17A9E07B00A52FF2 /* CPTFunctionDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTFunctionDataSource.h; sourceTree = ""; }; + C3F97F1D17A9E07B00A52FF2 /* CPTFunctionDataSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTFunctionDataSource.m; sourceTree = ""; }; C3FF6EF00FFFA51D00AF0496 /* mainpage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mainpage.h; path = Source/mainpage.h; sourceTree = ""; }; D0C0477B12D6560900DA8047 /* CPTRangePlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTRangePlot.m; sourceTree = ""; }; D0C0477C12D6560900DA8047 /* CPTRangePlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTRangePlot.h; sourceTree = ""; }; From eadc52909ba13b76b1c2d70b06a72a11c00d040d Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Tue, 14 Feb 2023 20:31:50 -0500 Subject: [PATCH 142/245] Cleaned up some additional files and podspec lines that are no longer required after removing the static library. --- CorePlot-latest.podspec | 1 - CorePlot.podspec | 1 - READMEs/README for Static Library Install.md | 12 ------------ 3 files changed, 14 deletions(-) delete mode 100644 READMEs/README for Static Library Install.md diff --git a/CorePlot-latest.podspec b/CorePlot-latest.podspec index f73c5966f..bf28587c4 100644 --- a/CorePlot-latest.podspec +++ b/CorePlot-latest.podspec @@ -28,7 +28,6 @@ Pod::Spec.new do |s| s.source_files = 'framework/Source/*.{h,m}', 'framework/CocoaPods/*.h', 'framework/PlatformSpecific/*.{h,m}' s.exclude_files = '**/*{TestCase,Tests}.{h,m}', '**/mainpage.h' - s.ios.source_files = 'framework/CorePlot-CocoaTouch.h' s.osx.source_files = 'framework/MacOnly/*.{h,m}' s.private_header_files = '**/_*.h' diff --git a/CorePlot.podspec b/CorePlot.podspec index e2d60dc4e..04e9c5639 100644 --- a/CorePlot.podspec +++ b/CorePlot.podspec @@ -28,7 +28,6 @@ Pod::Spec.new do |s| s.source_files = 'framework/Source/*.{h,m}', 'framework/CocoaPods/*.h', 'framework/PlatformSpecific/*.{h,m}' s.exclude_files = '**/*{TestCase,Tests}.{h,m}', '**/mainpage.h' - s.ios.source_files = 'framework/CorePlot-CocoaTouch.h' s.osx.source_files = 'framework/MacOnly/*.{h,m}' s.private_header_files = '**/_*.h' diff --git a/READMEs/README for Static Library Install.md b/READMEs/README for Static Library Install.md deleted file mode 100644 index ece0cccd7..000000000 --- a/READMEs/README for Static Library Install.md +++ /dev/null @@ -1,12 +0,0 @@ -# Install Binaries for iOS - -1. Copy the **CorePlotHeaders** to your Xcode project - -2. Copy **libCorePlotCocoaTouch.a** to your Xcode project - -3. Add the following flags to "Other Linker Flags" in your target build settings: - `-ObjC` - -4. Add the **QuartzCore** and **Accelerate** frameworks to the project. - -5. Add a `CPTGraph` to your application. See the example apps in Source Code to see how, or read the documentation. \ No newline at end of file From d2ed732ffc8e52c323c92e14ea94433ab8d0375f Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Wed, 15 Feb 2023 19:06:04 -0500 Subject: [PATCH 143/245] Exclude header files in the build folder when updating the Swift Package Manager headers. Fixed issue #474. --- scripts/generate_spm_sources_layout.sh | 44 ++++++++++++++++++-------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/scripts/generate_spm_sources_layout.sh b/scripts/generate_spm_sources_layout.sh index 8fc85e637..ca28f6513 100755 --- a/scripts/generate_spm_sources_layout.sh +++ b/scripts/generate_spm_sources_layout.sh @@ -21,14 +21,17 @@ function generate_spm_public_headers() { echo "Generated under $SPM_PUBLIC_HEADERS_PATH" public_headers_list=$( - find "framework" -name "*.[h]" \ - \! -name "*Test*.[hm]" \ - \! -name "_*.[hm]" \ - \! -name "CorePlot-CocoaTouch.h" \ - \! -name "mainpage.h" \ - -type f -not -path "*/MacOnly/*" \ + find "framework" \ + -type f \ + -name "*.[h]" \ + -not -path "*/build/*" \ + -not -path "*/MacOnly/*" \ -not -path "framework/CorePlot.h" \ - -not -path "framework/CocoaPods/CorePlot.h" | sed "s| \([^/]\)|:\1|g" + -not -path "framework/CocoaPods/CorePlot.h" \ + -not -name "*Test*.[hm]" \ + -not -name "_*.[hm]" \ + -not -name "mainpage.h" \ + | sed "s| \([^/]\)|:\1|g" ) SRC_ROOT="$(pwd)" @@ -52,9 +55,14 @@ function generate_spm_private_sources() { echo "Generate symbolic links for all private headers/implementations. _*.h && _*.m" echo "Generated under $SPM_SOURCES_PATH" - private_sources_list=$(find "framework" \ - -name "_*.[mh]" \ - -type f | sed "s| \([^/]\)|:\1|g") + private_sources_list=$( + find "framework" \ + -type f \ + -name "_*.[mh]" \ + -not -path "*/build/*" \ + -not -path "*/MacOnly/*" \ + | sed "s| \([^/]\)|:\1|g" + ) SRC_ROOT="$(pwd)" @@ -78,10 +86,18 @@ function generate_spm_public_sources() { echo "Generate symbolic links for all public implementations. *.m" echo "Generated under $SPM_SOURCES_PATH" - public_sources_list=$(find "framework" -name "*.[m]" \ - \! -name "*Test*.[hm]" \ - \! -name "_*.[hm]" \ - -type f -not -path "*/MacOnly/*" | sed "s| \([^/]\)|:\1|g") + public_sources_list=$( + find "framework" \ + -type f \ + -name "*.[m]" \ + -not -path "*/build/*" \ + -not -path "*/MacOnly/*" \ + -not -path "framework/CorePlot.h" \ + -not -path "framework/CocoaPods/CorePlot.h" \ + -not -name "*Test*.[hm]" \ + -not -name "_*.[hm]" \ + | sed "s| \([^/]\)|:\1|g" + ) SRC_ROOT="$(pwd)" From 0c3967060c5cc740a557663b675e87b8f297de34 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 4 Mar 2023 10:17:24 -0500 Subject: [PATCH 144/245] Enabled undefined symbols warnings and fixed the resulting compiler warnings. --- framework/PlatformSpecific/CPTPlatformSpecificFunctions.h | 8 ++++++++ framework/Source/CPTNumericDataType.h | 4 ++++ framework/Source/CPTPathExtensions.h | 4 ++++ framework/Source/CPTUtilities.h | 4 ++++ framework/Source/_CPTAnimationTimingFunctions.h | 4 ++++ framework/xcconfig/CorePlotWarnings.xcconfig | 2 +- 6 files changed, 25 insertions(+), 1 deletion(-) diff --git a/framework/PlatformSpecific/CPTPlatformSpecificFunctions.h b/framework/PlatformSpecific/CPTPlatformSpecificFunctions.h index e365ce96b..4ad0d9fc3 100644 --- a/framework/PlatformSpecific/CPTPlatformSpecificFunctions.h +++ b/framework/PlatformSpecific/CPTPlatformSpecificFunctions.h @@ -9,9 +9,11 @@ /// @file +#ifdef __cplusplus #if __cplusplus extern "C" { #endif +#endif /// @name Graphics Context Save Stack /// @{ @@ -33,9 +35,11 @@ CPTNativeImage *__nonnull CPTQuickLookImage(CGRect rect, __nonnull CPTQuickLookI /// @} +#ifdef __cplusplus #if __cplusplus } #endif +#endif #else @@ -44,9 +48,11 @@ CPTNativeImage *__nonnull CPTQuickLookImage(CGRect rect, __nonnull CPTQuickLookI /// @file +#ifdef __cplusplus #if __cplusplus extern "C" { #endif +#endif /// @name Graphics Context Save Stack /// @{ @@ -61,8 +67,10 @@ CPTNativeImage *__nonnull CPTQuickLookImage(CGRect rect, __nonnull CPTQuickLookI /// @} +#ifdef __cplusplus #if __cplusplus } #endif +#endif #endif diff --git a/framework/Source/CPTNumericDataType.h b/framework/Source/CPTNumericDataType.h index a8577fb34..c3f288502 100644 --- a/framework/Source/CPTNumericDataType.h +++ b/framework/Source/CPTNumericDataType.h @@ -33,9 +33,11 @@ typedef struct _CPTNumericDataType { } CPTNumericDataType; +#ifdef __cplusplus #if __cplusplus extern "C" { #endif +#endif /// @name Data Type Utilities /// @{ @@ -47,6 +49,8 @@ BOOL CPTDataTypeEqualToDataType(CPTNumericDataType dataType1, CPTNumericDataType /// @} +#ifdef __cplusplus #if __cplusplus } #endif +#endif diff --git a/framework/Source/CPTPathExtensions.h b/framework/Source/CPTPathExtensions.h index 0c02527d9..f5a371690 100644 --- a/framework/Source/CPTPathExtensions.h +++ b/framework/Source/CPTPathExtensions.h @@ -1,9 +1,11 @@ #import /// @file +#ifdef __cplusplus #if __cplusplus extern "C" { #endif +#endif CF_IMPLICIT_BRIDGING_ENABLED @@ -13,6 +15,8 @@ CF_IMPLICIT_BRIDGING_DISABLED void CPTAddRoundedRectPath(__nonnull CGContextRef context, CGRect rect, CGFloat cornerRadius); +#ifdef __cplusplus #if __cplusplus } #endif +#endif diff --git a/framework/Source/CPTUtilities.h b/framework/Source/CPTUtilities.h index 691923cec..60d8f5f68 100644 --- a/framework/Source/CPTUtilities.h +++ b/framework/Source/CPTUtilities.h @@ -6,9 +6,11 @@ @class CPTLineStyle; +#ifdef __cplusplus #if __cplusplus extern "C" { #endif +#endif /// @name Convert NSDecimal to Primitive Types /// @{ @@ -157,8 +159,10 @@ double CPTInverseLogModulus(double value); /// @} +#ifdef __cplusplus #if __cplusplus } #endif +#endif #pragma clang assume_nonnull end diff --git a/framework/Source/_CPTAnimationTimingFunctions.h b/framework/Source/_CPTAnimationTimingFunctions.h index 508e90c32..a983ae877 100644 --- a/framework/Source/_CPTAnimationTimingFunctions.h +++ b/framework/Source/_CPTAnimationTimingFunctions.h @@ -4,9 +4,11 @@ typedef CGFloat (*CPTAnimationTimingFunction)(CGFloat, CGFloat); +#ifdef __cplusplus #if __cplusplus extern "C" { #endif +#endif /// @name Linear /// @{ @@ -94,6 +96,8 @@ CGFloat CPTAnimationTimingFunctionQuinticInOut(CGFloat time, CGFloat duration); /// @} +#ifdef __cplusplus #if __cplusplus } #endif +#endif diff --git a/framework/xcconfig/CorePlotWarnings.xcconfig b/framework/xcconfig/CorePlotWarnings.xcconfig index e0b20ea64..cb56a2420 100644 --- a/framework/xcconfig/CorePlotWarnings.xcconfig +++ b/framework/xcconfig/CorePlotWarnings.xcconfig @@ -122,4 +122,4 @@ IBC_ERRORS = YES IBC_NOTICES = YES IBC_WARNINGS = YES -WARNING_CFLAGS = -Weverything -Wno-undef -Wno-switch-enum -Wno-float-equal -Wno-custom-atomic-properties -Wno-pedantic -Wno-documentation -Wno-documentation-unknown-command -Wno-partial-availability -Wno-objc-messaging-id +WARNING_CFLAGS = -Weverything -Wno-switch-enum -Wno-float-equal -Wno-custom-atomic-properties -Wno-pedantic -Wno-documentation -Wno-documentation-unknown-command -Wno-partial-availability -Wno-objc-messaging-id From 543aa318efd532bed8a70acbb02e80e3dc115958 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 4 Mar 2023 10:51:38 -0500 Subject: [PATCH 145/245] Enabled custom atomic property warnings and fixed the resulting compiler warnings by removing definition for the contentsScale property that is always available in the current deployment target SDKs on all platforms. --- framework/Source/CPTLayer.h | 1 - framework/Source/CPTLayer.m | 30 ++++---------------- framework/xcconfig/CorePlotWarnings.xcconfig | 2 +- 3 files changed, 7 insertions(+), 26 deletions(-) diff --git a/framework/Source/CPTLayer.h b/framework/Source/CPTLayer.h index 37c525c4b..6ed1008a9 100644 --- a/framework/Source/CPTLayer.h +++ b/framework/Source/CPTLayer.h @@ -97,7 +97,6 @@ typedef NSMutableSet CPTMutableSublayerSet; /// @name Drawing /// @{ -@property (readwrite) CGFloat contentsScale; @property (nonatomic, readonly) BOOL useFastRendering; @property (nonatomic, readwrite, copy, nullable) CPTShadow *shadow; @property (nonatomic, readonly) CGSize shadowMargin; diff --git a/framework/Source/CPTLayer.m b/framework/Source/CPTLayer.m index 93e5d8503..1879c43b3 100644 --- a/framework/Source/CPTLayer.m +++ b/framework/Source/CPTLayer.m @@ -83,11 +83,6 @@ @implementation CPTLayer **/ @synthesize masksToBorder; -/** @property CGFloat contentsScale - * @brief The scale factor applied to the layer. - **/ -@dynamic contentsScale; - /** @property CPTShadow *shadow * @brief The shadow drawn under the layer content. If @nil (the default), no shadow is drawn. **/ @@ -986,31 +981,18 @@ -(void)setContentsScale:(CGFloat)newContentsScale NSParameterAssert(newContentsScale > CPTFloat(0.0)); if ( self.contentsScale != newContentsScale ) { - if ( [CALayer instancesRespondToSelector:@selector(setContentsScale:)] ) { - super.contentsScale = newContentsScale; - [self setNeedsDisplay]; + super.contentsScale = newContentsScale; + [self setNeedsDisplay]; - Class layerClass = [CPTLayer class]; - for ( CALayer *subLayer in self.sublayers ) { - if ( [subLayer isKindOfClass:layerClass] ) { - subLayer.contentsScale = newContentsScale; - } + Class layerClass = [CPTLayer class]; + for ( CALayer *subLayer in self.sublayers ) { + if ( [subLayer isKindOfClass:layerClass] ) { + subLayer.contentsScale = newContentsScale; } } } } --(CGFloat)contentsScale -{ - CGFloat scale = CPTFloat(1.0); - - if ( [CALayer instancesRespondToSelector:@selector(contentsScale)] ) { - scale = super.contentsScale; - } - - return scale; -} - -(void)setShadow:(nullable CPTShadow *)newShadow { if ( newShadow != shadow ) { diff --git a/framework/xcconfig/CorePlotWarnings.xcconfig b/framework/xcconfig/CorePlotWarnings.xcconfig index cb56a2420..dc4ae1bb4 100644 --- a/framework/xcconfig/CorePlotWarnings.xcconfig +++ b/framework/xcconfig/CorePlotWarnings.xcconfig @@ -122,4 +122,4 @@ IBC_ERRORS = YES IBC_NOTICES = YES IBC_WARNINGS = YES -WARNING_CFLAGS = -Weverything -Wno-switch-enum -Wno-float-equal -Wno-custom-atomic-properties -Wno-pedantic -Wno-documentation -Wno-documentation-unknown-command -Wno-partial-availability -Wno-objc-messaging-id +WARNING_CFLAGS = -Weverything -Wno-switch-enum -Wno-float-equal -Wno-pedantic -Wno-documentation -Wno-documentation-unknown-command -Wno-partial-availability -Wno-objc-messaging-id From 4f4407c0e2eabc67a18e6280d1382e615a556d47 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 4 Mar 2023 11:07:21 -0500 Subject: [PATCH 146/245] Fixed documentation error. --- framework/Source/CPTPlot.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/Source/CPTPlot.m b/framework/Source/CPTPlot.m index fbf714b03..0acd3719b 100644 --- a/framework/Source/CPTPlot.m +++ b/framework/Source/CPTPlot.m @@ -1590,7 +1590,7 @@ -(nullable CPTPlotRange *)plotRangeEnclosingCoordinate:(CPTCoordinate)coord /** * @brief Marks the receiver as needing to update all data labels before the content is next drawn. - * @see @link CPTPlot::relabelIndexRange: -relabelIndexRange: @endlink + * @see CPTPlot @link CPTPlot::relabelIndexRange: -relabelIndexRange: @endlink method. **/ -(void)setNeedsRelabel { From a297ef669c3a4038798a70d177eb0a0bc39e862a Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 4 Mar 2023 11:18:10 -0500 Subject: [PATCH 147/245] Enabled partial availability warnings and fixed the resulting compiler warnings. --- .../src/mac/PlotGalleryController.m | 22 +++++++++++++------ framework/xcconfig/CorePlotWarnings.xcconfig | 2 +- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/examples/CorePlotGallery/src/mac/PlotGalleryController.m b/examples/CorePlotGallery/src/mac/PlotGalleryController.m index de4cfa8f2..a753048ce 100644 --- a/examples/CorePlotGallery/src/mac/PlotGalleryController.m +++ b/examples/CorePlotGallery/src/mac/PlotGalleryController.m @@ -300,13 +300,21 @@ -(nonnull NSView *) collectionView:(nonnull NSCollectionView *)collectionView if ( content && [view isKindOfClass:[NSTextField class]] ) { NSTextField *titleTextField = (NSTextField *)view; - titleTextField.editable = NO; - titleTextField.selectable = NO; - titleTextField.backgroundColor = [NSColor controlAccentColor]; - titleTextField.textColor = [NSColor headerTextColor]; - titleTextField.font = [NSFont boldSystemFontOfSize:14.0]; - titleTextField.bordered = YES; - titleTextField.stringValue = content; + titleTextField.editable = NO; + titleTextField.selectable = NO; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunguarded-availability-new" + if ( [NSColor instancesRespondToSelector:@selector(controlAccentColor)] ) { + titleTextField.backgroundColor = [NSColor controlAccentColor]; + } + else { + titleTextField.backgroundColor = [NSColor colorForControlTint:[NSColor currentControlTint]]; + } +#pragma clang diagnostic pop + titleTextField.textColor = [NSColor headerTextColor]; + titleTextField.font = [NSFont boldSystemFontOfSize:14.0]; + titleTextField.bordered = YES; + titleTextField.stringValue = content; } return view; diff --git a/framework/xcconfig/CorePlotWarnings.xcconfig b/framework/xcconfig/CorePlotWarnings.xcconfig index dc4ae1bb4..f6e3c86f7 100644 --- a/framework/xcconfig/CorePlotWarnings.xcconfig +++ b/framework/xcconfig/CorePlotWarnings.xcconfig @@ -122,4 +122,4 @@ IBC_ERRORS = YES IBC_NOTICES = YES IBC_WARNINGS = YES -WARNING_CFLAGS = -Weverything -Wno-switch-enum -Wno-float-equal -Wno-pedantic -Wno-documentation -Wno-documentation-unknown-command -Wno-partial-availability -Wno-objc-messaging-id +WARNING_CFLAGS = -Weverything -Wno-switch-enum -Wno-float-equal -Wno-pedantic -Wno-documentation -Wno-documentation-unknown-command -Wno-objc-messaging-id From 3d4bf702b39cc6887f05af5ede8b868b7848652f Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 4 Mar 2023 12:36:19 -0500 Subject: [PATCH 148/245] Added tvOS @availability checks to fix compiler warnings. --- framework/Source/CPTGraph.m | 2 +- framework/Source/CPTLayer.m | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/Source/CPTGraph.m b/framework/Source/CPTGraph.m index 30024d692..356d81563 100644 --- a/framework/Source/CPTGraph.m +++ b/framework/Source/CPTGraph.m @@ -396,7 +396,7 @@ -(void)layoutAndRenderInContext:(nonnull CGContextRef)context } #else #ifdef __IPHONE_13_0 - if ( @available(iOS 13, *)) { + if ( @available(iOS 13, tvOS 13, *)) { if ( [UITraitCollection instancesRespondToSelector:@selector(performAsCurrentTraitCollection:)] ) { UITraitCollection *traitCollection = ((UIView *)self.hostingView).traitCollection; if ( traitCollection ) { diff --git a/framework/Source/CPTLayer.m b/framework/Source/CPTLayer.m index 1879c43b3..05d172a0d 100644 --- a/framework/Source/CPTLayer.m +++ b/framework/Source/CPTLayer.m @@ -338,7 +338,7 @@ -(void)display } #else #ifdef __IPHONE_13_0 - if ( @available(iOS 13, *)) { + if ( @available(iOS 13, tvOS 13, *)) { if ( [UITraitCollection instancesRespondToSelector:@selector(performAsCurrentTraitCollection:)] ) { CPTGraphHostingView *hostingView = [self findHostingView]; UITraitCollection *traitCollection = hostingView.traitCollection; From 8b1b49b65d327ccddff2fb4fdd7f16c2aa7652d0 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Thu, 16 Mar 2023 17:03:53 -0400 Subject: [PATCH 149/245] Disabled the "mixing declarations and code is incompatible with standards before C99" error for compatibility with Xcode 14.3. --- framework/xcconfig/CorePlotWarnings.xcconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/xcconfig/CorePlotWarnings.xcconfig b/framework/xcconfig/CorePlotWarnings.xcconfig index f6e3c86f7..ca44cfacf 100644 --- a/framework/xcconfig/CorePlotWarnings.xcconfig +++ b/framework/xcconfig/CorePlotWarnings.xcconfig @@ -122,4 +122,4 @@ IBC_ERRORS = YES IBC_NOTICES = YES IBC_WARNINGS = YES -WARNING_CFLAGS = -Weverything -Wno-switch-enum -Wno-float-equal -Wno-pedantic -Wno-documentation -Wno-documentation-unknown-command -Wno-objc-messaging-id +WARNING_CFLAGS = -Weverything -Wno-switch-enum -Wno-float-equal -Wno-pedantic -Wno-documentation -Wno-documentation-unknown-command -Wno-objc-messaging-id -Wno-declaration-after-statement From 4b2e1843bc32d85bf03e68d39b7e2015657c68af Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Thu, 16 Mar 2023 17:29:05 -0400 Subject: [PATCH 150/245] Fixed memory leaks in the unit tests. --- framework/Source/CPTFillTests.m | 1 + framework/Source/CPTImageTests.m | 1 + 2 files changed, 2 insertions(+) diff --git a/framework/Source/CPTFillTests.m b/framework/Source/CPTFillTests.m index 242569550..921b54bb1 100644 --- a/framework/Source/CPTFillTests.m +++ b/framework/Source/CPTFillTests.m @@ -77,6 +77,7 @@ -(void)testKeyedArchivingRoundTripImage CGColorSpaceRelease(colorSpace); CGImageRelease(cgImage); + CGContextRelease(context); _CPTFillImage *fill = (_CPTFillImage *)[CPTFill fillWithImage:image]; diff --git a/framework/Source/CPTImageTests.m b/framework/Source/CPTImageTests.m index 036a37cf8..3b22838ce 100644 --- a/framework/Source/CPTImageTests.m +++ b/framework/Source/CPTImageTests.m @@ -29,6 +29,7 @@ -(void)testKeyedArchivingRoundTrip CGColorSpaceRelease(colorSpace); CGImageRelease(cgImage); + CGContextRelease(context); CPTImage *newImage = [self archiveRoundTrip:image]; From 6ac874f04f5eb746ec74aa3c8c223b3aadc4f91e Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Thu, 16 Mar 2023 17:36:37 -0400 Subject: [PATCH 151/245] Use explicit data types for pointer arithmetic safety. --- framework/Source/CPTFunctionDataSource.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/Source/CPTFunctionDataSource.m b/framework/Source/CPTFunctionDataSource.m index b7c40dfc7..ba59ddde3 100644 --- a/framework/Source/CPTFunctionDataSource.m +++ b/framework/Source/CPTFunctionDataSource.m @@ -392,8 +392,8 @@ -(nullable CPTNumericData *)dataForPlot:(nonnull CPTPlot *)plot recordIndexRange NSMutableData *data = [[NSMutableData alloc] initWithLength:indexRange.length * 2 * sizeof(double)]; - double *xBytes = data.mutableBytes; - double *yBytes = data.mutableBytes + (indexRange.length * sizeof(double)); + double *xBytes = (double *)data.mutableBytes; + double *yBytes = (double *)data.mutableBytes + indexRange.length; double location = xRange.locationDouble; double length = xRange.lengthDouble; From cdde0cfd8b79e396cfbc7297f25605d25403962f Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Thu, 16 Mar 2023 19:49:50 -0400 Subject: [PATCH 152/245] Added section marks in CPTDefinitions.h for easier navigation. --- framework/Source/CPTDefinitions.h | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/framework/Source/CPTDefinitions.h b/framework/Source/CPTDefinitions.h index acb1ffd2a..dd86aa147 100644 --- a/framework/Source/CPTDefinitions.h +++ b/framework/Source/CPTDefinitions.h @@ -9,6 +9,9 @@ /// @file +#pragma mark - +#pragma mark Memory management + /** * @def CPT_SDK_SUPPORTS_WEAK * @hideinitializer @@ -38,6 +41,9 @@ #define cpt_weak_property unsafe_unretained #endif +#pragma mark - +#pragma mark Attributes + // Deprecated method attribute /** @@ -72,7 +78,8 @@ #define cpt_unused __unused #endif -// Swift wrappers +#pragma mark - +#pragma mark Swift wrappers /** * @def cpt_swift_enum @@ -88,7 +95,8 @@ **/ #define cpt_swift_struct __attribute__((swift_wrapper(struct))) -// Type safety defines +#pragma mark - +#pragma mark Type safety defines /** * @def CPTFloat @@ -144,6 +152,9 @@ **/ #define CPTNAN ((CGFloat)NAN) +#pragma mark - +#pragma mark Enumerations + /** * @brief Enumeration of numeric types **/ @@ -246,6 +257,9 @@ extern const CPTEdgeInsets CPTEdgeInsetsZero; ///< Defines a set of stretchable extern const NSStringDrawingOptions CPTStringDrawingOptions; ///< String drawing options used when measuring and drawing text. +#pragma mark - +#pragma mark Typed data structures + /** * @brief An array of numbers. **/ @@ -296,6 +310,9 @@ typedef NSDictionary CPTDictionary; **/ typedef NSMutableDictionary CPTMutableDictionary; +#pragma mark - +#pragma mark Quick Look + /** * @brief Render a Quick Look image into the given context. **/ From ee9b4f944a3b4d0d880dc295597ca00f2d0d296f Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 18 Mar 2023 12:18:56 -0400 Subject: [PATCH 153/245] Added various utility scripts to the Core Plot project. --- framework/CorePlot.xcodeproj/project.pbxproj | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index dbe8208c0..6079ed22f 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -1009,6 +1009,11 @@ C3CCA03A13E8D85800CE6DB1 /* _CPTConstraintsFixed.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTConstraintsFixed.m; sourceTree = ""; }; C3CCA03B13E8D85800CE6DB1 /* _CPTConstraintsRelative.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = _CPTConstraintsRelative.h; sourceTree = ""; }; C3CCA03C13E8D85800CE6DB1 /* _CPTConstraintsRelative.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTConstraintsRelative.m; sourceTree = ""; }; + C3D0F67529C6053E00190D2C /* generate_spm_sources_layout.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = generate_spm_sources_layout.sh; path = ../../scripts/generate_spm_sources_layout.sh; sourceTree = ""; }; + C3D0F67629C6053E00190D2C /* format_core_plot.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = format_core_plot.sh; path = ../../scripts/format_core_plot.sh; sourceTree = ""; }; + C3D0F67729C6053E00190D2C /* createrelease.py */ = {isa = PBXFileReference; lastKnownFileType = text.script.python; name = createrelease.py; path = ../../scripts/createrelease.py; sourceTree = ""; }; + C3D0F67829C6055700190D2C /* prefixer.py */ = {isa = PBXFileReference; lastKnownFileType = text.script.python; name = prefixer.py; path = ../../scripts/prefixer.py; sourceTree = ""; }; + C3D0F67929C6087100190D2C /* uncrustify.cfg */ = {isa = PBXFileReference; lastKnownFileType = text; name = uncrustify.cfg; path = ../../scripts/uncrustify.cfg; sourceTree = ""; }; C3D3AD2B13DF8DCE0004EA73 /* CPTLineCap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLineCap.h; sourceTree = ""; }; C3D3AD2C13DF8DCE0004EA73 /* CPTLineCap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLineCap.m; sourceTree = ""; }; C3D68B83122201A700EB4863 /* CPTNumericDataTypeConversionPerformanceTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTNumericDataTypeConversionPerformanceTests.h; sourceTree = ""; }; @@ -1402,6 +1407,7 @@ 07BF0D600F2B6FE1002FCEA7 /* Source */, C38A0AA61A4621BC00D45436 /* Platform Specific */, 9021E4920FC5C6DD00443472 /* Documentation */, + C3D0F67429C604EF00190D2C /* Scripts */, C3B25EDE1AC23A7D0063CCD8 /* CocoaPods */, C3F244BE28DBCABB008DB9A1 /* SPM Umbrella Header */, 32C88DFF0371C24200C91783 /* Other Sources */, @@ -1734,6 +1740,18 @@ name = Animation; sourceTree = ""; }; + C3D0F67429C604EF00190D2C /* Scripts */ = { + isa = PBXGroup; + children = ( + C3D0F67729C6053E00190D2C /* createrelease.py */, + C3D0F67829C6055700190D2C /* prefixer.py */, + C3D0F67529C6053E00190D2C /* generate_spm_sources_layout.sh */, + C3D0F67629C6053E00190D2C /* format_core_plot.sh */, + C3D0F67929C6087100190D2C /* uncrustify.cfg */, + ); + path = Scripts; + sourceTree = ""; + }; C3D979A513D2159400145DFF /* Tests */ = { isa = PBXGroup; children = ( From e0b8dd164c9f42647948390e831e95582e2157e0 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 18 Mar 2023 12:59:56 -0400 Subject: [PATCH 154/245] CPTDecimalNumberValueTransformer header to the Swift Package Manager (SPM) build. Added conditional statements to only compile it on macOS. --- framework/CocoaPods/CorePlot.h | 3 +++ framework/MacOnly/CPTDecimalNumberValueTransformer.h | 6 ++++++ framework/SPM Umbrella Header/CorePlot.h | 3 +++ scripts/generate_spm_sources_layout.sh | 3 --- spm/Sources/core-plot/CPTDecimalNumberValueTransformer.m | 1 + .../core-plot/include/CPTDecimalNumberValueTransformer.h | 1 + 6 files changed, 14 insertions(+), 3 deletions(-) create mode 120000 spm/Sources/core-plot/CPTDecimalNumberValueTransformer.m create mode 120000 spm/Sources/core-plot/include/CPTDecimalNumberValueTransformer.h diff --git a/framework/CocoaPods/CorePlot.h b/framework/CocoaPods/CorePlot.h index ad03528a3..6f991662e 100644 --- a/framework/CocoaPods/CorePlot.h +++ b/framework/CocoaPods/CorePlot.h @@ -5,6 +5,9 @@ #import #else #import + +#import "CPTDecimalNumberValueTransformer.h" + #endif #import "CPTAnimation.h" diff --git a/framework/MacOnly/CPTDecimalNumberValueTransformer.h b/framework/MacOnly/CPTDecimalNumberValueTransformer.h index bcc2db032..4d3fcf755 100644 --- a/framework/MacOnly/CPTDecimalNumberValueTransformer.h +++ b/framework/MacOnly/CPTDecimalNumberValueTransformer.h @@ -1,3 +1,9 @@ +#import + +#if TARGET_OS_MAC + @interface CPTDecimalNumberValueTransformer : NSValueTransformer @end + +#endif diff --git a/framework/SPM Umbrella Header/CorePlot.h b/framework/SPM Umbrella Header/CorePlot.h index c29bc294c..af4fc8f03 100644 --- a/framework/SPM Umbrella Header/CorePlot.h +++ b/framework/SPM Umbrella Header/CorePlot.h @@ -5,6 +5,9 @@ #import #else #import + +#import "CPTDecimalNumberValueTransformer.h" + #endif #import "CPTAnimation.h" diff --git a/scripts/generate_spm_sources_layout.sh b/scripts/generate_spm_sources_layout.sh index ca28f6513..c9525f4f1 100755 --- a/scripts/generate_spm_sources_layout.sh +++ b/scripts/generate_spm_sources_layout.sh @@ -25,7 +25,6 @@ function generate_spm_public_headers() { -type f \ -name "*.[h]" \ -not -path "*/build/*" \ - -not -path "*/MacOnly/*" \ -not -path "framework/CorePlot.h" \ -not -path "framework/CocoaPods/CorePlot.h" \ -not -name "*Test*.[hm]" \ @@ -60,7 +59,6 @@ function generate_spm_private_sources() { -type f \ -name "_*.[mh]" \ -not -path "*/build/*" \ - -not -path "*/MacOnly/*" \ | sed "s| \([^/]\)|:\1|g" ) @@ -91,7 +89,6 @@ function generate_spm_public_sources() { -type f \ -name "*.[m]" \ -not -path "*/build/*" \ - -not -path "*/MacOnly/*" \ -not -path "framework/CorePlot.h" \ -not -path "framework/CocoaPods/CorePlot.h" \ -not -name "*Test*.[hm]" \ diff --git a/spm/Sources/core-plot/CPTDecimalNumberValueTransformer.m b/spm/Sources/core-plot/CPTDecimalNumberValueTransformer.m new file mode 120000 index 000000000..1bc4ccfa1 --- /dev/null +++ b/spm/Sources/core-plot/CPTDecimalNumberValueTransformer.m @@ -0,0 +1 @@ +../../../framework/MacOnly/CPTDecimalNumberValueTransformer.m \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTDecimalNumberValueTransformer.h b/spm/Sources/core-plot/include/CPTDecimalNumberValueTransformer.h new file mode 120000 index 000000000..ff51efdf8 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTDecimalNumberValueTransformer.h @@ -0,0 +1 @@ +../../../../framework/MacOnly/CPTDecimalNumberValueTransformer.h \ No newline at end of file From 5416bb3d2cd77771a6a132972b2e7a0e0fec9e65 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 18 Mar 2023 14:20:30 -0400 Subject: [PATCH 155/245] Updated various build settings in all framework and example app projects for Xcode 14.3 compatibility. --- .../CPTTestApp-iPad.xcodeproj/project.pbxproj | 17 ++++++-- .../xcschemes/CPTTestApp-iPad.xcscheme | 2 +- .../project.pbxproj | 27 ++++++++++--- .../xcschemes/CPTTestApp-iPhone.xcscheme | 2 +- .../CPTTestApp.xcodeproj/project.pbxproj | 21 +++++++--- .../xcschemes/CPTTestApp.xcscheme | 2 +- .../Plot_Gallery.xcodeproj/project.pbxproj | 39 ++++++++++++++----- .../xcschemes/Plot Gallery-Mac.xcscheme | 2 +- .../xcschemes/Plot Gallery-iOS.xcscheme | 2 +- .../xcschemes/Plot Gallery-tvOS.xcscheme | 2 +- .../DatePlot.xcodeproj/project.pbxproj | 9 +++-- .../xcshareddata/xcschemes/DatePlot.xcscheme | 2 +- .../DropPlot.xcodeproj/project.pbxproj | 19 ++++++--- .../xcshareddata/xcschemes/DropPlot.xcscheme | 2 +- .../project.pbxproj | 19 ++++++--- .../xcschemes/minorTickFormatter.xcscheme | 2 +- .../RangePlot.xcodeproj/project.pbxproj | 19 ++++++--- .../xcshareddata/xcschemes/RangePlot.xcscheme | 2 +- framework/CorePlot.xcodeproj/project.pbxproj | 30 ++++++-------- .../xcschemes/CorePlot Mac.xcscheme | 2 +- .../xcschemes/CorePlot iOS.xcscheme | 2 +- .../xcschemes/CorePlot tvOS.xcscheme | 2 +- .../xcschemes/Documentation-Mac.xcscheme | 2 +- .../xcschemes/Documentation-iOS.xcscheme | 2 +- .../xcschemes/Universal XCFramework.xcscheme | 2 +- .../xcschemes/Update SPM Files.xcscheme | 2 +- framework/xcconfig/CorePlot.xcconfig | 14 +++++-- framework/xcconfig/CorePlotDebug.xcconfig | 3 -- framework/xcconfig/CorePlotRelease.xcconfig | 3 -- 29 files changed, 161 insertions(+), 93 deletions(-) diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj index 3351fc55a..f461f2a85 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 47; + objectVersion = 53; objects = { /* Begin PBXBuildFile section */ @@ -248,7 +248,8 @@ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1230; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1430; TargetAttributes = { 1D6058900D05DD3D006BFB54 = { ProvisioningStyle = Manual; @@ -405,7 +406,10 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/CPTTestApp_iPad-Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); PRODUCT_NAME = "CPTTestApp-iPad"; }; name = Debug; @@ -416,13 +420,17 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/CPTTestApp_iPad-Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); PRODUCT_NAME = "CPTTestApp-iPad"; }; name = Release; }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = C39B4CF029622F8700ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "2,6"; @@ -431,6 +439,7 @@ }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = C39B4CF129622F8700ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "2,6"; diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme index b5a803a71..90b13200c 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme @@ -1,6 +1,6 @@ Date: Sat, 18 Mar 2023 14:47:56 -0400 Subject: [PATCH 156/245] Fixed development team and module verifier settings for Xcode 13.4. --- framework/CorePlot.xcodeproj/project.pbxproj | 3 --- framework/xcconfig/CorePlot.xcconfig | 3 ++- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 7d87f8b5a..5b70bd1ea 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -2240,9 +2240,6 @@ BuildIndependentTargetsInParallel = YES; LastUpgradeCheck = 1430; TargetAttributes = { - 8DC2EF4F0486A6940098B216 = { - DevelopmentTeam = 28ZA45DE7D; - }; C36BE54226FF6857004287F2 = { CreatedOnToolsVersion = 13.0; DevelopmentTeam = 28ZA45DE7D; diff --git a/framework/xcconfig/CorePlot.xcconfig b/framework/xcconfig/CorePlot.xcconfig index 345dace70..226478b4c 100644 --- a/framework/xcconfig/CorePlot.xcconfig +++ b/framework/xcconfig/CorePlot.xcconfig @@ -14,6 +14,7 @@ CODE_SIGN_IDENTITY = CODE_SIGN_IDENTITY[sdk=macosx*] = - CODE_SIGN_INJECT_BASE_ENTITLEMENTS = YES CODE_SIGN_STYLE = Automatic +DEVELOPMENT_TEAM = ALWAYS_SEARCH_USER_PATHS = NO BUILD_LIBRARY_FOR_DISTRIBUTION = YES @@ -74,7 +75,7 @@ SWIFT_TREAT_WARNINGS_AS_ERRORS = YES ENABLE_MODULE_VERIFIER = YES MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = c99 -MODULE_VERIFIER_SUPPORTED_LANGUAGES = obj-c +MODULE_VERIFIER_SUPPORTED_LANGUAGES = objective-c LINKER_DISPLAYS_MANGLED_NAMES = NO LOCALIZED_STRING_SWIFTUI_SUPPORT = YES From 7f8a39bbf4f0f6a2126a6714d23c23108d2f4540 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 18 Mar 2023 21:39:15 -0400 Subject: [PATCH 157/245] Updated framework, SPM, and CocoaPods header files so all support Mac Catalyst and have consistent blank lines for readability. --- framework/CocoaPods/CorePlot.h | 3 +++ framework/CorePlot.h | 3 ++- framework/SPM Umbrella Header/CorePlot.h | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/framework/CocoaPods/CorePlot.h b/framework/CocoaPods/CorePlot.h index 6f991662e..4be4415a4 100644 --- a/framework/CocoaPods/CorePlot.h +++ b/framework/CocoaPods/CorePlot.h @@ -1,9 +1,12 @@ #import #if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST + #import #import + #else + #import #import "CPTDecimalNumberValueTransformer.h" diff --git a/framework/CorePlot.h b/framework/CorePlot.h index b7399c981..8c04e8925 100644 --- a/framework/CorePlot.h +++ b/framework/CorePlot.h @@ -1,6 +1,6 @@ #import -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST #import #import @@ -10,6 +10,7 @@ #import #import + #endif #import diff --git a/framework/SPM Umbrella Header/CorePlot.h b/framework/SPM Umbrella Header/CorePlot.h index af4fc8f03..383956308 100644 --- a/framework/SPM Umbrella Header/CorePlot.h +++ b/framework/SPM Umbrella Header/CorePlot.h @@ -1,9 +1,12 @@ #import #if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST + #import #import + #else + #import #import "CPTDecimalNumberValueTransformer.h" From 51a91294e56fd29de8f405209cd38a34747a0e36 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 19 Mar 2023 12:21:55 -0400 Subject: [PATCH 158/245] Use TARGET_OS_OSX availability check everywhere for consistency. --- framework/MacOnly/CPTDecimalNumberValueTransformer.h | 2 +- framework/Source/CPTAnimation.h | 2 +- framework/Source/CPTDefinitions.h | 2 +- framework/Source/CPTLayer.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/framework/MacOnly/CPTDecimalNumberValueTransformer.h b/framework/MacOnly/CPTDecimalNumberValueTransformer.h index 4d3fcf755..5d4ea62a4 100644 --- a/framework/MacOnly/CPTDecimalNumberValueTransformer.h +++ b/framework/MacOnly/CPTDecimalNumberValueTransformer.h @@ -1,6 +1,6 @@ #import -#if TARGET_OS_MAC +#if TARGET_OS_OSX @interface CPTDecimalNumberValueTransformer : NSValueTransformer diff --git a/framework/Source/CPTAnimation.h b/framework/Source/CPTAnimation.h index 77a3ac2a0..ce86cdb19 100644 --- a/framework/Source/CPTAnimation.h +++ b/framework/Source/CPTAnimation.h @@ -47,7 +47,7 @@ typedef NS_ENUM (NSInteger, CPTAnimationCurve) { * @brief Animation delegate. **/ #if ((TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_TV || TARGET_OS_MACCATALYST) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= 100000)) \ - || (TARGET_OS_MAC && (MAC_OS_X_VERSION_MAX_ALLOWED >= 101200)) + || (TARGET_OS_OSX && (MAC_OS_X_VERSION_MAX_ALLOWED >= 101200)) // CAAnimationDelegate is defined by Core Animation in iOS 10.0+, macOS 10.12+, and tvOS 10.0+ @protocol CPTAnimationDelegate #else diff --git a/framework/Source/CPTDefinitions.h b/framework/Source/CPTDefinitions.h index dd86aa147..2eedf7431 100644 --- a/framework/Source/CPTDefinitions.h +++ b/framework/Source/CPTDefinitions.h @@ -29,7 +29,7 @@ #if TARGET_OS_IPHONE && defined(__IPHONE_5_0) && (__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_5_0) && __clang__ && (__clang_major__ >= 3) #define CPT_SDK_SUPPORTS_WEAK 1 -#elif TARGET_OS_MAC && defined(__MAC_10_7) && (MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_7) && __clang__ && (__clang_major__ >= 3) +#elif TARGET_OS_OSX && defined(__MAC_10_7) && (MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_7) && __clang__ && (__clang_major__ >= 3) #define CPT_SDK_SUPPORTS_WEAK 1 #else #define CPT_SDK_SUPPORTS_WEAK 0 diff --git a/framework/Source/CPTLayer.h b/framework/Source/CPTLayer.h index 6ed1008a9..5cb3472aa 100644 --- a/framework/Source/CPTLayer.h +++ b/framework/Source/CPTLayer.h @@ -69,7 +69,7 @@ typedef NSMutableSet CPTMutableSublayerSet; * @brief Layer delegate. **/ #if ((TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_TV || TARGET_OS_MACCATALYST) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= 100000)) \ - || (TARGET_OS_MAC && (MAC_OS_X_VERSION_MAX_ALLOWED >= 101200)) + || (TARGET_OS_OSX && (MAC_OS_X_VERSION_MAX_ALLOWED >= 101200)) // CALayerDelegate is defined by Core Animation in iOS 10.0+, macOS 10.12+, and tvOS 10.0+ @protocol CPTLayerDelegate #else From 4fb9d9fb7f03f05fa635c954eb5995df1f725ea1 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 19 Mar 2023 12:32:17 -0400 Subject: [PATCH 159/245] Added the private module map and umbrella header file to fix module verifier errors. --- framework/CorePlot.xcodeproj/project.pbxproj | 14 ++++++++++++ framework/Module/module.modulemap | 6 +++++ framework/Module/module.private.modulemap | 6 +++++ framework/SPM Umbrella Header/CorePlot.h | 11 ---------- .../SPM Umbrella Header/CorePlot_Private.h | 22 +++++++++++++++++++ framework/xcconfig/CorePlot.xcconfig | 3 +++ .../core-plot/include/CorePlot_Private.h | 1 + 7 files changed, 52 insertions(+), 11 deletions(-) create mode 100644 framework/Module/module.modulemap create mode 100644 framework/Module/module.private.modulemap create mode 100644 framework/SPM Umbrella Header/CorePlot_Private.h create mode 120000 spm/Sources/core-plot/include/CorePlot_Private.h diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 5b70bd1ea..a4dbd9bdf 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -953,6 +953,9 @@ C37A406520E02BA100C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/CorePlot-CocoaTouchTests-Info.plist"; sourceTree = ""; }; C37A406720E02BA500C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/CorePlot-iOSTests-Info.plist"; sourceTree = ""; }; C37A406920E02BE900C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/CorePlotTests-Info.plist"; sourceTree = ""; }; + C37A9AB429C69796003B4338 /* CorePlot_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CorePlot_Private.h; sourceTree = ""; }; + C37A9AB829C698A7003B4338 /* module.private.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.private.modulemap; sourceTree = ""; }; + C37A9AB929C698A7003B4338 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = ""; }; C37EA6921BC83F2A0091C8F7 /* CorePlot.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CorePlot.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C37EA6B71BC83F2D0091C8F7 /* UnitTests tvOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "UnitTests tvOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; C38A09781A46185200D45436 /* CorePlot.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CorePlot.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -1410,6 +1413,7 @@ C3D0F67429C604EF00190D2C /* Scripts */, C3B25EDE1AC23A7D0063CCD8 /* CocoaPods */, C3F244BE28DBCABB008DB9A1 /* SPM Umbrella Header */, + C37A9AB729C698A7003B4338 /* Module */, 32C88DFF0371C24200C91783 /* Other Sources */, 089C1665FE841158C02AAC07 /* Resources */, 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */, @@ -1627,6 +1631,15 @@ name = "Plot Symbols"; sourceTree = ""; }; + C37A9AB729C698A7003B4338 /* Module */ = { + isa = PBXGroup; + children = ( + C37A9AB829C698A7003B4338 /* module.private.modulemap */, + C37A9AB929C698A7003B4338 /* module.modulemap */, + ); + path = Module; + sourceTree = SOURCE_ROOT; + }; C38A0A521A461F5D00D45436 /* Platform Specific */ = { isa = PBXGroup; children = ( @@ -1786,6 +1799,7 @@ isa = PBXGroup; children = ( C3F244BF28DBCABB008DB9A1 /* CorePlot.h */, + C37A9AB429C69796003B4338 /* CorePlot_Private.h */, ); path = "SPM Umbrella Header"; sourceTree = ""; diff --git a/framework/Module/module.modulemap b/framework/Module/module.modulemap new file mode 100644 index 000000000..dbace5327 --- /dev/null +++ b/framework/Module/module.modulemap @@ -0,0 +1,6 @@ +framework module CorePlot { + umbrella header "CorePlot.h" + + export * + module * { export * } +} diff --git a/framework/Module/module.private.modulemap b/framework/Module/module.private.modulemap new file mode 100644 index 000000000..61d969633 --- /dev/null +++ b/framework/Module/module.private.modulemap @@ -0,0 +1,6 @@ +framework module CorePlot_Private { + umbrella header "CorePlot_Private.h" + + export * + module * { export * } +} diff --git a/framework/SPM Umbrella Header/CorePlot.h b/framework/SPM Umbrella Header/CorePlot.h index 383956308..4be4415a4 100644 --- a/framework/SPM Umbrella Header/CorePlot.h +++ b/framework/SPM Umbrella Header/CorePlot.h @@ -78,14 +78,3 @@ #import "CPTXYAxisSet.h" #import "CPTXYGraph.h" #import "CPTXYPlotSpace.h" - -// Private Headers -#import "CPTAxisLabelGroup.h" -#import "CPTDebugQuickLook.h" -#import "CPTDerivedXYGraph.h" -#import "CPTGridLineGroup.h" -#import "CPTGridLines.h" -#import "CPTPlotGroup.h" -#import "NSCoderExtensions.h" -#import "NSDecimalNumberExtensions.h" -#import "NSNumberExtensions.h" diff --git a/framework/SPM Umbrella Header/CorePlot_Private.h b/framework/SPM Umbrella Header/CorePlot_Private.h new file mode 100644 index 000000000..5853917fe --- /dev/null +++ b/framework/SPM Umbrella Header/CorePlot_Private.h @@ -0,0 +1,22 @@ +#import + +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST + +#import +#import + +#else + +#import + +#endif + +#import "CPTAxisLabelGroup.h" +#import "CPTDebugQuickLook.h" +#import "CPTDerivedXYGraph.h" +#import "CPTGridLineGroup.h" +#import "CPTGridLines.h" +#import "CPTPlotGroup.h" +#import "NSCoderExtensions.h" +#import "NSDecimalNumberExtensions.h" +#import "NSNumberExtensions.h" diff --git a/framework/xcconfig/CorePlot.xcconfig b/framework/xcconfig/CorePlot.xcconfig index 226478b4c..90ed7bbb5 100644 --- a/framework/xcconfig/CorePlot.xcconfig +++ b/framework/xcconfig/CorePlot.xcconfig @@ -76,6 +76,9 @@ SWIFT_TREAT_WARNINGS_AS_ERRORS = YES ENABLE_MODULE_VERIFIER = YES MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = c99 MODULE_VERIFIER_SUPPORTED_LANGUAGES = objective-c +MODULEMAP_FILE = $(SOURCE_ROOT)/Module/module.modulemap +MODULEMAP_PRIVATE_FILE = $(SOURCE_ROOT)/Module/module.private.modulemap +PRODUCT_MODULE_NAME = $(PRODUCT_NAME:rfc1034identifier) LINKER_DISPLAYS_MANGLED_NAMES = NO LOCALIZED_STRING_SWIFTUI_SUPPORT = YES diff --git a/spm/Sources/core-plot/include/CorePlot_Private.h b/spm/Sources/core-plot/include/CorePlot_Private.h new file mode 120000 index 000000000..c8b8f48c1 --- /dev/null +++ b/spm/Sources/core-plot/include/CorePlot_Private.h @@ -0,0 +1 @@ +../../../../framework/SPM Umbrella Header/CorePlot_Private.h \ No newline at end of file From bb816f50476f53d7bfbd105b978fd27319edafbf Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 19 Mar 2023 13:07:27 -0400 Subject: [PATCH 160/245] Updated the Mac deployment target to 10.14.6 to match the recommended minimum in Xcode 14.3. --- CorePlot-latest.podspec | 2 +- documentation/changelog.markdown | 4 ++-- examples/CPTTestApp/Source/Controller.m | 2 +- examples/CorePlotGallery/src/mac/PlotGalleryController.m | 4 ++-- examples/DropPlot/CPTPlotDocument.m | 2 +- framework/PlatformSpecific/CPTGraphHostingView.m | 2 +- .../PlatformSpecific/CPTPlatformSpecificCategories.m | 4 ++-- framework/PlatformSpecific/CPTPlatformSpecificFunctions.m | 8 +++++--- framework/Source/CPTImage.m | 4 ++-- framework/xcconfig/CorePlot.xcconfig | 2 +- 10 files changed, 18 insertions(+), 16 deletions(-) diff --git a/CorePlot-latest.podspec b/CorePlot-latest.podspec index bf28587c4..7e1f6c15e 100644 --- a/CorePlot-latest.podspec +++ b/CorePlot-latest.podspec @@ -19,7 +19,7 @@ Pod::Spec.new do |s| 'Core Data, and Cocoa Bindings.' s.ios.deployment_target = '12.0' - s.osx.deployment_target = '10.10' + s.osx.deployment_target = '10.14.6' s.tvos.deployment_target = '12.0' s.ios.header_dir = 'ios' diff --git a/documentation/changelog.markdown b/documentation/changelog.markdown index 2d12ee19d..08ebe9eac 100644 --- a/documentation/changelog.markdown +++ b/documentation/changelog.markdown @@ -4,7 +4,7 @@ This release updates Core Plot to be compatible with Xcode 14, Mac Catalyst, and the Swift Package Manager. It adds support for the Swift Package Manager and Mac Catalyst. -The Mac deployment target is now macOS 10.13. The iOS deployment target has changed to iOS 12.0. The tvOS deployment target has changed to tvOS 12.0. The iOS static library is obsolete and has been removed. +The Mac deployment target is now macOS 10.14.6. The iOS deployment target has changed to iOS 12.0. The tvOS deployment target has changed to tvOS 12.0. The iOS static library is obsolete and has been removed. The iOS and tvOS framework targets have been removed because lipo cannot combine device and simulator builds for Apple Silicon in the same output file (both use arm64). Use the Universal XCFramework that contains all platforms and architectures instead. @@ -13,7 +13,7 @@ The iOS and tvOS framework targets have been removed because lipo cannot combine - **New**: Mac Catalyst support - **New**: Swift Package Manager support -- **Changed**: Updated the deployment targets for all supported operating systems for the minimums required by Xcode 14. The Mac deployment target is now macOS 10.13. The iOS deployment target is now iOS 12.0. The tvOS deployment target is now tvOS 12.0. +- **Changed**: Updated the deployment targets for all supported operating systems for the minimums required by Xcode 14. The Mac deployment target is now macOS 10.14.6. The iOS deployment target is now iOS 12.0. The tvOS deployment target is now tvOS 12.0. - **Changed**: Miscellaneous bug fixes and cleanup. - **Removed**: Removed the iOS static library. - **Removed**: Removed the iOS and tvOS framework targets. diff --git a/examples/CPTTestApp/Source/Controller.m b/examples/CPTTestApp/Source/Controller.m index 6ef1619b0..0d5208afb 100644 --- a/examples/CPTTestApp/Source/Controller.m +++ b/examples/CPTTestApp/Source/Controller.m @@ -661,7 +661,7 @@ -(IBAction)exportToPNG:(nullable id __unused)sender NSImage *image = [self.graph imageOfLayer]; NSData *tiffData = image.TIFFRepresentation; NSBitmapImageRep *tiffRep = [NSBitmapImageRep imageRepWithData:tiffData]; - NSData *pngData = [tiffRep representationUsingType:NSPNGFileType properties:@{}]; + NSData *pngData = [tiffRep representationUsingType:NSBitmapImageFileTypePNG properties:@{}]; NSURL *url = pngSavingDialog.URL; if ( url ) { diff --git a/examples/CorePlotGallery/src/mac/PlotGalleryController.m b/examples/CorePlotGallery/src/mac/PlotGalleryController.m index a753048ce..444979e7d 100644 --- a/examples/CorePlotGallery/src/mac/PlotGalleryController.m +++ b/examples/CorePlotGallery/src/mac/PlotGalleryController.m @@ -177,7 +177,7 @@ -(void)exportTVImageWithSize:(CGSize)size toURL:(NSURL *)url showPlots:(BOOL)sho bitsPerPixel:32]; NSGraphicsContext *bitmapContext = [NSGraphicsContext graphicsContextWithBitmapImageRep:layerImage]; - CGContextRef context = (CGContextRef)bitmapContext.graphicsPort; + CGContextRef context = bitmapContext.CGContext; CGContextClearRect(context, CGRectMake(0.0, 0.0, boundsSize.width, boundsSize.height)); CGContextSetAllowsAntialiasing(context, true); @@ -190,7 +190,7 @@ -(void)exportTVImageWithSize:(CGSize)size toURL:(NSURL *)url showPlots:(BOOL)sho NSData *tiffData = image.TIFFRepresentation; NSBitmapImageRep *tiffRep = [NSBitmapImageRep imageRepWithData:tiffData]; - NSData *pngData = [tiffRep representationUsingType:NSPNGFileType properties:@{}]; + NSData *pngData = [tiffRep representationUsingType:NSBitmapImageFileTypePNG properties:@{}]; [pngData writeToURL:url atomically:NO]; } diff --git a/examples/DropPlot/CPTPlotDocument.m b/examples/DropPlot/CPTPlotDocument.m index 5cacd0c82..a6121851c 100644 --- a/examples/DropPlot/CPTPlotDocument.m +++ b/examples/DropPlot/CPTPlotDocument.m @@ -341,7 +341,7 @@ -(IBAction)exportToPNG:(nullable id __unused)sender NSImage *image = [self.graph imageOfLayer]; NSData *tiffData = image.TIFFRepresentation; NSBitmapImageRep *tiffRep = [NSBitmapImageRep imageRepWithData:tiffData]; - NSData *pngData = [tiffRep representationUsingType:NSPNGFileType properties:@{}]; + NSData *pngData = [tiffRep representationUsingType:NSBitmapImageFileTypePNG properties:@{}]; NSURL *url = pngSavingDialog.URL; if ( url ) { diff --git a/framework/PlatformSpecific/CPTGraphHostingView.m b/framework/PlatformSpecific/CPTGraphHostingView.m index 3bbe2e3f2..063f4855a 100644 --- a/framework/PlatformSpecific/CPTGraphHostingView.m +++ b/framework/PlatformSpecific/CPTGraphHostingView.m @@ -221,7 +221,7 @@ -(void)drawRect:(NSRect __unused)dirtyRect // render CPTLayers recursively into the graphics context used for printing // (thanks to Brad for the tip: https://stackoverflow.com/a/2791305/132867 ) - CGContextRef context = graphicsContext.graphicsPort; + CGContextRef context = graphicsContext.CGContext; [self.hostedGraph recursivelyRenderInContext:context]; [graphicsContext restoreGraphicsState]; diff --git a/framework/PlatformSpecific/CPTPlatformSpecificCategories.m b/framework/PlatformSpecific/CPTPlatformSpecificCategories.m index 84770246a..b8a13ba01 100644 --- a/framework/PlatformSpecific/CPTPlatformSpecificCategories.m +++ b/framework/PlatformSpecific/CPTPlatformSpecificCategories.m @@ -50,7 +50,7 @@ -(nonnull CPTNativeImage *)imageOfLayer hasAlpha:YES isPlanar:NO colorSpaceName:NSCalibratedRGBColorSpace - bitmapFormat:NSAlphaFirstBitmapFormat + bitmapFormat:NSBitmapFormatAlphaFirst bytesPerRow:0 bitsPerPixel:0 ]; @@ -59,7 +59,7 @@ -(nonnull CPTNativeImage *)imageOfLayer layerImage.size = NSSizeFromCGSize(boundsSize); NSGraphicsContext *bitmapContext = [NSGraphicsContext graphicsContextWithBitmapImageRep:layerImage]; - CGContextRef context = (CGContextRef)bitmapContext.graphicsPort; + CGContextRef context = bitmapContext.CGContext; CGContextClearRect(context, CPTRectMake(0.0, 0.0, boundsSize.width, boundsSize.height)); CGContextSetAllowsAntialiasing(context, true); diff --git a/framework/PlatformSpecific/CPTPlatformSpecificFunctions.m b/framework/PlatformSpecific/CPTPlatformSpecificFunctions.m index 121f5261f..d31ac4a8b 100644 --- a/framework/PlatformSpecific/CPTPlatformSpecificFunctions.m +++ b/framework/PlatformSpecific/CPTPlatformSpecificFunctions.m @@ -37,7 +37,7 @@ void CPTPushCGContext(__nonnull CGContextRef newContext) } if ( newContext ) { - [NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithGraphicsPort:newContext flipped:NO]]; + [NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithCGContext:newContext flipped:NO]]; } }); } @@ -100,7 +100,9 @@ CPTRGBAColor CPTRGBAColorFromNSColor(NSColor *__nonnull nsColor) { CGFloat red, green, blue, alpha; - [[nsColor colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&red green:&green blue:&blue alpha:&alpha]; + NSColor *nsRBGColor = [nsColor colorUsingColorSpace:[NSColorSpace genericRGBColorSpace]]; + + [nsRBGColor getRed:&red green:&green blue:&blue alpha:&alpha]; CPTRGBAColor rgbColor; @@ -131,7 +133,7 @@ CPTRGBAColor CPTRGBAColorFromNSColor(NSColor *__nonnull nsColor) NSGraphicsContext *bitmapContext = [NSGraphicsContext graphicsContextWithBitmapImageRep:layerImage]; - CGContextRef context = (CGContextRef)bitmapContext.graphicsPort; + CGContextRef context = bitmapContext.CGContext; CGContextClearRect(context, rect); diff --git a/framework/Source/CPTImage.m b/framework/Source/CPTImage.m index c9a378ffb..2417249a5 100644 --- a/framework/Source/CPTImage.m +++ b/framework/Source/CPTImage.m @@ -551,7 +551,7 @@ -(nullable CPTNativeImage *)nativeImage bitsPerPixel:32]; NSGraphicsContext *bitmapContext = [NSGraphicsContext graphicsContextWithBitmapImageRep:imageRep]; - CGContextRef context = (CGContextRef)bitmapContext.graphicsPort; + CGContextRef context = bitmapContext.CGContext; CGContextDrawImage(context, CPTRectMake(0.0, 0.0, imageSize.width, imageSize.height), imageRef); @@ -754,7 +754,7 @@ -(void)drawInRect:(CGRect)rect inContext:(nonnull CGContextRef)context NSRect drawingRect = NSMakeRect(0.0, 0.0, imageSize.width, imageSize.height); theImage = [theNativeImage CGImageForProposedRect:&drawingRect - context:[NSGraphicsContext graphicsContextWithGraphicsPort:context flipped:NO] + context:[NSGraphicsContext graphicsContextWithCGContext:context flipped:NO] hints:nil]; self.scale = contextScale; #endif diff --git a/framework/xcconfig/CorePlot.xcconfig b/framework/xcconfig/CorePlot.xcconfig index 90ed7bbb5..afaad42e8 100644 --- a/framework/xcconfig/CorePlot.xcconfig +++ b/framework/xcconfig/CorePlot.xcconfig @@ -3,7 +3,7 @@ ARCHS = $(ARCHS_STANDARD) IPHONEOS_DEPLOYMENT_TARGET = 12.0 -MACOSX_DEPLOYMENT_TARGET = 10.13 +MACOSX_DEPLOYMENT_TARGET = 10.14.6 TVOS_DEPLOYMENT_TARGET = 12.0 SWIFT_VERSION = 5.0 From 1ef582f60feee69525af2517fb82d74689839267 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 19 Mar 2023 21:31:56 -0400 Subject: [PATCH 161/245] Updated the deployment targets in the Package.swift file to match the requirements defined in the project. --- Package.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Package.swift b/Package.swift index 2d5d990a7..be19e84c5 100644 --- a/Package.swift +++ b/Package.swift @@ -6,9 +6,9 @@ import PackageDescription let package = Package( name: "CorePlot", platforms: [ - .macOS(.v10_12), - .iOS(.v10), - .tvOS(.v10) + .macOS(.v10_14), + .iOS(.v12), + .tvOS(.v12) ], products: [ // Products define the executables and libraries a package produces, and make them visible to other packages. From 273a0bd34959531a8cf21dc83efeee1fc65d6fd2 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Tue, 21 Mar 2023 20:46:49 -0400 Subject: [PATCH 162/245] Split the module-related build settings into a separate .xcconfig file. --- framework/CorePlot.xcodeproj/project.pbxproj | 24 +++++++++---------- framework/xcconfig/CorePlot.xcconfig | 13 +++++----- .../xcconfig/CorePlotDebugModule.xcconfig | 2 ++ framework/xcconfig/CorePlotModule.xcconfig | 8 +++++++ .../xcconfig/CorePlotReleaseModule.xcconfig | 2 ++ 5 files changed, 30 insertions(+), 19 deletions(-) create mode 100644 framework/xcconfig/CorePlotDebugModule.xcconfig create mode 100644 framework/xcconfig/CorePlotModule.xcconfig create mode 100644 framework/xcconfig/CorePlotReleaseModule.xcconfig diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index a4dbd9bdf..436f3a2ba 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -981,6 +981,9 @@ C3A695E4146A19BC00AF5653 /* CPTMutablePlotRange.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTMutablePlotRange.m; sourceTree = ""; }; C3AFC9CF0FB62969005DFFDC /* CPTImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTImage.h; sourceTree = ""; }; C3AFC9D00FB62969005DFFDC /* CPTImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTImage.m; sourceTree = ""; }; + C3B0E7B229CA7B3200FC94B5 /* CorePlotDebugModule.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotDebugModule.xcconfig; path = xcconfig/CorePlotDebugModule.xcconfig; sourceTree = ""; }; + C3B0E7B329CA7B3200FC94B5 /* CorePlotReleaseModule.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotReleaseModule.xcconfig; path = xcconfig/CorePlotReleaseModule.xcconfig; sourceTree = ""; }; + C3B0E7B429CA7B6000FC94B5 /* CorePlotModule.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotModule.xcconfig; path = xcconfig/CorePlotModule.xcconfig; sourceTree = ""; }; C3B235631009931400970270 /* doxygen-cocoa-tags.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = "doxygen-cocoa-tags.xml"; path = "../documentation/doxygen/doxygen-cocoa-tags.xml"; sourceTree = ""; }; C3B25EDF1AC23A7D0063CCD8 /* CorePlot.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CorePlot.h; sourceTree = ""; }; C3BB3C8C1C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTAnimationNSNumberPeriod.h; sourceTree = ""; }; @@ -1462,7 +1465,10 @@ 32DBCF5E0370ADEE00C91783 /* CorePlot_Prefix.pch */, 070CF7AE0F3CA7AB0001FFF4 /* CorePlot.h */, C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */, + C3B0E7B229CA7B3200FC94B5 /* CorePlotDebugModule.xcconfig */, C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */, + C3B0E7B329CA7B3200FC94B5 /* CorePlotReleaseModule.xcconfig */, + C3B0E7B429CA7B6000FC94B5 /* CorePlotModule.xcconfig */, C31908A41998168C00B61898 /* CorePlot.xcconfig */, C34F570D19D8CE5500446248 /* CorePlotWarnings.xcconfig */, ); @@ -2961,9 +2967,8 @@ }; 1DEB91AE08733DA50010E9CD /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; + baseConfigurationReference = C3B0E7B229CA7B3200FC94B5 /* CorePlotDebugModule.xcconfig */; buildSettings = { - DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; FRAMEWORK_VERSION = A; @@ -2982,9 +2987,8 @@ }; 1DEB91AF08733DA50010E9CD /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; + baseConfigurationReference = C3B0E7B329CA7B3200FC94B5 /* CorePlotReleaseModule.xcconfig */; buildSettings = { - DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; FRAMEWORK_VERSION = A; @@ -3055,9 +3059,8 @@ }; C37EA6901BC83F2A0091C8F7 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; + baseConfigurationReference = C3B0E7B229CA7B3200FC94B5 /* CorePlotDebugModule.xcconfig */; buildSettings = { - DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -3080,9 +3083,8 @@ }; C37EA6911BC83F2A0091C8F7 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; + baseConfigurationReference = C3B0E7B329CA7B3200FC94B5 /* CorePlotReleaseModule.xcconfig */; buildSettings = { - DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -3145,9 +3147,8 @@ }; C38A098B1A46185300D45436 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; + baseConfigurationReference = C3B0E7B229CA7B3200FC94B5 /* CorePlotDebugModule.xcconfig */; buildSettings = { - DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -3171,9 +3172,8 @@ }; C38A098C1A46185300D45436 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; + baseConfigurationReference = C3B0E7B329CA7B3200FC94B5 /* CorePlotReleaseModule.xcconfig */; buildSettings = { - DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; diff --git a/framework/xcconfig/CorePlot.xcconfig b/framework/xcconfig/CorePlot.xcconfig index afaad42e8..3c036b68d 100644 --- a/framework/xcconfig/CorePlot.xcconfig +++ b/framework/xcconfig/CorePlot.xcconfig @@ -26,6 +26,12 @@ CLANG_LINK_OBJC_RUNTIME = $(LINK_OBJC_RUNTIME) CLANG_STATIC_ANALYZER_MODE = shallow CLANG_STATIC_ANALYZER_MODE_ON_ANALYZE_ACTION = deep +CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = NO +CLANG_ENABLE_MODULE_DEBUGGING = YES +CLANG_ENABLE_MODULES = NO +CLANG_MODULES_AUTOLINK = YES +CLANG_MODULES_DISABLE_PRIVATE_WARNING = NO + COMBINE_HIDPI_IMAGES = YES COPY_PHASE_STRIP = YES @@ -73,13 +79,6 @@ SWIFT_REFLECTION_METADATA_LEVEL = all SWIFT_SUPPRESS_WARNINGS = NO SWIFT_TREAT_WARNINGS_AS_ERRORS = YES -ENABLE_MODULE_VERIFIER = YES -MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = c99 -MODULE_VERIFIER_SUPPORTED_LANGUAGES = objective-c -MODULEMAP_FILE = $(SOURCE_ROOT)/Module/module.modulemap -MODULEMAP_PRIVATE_FILE = $(SOURCE_ROOT)/Module/module.private.modulemap -PRODUCT_MODULE_NAME = $(PRODUCT_NAME:rfc1034identifier) - LINKER_DISPLAYS_MANGLED_NAMES = NO LOCALIZED_STRING_SWIFTUI_SUPPORT = YES OTHER_LDFLAGS = -ObjC diff --git a/framework/xcconfig/CorePlotDebugModule.xcconfig b/framework/xcconfig/CorePlotDebugModule.xcconfig new file mode 100644 index 000000000..7d9c62dc7 --- /dev/null +++ b/framework/xcconfig/CorePlotDebugModule.xcconfig @@ -0,0 +1,2 @@ +#include "CorePlotModule.xcconfig" +#include "CorePlotDebug.xcconfig" diff --git a/framework/xcconfig/CorePlotModule.xcconfig b/framework/xcconfig/CorePlotModule.xcconfig new file mode 100644 index 000000000..11b158c3c --- /dev/null +++ b/framework/xcconfig/CorePlotModule.xcconfig @@ -0,0 +1,8 @@ +DEFINES_MODULE = YES + +ENABLE_MODULE_VERIFIER = YES +MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = c99 +MODULE_VERIFIER_SUPPORTED_LANGUAGES = objective-c +MODULEMAP_FILE = $(SOURCE_ROOT)/Module/module.modulemap +MODULEMAP_PRIVATE_FILE = $(SOURCE_ROOT)/Module/module.private.modulemap +PRODUCT_MODULE_NAME = $(PRODUCT_NAME:rfc1034identifier) diff --git a/framework/xcconfig/CorePlotReleaseModule.xcconfig b/framework/xcconfig/CorePlotReleaseModule.xcconfig new file mode 100644 index 000000000..09e64bfff --- /dev/null +++ b/framework/xcconfig/CorePlotReleaseModule.xcconfig @@ -0,0 +1,2 @@ +#include "CorePlotModule.xcconfig" +#include "CorePlotRelease.xcconfig" From c410df04422aeb1048c172edd6bcfb515f79e1ce Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Wed, 22 Mar 2023 20:33:35 -0400 Subject: [PATCH 163/245] Added an underscore to the filename on CPTDebugQuickLook.h and removed references to it from the SPM umbrella header since it is a local project header. --- framework/CorePlot.xcodeproj/project.pbxproj | 16 ++++++++-------- framework/SPM Umbrella Header/CorePlot_Private.h | 1 - framework/Source/CPTXYPlotSpace.m | 2 +- ...{CPTDebugQuickLook.h => _CPTDebugQuickLook.h} | 0 spm/Sources/core-plot/_CPTDebugQuickLook.h | 1 + .../core-plot/include/CPTDebugQuickLook.h | 1 - 6 files changed, 10 insertions(+), 11 deletions(-) rename framework/Source/{CPTDebugQuickLook.h => _CPTDebugQuickLook.h} (100%) create mode 120000 spm/Sources/core-plot/_CPTDebugQuickLook.h delete mode 120000 spm/Sources/core-plot/include/CPTDebugQuickLook.h diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 436f3a2ba..1aae45638 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -395,7 +395,7 @@ C37EA6831BC83F2A0091C8F7 /* CPTPlatformSpecificFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = C38A0B1C1A46264500D45436 /* CPTPlatformSpecificFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6841BC83F2A0091C8F7 /* CPTAnnotationHostLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 072161E911D1F6BD009CC871 /* CPTAnnotationHostLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6851BC83F2A0091C8F7 /* CPTAxisLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = 073FB02E0FC991A3007A728E /* CPTAxisLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C37EA6861BC83F2A0091C8F7 /* CPTDebugQuickLook.h in Headers */ = {isa = PBXBuildFile; fileRef = C3BB93181B729BD200004527 /* CPTDebugQuickLook.h */; }; + C37EA6861BC83F2A0091C8F7 /* _CPTDebugQuickLook.h in Headers */ = {isa = PBXBuildFile; fileRef = C3BB93181B729BD200004527 /* _CPTDebugQuickLook.h */; }; C37EA6871BC83F2A0091C8F7 /* _CPTAnimationTimingFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C2847316585085006BA43C /* _CPTAnimationTimingFunctions.h */; }; C37EA6881BC83F2A0091C8F7 /* CPTMutableTextStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 07C467990FE1A24C00299939 /* CPTMutableTextStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6891BC83F2A0091C8F7 /* CPTXYGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = 07983EF40F2F9A3D008C8618 /* CPTXYGraph.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -651,8 +651,8 @@ C3BB3C911C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = C3BB3C8D1C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.m */; }; C3BB3C921C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = C3BB3C8D1C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.m */; }; C3BB3C941C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = C3BB3C8D1C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.m */; }; - C3BB93191B729BD200004527 /* CPTDebugQuickLook.h in Headers */ = {isa = PBXBuildFile; fileRef = C3BB93181B729BD200004527 /* CPTDebugQuickLook.h */; }; - C3BB931A1B729BD200004527 /* CPTDebugQuickLook.h in Headers */ = {isa = PBXBuildFile; fileRef = C3BB93181B729BD200004527 /* CPTDebugQuickLook.h */; }; + C3BB93191B729BD200004527 /* _CPTDebugQuickLook.h in Headers */ = {isa = PBXBuildFile; fileRef = C3BB93181B729BD200004527 /* _CPTDebugQuickLook.h */; }; + C3BB931A1B729BD200004527 /* _CPTDebugQuickLook.h in Headers */ = {isa = PBXBuildFile; fileRef = C3BB93181B729BD200004527 /* _CPTDebugQuickLook.h */; }; C3BFFD1112274CB500DE22AC /* CPTNumericDataTypeConversionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C97EF08104D80D400B554F9 /* CPTNumericDataTypeConversionTests.m */; }; C3C1C0801790D3B400E8B1B7 /* CPTLayerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C1C07F1790D3B400E8B1B7 /* CPTLayerTests.m */; }; C3C9CB0E165DB4D500739006 /* CPTAnimationOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C9CB0C165DB4D500739006 /* CPTAnimationOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -988,7 +988,7 @@ C3B25EDF1AC23A7D0063CCD8 /* CorePlot.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CorePlot.h; sourceTree = ""; }; C3BB3C8C1C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTAnimationNSNumberPeriod.h; sourceTree = ""; }; C3BB3C8D1C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = _CPTAnimationNSNumberPeriod.m; sourceTree = ""; }; - C3BB93181B729BD200004527 /* CPTDebugQuickLook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTDebugQuickLook.h; sourceTree = ""; }; + C3BB93181B729BD200004527 /* _CPTDebugQuickLook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTDebugQuickLook.h; sourceTree = ""; }; C3C032C710B8DEDC003A11B6 /* CPTAxisLabelGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTAxisLabelGroup.h; sourceTree = ""; }; C3C032C810B8DEDC003A11B6 /* CPTAxisLabelGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAxisLabelGroup.m; sourceTree = ""; }; C3C1C07E1790D3B400E8B1B7 /* CPTLayerTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLayerTests.h; sourceTree = ""; }; @@ -1376,7 +1376,7 @@ C3A695E4146A19BC00AF5653 /* CPTMutablePlotRange.m */, C3F97F1C17A9E07B00A52FF2 /* CPTFunctionDataSource.h */, C3F97F1D17A9E07B00A52FF2 /* CPTFunctionDataSource.m */, - C3BB93181B729BD200004527 /* CPTDebugQuickLook.h */, + C3BB93181B729BD200004527 /* _CPTDebugQuickLook.h */, 076A775F0FBF0BFE003F6D97 /* Tests */, ); name = "Types and Functions"; @@ -1869,7 +1869,7 @@ 070622320FDF1B250066A6C4 /* CPTPathExtensions.h in Headers */, 0706223C0FDF215C0066A6C4 /* CPTBorderedLayer.h in Headers */, 07C4679B0FE1A24C00299939 /* CPTMutableTextStyle.h in Headers */, - C3BB93191B729BD200004527 /* CPTDebugQuickLook.h in Headers */, + C3BB93191B729BD200004527 /* _CPTDebugQuickLook.h in Headers */, 0772C9270FE2F71600EC4C16 /* CPTTheme.h in Headers */, 0772C92F0FE2F89000EC4C16 /* _CPTDarkGradientTheme.h in Headers */, BC55023210059F22005DF982 /* _CPTPlainBlackTheme.h in Headers */, @@ -2022,7 +2022,7 @@ C37EA6831BC83F2A0091C8F7 /* CPTPlatformSpecificFunctions.h in Headers */, C37EA6841BC83F2A0091C8F7 /* CPTAnnotationHostLayer.h in Headers */, C37EA6851BC83F2A0091C8F7 /* CPTAxisLabel.h in Headers */, - C37EA6861BC83F2A0091C8F7 /* CPTDebugQuickLook.h in Headers */, + C37EA6861BC83F2A0091C8F7 /* _CPTDebugQuickLook.h in Headers */, C37EA6871BC83F2A0091C8F7 /* _CPTAnimationTimingFunctions.h in Headers */, C37EA6881BC83F2A0091C8F7 /* CPTMutableTextStyle.h in Headers */, C37EA6891BC83F2A0091C8F7 /* CPTXYGraph.h in Headers */, @@ -2125,7 +2125,7 @@ C38A0B241A46264500D45436 /* CPTPlatformSpecificFunctions.h in Headers */, C38A0A3B1A461EDA00D45436 /* CPTAnnotationHostLayer.h in Headers */, C38A0AF31A4625E800D45436 /* CPTAxisLabel.h in Headers */, - C3BB931A1B729BD200004527 /* CPTDebugQuickLook.h in Headers */, + C3BB931A1B729BD200004527 /* _CPTDebugQuickLook.h in Headers */, C38A0A2F1A461EB100D45436 /* _CPTAnimationTimingFunctions.h in Headers */, C38A0A4D1A461F1D00D45436 /* CPTMutableTextStyle.h in Headers */, C38A0AA81A46240300D45436 /* CPTXYGraph.h in Headers */, diff --git a/framework/SPM Umbrella Header/CorePlot_Private.h b/framework/SPM Umbrella Header/CorePlot_Private.h index 5853917fe..79455e54e 100644 --- a/framework/SPM Umbrella Header/CorePlot_Private.h +++ b/framework/SPM Umbrella Header/CorePlot_Private.h @@ -12,7 +12,6 @@ #endif #import "CPTAxisLabelGroup.h" -#import "CPTDebugQuickLook.h" #import "CPTDerivedXYGraph.h" #import "CPTGridLineGroup.h" #import "CPTGridLines.h" diff --git a/framework/Source/CPTXYPlotSpace.m b/framework/Source/CPTXYPlotSpace.m index 50c2375c7..01154e4ba 100644 --- a/framework/Source/CPTXYPlotSpace.m +++ b/framework/Source/CPTXYPlotSpace.m @@ -1,10 +1,10 @@ #import "CPTXYPlotSpace.h" +#import "_CPTDebugQuickLook.h" #import "CPTAnimation.h" #import "CPTAnimationOperation.h" #import "CPTAnimationPeriod.h" #import "CPTAxisSet.h" -#import "CPTDebugQuickLook.h" #import "CPTExceptions.h" #import "CPTGraph.h" #import "CPTGraphHostingView.h" diff --git a/framework/Source/CPTDebugQuickLook.h b/framework/Source/_CPTDebugQuickLook.h similarity index 100% rename from framework/Source/CPTDebugQuickLook.h rename to framework/Source/_CPTDebugQuickLook.h diff --git a/spm/Sources/core-plot/_CPTDebugQuickLook.h b/spm/Sources/core-plot/_CPTDebugQuickLook.h new file mode 120000 index 000000000..bc8fb9262 --- /dev/null +++ b/spm/Sources/core-plot/_CPTDebugQuickLook.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTDebugQuickLook.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTDebugQuickLook.h b/spm/Sources/core-plot/include/CPTDebugQuickLook.h deleted file mode 120000 index 500301a70..000000000 --- a/spm/Sources/core-plot/include/CPTDebugQuickLook.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTDebugQuickLook.h \ No newline at end of file From 246b568e9c1f7b8b9ca34a031bd7f3ea0cb01dc0 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Wed, 22 Mar 2023 20:41:27 -0400 Subject: [PATCH 164/245] Renamed CPTDerivedXYGraph to CPTXYGraphTestCase and removed references to it from the SPM umbrella header since it is only used for testing and should not be referenced from outside projects. --- framework/CorePlot.xcodeproj/project.pbxproj | 20 +++++++++---------- .../SPM Umbrella Header/CorePlot_Private.h | 1 - framework/Source/CPTDarkGradientThemeTests.m | 6 +++--- framework/Source/CPTDerivedXYGraph.h | 5 ----- framework/Source/CPTThemeTests.m | 6 +++--- framework/Source/CPTXYGraphTestCase.h | 5 +++++ ...TDerivedXYGraph.m => CPTXYGraphTestCase.m} | 4 ++-- spm/Sources/core-plot/CPTDerivedXYGraph.m | 1 - .../core-plot/include/CPTDerivedXYGraph.h | 1 - 9 files changed, 23 insertions(+), 26 deletions(-) delete mode 100644 framework/Source/CPTDerivedXYGraph.h create mode 100644 framework/Source/CPTXYGraphTestCase.h rename framework/Source/{CPTDerivedXYGraph.m => CPTXYGraphTestCase.m} (53%) delete mode 120000 spm/Sources/core-plot/CPTDerivedXYGraph.m delete mode 120000 spm/Sources/core-plot/include/CPTDerivedXYGraph.h diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 1aae45638..33e7ab8e3 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -416,7 +416,7 @@ C37EA6A21BC83F2D0091C8F7 /* CPTImageTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979B413D2340000145DFF /* CPTImageTests.m */; }; C37EA6A31BC83F2D0091C8F7 /* CPTDataSourceTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C9A745E0FB24C7200918464 /* CPTDataSourceTestCase.m */; }; C37EA6A41BC83F2D0091C8F7 /* CPTNumericDataTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C97EF06104D80D400B554F9 /* CPTNumericDataTests.m */; }; - C37EA6A51BC83F2D0091C8F7 /* CPTDerivedXYGraph.m in Sources */ = {isa = PBXBuildFile; fileRef = E1FE611A100F3FB700895A91 /* CPTDerivedXYGraph.m */; }; + C37EA6A51BC83F2D0091C8F7 /* CPTXYGraphTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = E1FE611A100F3FB700895A91 /* CPTXYGraphTestCase.m */; }; C37EA6A61BC83F2D0091C8F7 /* CPTXYPlotSpaceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C422A630FB1FCD5000CAA43 /* CPTXYPlotSpaceTests.m */; }; C37EA6A71BC83F2D0091C8F7 /* CPTTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 0730F64D109494D100E95162 /* CPTTestCase.m */; }; C37EA6A81BC83F2D0091C8F7 /* CPTPlotRangeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C36E89B911EE7F97003DE309 /* CPTPlotRangeTests.m */; }; @@ -626,7 +626,7 @@ C38A0B0A1A46261700D45436 /* _CPTStocksTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = BC55023110059F22005DF982 /* _CPTStocksTheme.m */; }; C38A0B121A46261F00D45436 /* CPTThemeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E1620CBD100F03A100A84E77 /* CPTThemeTests.m */; }; C38A0B131A46261F00D45436 /* CPTDarkGradientThemeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E1FE6051100F27EF00895A91 /* CPTDarkGradientThemeTests.m */; }; - C38A0B141A46261F00D45436 /* CPTDerivedXYGraph.m in Sources */ = {isa = PBXBuildFile; fileRef = E1FE611A100F3FB700895A91 /* CPTDerivedXYGraph.m */; }; + C38A0B141A46261F00D45436 /* CPTXYGraphTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = E1FE611A100F3FB700895A91 /* CPTXYGraphTestCase.m */; }; C38A0B1E1A46264500D45436 /* CPTPlatformSpecificCategories.h in Headers */ = {isa = PBXBuildFile; fileRef = C38A0B181A46264500D45436 /* CPTPlatformSpecificCategories.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0B1F1A46264500D45436 /* CPTPlatformSpecificCategories.m in Sources */ = {isa = PBXBuildFile; fileRef = C38A0B191A46264500D45436 /* CPTPlatformSpecificCategories.m */; }; C38A0B211A46264500D45436 /* CPTPlatformSpecificDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = C38A0B1A1A46264500D45436 /* CPTPlatformSpecificDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -685,7 +685,7 @@ C3D68A5F1220B2B400EB4863 /* CPTScatterPlotTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 07FEBD61110B7E8B00E44D37 /* CPTScatterPlotTests.m */; }; C3D68A601220B2BE00EB4863 /* CPTAxisLabelTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD23FFB0FFBE78400ADD2E2 /* CPTAxisLabelTests.m */; }; C3D68A611220B2C800EB4863 /* CPTDarkGradientThemeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E1FE6051100F27EF00895A91 /* CPTDarkGradientThemeTests.m */; }; - C3D68A621220B2C900EB4863 /* CPTDerivedXYGraph.m in Sources */ = {isa = PBXBuildFile; fileRef = E1FE611A100F3FB700895A91 /* CPTDerivedXYGraph.m */; }; + C3D68A621220B2C900EB4863 /* CPTXYGraphTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = E1FE611A100F3FB700895A91 /* CPTXYGraphTestCase.m */; }; C3D68A631220B2CC00EB4863 /* CPTThemeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E1620CBD100F03A100A84E77 /* CPTThemeTests.m */; }; C3D979A413D2136700145DFF /* CPTPlotSpaceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979A313D2136600145DFF /* CPTPlotSpaceTests.m */; }; C3D979A913D2328000145DFF /* CPTTimeFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979A813D2328000145DFF /* CPTTimeFormatterTests.m */; }; @@ -1055,8 +1055,8 @@ E1620CBD100F03A100A84E77 /* CPTThemeTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTThemeTests.m; sourceTree = ""; }; E1FE6050100F27EF00895A91 /* CPTDarkGradientThemeTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTDarkGradientThemeTests.h; sourceTree = ""; }; E1FE6051100F27EF00895A91 /* CPTDarkGradientThemeTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTDarkGradientThemeTests.m; sourceTree = ""; }; - E1FE6119100F3FB700895A91 /* CPTDerivedXYGraph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTDerivedXYGraph.h; sourceTree = ""; }; - E1FE611A100F3FB700895A91 /* CPTDerivedXYGraph.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTDerivedXYGraph.m; sourceTree = ""; }; + E1FE6119100F3FB700895A91 /* CPTXYGraphTestCase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTXYGraphTestCase.h; sourceTree = ""; }; + E1FE611A100F3FB700895A91 /* CPTXYGraphTestCase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTXYGraphTestCase.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -1817,8 +1817,8 @@ E1620CBD100F03A100A84E77 /* CPTThemeTests.m */, E1FE6050100F27EF00895A91 /* CPTDarkGradientThemeTests.h */, E1FE6051100F27EF00895A91 /* CPTDarkGradientThemeTests.m */, - E1FE6119100F3FB700895A91 /* CPTDerivedXYGraph.h */, - E1FE611A100F3FB700895A91 /* CPTDerivedXYGraph.m */, + E1FE6119100F3FB700895A91 /* CPTXYGraphTestCase.h */, + E1FE611A100F3FB700895A91 /* CPTXYGraphTestCase.m */, ); name = Tests; sourceTree = ""; @@ -2427,7 +2427,7 @@ C3D68A5F1220B2B400EB4863 /* CPTScatterPlotTests.m in Sources */, C3D68A601220B2BE00EB4863 /* CPTAxisLabelTests.m in Sources */, C3D68A611220B2C800EB4863 /* CPTDarkGradientThemeTests.m in Sources */, - C3D68A621220B2C900EB4863 /* CPTDerivedXYGraph.m in Sources */, + C3D68A621220B2C900EB4863 /* CPTXYGraphTestCase.m in Sources */, C3D68A631220B2CC00EB4863 /* CPTThemeTests.m in Sources */, C3392A481225FB68008DA6BD /* CPTMutableNumericDataTests.m in Sources */, C3392A491225FB69008DA6BD /* CPTNumericDataTests.m in Sources */, @@ -2666,7 +2666,7 @@ C37EA6A21BC83F2D0091C8F7 /* CPTImageTests.m in Sources */, C37EA6A31BC83F2D0091C8F7 /* CPTDataSourceTestCase.m in Sources */, C37EA6A41BC83F2D0091C8F7 /* CPTNumericDataTests.m in Sources */, - C37EA6A51BC83F2D0091C8F7 /* CPTDerivedXYGraph.m in Sources */, + C37EA6A51BC83F2D0091C8F7 /* CPTXYGraphTestCase.m in Sources */, C37EA6A61BC83F2D0091C8F7 /* CPTXYPlotSpaceTests.m in Sources */, C37EA6A71BC83F2D0091C8F7 /* CPTTestCase.m in Sources */, C37EA6A81BC83F2D0091C8F7 /* CPTPlotRangeTests.m in Sources */, @@ -2799,7 +2799,7 @@ C38A0A8A1A46210A00D45436 /* CPTImageTests.m in Sources */, C38A09D31A461C1800D45436 /* CPTDataSourceTestCase.m in Sources */, C38A09E81A461CB600D45436 /* CPTNumericDataTests.m in Sources */, - C38A0B141A46261F00D45436 /* CPTDerivedXYGraph.m in Sources */, + C38A0B141A46261F00D45436 /* CPTXYGraphTestCase.m in Sources */, C38A0ABD1A46250B00D45436 /* CPTXYPlotSpaceTests.m in Sources */, C38A09D11A461C1100D45436 /* CPTTestCase.m in Sources */, C38A0A011A461D2E00D45436 /* CPTPlotRangeTests.m in Sources */, diff --git a/framework/SPM Umbrella Header/CorePlot_Private.h b/framework/SPM Umbrella Header/CorePlot_Private.h index 79455e54e..f636ae559 100644 --- a/framework/SPM Umbrella Header/CorePlot_Private.h +++ b/framework/SPM Umbrella Header/CorePlot_Private.h @@ -12,7 +12,6 @@ #endif #import "CPTAxisLabelGroup.h" -#import "CPTDerivedXYGraph.h" #import "CPTGridLineGroup.h" #import "CPTGridLines.h" #import "CPTPlotGroup.h" diff --git a/framework/Source/CPTDarkGradientThemeTests.m b/framework/Source/CPTDarkGradientThemeTests.m index 71b64df7a..84603fdae 100644 --- a/framework/Source/CPTDarkGradientThemeTests.m +++ b/framework/Source/CPTDarkGradientThemeTests.m @@ -1,7 +1,7 @@ #import "CPTDarkGradientThemeTests.h" #import "_CPTDarkGradientTheme.h" -#import "CPTDerivedXYGraph.h" +#import "CPTXYGraphTestCase.h" @implementation CPTDarkGradientThemeTests @@ -22,13 +22,13 @@ -(void)testNewThemeSetGraphClassReturnedClassShouldBeOfCorrectType // Arrange _CPTDarkGradientTheme *theme = [[_CPTDarkGradientTheme alloc] init]; - theme.graphClass = [CPTDerivedXYGraph class]; + theme.graphClass = [CPTXYGraphTestCase class]; // Act CPTGraph *graph = [theme newGraph]; // Assert - XCTAssertEqual([graph class], [CPTDerivedXYGraph class], @"graph should be of type CPTDerivedXYGraph"); + XCTAssertEqual([graph class], [CPTXYGraphTestCase class], @"graph should be of type CPTXYGraphTestCase"); } @end diff --git a/framework/Source/CPTDerivedXYGraph.h b/framework/Source/CPTDerivedXYGraph.h deleted file mode 100644 index 5001ae098..000000000 --- a/framework/Source/CPTDerivedXYGraph.h +++ /dev/null @@ -1,5 +0,0 @@ -#import "CPTXYGraph.h" - -@interface CPTDerivedXYGraph : CPTXYGraph - -@end diff --git a/framework/Source/CPTThemeTests.m b/framework/Source/CPTThemeTests.m index d0007cb38..0a61bbfad 100644 --- a/framework/Source/CPTThemeTests.m +++ b/framework/Source/CPTThemeTests.m @@ -5,9 +5,9 @@ #import "_CPTPlainWhiteTheme.h" #import "_CPTSlateTheme.h" #import "_CPTStocksTheme.h" -#import "CPTDerivedXYGraph.h" #import "CPTExceptions.h" #import "CPTTheme.h" +#import "CPTXYGraphTestCase.h" @implementation CPTThemeTests @@ -23,8 +23,8 @@ -(void)testSetGraphUsingDerivedClassShouldWork { CPTTheme *theme = [[CPTTheme alloc] init]; - theme.graphClass = [CPTDerivedXYGraph class]; - XCTAssertEqual([CPTDerivedXYGraph class], theme.graphClass, @"graphClass should be CPTDerivedXYGraph"); + theme.graphClass = [CPTXYGraphTestCase class]; + XCTAssertEqual([CPTXYGraphTestCase class], theme.graphClass, @"graphClass should be CPTXYGraphTestCase"); } -(void)testSetGraphUsingCPTGraphShouldThrowException diff --git a/framework/Source/CPTXYGraphTestCase.h b/framework/Source/CPTXYGraphTestCase.h new file mode 100644 index 000000000..a5a0d0bc1 --- /dev/null +++ b/framework/Source/CPTXYGraphTestCase.h @@ -0,0 +1,5 @@ +#import "CPTXYGraph.h" + +@interface CPTXYGraphTestCase : CPTXYGraph + +@end diff --git a/framework/Source/CPTDerivedXYGraph.m b/framework/Source/CPTXYGraphTestCase.m similarity index 53% rename from framework/Source/CPTDerivedXYGraph.m rename to framework/Source/CPTXYGraphTestCase.m index 7959ebdd2..b3052aa7b 100644 --- a/framework/Source/CPTDerivedXYGraph.m +++ b/framework/Source/CPTXYGraphTestCase.m @@ -1,8 +1,8 @@ -#import "CPTDerivedXYGraph.h" +#import "CPTXYGraphTestCase.h" /** * @brief An empty XY graph class used for testing themes. **/ -@implementation CPTDerivedXYGraph +@implementation CPTXYGraphTestCase @end diff --git a/spm/Sources/core-plot/CPTDerivedXYGraph.m b/spm/Sources/core-plot/CPTDerivedXYGraph.m deleted file mode 120000 index e712248ad..000000000 --- a/spm/Sources/core-plot/CPTDerivedXYGraph.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTDerivedXYGraph.m \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTDerivedXYGraph.h b/spm/Sources/core-plot/include/CPTDerivedXYGraph.h deleted file mode 120000 index c3afb6032..000000000 --- a/spm/Sources/core-plot/include/CPTDerivedXYGraph.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTDerivedXYGraph.h \ No newline at end of file From b68be7b5636c57650a571771fa2b21477f4939e7 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Wed, 22 Mar 2023 21:09:51 -0400 Subject: [PATCH 165/245] Updated Core Plot precompiled header file so it supports Mac Catalyst. --- framework/CorePlot_Prefix.pch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/CorePlot_Prefix.pch b/framework/CorePlot_Prefix.pch index 41eb18dec..c3b0cd071 100644 --- a/framework/CorePlot_Prefix.pch +++ b/framework/CorePlot_Prefix.pch @@ -5,7 +5,7 @@ #ifdef __OBJC__ #import - #if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_TV + #if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST #import #import #else From 8b499abd112a4d0b1e3aa8bb059206f71c5705fd Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Wed, 22 Mar 2023 21:11:27 -0400 Subject: [PATCH 166/245] Updated target availability checks in CPTDecimalNumberValueTransformer so it doesn't compile on iOS or tvOS which don't support the value transformer API. --- framework/MacOnly/CPTDecimalNumberValueTransformer.h | 2 -- framework/MacOnly/CPTDecimalNumberValueTransformer.m | 5 +++++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/framework/MacOnly/CPTDecimalNumberValueTransformer.h b/framework/MacOnly/CPTDecimalNumberValueTransformer.h index 5d4ea62a4..f32bdc12a 100644 --- a/framework/MacOnly/CPTDecimalNumberValueTransformer.h +++ b/framework/MacOnly/CPTDecimalNumberValueTransformer.h @@ -1,5 +1,3 @@ -#import - #if TARGET_OS_OSX @interface CPTDecimalNumberValueTransformer : NSValueTransformer diff --git a/framework/MacOnly/CPTDecimalNumberValueTransformer.m b/framework/MacOnly/CPTDecimalNumberValueTransformer.m index 04477ecb9..a479d01fd 100644 --- a/framework/MacOnly/CPTDecimalNumberValueTransformer.m +++ b/framework/MacOnly/CPTDecimalNumberValueTransformer.m @@ -1,4 +1,7 @@ #import "CPTDecimalNumberValueTransformer.h" + +#if TARGET_OS_OSX + #import "NSNumberExtensions.h" /** @@ -39,3 +42,5 @@ -(nullable id)reverseTransformedValue:(nullable id)value /// @endcond @end + +#endif From 64e01952618a83a2bc43f47c86d04d48077cb224 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Fri, 7 Apr 2023 20:19:58 -0400 Subject: [PATCH 167/245] Removed unused info.plist files for the old static library. --- framework/CorePlot.xcodeproj/project.pbxproj | 11 ------- .../Base.lproj/CorePlot-CocoaTouch-Info.plist | 30 ------------------- .../CorePlot-CocoaTouchTests-Info.plist | 24 --------------- 3 files changed, 65 deletions(-) delete mode 100644 framework/Info/Base.lproj/CorePlot-CocoaTouch-Info.plist delete mode 100644 framework/Info/Base.lproj/CorePlot-CocoaTouchTests-Info.plist diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 33e7ab8e3..0fe28a5cf 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -932,7 +932,6 @@ C342601E0FAE096C00072842 /* _CPTFillGradient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = _CPTFillGradient.h; sourceTree = ""; }; C342601F0FAE096C00072842 /* CPTFill.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTFill.h; sourceTree = ""; }; C3490DF120E028CF0089F309 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/CorePlot-Info.plist"; sourceTree = ""; }; - C3490DF320E028D30089F309 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/CorePlot-CocoaTouch-Info.plist"; sourceTree = ""; }; C3490DF520E028D80089F309 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/CorePlot-iOS-Info.plist"; sourceTree = ""; }; C3490DF720E028DC0089F309 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/CorePlot-tvOS-Info.plist"; sourceTree = ""; }; C349DCB2151AAFBF00BFD6A7 /* CPTCalendarFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTCalendarFormatter.h; sourceTree = ""; }; @@ -1442,7 +1441,6 @@ children = ( 071F3CB810FBAB5900D0A7B6 /* License.txt */, C3490DF220E028CF0089F309 /* CorePlot-Info.plist */, - C3490DF420E028D30089F309 /* CorePlot-CocoaTouch-Info.plist */, C3490DF620E028D80089F309 /* CorePlot-iOS-Info.plist */, C3490DF820E028DC0089F309 /* CorePlot-tvOS-Info.plist */, 089C1666FE841158C02AAC07 /* InfoPlist.strings */, @@ -2867,15 +2865,6 @@ path = Info; sourceTree = ""; }; - C3490DF420E028D30089F309 /* CorePlot-CocoaTouch-Info.plist */ = { - isa = PBXVariantGroup; - children = ( - C3490DF320E028D30089F309 /* Base */, - ); - name = "CorePlot-CocoaTouch-Info.plist"; - path = Info; - sourceTree = ""; - }; C3490DF620E028D80089F309 /* CorePlot-iOS-Info.plist */ = { isa = PBXVariantGroup; children = ( diff --git a/framework/Info/Base.lproj/CorePlot-CocoaTouch-Info.plist b/framework/Info/Base.lproj/CorePlot-CocoaTouch-Info.plist deleted file mode 100644 index 276e6f65b..000000000 --- a/framework/Info/Base.lproj/CorePlot-CocoaTouch-Info.plist +++ /dev/null @@ -1,30 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleDisplayName - ${PRODUCT_NAME} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIconFile - - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleSignature - ???? - CFBundleVersion - 1.0 - LSRequiresIPhoneOS - - NSMainNibFile - MainWindow - - diff --git a/framework/Info/Base.lproj/CorePlot-CocoaTouchTests-Info.plist b/framework/Info/Base.lproj/CorePlot-CocoaTouchTests-Info.plist deleted file mode 100644 index ba72822e8..000000000 --- a/framework/Info/Base.lproj/CorePlot-CocoaTouchTests-Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - From bce2c49592483ca1ce388635236617a6a26a9f2d Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Fri, 7 Apr 2023 21:43:27 -0400 Subject: [PATCH 168/245] Set COPY_PHASE_STRIP to NO for all example application targets since the compiler can't strip signed Core Plot framework code. --- .../CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj | 2 ++ .../CPTTestApp-iPhone.xcodeproj/project.pbxproj | 2 ++ examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj | 2 ++ .../CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj | 4 ++++ examples/DatePlot/DatePlot.xcodeproj/project.pbxproj | 2 ++ examples/DropPlot/DropPlot.xcodeproj/project.pbxproj | 2 ++ .../minorTickFormatter.xcodeproj/project.pbxproj | 2 ++ examples/RangePlot/RangePlot.xcodeproj/project.pbxproj | 2 ++ 8 files changed, 18 insertions(+) diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj index f461f2a85..14c7e562f 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj @@ -405,6 +405,7 @@ baseConfigurationReference = C39B4CF029622F8700ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COPY_PHASE_STRIP = NO; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/CPTTestApp_iPad-Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -419,6 +420,7 @@ baseConfigurationReference = C39B4CF129622F8700ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COPY_PHASE_STRIP = NO; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/CPTTestApp_iPad-Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj index a270e99ae..260e2dad2 100644 --- a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj @@ -439,6 +439,7 @@ baseConfigurationReference = C39B4D392962343B00ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COPY_PHASE_STRIP = NO; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -453,6 +454,7 @@ baseConfigurationReference = C39B4D462962343B00ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COPY_PHASE_STRIP = NO; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", diff --git a/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj b/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj index 38de1bbfb..d6a580e23 100644 --- a/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj @@ -453,6 +453,7 @@ baseConfigurationReference = C39B4BEE2962136300ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COPY_PHASE_STRIP = NO; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = ( @@ -469,6 +470,7 @@ baseConfigurationReference = C39B4BFB2962136300ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COPY_PHASE_STRIP = NO; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = ( diff --git a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj index 67f04642d..7573bb1b5 100644 --- a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj +++ b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj @@ -1008,6 +1008,7 @@ baseConfigurationReference = C3E4280729626F81007C2758 /* CorePlotDebug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COPY_PHASE_STRIP = NO; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Plot_Gallery_Mac-Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = ( @@ -1024,6 +1025,7 @@ baseConfigurationReference = C3E4281329626F81007C2758 /* CorePlotRelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COPY_PHASE_STRIP = NO; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Plot_Gallery_Mac-Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = ( @@ -1106,6 +1108,7 @@ baseConfigurationReference = C3E4280729626F81007C2758 /* CorePlotDebug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COPY_PHASE_STRIP = NO; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Plot_Gallery_iOS-Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -1122,6 +1125,7 @@ baseConfigurationReference = C3E4281329626F81007C2758 /* CorePlotRelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COPY_PHASE_STRIP = NO; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Plot_Gallery_iOS-Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", diff --git a/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj b/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj index 42a49dd85..5654724f8 100644 --- a/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj +++ b/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj @@ -374,6 +374,7 @@ baseConfigurationReference = C39B4BFD2962169F00ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COPY_PHASE_STRIP = NO; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = ( @@ -389,6 +390,7 @@ baseConfigurationReference = C39B4BFE2962169F00ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COPY_PHASE_STRIP = NO; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = ( diff --git a/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj b/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj index c44c2530d..ba6117266 100644 --- a/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj +++ b/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj @@ -417,6 +417,7 @@ baseConfigurationReference = C39B4CE629622B5D00ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COPY_PHASE_STRIP = NO; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = ( @@ -432,6 +433,7 @@ baseConfigurationReference = C39B4CE829622B5D00ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COPY_PHASE_STRIP = NO; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = ( diff --git a/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj b/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj index 5090ee1d2..24297944c 100644 --- a/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj +++ b/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj @@ -391,6 +391,7 @@ baseConfigurationReference = C39B4CEB29622DEE00ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COPY_PHASE_STRIP = NO; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = ( @@ -406,6 +407,7 @@ baseConfigurationReference = C39B4CE929622DED00ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COPY_PHASE_STRIP = NO; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = ( diff --git a/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj b/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj index 1e7158da9..4c6eae8b7 100644 --- a/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj +++ b/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj @@ -391,6 +391,7 @@ baseConfigurationReference = C39B4CEE29622ECC00ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COPY_PHASE_STRIP = NO; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = ( @@ -406,6 +407,7 @@ baseConfigurationReference = C39B4CED29622ECC00ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COPY_PHASE_STRIP = NO; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = ( From d2191a05735630d450b6bfd40cb143534c1bcf37 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 9 Apr 2023 17:28:47 -0400 Subject: [PATCH 169/245] Updated everything for compatibility with Xcode 14.3. Fixed numerous warnings resulting from the new settings and updated module settings for compatibility with Swift Package Manager. Fixed issues #433 and #475. --- Package.swift | 3 +- framework/CorePlot.h | 2 + framework/CorePlot.xcodeproj/project.pbxproj | 241 +++++++++--------- .../CPTDecimalNumberValueTransformer.h | 4 + .../CPTDecimalNumberValueTransformer.m | 2 +- framework/Module/module.private.modulemap | 2 +- .../PlatformSpecific/CPTGraphHostingView.h | 4 + .../PlatformSpecific/CPTGraphHostingView.m | 2 +- .../CPTPlatformSpecificCategories.h | 6 + .../CPTPlatformSpecificFunctions.h | 6 + .../SPM Umbrella Header/CorePlot_Private.h | 20 -- .../SPM Umbrella Header/_CorePlot_Private.h | 21 ++ framework/Source/CPTAnimationOperation.h | 5 + framework/Source/CPTAnimationPeriod.h | 4 + framework/Source/CPTAnimationPeriod.m | 2 +- framework/Source/CPTAnnotation.h | 4 + framework/Source/CPTAnnotation.m | 2 +- framework/Source/CPTAnnotationHostLayer.h | 5 + framework/Source/CPTAxis.h | 10 + framework/Source/CPTAxis.m | 8 +- framework/Source/CPTAxisLabel.h | 4 + framework/Source/CPTAxisLabel.m | 2 +- framework/Source/CPTAxisSet.h | 5 + framework/Source/CPTAxisTitle.h | 4 + framework/Source/CPTBarPlot.h | 7 + framework/Source/CPTBarPlot.m | 2 +- framework/Source/CPTBorderedLayer.h | 4 + framework/Source/CPTColor.h | 4 + framework/Source/CPTColor.m | 2 +- framework/Source/CPTColorSpace.m | 2 +- framework/Source/CPTConstraints.m | 2 +- framework/Source/CPTDefinitions.h | 2 +- framework/Source/CPTExceptions.h | 4 + framework/Source/CPTFunctionDataSource.h | 4 + framework/Source/CPTGradient.h | 4 + framework/Source/CPTGradient.m | 2 +- framework/Source/CPTGraph.h | 7 + framework/Source/CPTGraph.m | 4 +- framework/Source/CPTImage.h | 5 + framework/Source/CPTImage.m | 2 +- framework/Source/CPTLayer.h | 6 + framework/Source/CPTLayer.m | 2 +- framework/Source/CPTLayerAnnotation.h | 5 + framework/Source/CPTLayerTests.m | 2 +- framework/Source/CPTLegend.h | 5 + framework/Source/CPTLegend.m | 4 +- framework/Source/CPTLegendEntry.h | 4 + framework/Source/CPTLineCap.m | 2 +- framework/Source/CPTLineStyle.h | 4 + framework/Source/CPTLineStyle.m | 4 +- framework/Source/CPTMutableLineStyle.h | 4 + .../CPTMutableNumericData+TypeConversion.h | 5 + framework/Source/CPTMutableNumericData.h | 5 + framework/Source/CPTMutablePlotRange.h | 4 + framework/Source/CPTMutableShadow.h | 4 + framework/Source/CPTMutableTextStyle.h | 4 + .../Source/CPTNumericData+TypeConversion.h | 5 + framework/Source/CPTNumericData.h | 5 + framework/Source/CPTPieChart.h | 6 + framework/Source/CPTPieChart.m | 4 +- framework/Source/CPTPlot.h | 6 + framework/Source/CPTPlot.m | 2 +- framework/Source/CPTPlotArea.h | 6 + framework/Source/CPTPlotArea.m | 6 +- framework/Source/CPTPlotAreaFrame.h | 4 + framework/Source/CPTPlotAreaFrame.m | 2 +- framework/Source/CPTPlotRange.h | 4 + framework/Source/CPTPlotRange.m | 2 +- framework/Source/CPTPlotSpace.h | 6 + framework/Source/CPTPlotSpaceAnnotation.h | 4 + framework/Source/CPTPlotSymbol.m | 2 +- framework/Source/CPTRangePlot.h | 6 + framework/Source/CPTRangePlot.m | 4 +- framework/Source/CPTResponder.h | 4 + framework/Source/CPTScatterPlot.h | 7 + framework/Source/CPTScatterPlot.m | 2 +- framework/Source/CPTShadow.m | 2 +- framework/Source/CPTTextLayer.h | 5 + framework/Source/CPTTextStyle.h | 6 + framework/Source/CPTTextStyle.m | 2 +- framework/Source/CPTTheme.h | 4 + framework/Source/CPTTradingRangePlot.h | 7 + framework/Source/CPTTradingRangePlot.m | 4 +- framework/Source/CPTUtilities.h | 4 + framework/Source/CPTXYAxis.h | 4 + framework/Source/CPTXYAxis.m | 2 +- framework/Source/CPTXYAxisSet.h | 4 + framework/Source/CPTXYGraph.h | 5 + framework/Source/CPTXYPlotSpace.h | 10 +- framework/Source/CPTXYPlotSpace.m | 2 +- framework/Source/_CPTAnimationCGFloatPeriod.m | 2 +- ...TAxisLabelGroup.h => _CPTAxisLabelGroup.h} | 4 + ...TAxisLabelGroup.m => _CPTAxisLabelGroup.m} | 2 +- framework/Source/_CPTConstraintsFixed.h | 4 + framework/Source/_CPTConstraintsFixed.m | 2 +- framework/Source/_CPTConstraintsRelative.h | 4 + framework/Source/_CPTConstraintsRelative.m | 2 +- framework/Source/_CPTDarkGradientTheme.h | 4 + framework/Source/_CPTFillColor.h | 4 + framework/Source/_CPTFillGradient.h | 4 + framework/Source/_CPTFillImage.h | 4 + ...CPTGridLineGroup.h => _CPTGridLineGroup.h} | 4 + ...CPTGridLineGroup.m => _CPTGridLineGroup.m} | 2 +- .../{CPTGridLines.h => _CPTGridLines.h} | 4 + .../{CPTGridLines.m => _CPTGridLines.m} | 2 +- framework/Source/_CPTPlainBlackTheme.h | 4 + framework/Source/_CPTPlainWhiteTheme.h | 4 + .../{CPTPlotGroup.h => _CPTPlotGroup.h} | 4 + .../{CPTPlotGroup.m => _CPTPlotGroup.m} | 2 +- framework/Source/_CPTSlateTheme.h | 4 + framework/Source/_CPTStocksTheme.h | 4 + framework/Source/_CPTXYTheme.h | 4 + ...CoderExtensions.h => _NSCoderExtensions.h} | 0 ...CoderExtensions.m => _NSCoderExtensions.m} | 4 +- ...ensions.h => _NSDecimalNumberExtensions.h} | 0 ...ensions.m => _NSDecimalNumberExtensions.m} | 2 +- ...mberExtensions.h => _NSNumberExtensions.h} | 0 ...mberExtensions.m => _NSNumberExtensions.m} | 2 +- .../xcconfig/CorePlotDebugModule.xcconfig | 2 + framework/xcconfig/CorePlotModule.xcconfig | 2 +- .../xcconfig/CorePlotReleaseModule.xcconfig | 2 + spm/Sources/core-plot/CPTAxisLabelGroup.m | 1 - spm/Sources/core-plot/CPTGridLineGroup.m | 1 - spm/Sources/core-plot/CPTGridLines.m | 1 - spm/Sources/core-plot/CPTPlotGroup.m | 1 - spm/Sources/core-plot/NSCoderExtensions.m | 1 - .../core-plot/NSDecimalNumberExtensions.m | 1 - spm/Sources/core-plot/NSNumberExtensions.m | 1 - spm/Sources/core-plot/_CPTAxisLabelGroup.h | 1 + spm/Sources/core-plot/_CPTAxisLabelGroup.m | 1 + spm/Sources/core-plot/_CPTGridLineGroup.h | 1 + spm/Sources/core-plot/_CPTGridLineGroup.m | 1 + spm/Sources/core-plot/_CPTGridLines.h | 1 + spm/Sources/core-plot/_CPTGridLines.m | 1 + spm/Sources/core-plot/_CPTPlotGroup.h | 1 + spm/Sources/core-plot/_CPTPlotGroup.m | 1 + spm/Sources/core-plot/_CorePlot_Private.h | 1 + spm/Sources/core-plot/_NSCoderExtensions.h | 1 + spm/Sources/core-plot/_NSCoderExtensions.m | 1 + .../core-plot/_NSDecimalNumberExtensions.h | 1 + .../core-plot/_NSDecimalNumberExtensions.m | 1 + spm/Sources/core-plot/_NSNumberExtensions.h | 1 + spm/Sources/core-plot/_NSNumberExtensions.m | 1 + .../core-plot/include/CPTAxisLabelGroup.h | 1 - .../core-plot/include/CPTGridLineGroup.h | 1 - spm/Sources/core-plot/include/CPTGridLines.h | 1 - spm/Sources/core-plot/include/CPTPlotGroup.h | 1 - .../core-plot/include/CorePlot_Private.h | 1 - .../core-plot/include/NSCoderExtensions.h | 1 - .../include/NSDecimalNumberExtensions.h | 1 - .../core-plot/include/NSNumberExtensions.h | 1 - 151 files changed, 542 insertions(+), 213 deletions(-) delete mode 100644 framework/SPM Umbrella Header/CorePlot_Private.h create mode 100644 framework/SPM Umbrella Header/_CorePlot_Private.h rename framework/Source/{CPTAxisLabelGroup.h => _CPTAxisLabelGroup.h} (50%) rename framework/Source/{CPTAxisLabelGroup.m => _CPTAxisLabelGroup.m} (96%) rename framework/Source/{CPTGridLineGroup.h => _CPTGridLineGroup.h} (76%) rename framework/Source/{CPTGridLineGroup.m => _CPTGridLineGroup.m} (99%) rename framework/Source/{CPTGridLines.h => _CPTGridLines.h} (75%) rename framework/Source/{CPTGridLines.m => _CPTGridLines.m} (99%) rename framework/Source/{CPTPlotGroup.h => _CPTPlotGroup.h} (83%) rename framework/Source/{CPTPlotGroup.m => _CPTPlotGroup.m} (98%) rename framework/Source/{NSCoderExtensions.h => _NSCoderExtensions.h} (100%) rename framework/Source/{NSCoderExtensions.m => _NSCoderExtensions.m} (99%) rename framework/Source/{NSDecimalNumberExtensions.h => _NSDecimalNumberExtensions.h} (100%) rename framework/Source/{NSDecimalNumberExtensions.m => _NSDecimalNumberExtensions.m} (86%) rename framework/Source/{NSNumberExtensions.h => _NSNumberExtensions.h} (100%) rename framework/Source/{NSNumberExtensions.m => _NSNumberExtensions.m} (97%) delete mode 120000 spm/Sources/core-plot/CPTAxisLabelGroup.m delete mode 120000 spm/Sources/core-plot/CPTGridLineGroup.m delete mode 120000 spm/Sources/core-plot/CPTGridLines.m delete mode 120000 spm/Sources/core-plot/CPTPlotGroup.m delete mode 120000 spm/Sources/core-plot/NSCoderExtensions.m delete mode 120000 spm/Sources/core-plot/NSDecimalNumberExtensions.m delete mode 120000 spm/Sources/core-plot/NSNumberExtensions.m create mode 120000 spm/Sources/core-plot/_CPTAxisLabelGroup.h create mode 120000 spm/Sources/core-plot/_CPTAxisLabelGroup.m create mode 120000 spm/Sources/core-plot/_CPTGridLineGroup.h create mode 120000 spm/Sources/core-plot/_CPTGridLineGroup.m create mode 120000 spm/Sources/core-plot/_CPTGridLines.h create mode 120000 spm/Sources/core-plot/_CPTGridLines.m create mode 120000 spm/Sources/core-plot/_CPTPlotGroup.h create mode 120000 spm/Sources/core-plot/_CPTPlotGroup.m create mode 120000 spm/Sources/core-plot/_CorePlot_Private.h create mode 120000 spm/Sources/core-plot/_NSCoderExtensions.h create mode 120000 spm/Sources/core-plot/_NSCoderExtensions.m create mode 120000 spm/Sources/core-plot/_NSDecimalNumberExtensions.h create mode 120000 spm/Sources/core-plot/_NSDecimalNumberExtensions.m create mode 120000 spm/Sources/core-plot/_NSNumberExtensions.h create mode 120000 spm/Sources/core-plot/_NSNumberExtensions.m delete mode 120000 spm/Sources/core-plot/include/CPTAxisLabelGroup.h delete mode 120000 spm/Sources/core-plot/include/CPTGridLineGroup.h delete mode 120000 spm/Sources/core-plot/include/CPTGridLines.h delete mode 120000 spm/Sources/core-plot/include/CPTPlotGroup.h delete mode 120000 spm/Sources/core-plot/include/CorePlot_Private.h delete mode 120000 spm/Sources/core-plot/include/NSCoderExtensions.h delete mode 120000 spm/Sources/core-plot/include/NSDecimalNumberExtensions.h delete mode 120000 spm/Sources/core-plot/include/NSNumberExtensions.h diff --git a/Package.swift b/Package.swift index be19e84c5..7f91d1f21 100644 --- a/Package.swift +++ b/Package.swift @@ -26,6 +26,7 @@ let package = Package( .target( name: "CorePlot", dependencies: [], - path: "spm/Sources/core-plot"), + path: "spm/Sources/core-plot", + publicHeadersPath: "include"), ] ) diff --git a/framework/CorePlot.h b/framework/CorePlot.h index 8c04e8925..bc4a0dc3c 100644 --- a/framework/CorePlot.h +++ b/framework/CorePlot.h @@ -1,3 +1,5 @@ +#define CPT_IS_FRAMEWORK + #import #if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 0fe28a5cf..ade86cff5 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -82,8 +82,8 @@ 0772C9300FE2F89000EC4C16 /* _CPTDarkGradientTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = 0772C92E0FE2F89000EC4C16 /* _CPTDarkGradientTheme.m */; }; 0783DD550FBF097E006C3696 /* CPTXYAxis.h in Headers */ = {isa = PBXBuildFile; fileRef = 0783DD530FBF097E006C3696 /* CPTXYAxis.h */; settings = {ATTRIBUTES = (Public, ); }; }; 0783DD560FBF097E006C3696 /* CPTXYAxis.m in Sources */ = {isa = PBXBuildFile; fileRef = 0783DD540FBF097E006C3696 /* CPTXYAxis.m */; }; - 078F42DB0FACC075006E670B /* NSNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 078F42D90FACC075006E670B /* NSNumberExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 078F42DC0FACC075006E670B /* NSNumberExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 078F42DA0FACC075006E670B /* NSNumberExtensions.m */; }; + 078F42DB0FACC075006E670B /* _NSNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 078F42D90FACC075006E670B /* _NSNumberExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 078F42DC0FACC075006E670B /* _NSNumberExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 078F42DA0FACC075006E670B /* _NSNumberExtensions.m */; }; 07975C430F3B816600DE45DC /* CPTXYAxisSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 07975C410F3B816600DE45DC /* CPTXYAxisSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; 07975C440F3B816600DE45DC /* CPTXYAxisSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 07975C420F3B816600DE45DC /* CPTXYAxisSet.m */; }; 07975C490F3B818800DE45DC /* CPTAxis.h in Headers */ = {isa = PBXBuildFile; fileRef = 07975C470F3B818800DE45DC /* CPTAxis.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -143,8 +143,8 @@ 4CD7E7E80F4B4F8200F9BCBB /* CPTTextLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7E7E60F4B4F8200F9BCBB /* CPTTextLayer.m */; }; 4CD7E7EC0F4B4F9600F9BCBB /* CPTLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CD7E7EA0F4B4F9600F9BCBB /* CPTLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4CD7E7ED0F4B4F9600F9BCBB /* CPTLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7E7EB0F4B4F9600F9BCBB /* CPTLayer.m */; }; - 4CD7E7F00F4B4FA700F9BCBB /* NSDecimalNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CD7E7EE0F4B4FA700F9BCBB /* NSDecimalNumberExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 4CD7E7F10F4B4FA700F9BCBB /* NSDecimalNumberExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7E7EF0F4B4FA700F9BCBB /* NSDecimalNumberExtensions.m */; }; + 4CD7E7F00F4B4FA700F9BCBB /* _NSDecimalNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CD7E7EE0F4B4FA700F9BCBB /* _NSDecimalNumberExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 4CD7E7F10F4B4FA700F9BCBB /* _NSDecimalNumberExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7E7EF0F4B4FA700F9BCBB /* _NSDecimalNumberExtensions.m */; }; 8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; }; 906156BE0F375598001B75FC /* CPTLineStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 906156BC0F375598001B75FC /* CPTLineStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; 906156BF0F375598001B75FC /* CPTLineStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 906156BD0F375598001B75FC /* CPTLineStyle.m */; }; @@ -197,13 +197,13 @@ C34260270FAE096D00072842 /* CPTFill.h in Headers */ = {isa = PBXBuildFile; fileRef = C342601F0FAE096C00072842 /* CPTFill.h */; settings = {ATTRIBUTES = (Public, ); }; }; C349DCB4151AAFBF00BFD6A7 /* CPTCalendarFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = C349DCB2151AAFBF00BFD6A7 /* CPTCalendarFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; C349DCB5151AAFBF00BFD6A7 /* CPTCalendarFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = C349DCB3151AAFBF00BFD6A7 /* CPTCalendarFormatter.m */; }; - C34AFE5311021C100041675A /* CPTGridLines.m in Sources */ = {isa = PBXBuildFile; fileRef = C32B391710AA4C78000470D4 /* CPTGridLines.m */; }; + C34AFE5311021C100041675A /* _CPTGridLines.m in Sources */ = {isa = PBXBuildFile; fileRef = C32B391710AA4C78000470D4 /* _CPTGridLines.m */; }; C34AFE5511021C470041675A /* CPTPlotArea.m in Sources */ = {isa = PBXBuildFile; fileRef = C34BF5BB10A67633007F0894 /* CPTPlotArea.m */; }; C34AFE6B11021D010041675A /* CPTPlotSymbol.h in Headers */ = {isa = PBXBuildFile; fileRef = C34AFE6911021D010041675A /* CPTPlotSymbol.h */; settings = {ATTRIBUTES = (Public, ); }; }; C34AFE6C11021D010041675A /* CPTPlotSymbol.m in Sources */ = {isa = PBXBuildFile; fileRef = C34AFE6A11021D010041675A /* CPTPlotSymbol.m */; }; - C34AFE7111021D880041675A /* CPTAxisLabelGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C032C810B8DEDC003A11B6 /* CPTAxisLabelGroup.m */; }; - C34AFE96110224630041675A /* CPTAxisLabelGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C032C710B8DEDC003A11B6 /* CPTAxisLabelGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C34AFE98110224710041675A /* CPTGridLines.h in Headers */ = {isa = PBXBuildFile; fileRef = C32B391610AA4C78000470D4 /* CPTGridLines.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C34AFE7111021D880041675A /* _CPTAxisLabelGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C032C810B8DEDC003A11B6 /* _CPTAxisLabelGroup.m */; }; + C34AFE96110224630041675A /* _CPTAxisLabelGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C032C710B8DEDC003A11B6 /* _CPTAxisLabelGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C34AFE98110224710041675A /* _CPTGridLines.h in Headers */ = {isa = PBXBuildFile; fileRef = C32B391610AA4C78000470D4 /* _CPTGridLines.h */; settings = {ATTRIBUTES = (Private, ); }; }; C34AFE9B1102248D0041675A /* CPTPlotArea.h in Headers */ = {isa = PBXBuildFile; fileRef = C34BF5BA10A67633007F0894 /* CPTPlotArea.h */; settings = {ATTRIBUTES = (Public, ); }; }; C34F0D58121CB3EC0020FDD3 /* CPTTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 0730F64D109494D100E95162 /* CPTTestCase.m */; }; C34F0D59121CB3F00020FDD3 /* CPTDataSourceTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C9A745E0FB24C7200918464 /* CPTDataSourceTestCase.m */; }; @@ -217,7 +217,7 @@ C37EA5CD1BC83F2A0091C8F7 /* CPTLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7E7EB0F4B4F9600F9BCBB /* CPTLayer.m */; }; C37EA5CE1BC83F2A0091C8F7 /* CPTTimeFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 07A2E6FB102DF47900809BC5 /* CPTTimeFormatter.m */; }; C37EA5CF1BC83F2A0091C8F7 /* CPTColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 079FC0B30FB975500037E990 /* CPTColor.m */; }; - C37EA5D01BC83F2A0091C8F7 /* NSCoderExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = C3978E0513CE653B00A420D9 /* NSCoderExtensions.m */; }; + C37EA5D01BC83F2A0091C8F7 /* _NSCoderExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = C3978E0513CE653B00A420D9 /* _NSCoderExtensions.m */; }; C37EA5D11BC83F2A0091C8F7 /* CPTMutableNumericData.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C97EF11104D819100B554F9 /* CPTMutableNumericData.m */; }; C37EA5D21BC83F2A0091C8F7 /* CPTNumericData+TypeConversion.m in Sources */ = {isa = PBXBuildFile; fileRef = C3392A371225F667008DA6BD /* CPTNumericData+TypeConversion.m */; }; C37EA5D31BC83F2A0091C8F7 /* CPTTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = 0772C9260FE2F71600EC4C16 /* CPTTheme.m */; }; @@ -237,14 +237,14 @@ C37EA5E11BC83F2A0091C8F7 /* CPTNumericData.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C97EEFB104D80C400B554F9 /* CPTNumericData.m */; }; C37EA5E31BC83F2A0091C8F7 /* CPTXYAxisSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 07975C420F3B816600DE45DC /* CPTXYAxisSet.m */; }; C37EA5E41BC83F2A0091C8F7 /* CPTLimitBand.m in Sources */ = {isa = PBXBuildFile; fileRef = C318F4AC11EA188700595FF9 /* CPTLimitBand.m */; }; - C37EA5E51BC83F2A0091C8F7 /* CPTGridLines.m in Sources */ = {isa = PBXBuildFile; fileRef = C32B391710AA4C78000470D4 /* CPTGridLines.m */; }; + C37EA5E51BC83F2A0091C8F7 /* _CPTGridLines.m in Sources */ = {isa = PBXBuildFile; fileRef = C32B391710AA4C78000470D4 /* _CPTGridLines.m */; }; C37EA5E61BC83F2A0091C8F7 /* CPTPathExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 070622310FDF1B250066A6C4 /* CPTPathExtensions.m */; }; C37EA5E71BC83F2A0091C8F7 /* CPTXYPlotSpace.m in Sources */ = {isa = PBXBuildFile; fileRef = 90AF4FB90F36D39700753D26 /* CPTXYPlotSpace.m */; }; C37EA5E81BC83F2A0091C8F7 /* CPTPlotRange.m in Sources */ = {isa = PBXBuildFile; fileRef = 32484B400F530E8B002151AD /* CPTPlotRange.m */; }; C37EA5E91BC83F2A0091C8F7 /* CPTImage.m in Sources */ = {isa = PBXBuildFile; fileRef = C3AFC9D00FB62969005DFFDC /* CPTImage.m */; }; C37EA5EA1BC83F2A0091C8F7 /* CPTPlotSymbol.m in Sources */ = {isa = PBXBuildFile; fileRef = C34AFE6A11021D010041675A /* CPTPlotSymbol.m */; }; C37EA5EB1BC83F2A0091C8F7 /* CPTAxisSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 07BF0D830F2B7340002FCEA7 /* CPTAxisSet.m */; }; - C37EA5EC1BC83F2A0091C8F7 /* CPTPlotGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F31DE71045EB470058520A /* CPTPlotGroup.m */; }; + C37EA5EC1BC83F2A0091C8F7 /* _CPTPlotGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F31DE71045EB470058520A /* _CPTPlotGroup.m */; }; C37EA5ED1BC83F2A0091C8F7 /* CPTAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C2847016584EB9006BA43C /* CPTAnimation.m */; }; C37EA5EE1BC83F2A0091C8F7 /* _CPTAnimationNSDecimalPeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = A92C00B71DCB2085A92BE0A9 /* _CPTAnimationNSDecimalPeriod.m */; }; C37EA5EF1BC83F2A0091C8F7 /* _CPTAnimationPlotRangePeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = A92C091B8592D9F32AC384CB /* _CPTAnimationPlotRangePeriod.m */; }; @@ -275,23 +275,23 @@ C37EA6081BC83F2A0091C8F7 /* _CPTFillColor.m in Sources */ = {isa = PBXBuildFile; fileRef = C342601C0FAE096C00072842 /* _CPTFillColor.m */; }; C37EA6091BC83F2A0091C8F7 /* _CPTAnimationTimingFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C2847416585085006BA43C /* _CPTAnimationTimingFunctions.m */; }; C37EA60A1BC83F2A0091C8F7 /* CPTMutableLineStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 07B69B1612B62ABB00F4C16C /* CPTMutableLineStyle.m */; }; - C37EA60B1BC83F2A0091C8F7 /* NSDecimalNumberExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7E7EF0F4B4FA700F9BCBB /* NSDecimalNumberExtensions.m */; }; + C37EA60B1BC83F2A0091C8F7 /* _NSDecimalNumberExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7E7EF0F4B4FA700F9BCBB /* _NSDecimalNumberExtensions.m */; }; C37EA60C1BC83F2A0091C8F7 /* CPTLegend.m in Sources */ = {isa = PBXBuildFile; fileRef = C3920AC31395B6500045F3BB /* CPTLegend.m */; }; - C37EA60D1BC83F2A0091C8F7 /* CPTAxisLabelGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C032C810B8DEDC003A11B6 /* CPTAxisLabelGroup.m */; }; + C37EA60D1BC83F2A0091C8F7 /* _CPTAxisLabelGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C032C810B8DEDC003A11B6 /* _CPTAxisLabelGroup.m */; }; C37EA60E1BC83F2A0091C8F7 /* CPTFill.m in Sources */ = {isa = PBXBuildFile; fileRef = C342601A0FAE096C00072842 /* CPTFill.m */; }; C37EA60F1BC83F2A0091C8F7 /* CPTMutableNumericData+TypeConversion.m in Sources */ = {isa = PBXBuildFile; fileRef = C3CAFB251229E41F00F5C989 /* CPTMutableNumericData+TypeConversion.m */; }; C37EA6101BC83F2A0091C8F7 /* CPTRangePlot.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C0477B12D6560900DA8047 /* CPTRangePlot.m */; }; C37EA6111BC83F2A0091C8F7 /* CPTGraph.m in Sources */ = {isa = PBXBuildFile; fileRef = 07BF0D710F2B718F002FCEA7 /* CPTGraph.m */; }; C37EA6121BC83F2A0091C8F7 /* CPTMutablePlotRange.m in Sources */ = {isa = PBXBuildFile; fileRef = C3A695E4146A19BC00AF5653 /* CPTMutablePlotRange.m */; }; C37EA6131BC83F2A0091C8F7 /* _CPTPlainWhiteTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = BC55022F10059F22005DF982 /* _CPTPlainWhiteTheme.m */; }; - C37EA6141BC83F2A0091C8F7 /* CPTGridLineGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C38DD49211A04B7A002A68E7 /* CPTGridLineGroup.m */; }; + C37EA6141BC83F2A0091C8F7 /* _CPTGridLineGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C38DD49211A04B7A002A68E7 /* _CPTGridLineGroup.m */; }; C37EA6151BC83F2A0091C8F7 /* CPTNumericDataType.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C97EEFD104D80C400B554F9 /* CPTNumericDataType.m */; }; C37EA6161BC83F2A0091C8F7 /* CPTPlot.m in Sources */ = {isa = PBXBuildFile; fileRef = 07BF0D7F0F2B72F6002FCEA7 /* CPTPlot.m */; }; C37EA6171BC83F2A0091C8F7 /* CPTPlatformSpecificCategories.m in Sources */ = {isa = PBXBuildFile; fileRef = C38A0B191A46264500D45436 /* CPTPlatformSpecificCategories.m */; }; C37EA6181BC83F2A0091C8F7 /* CPTConstraints.m in Sources */ = {isa = PBXBuildFile; fileRef = 070064E8111F2BAA003DE087 /* CPTConstraints.m */; }; C37EA6191BC83F2A0091C8F7 /* CPTTextStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 07B69A5C12B6215000F4C16C /* CPTTextStyle.m */; }; C37EA61A1BC83F2A0091C8F7 /* CPTFunctionDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F97F1D17A9E07B00A52FF2 /* CPTFunctionDataSource.m */; }; - C37EA61B1BC83F2A0091C8F7 /* NSNumberExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 078F42DA0FACC075006E670B /* NSNumberExtensions.m */; }; + C37EA61B1BC83F2A0091C8F7 /* _NSNumberExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 078F42DA0FACC075006E670B /* _NSNumberExtensions.m */; }; C37EA61C1BC83F2A0091C8F7 /* CPTBorderedLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 0706223B0FDF215C0066A6C4 /* CPTBorderedLayer.m */; }; C37EA61D1BC83F2A0091C8F7 /* CPTLineStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 906156BD0F375598001B75FC /* CPTLineStyle.m */; }; C37EA61E1BC83F2A0091C8F7 /* _CPTAnimationCGSizePeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = A92C087BF0913A6BA2363E40 /* _CPTAnimationCGSizePeriod.m */; }; @@ -313,12 +313,12 @@ C37EA6311BC83F2A0091C8F7 /* CPTPlotSymbol.h in Headers */ = {isa = PBXBuildFile; fileRef = C34AFE6911021D010041675A /* CPTPlotSymbol.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6321BC83F2A0091C8F7 /* CPTTradingRangePlot.h in Headers */ = {isa = PBXBuildFile; fileRef = 0772B43710E24D5C009CD04C /* CPTTradingRangePlot.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6331BC83F2A0091C8F7 /* CPTGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = 07BF0D700F2B718F002FCEA7 /* CPTGraph.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C37EA6341BC83F2A0091C8F7 /* CPTGridLines.h in Headers */ = {isa = PBXBuildFile; fileRef = C32B391610AA4C78000470D4 /* CPTGridLines.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C37EA6341BC83F2A0091C8F7 /* _CPTGridLines.h in Headers */ = {isa = PBXBuildFile; fileRef = C32B391610AA4C78000470D4 /* _CPTGridLines.h */; settings = {ATTRIBUTES = (Private, ); }; }; C37EA6351BC83F2A0091C8F7 /* CPTTextStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B69A5B12B6215000F4C16C /* CPTTextStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6361BC83F2A0091C8F7 /* CPTMutablePlotRange.h in Headers */ = {isa = PBXBuildFile; fileRef = C3A695E3146A19BC00AF5653 /* CPTMutablePlotRange.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6371BC83F2A0091C8F7 /* CPTPieChart.h in Headers */ = {isa = PBXBuildFile; fileRef = BC74A32E10FC402600E7E90D /* CPTPieChart.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6381BC83F2A0091C8F7 /* CPTMutableNumericData+TypeConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = C3CAFB241229E41F00F5C989 /* CPTMutableNumericData+TypeConversion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C37EA6391BC83F2A0091C8F7 /* CPTAxisLabelGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C032C710B8DEDC003A11B6 /* CPTAxisLabelGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C37EA6391BC83F2A0091C8F7 /* _CPTAxisLabelGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C032C710B8DEDC003A11B6 /* _CPTAxisLabelGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; C37EA63A1BC83F2A0091C8F7 /* CPTPlotSpace.h in Headers */ = {isa = PBXBuildFile; fileRef = 07BF0D7A0F2B72B0002FCEA7 /* CPTPlotSpace.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA63B1BC83F2A0091C8F7 /* CPTGraphHostingView.h in Headers */ = {isa = PBXBuildFile; fileRef = C38A0B271A46265300D45436 /* CPTGraphHostingView.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA63C1BC83F2A0091C8F7 /* CPTColorSpace.h in Headers */ = {isa = PBXBuildFile; fileRef = 079FC0BB0FB9762B0037E990 /* CPTColorSpace.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -348,19 +348,19 @@ C37EA6541BC83F2A0091C8F7 /* CPTImage.h in Headers */ = {isa = PBXBuildFile; fileRef = C3AFC9CF0FB62969005DFFDC /* CPTImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6551BC83F2A0091C8F7 /* CPTTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = 0772C9250FE2F71600EC4C16 /* CPTTheme.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6561BC83F2A0091C8F7 /* CPTPlatformSpecificCategories.h in Headers */ = {isa = PBXBuildFile; fileRef = C38A0B181A46264500D45436 /* CPTPlatformSpecificCategories.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C37EA6571BC83F2A0091C8F7 /* NSNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 078F42D90FACC075006E670B /* NSNumberExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C37EA6571BC83F2A0091C8F7 /* _NSNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 078F42D90FACC075006E670B /* _NSNumberExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; C37EA6581BC83F2A0091C8F7 /* _CPTConstraintsRelative.h in Headers */ = {isa = PBXBuildFile; fileRef = C3CCA03B13E8D85800CE6DB1 /* _CPTConstraintsRelative.h */; settings = {ATTRIBUTES = (Private, ); }; }; C37EA6591BC83F2A0091C8F7 /* CPTAnimationOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C9CB0C165DB4D500739006 /* CPTAnimationOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA65A1BC83F2A0091C8F7 /* _CPTDarkGradientTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = 0772C92D0FE2F89000EC4C16 /* _CPTDarkGradientTheme.h */; settings = {ATTRIBUTES = (Private, ); }; }; C37EA65B1BC83F2A0091C8F7 /* CPTRangePlot.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C0477C12D6560900DA8047 /* CPTRangePlot.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA65C1BC83F2A0091C8F7 /* _CPTAnimationCGSizePeriod.h in Headers */ = {isa = PBXBuildFile; fileRef = A92C0563E082D1C1E249FA6F /* _CPTAnimationCGSizePeriod.h */; }; - C37EA65D1BC83F2A0091C8F7 /* CPTPlotGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F31DE81045EB470058520A /* CPTPlotGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C37EA65D1BC83F2A0091C8F7 /* _CPTPlotGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F31DE81045EB470058520A /* _CPTPlotGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; C37EA65E1BC83F2A0091C8F7 /* CPTLegend.h in Headers */ = {isa = PBXBuildFile; fileRef = C3920AC21395B6500045F3BB /* CPTLegend.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA65F1BC83F2A0091C8F7 /* _CPTFillImage.h in Headers */ = {isa = PBXBuildFile; fileRef = C34260180FAE096C00072842 /* _CPTFillImage.h */; settings = {ATTRIBUTES = (Private, ); }; }; C37EA6601BC83F2A0091C8F7 /* _CPTAnimationCGRectPeriod.h in Headers */ = {isa = PBXBuildFile; fileRef = A92C0E876AE37EB30019586B /* _CPTAnimationCGRectPeriod.h */; }; C37EA6611BC83F2A0091C8F7 /* CPTPlotSpaceAnnotation.h in Headers */ = {isa = PBXBuildFile; fileRef = 07E10BAF11D1016B000B8DAB /* CPTPlotSpaceAnnotation.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6621BC83F2A0091C8F7 /* CPTConstraints.h in Headers */ = {isa = PBXBuildFile; fileRef = 070064E7111F2BAA003DE087 /* CPTConstraints.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C37EA6631BC83F2A0091C8F7 /* NSCoderExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = C3978E0413CE653B00A420D9 /* NSCoderExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C37EA6631BC83F2A0091C8F7 /* _NSCoderExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = C3978E0413CE653B00A420D9 /* _NSCoderExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; C37EA6641BC83F2A0091C8F7 /* CPTNumericData+TypeConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C97EEF7104D80C400B554F9 /* CPTNumericData+TypeConversion.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6651BC83F2A0091C8F7 /* _CPTFillColor.h in Headers */ = {isa = PBXBuildFile; fileRef = C342601B0FAE096C00072842 /* _CPTFillColor.h */; settings = {ATTRIBUTES = (Private, ); }; }; C37EA6661BC83F2A0091C8F7 /* _CPTXYTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = C3DA34CB107AD7710051DA02 /* _CPTXYTheme.h */; settings = {ATTRIBUTES = (Private, ); }; }; @@ -369,7 +369,7 @@ C37EA6691BC83F2A0091C8F7 /* CPTAxisTitle.h in Headers */ = {isa = PBXBuildFile; fileRef = BCFC7C3510921FDB00DAECAA /* CPTAxisTitle.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA66A1BC83F2A0091C8F7 /* _CPTSlateTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = 07FCF2C4115B54AE00E46606 /* _CPTSlateTheme.h */; settings = {ATTRIBUTES = (Private, ); }; }; C37EA66B1BC83F2A0091C8F7 /* CPTMutableNumericData.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C97EF10104D819100B554F9 /* CPTMutableNumericData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C37EA66C1BC83F2A0091C8F7 /* CPTGridLineGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C38DD49111A04B7A002A68E7 /* CPTGridLineGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C37EA66C1BC83F2A0091C8F7 /* _CPTGridLineGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C38DD49111A04B7A002A68E7 /* _CPTGridLineGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; C37EA66D1BC83F2A0091C8F7 /* CorePlot.h in Headers */ = {isa = PBXBuildFile; fileRef = 070CF7AE0F3CA7AB0001FFF4 /* CorePlot.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA66E1BC83F2A0091C8F7 /* CPTMutableLineStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B69B1512B62ABB00F4C16C /* CPTMutableLineStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA66F1BC83F2A0091C8F7 /* CPTAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C2846F16584EB9006BA43C /* CPTAnimation.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -390,7 +390,7 @@ C37EA67E1BC83F2A0091C8F7 /* CPTFunctionDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F97F1C17A9E07B00A52FF2 /* CPTFunctionDataSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA67F1BC83F2A0091C8F7 /* CPTGradient.h in Headers */ = {isa = PBXBuildFile; fileRef = 07CA112D0FAC8F85000861CE /* CPTGradient.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6801BC83F2A0091C8F7 /* _CPTAnimationCGPointPeriod.h in Headers */ = {isa = PBXBuildFile; fileRef = A92C0E154E8598EDE2EDEF2F /* _CPTAnimationCGPointPeriod.h */; }; - C37EA6811BC83F2A0091C8F7 /* NSDecimalNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CD7E7EE0F4B4FA700F9BCBB /* NSDecimalNumberExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C37EA6811BC83F2A0091C8F7 /* _NSDecimalNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CD7E7EE0F4B4FA700F9BCBB /* _NSDecimalNumberExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; C37EA6821BC83F2A0091C8F7 /* CPTAxis.h in Headers */ = {isa = PBXBuildFile; fileRef = 07975C470F3B818800DE45DC /* CPTAxis.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6831BC83F2A0091C8F7 /* CPTPlatformSpecificFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = C38A0B1C1A46264500D45436 /* CPTPlatformSpecificFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6841BC83F2A0091C8F7 /* CPTAnnotationHostLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 072161E911D1F6BD009CC871 /* CPTAnnotationHostLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -548,12 +548,12 @@ C38A0A971A46219100D45436 /* CPTCalendarFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = C349DCB3151AAFBF00BFD6A7 /* CPTCalendarFormatter.m */; }; C38A0A981A46219100D45436 /* CPTTimeFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 07A2E6FB102DF47900809BC5 /* CPTTimeFormatter.m */; }; C38A0A9B1A46219600D45436 /* CPTTimeFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979A813D2328000145DFF /* CPTTimeFormatterTests.m */; }; - C38A0A9D1A4621A500D45436 /* NSCoderExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = C3978E0413CE653B00A420D9 /* NSCoderExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C38A0A9E1A4621A500D45436 /* NSDecimalNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CD7E7EE0F4B4FA700F9BCBB /* NSDecimalNumberExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C38A0A9F1A4621A500D45436 /* NSNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 078F42D90FACC075006E670B /* NSNumberExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C38A0AA01A4621AC00D45436 /* NSCoderExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = C3978E0513CE653B00A420D9 /* NSCoderExtensions.m */; }; - C38A0AA11A4621AC00D45436 /* NSDecimalNumberExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7E7EF0F4B4FA700F9BCBB /* NSDecimalNumberExtensions.m */; }; - C38A0AA21A4621AC00D45436 /* NSNumberExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 078F42DA0FACC075006E670B /* NSNumberExtensions.m */; }; + C38A0A9D1A4621A500D45436 /* _NSCoderExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = C3978E0413CE653B00A420D9 /* _NSCoderExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C38A0A9E1A4621A500D45436 /* _NSDecimalNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CD7E7EE0F4B4FA700F9BCBB /* _NSDecimalNumberExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C38A0A9F1A4621A500D45436 /* _NSNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 078F42D90FACC075006E670B /* _NSNumberExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C38A0AA01A4621AC00D45436 /* _NSCoderExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = C3978E0513CE653B00A420D9 /* _NSCoderExtensions.m */; }; + C38A0AA11A4621AC00D45436 /* _NSDecimalNumberExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7E7EF0F4B4FA700F9BCBB /* _NSDecimalNumberExtensions.m */; }; + C38A0AA21A4621AC00D45436 /* _NSNumberExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 078F42DA0FACC075006E670B /* _NSNumberExtensions.m */; }; C38A0AA71A46240300D45436 /* CPTGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = 07BF0D700F2B718F002FCEA7 /* CPTGraph.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0AA81A46240300D45436 /* CPTXYGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = 07983EF40F2F9A3D008C8618 /* CPTXYGraph.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0AA91A46240900D45436 /* CPTGraph.m in Sources */ = {isa = PBXBuildFile; fileRef = 07BF0D710F2B718F002FCEA7 /* CPTGraph.m */; }; @@ -570,14 +570,14 @@ C38A0AB91A46250500D45436 /* CPTXYPlotSpace.m in Sources */ = {isa = PBXBuildFile; fileRef = 90AF4FB90F36D39700753D26 /* CPTXYPlotSpace.m */; }; C38A0ABC1A46250B00D45436 /* CPTPlotSpaceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979A313D2136600145DFF /* CPTPlotSpaceTests.m */; }; C38A0ABD1A46250B00D45436 /* CPTXYPlotSpaceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C422A630FB1FCD5000CAA43 /* CPTXYPlotSpaceTests.m */; }; - C38A0AC01A46254E00D45436 /* CPTPlotGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F31DE81045EB470058520A /* CPTPlotGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C38A0AC01A46254E00D45436 /* _CPTPlotGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F31DE81045EB470058520A /* _CPTPlotGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; C38A0AC11A46255C00D45436 /* CPTPlot.h in Headers */ = {isa = PBXBuildFile; fileRef = 07BF0D7E0F2B72F6002FCEA7 /* CPTPlot.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0AC21A46255C00D45436 /* CPTBarPlot.h in Headers */ = {isa = PBXBuildFile; fileRef = 0799E0930F2BB5F300790525 /* CPTBarPlot.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0AC31A46255C00D45436 /* CPTPieChart.h in Headers */ = {isa = PBXBuildFile; fileRef = BC74A32E10FC402600E7E90D /* CPTPieChart.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0AC41A46255C00D45436 /* CPTRangePlot.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C0477C12D6560900DA8047 /* CPTRangePlot.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0AC51A46255C00D45436 /* CPTScatterPlot.h in Headers */ = {isa = PBXBuildFile; fileRef = 07BF0D950F2B73CA002FCEA7 /* CPTScatterPlot.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0AC61A46255C00D45436 /* CPTTradingRangePlot.h in Headers */ = {isa = PBXBuildFile; fileRef = 0772B43710E24D5C009CD04C /* CPTTradingRangePlot.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C38A0AC71A46256500D45436 /* CPTPlotGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F31DE71045EB470058520A /* CPTPlotGroup.m */; }; + C38A0AC71A46256500D45436 /* _CPTPlotGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F31DE71045EB470058520A /* _CPTPlotGroup.m */; }; C38A0AC81A46256500D45436 /* CPTPlot.m in Sources */ = {isa = PBXBuildFile; fileRef = 07BF0D7F0F2B72F6002FCEA7 /* CPTPlot.m */; }; C38A0AC91A46256500D45436 /* CPTBarPlot.m in Sources */ = {isa = PBXBuildFile; fileRef = 0799E0940F2BB5F300790525 /* CPTBarPlot.m */; }; C38A0ACA1A46256500D45436 /* CPTPieChart.m in Sources */ = {isa = PBXBuildFile; fileRef = BC74A32F10FC402600E7E90D /* CPTPieChart.m */; }; @@ -587,17 +587,17 @@ C38A0AD51A46256B00D45436 /* CPTPlotSymbol.h in Headers */ = {isa = PBXBuildFile; fileRef = C34AFE6911021D010041675A /* CPTPlotSymbol.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0AD61A46257100D45436 /* CPTPlotSymbol.m in Sources */ = {isa = PBXBuildFile; fileRef = C34AFE6A11021D010041675A /* CPTPlotSymbol.m */; }; C38A0AD81A46257600D45436 /* CPTScatterPlotTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 07FEBD61110B7E8B00E44D37 /* CPTScatterPlotTests.m */; }; - C38A0ADA1A4625B100D45436 /* CPTGridLines.h in Headers */ = {isa = PBXBuildFile; fileRef = C32B391610AA4C78000470D4 /* CPTGridLines.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C38A0ADB1A4625B100D45436 /* CPTGridLineGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C38DD49111A04B7A002A68E7 /* CPTGridLineGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C38A0ADC1A4625C100D45436 /* CPTAxisLabelGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C032C710B8DEDC003A11B6 /* CPTAxisLabelGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C38A0ADA1A4625B100D45436 /* _CPTGridLines.h in Headers */ = {isa = PBXBuildFile; fileRef = C32B391610AA4C78000470D4 /* _CPTGridLines.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C38A0ADB1A4625B100D45436 /* _CPTGridLineGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C38DD49111A04B7A002A68E7 /* _CPTGridLineGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C38A0ADC1A4625C100D45436 /* _CPTAxisLabelGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C032C710B8DEDC003A11B6 /* _CPTAxisLabelGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; C38A0ADD1A4625C900D45436 /* CPTAxisLabelTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD23FFB0FFBE78400ADD2E2 /* CPTAxisLabelTests.m */; }; C38A0ADF1A4625D400D45436 /* CPTAxis.m in Sources */ = {isa = PBXBuildFile; fileRef = 07975C480F3B818800DE45DC /* CPTAxis.m */; }; C38A0AE01A4625D400D45436 /* CPTAxisSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 07BF0D830F2B7340002FCEA7 /* CPTAxisSet.m */; }; - C38A0AE11A4625D400D45436 /* CPTGridLines.m in Sources */ = {isa = PBXBuildFile; fileRef = C32B391710AA4C78000470D4 /* CPTGridLines.m */; }; - C38A0AE21A4625D400D45436 /* CPTGridLineGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C38DD49211A04B7A002A68E7 /* CPTGridLineGroup.m */; }; + C38A0AE11A4625D400D45436 /* _CPTGridLines.m in Sources */ = {isa = PBXBuildFile; fileRef = C32B391710AA4C78000470D4 /* _CPTGridLines.m */; }; + C38A0AE21A4625D400D45436 /* _CPTGridLineGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C38DD49211A04B7A002A68E7 /* _CPTGridLineGroup.m */; }; C38A0AE31A4625D400D45436 /* CPTAxisLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 073FB02F0FC991A3007A728E /* CPTAxisLabel.m */; }; C38A0AE41A4625D400D45436 /* CPTAxisTitle.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFC7C3610921FDB00DAECAA /* CPTAxisTitle.m */; }; - C38A0AE51A4625D400D45436 /* CPTAxisLabelGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C032C810B8DEDC003A11B6 /* CPTAxisLabelGroup.m */; }; + C38A0AE51A4625D400D45436 /* _CPTAxisLabelGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C032C810B8DEDC003A11B6 /* _CPTAxisLabelGroup.m */; }; C38A0AE61A4625D400D45436 /* CPTXYAxis.m in Sources */ = {isa = PBXBuildFile; fileRef = 0783DD540FBF097E006C3696 /* CPTXYAxis.m */; }; C38A0AE71A4625D400D45436 /* CPTXYAxisSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 07975C420F3B816600DE45DC /* CPTXYAxisSet.m */; }; C38A0AF11A4625E800D45436 /* CPTAxis.h in Headers */ = {isa = PBXBuildFile; fileRef = 07975C470F3B818800DE45DC /* CPTAxis.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -635,12 +635,12 @@ C38A0B251A46264500D45436 /* CPTPlatformSpecificFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = C38A0B1D1A46264500D45436 /* CPTPlatformSpecificFunctions.m */; }; C38A0B291A46265300D45436 /* CPTGraphHostingView.h in Headers */ = {isa = PBXBuildFile; fileRef = C38A0B271A46265300D45436 /* CPTGraphHostingView.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0B2A1A46265300D45436 /* CPTGraphHostingView.m in Sources */ = {isa = PBXBuildFile; fileRef = C38A0B281A46265300D45436 /* CPTGraphHostingView.m */; }; - C38DD49311A04B7A002A68E7 /* CPTGridLineGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C38DD49111A04B7A002A68E7 /* CPTGridLineGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C38DD49411A04B7A002A68E7 /* CPTGridLineGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C38DD49211A04B7A002A68E7 /* CPTGridLineGroup.m */; }; + C38DD49311A04B7A002A68E7 /* _CPTGridLineGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C38DD49111A04B7A002A68E7 /* _CPTGridLineGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C38DD49411A04B7A002A68E7 /* _CPTGridLineGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C38DD49211A04B7A002A68E7 /* _CPTGridLineGroup.m */; }; C3920AC41395B6500045F3BB /* CPTLegend.h in Headers */ = {isa = PBXBuildFile; fileRef = C3920AC21395B6500045F3BB /* CPTLegend.h */; settings = {ATTRIBUTES = (Public, ); }; }; C3920AC51395B6500045F3BB /* CPTLegend.m in Sources */ = {isa = PBXBuildFile; fileRef = C3920AC31395B6500045F3BB /* CPTLegend.m */; }; - C3978E0613CE653C00A420D9 /* NSCoderExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = C3978E0413CE653B00A420D9 /* NSCoderExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C3978E0713CE653C00A420D9 /* NSCoderExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = C3978E0513CE653B00A420D9 /* NSCoderExtensions.m */; }; + C3978E0613CE653C00A420D9 /* _NSCoderExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = C3978E0413CE653B00A420D9 /* _NSCoderExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C3978E0713CE653C00A420D9 /* _NSCoderExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = C3978E0513CE653B00A420D9 /* _NSCoderExtensions.m */; }; C3A695E5146A19BC00AF5653 /* CPTMutablePlotRange.h in Headers */ = {isa = PBXBuildFile; fileRef = C3A695E3146A19BC00AF5653 /* CPTMutablePlotRange.h */; settings = {ATTRIBUTES = (Public, ); }; }; C3A695E6146A19BC00AF5653 /* CPTMutablePlotRange.m in Sources */ = {isa = PBXBuildFile; fileRef = C3A695E4146A19BC00AF5653 /* CPTMutablePlotRange.m */; }; C3AFC9D10FB62969005DFFDC /* CPTImage.h in Headers */ = {isa = PBXBuildFile; fileRef = C3AFC9CF0FB62969005DFFDC /* CPTImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -701,8 +701,8 @@ C3EE4E981A6C1E890098F4E6 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3EE4E971A6C1E890098F4E6 /* Cocoa.framework */; }; C3EE4E9A1A6C1F770098F4E6 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07BF0D630F2B70B8002FCEA7 /* QuartzCore.framework */; }; C3EE4E9B1A6C1F8A0098F4E6 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3EE4E971A6C1E890098F4E6 /* Cocoa.framework */; }; - C3F31DE91045EB470058520A /* CPTPlotGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F31DE71045EB470058520A /* CPTPlotGroup.m */; }; - C3F31DEA1045EB470058520A /* CPTPlotGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F31DE81045EB470058520A /* CPTPlotGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C3F31DE91045EB470058520A /* _CPTPlotGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F31DE71045EB470058520A /* _CPTPlotGroup.m */; }; + C3F31DEA1045EB470058520A /* _CPTPlotGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F31DE81045EB470058520A /* _CPTPlotGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; C3F97F1E17A9E07C00A52FF2 /* CPTFunctionDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F97F1C17A9E07B00A52FF2 /* CPTFunctionDataSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; C3F97F1F17A9E07C00A52FF2 /* CPTFunctionDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F97F1D17A9E07B00A52FF2 /* CPTFunctionDataSource.m */; }; D0C0477D12D6560900DA8047 /* CPTRangePlot.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C0477B12D6560900DA8047 /* CPTRangePlot.m */; }; @@ -795,8 +795,8 @@ 0772C92E0FE2F89000EC4C16 /* _CPTDarkGradientTheme.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = _CPTDarkGradientTheme.m; sourceTree = ""; }; 0783DD530FBF097E006C3696 /* CPTXYAxis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTXYAxis.h; sourceTree = ""; }; 0783DD540FBF097E006C3696 /* CPTXYAxis.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTXYAxis.m; sourceTree = ""; }; - 078F42D90FACC075006E670B /* NSNumberExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = NSNumberExtensions.h; sourceTree = ""; }; - 078F42DA0FACC075006E670B /* NSNumberExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = NSNumberExtensions.m; sourceTree = ""; }; + 078F42D90FACC075006E670B /* _NSNumberExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = _NSNumberExtensions.h; sourceTree = ""; }; + 078F42DA0FACC075006E670B /* _NSNumberExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _NSNumberExtensions.m; sourceTree = ""; }; 07975C410F3B816600DE45DC /* CPTXYAxisSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTXYAxisSet.h; sourceTree = ""; }; 07975C420F3B816600DE45DC /* CPTXYAxisSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTXYAxisSet.m; sourceTree = ""; }; 07975C470F3B818800DE45DC /* CPTAxis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTAxis.h; sourceTree = ""; }; @@ -872,8 +872,8 @@ 4CD7E7E60F4B4F8200F9BCBB /* CPTTextLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTTextLayer.m; sourceTree = ""; }; 4CD7E7EA0F4B4F9600F9BCBB /* CPTLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLayer.h; sourceTree = ""; }; 4CD7E7EB0F4B4F9600F9BCBB /* CPTLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLayer.m; sourceTree = ""; }; - 4CD7E7EE0F4B4FA700F9BCBB /* NSDecimalNumberExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSDecimalNumberExtensions.h; sourceTree = ""; }; - 4CD7E7EF0F4B4FA700F9BCBB /* NSDecimalNumberExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSDecimalNumberExtensions.m; sourceTree = ""; }; + 4CD7E7EE0F4B4FA700F9BCBB /* _NSDecimalNumberExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _NSDecimalNumberExtensions.h; sourceTree = ""; }; + 4CD7E7EF0F4B4FA700F9BCBB /* _NSDecimalNumberExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = _NSDecimalNumberExtensions.m; sourceTree = ""; }; 4CD7E9620F4B625900F9BCBB /* CPTUtilitiesTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTUtilitiesTests.h; sourceTree = ""; }; 4CD7E9630F4B625900F9BCBB /* CPTUtilitiesTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTUtilitiesTests.m; sourceTree = ""; }; 8DC2EF5B0486A6940098B216 /* CorePlot.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CorePlot.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -914,8 +914,8 @@ C3226A571A69F6FA00F77249 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; C3286BFE15D8740100A436A8 /* _CPTMaskLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTMaskLayer.h; sourceTree = ""; }; C3286BFF15D8740100A436A8 /* _CPTMaskLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTMaskLayer.m; sourceTree = ""; }; - C32B391610AA4C78000470D4 /* CPTGridLines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTGridLines.h; sourceTree = ""; }; - C32B391710AA4C78000470D4 /* CPTGridLines.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTGridLines.m; sourceTree = ""; }; + C32B391610AA4C78000470D4 /* _CPTGridLines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTGridLines.h; sourceTree = ""; }; + C32B391710AA4C78000470D4 /* _CPTGridLines.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTGridLines.m; sourceTree = ""; }; C32EE1B413EC4AA800038266 /* CPTShadow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTShadow.h; sourceTree = ""; }; C32EE1B513EC4AA800038266 /* CPTShadow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTShadow.m; sourceTree = ""; }; C32EE1BF13EC4BE700038266 /* CPTMutableShadow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTMutableShadow.h; sourceTree = ""; }; @@ -952,7 +952,7 @@ C37A406520E02BA100C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/CorePlot-CocoaTouchTests-Info.plist"; sourceTree = ""; }; C37A406720E02BA500C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/CorePlot-iOSTests-Info.plist"; sourceTree = ""; }; C37A406920E02BE900C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/CorePlotTests-Info.plist"; sourceTree = ""; }; - C37A9AB429C69796003B4338 /* CorePlot_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CorePlot_Private.h; sourceTree = ""; }; + C37A9AB429C69796003B4338 /* _CorePlot_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _CorePlot_Private.h; sourceTree = ""; }; C37A9AB829C698A7003B4338 /* module.private.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.private.modulemap; sourceTree = ""; }; C37A9AB929C698A7003B4338 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = ""; }; C37EA6921BC83F2A0091C8F7 /* CorePlot.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CorePlot.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -970,12 +970,12 @@ C38A0B1D1A46264500D45436 /* CPTPlatformSpecificFunctions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CPTPlatformSpecificFunctions.m; path = PlatformSpecific/CPTPlatformSpecificFunctions.m; sourceTree = SOURCE_ROOT; }; C38A0B271A46265300D45436 /* CPTGraphHostingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPTGraphHostingView.h; path = PlatformSpecific/CPTGraphHostingView.h; sourceTree = SOURCE_ROOT; }; C38A0B281A46265300D45436 /* CPTGraphHostingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CPTGraphHostingView.m; path = PlatformSpecific/CPTGraphHostingView.m; sourceTree = SOURCE_ROOT; }; - C38DD49111A04B7A002A68E7 /* CPTGridLineGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTGridLineGroup.h; sourceTree = ""; }; - C38DD49211A04B7A002A68E7 /* CPTGridLineGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTGridLineGroup.m; sourceTree = ""; }; + C38DD49111A04B7A002A68E7 /* _CPTGridLineGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTGridLineGroup.h; sourceTree = ""; }; + C38DD49211A04B7A002A68E7 /* _CPTGridLineGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTGridLineGroup.m; sourceTree = ""; }; C3920AC21395B6500045F3BB /* CPTLegend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLegend.h; sourceTree = ""; }; C3920AC31395B6500045F3BB /* CPTLegend.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLegend.m; sourceTree = ""; }; - C3978E0413CE653B00A420D9 /* NSCoderExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSCoderExtensions.h; sourceTree = ""; }; - C3978E0513CE653B00A420D9 /* NSCoderExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSCoderExtensions.m; sourceTree = ""; }; + C3978E0413CE653B00A420D9 /* _NSCoderExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _NSCoderExtensions.h; sourceTree = ""; }; + C3978E0513CE653B00A420D9 /* _NSCoderExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = _NSCoderExtensions.m; sourceTree = ""; }; C3A695E3146A19BC00AF5653 /* CPTMutablePlotRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTMutablePlotRange.h; sourceTree = ""; }; C3A695E4146A19BC00AF5653 /* CPTMutablePlotRange.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTMutablePlotRange.m; sourceTree = ""; }; C3AFC9CF0FB62969005DFFDC /* CPTImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTImage.h; sourceTree = ""; }; @@ -988,8 +988,8 @@ C3BB3C8C1C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTAnimationNSNumberPeriod.h; sourceTree = ""; }; C3BB3C8D1C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = _CPTAnimationNSNumberPeriod.m; sourceTree = ""; }; C3BB93181B729BD200004527 /* _CPTDebugQuickLook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTDebugQuickLook.h; sourceTree = ""; }; - C3C032C710B8DEDC003A11B6 /* CPTAxisLabelGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTAxisLabelGroup.h; sourceTree = ""; }; - C3C032C810B8DEDC003A11B6 /* CPTAxisLabelGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAxisLabelGroup.m; sourceTree = ""; }; + C3C032C710B8DEDC003A11B6 /* _CPTAxisLabelGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTAxisLabelGroup.h; sourceTree = ""; }; + C3C032C810B8DEDC003A11B6 /* _CPTAxisLabelGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTAxisLabelGroup.m; sourceTree = ""; }; C3C1C07E1790D3B400E8B1B7 /* CPTLayerTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLayerTests.h; sourceTree = ""; }; C3C1C07F1790D3B400E8B1B7 /* CPTLayerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLayerTests.m; sourceTree = ""; }; C3C2846F16584EB9006BA43C /* CPTAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTAnimation.h; sourceTree = ""; }; @@ -1014,11 +1014,11 @@ C3CCA03A13E8D85800CE6DB1 /* _CPTConstraintsFixed.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTConstraintsFixed.m; sourceTree = ""; }; C3CCA03B13E8D85800CE6DB1 /* _CPTConstraintsRelative.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = _CPTConstraintsRelative.h; sourceTree = ""; }; C3CCA03C13E8D85800CE6DB1 /* _CPTConstraintsRelative.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTConstraintsRelative.m; sourceTree = ""; }; - C3D0F67529C6053E00190D2C /* generate_spm_sources_layout.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = generate_spm_sources_layout.sh; path = ../../scripts/generate_spm_sources_layout.sh; sourceTree = ""; }; - C3D0F67629C6053E00190D2C /* format_core_plot.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = format_core_plot.sh; path = ../../scripts/format_core_plot.sh; sourceTree = ""; }; - C3D0F67729C6053E00190D2C /* createrelease.py */ = {isa = PBXFileReference; lastKnownFileType = text.script.python; name = createrelease.py; path = ../../scripts/createrelease.py; sourceTree = ""; }; - C3D0F67829C6055700190D2C /* prefixer.py */ = {isa = PBXFileReference; lastKnownFileType = text.script.python; name = prefixer.py; path = ../../scripts/prefixer.py; sourceTree = ""; }; - C3D0F67929C6087100190D2C /* uncrustify.cfg */ = {isa = PBXFileReference; lastKnownFileType = text; name = uncrustify.cfg; path = ../../scripts/uncrustify.cfg; sourceTree = ""; }; + C3D0F67529C6053E00190D2C /* generate_spm_sources_layout.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = generate_spm_sources_layout.sh; sourceTree = ""; }; + C3D0F67629C6053E00190D2C /* format_core_plot.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = format_core_plot.sh; sourceTree = ""; }; + C3D0F67729C6053E00190D2C /* createrelease.py */ = {isa = PBXFileReference; lastKnownFileType = text.script.python; path = createrelease.py; sourceTree = ""; }; + C3D0F67829C6055700190D2C /* prefixer.py */ = {isa = PBXFileReference; lastKnownFileType = text.script.python; path = prefixer.py; sourceTree = ""; }; + C3D0F67929C6087100190D2C /* uncrustify.cfg */ = {isa = PBXFileReference; lastKnownFileType = text; path = uncrustify.cfg; sourceTree = ""; }; C3D3AD2B13DF8DCE0004EA73 /* CPTLineCap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLineCap.h; sourceTree = ""; }; C3D3AD2C13DF8DCE0004EA73 /* CPTLineCap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLineCap.m; sourceTree = ""; }; C3D68B83122201A700EB4863 /* CPTNumericDataTypeConversionPerformanceTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTNumericDataTypeConversionPerformanceTests.h; sourceTree = ""; }; @@ -1043,8 +1043,8 @@ C3DA34CB107AD7710051DA02 /* _CPTXYTheme.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTXYTheme.h; sourceTree = ""; }; C3EE4E971A6C1E890098F4E6 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; C3F244BF28DBCABB008DB9A1 /* CorePlot.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CorePlot.h; sourceTree = ""; }; - C3F31DE71045EB470058520A /* CPTPlotGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlotGroup.m; sourceTree = ""; }; - C3F31DE81045EB470058520A /* CPTPlotGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTPlotGroup.h; sourceTree = ""; }; + C3F31DE71045EB470058520A /* _CPTPlotGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTPlotGroup.m; sourceTree = ""; }; + C3F31DE81045EB470058520A /* _CPTPlotGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTPlotGroup.h; sourceTree = ""; }; C3F97F1C17A9E07B00A52FF2 /* CPTFunctionDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTFunctionDataSource.h; sourceTree = ""; }; C3F97F1D17A9E07B00A52FF2 /* CPTFunctionDataSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTFunctionDataSource.m; sourceTree = ""; }; C3FF6EF00FFFA51D00AF0496 /* mainpage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mainpage.h; path = Source/mainpage.h; sourceTree = ""; }; @@ -1235,12 +1235,12 @@ 07975C230F3B3DF200DE45DC /* Categories */ = { isa = PBXGroup; children = ( - C3978E0413CE653B00A420D9 /* NSCoderExtensions.h */, - C3978E0513CE653B00A420D9 /* NSCoderExtensions.m */, - 4CD7E7EE0F4B4FA700F9BCBB /* NSDecimalNumberExtensions.h */, - 4CD7E7EF0F4B4FA700F9BCBB /* NSDecimalNumberExtensions.m */, - 078F42D90FACC075006E670B /* NSNumberExtensions.h */, - 078F42DA0FACC075006E670B /* NSNumberExtensions.m */, + C3978E0413CE653B00A420D9 /* _NSCoderExtensions.h */, + C3978E0513CE653B00A420D9 /* _NSCoderExtensions.m */, + 4CD7E7EE0F4B4FA700F9BCBB /* _NSDecimalNumberExtensions.h */, + 4CD7E7EF0F4B4FA700F9BCBB /* _NSDecimalNumberExtensions.m */, + 078F42D90FACC075006E670B /* _NSNumberExtensions.h */, + 078F42DA0FACC075006E670B /* _NSNumberExtensions.m */, ); name = Categories; sourceTree = ""; @@ -1296,8 +1296,8 @@ 07BF0D890F2B736D002FCEA7 /* Plots */ = { isa = PBXGroup; children = ( - C3F31DE81045EB470058520A /* CPTPlotGroup.h */, - C3F31DE71045EB470058520A /* CPTPlotGroup.m */, + C3F31DE81045EB470058520A /* _CPTPlotGroup.h */, + C3F31DE71045EB470058520A /* _CPTPlotGroup.m */, 07BF0D7E0F2B72F6002FCEA7 /* CPTPlot.h */, 07BF0D7F0F2B72F6002FCEA7 /* CPTPlot.m */, 0799E0930F2BB5F300790525 /* CPTBarPlot.h */, @@ -1348,10 +1348,10 @@ 07975C480F3B818800DE45DC /* CPTAxis.m */, 07BF0D820F2B7340002FCEA7 /* CPTAxisSet.h */, 07BF0D830F2B7340002FCEA7 /* CPTAxisSet.m */, - C32B391610AA4C78000470D4 /* CPTGridLines.h */, - C32B391710AA4C78000470D4 /* CPTGridLines.m */, - C38DD49111A04B7A002A68E7 /* CPTGridLineGroup.h */, - C38DD49211A04B7A002A68E7 /* CPTGridLineGroup.m */, + C32B391610AA4C78000470D4 /* _CPTGridLines.h */, + C32B391710AA4C78000470D4 /* _CPTGridLines.m */, + C38DD49111A04B7A002A68E7 /* _CPTGridLineGroup.h */, + C38DD49211A04B7A002A68E7 /* _CPTGridLineGroup.m */, C3C032C510B8DE87003A11B6 /* Labels */, C32B391C10AA4D1E000470D4 /* XY Axes */, C32B391D10AA4D31000470D4 /* Polar Axes */, @@ -1713,8 +1713,8 @@ 073FB02F0FC991A3007A728E /* CPTAxisLabel.m */, BCFC7C3510921FDB00DAECAA /* CPTAxisTitle.h */, BCFC7C3610921FDB00DAECAA /* CPTAxisTitle.m */, - C3C032C710B8DEDC003A11B6 /* CPTAxisLabelGroup.h */, - C3C032C810B8DEDC003A11B6 /* CPTAxisLabelGroup.m */, + C3C032C710B8DEDC003A11B6 /* _CPTAxisLabelGroup.h */, + C3C032C810B8DEDC003A11B6 /* _CPTAxisLabelGroup.m */, ); name = Labels; sourceTree = ""; @@ -1766,7 +1766,8 @@ C3D0F67629C6053E00190D2C /* format_core_plot.sh */, C3D0F67929C6087100190D2C /* uncrustify.cfg */, ); - path = Scripts; + name = Scripts; + path = ../scripts; sourceTree = ""; }; C3D979A513D2159400145DFF /* Tests */ = { @@ -1803,7 +1804,7 @@ isa = PBXGroup; children = ( C3F244BF28DBCABB008DB9A1 /* CorePlot.h */, - C37A9AB429C69796003B4338 /* CorePlot_Private.h */, + C37A9AB429C69796003B4338 /* _CorePlot_Private.h */, ); path = "SPM Umbrella Header"; sourceTree = ""; @@ -1847,11 +1848,11 @@ 07975C490F3B818800DE45DC /* CPTAxis.h in Headers */, 4CD7E7E70F4B4F8200F9BCBB /* CPTTextLayer.h in Headers */, 4CD7E7EC0F4B4F9600F9BCBB /* CPTLayer.h in Headers */, - 4CD7E7F00F4B4FA700F9BCBB /* NSDecimalNumberExtensions.h in Headers */, + 4CD7E7F00F4B4FA700F9BCBB /* _NSDecimalNumberExtensions.h in Headers */, 32484B430F530E8B002151AD /* CPTPlotRange.h in Headers */, 070A73DC0F5D8C910014FA84 /* CPTDecimalNumberValueTransformer.h in Headers */, 07CA112F0FAC8F85000861CE /* CPTGradient.h in Headers */, - 078F42DB0FACC075006E670B /* NSNumberExtensions.h in Headers */, + 078F42DB0FACC075006E670B /* _NSNumberExtensions.h in Headers */, C34260200FAE096D00072842 /* _CPTFillImage.h in Headers */, C34260230FAE096D00072842 /* _CPTFillColor.h in Headers */, C34260260FAE096D00072842 /* _CPTFillGradient.h in Headers */, @@ -1880,7 +1881,7 @@ 4C97EF01104D80C400B554F9 /* CPTNumericData.h in Headers */, 4C97EF03104D80C400B554F9 /* CPTNumericDataType.h in Headers */, 4C97EF12104D819100B554F9 /* CPTMutableNumericData.h in Headers */, - C3F31DEA1045EB470058520A /* CPTPlotGroup.h in Headers */, + C3F31DEA1045EB470058520A /* _CPTPlotGroup.h in Headers */, C3DA34CD107AD7710051DA02 /* _CPTXYTheme.h in Headers */, 07AEF24910BBED050012BEFF /* CPTResponder.h in Headers */, E042452425841F3100C61A67 /* CPTPlatformSpecificFunctions.h in Headers */, @@ -1888,10 +1889,10 @@ 070064E9111F2BAA003DE087 /* CPTConstraints.h in Headers */, 07FCF2C6115B54AE00E46606 /* _CPTSlateTheme.h in Headers */, C34AFE6B11021D010041675A /* CPTPlotSymbol.h in Headers */, - C34AFE96110224630041675A /* CPTAxisLabelGroup.h in Headers */, - C34AFE98110224710041675A /* CPTGridLines.h in Headers */, + C34AFE96110224630041675A /* _CPTAxisLabelGroup.h in Headers */, + C34AFE98110224710041675A /* _CPTGridLines.h in Headers */, C34AFE9B1102248D0041675A /* CPTPlotArea.h in Headers */, - C38DD49311A04B7A002A68E7 /* CPTGridLineGroup.h in Headers */, + C38DD49311A04B7A002A68E7 /* _CPTGridLineGroup.h in Headers */, 07E10BB111D1016B000B8DAB /* CPTPlotSpaceAnnotation.h in Headers */, 07E10BB611D10177000B8DAB /* CPTAnnotation.h in Headers */, 07E10BBB11D10183000B8DAB /* CPTLayerAnnotation.h in Headers */, @@ -1906,7 +1907,7 @@ D0C0477E12D6560900DA8047 /* CPTRangePlot.h in Headers */, C3920AC41395B6500045F3BB /* CPTLegend.h in Headers */, C30550ED1399BE5400E0151F /* CPTLegendEntry.h in Headers */, - C3978E0613CE653C00A420D9 /* NSCoderExtensions.h in Headers */, + C3978E0613CE653C00A420D9 /* _NSCoderExtensions.h in Headers */, C3D3AD2D13DF8DCE0004EA73 /* CPTLineCap.h in Headers */, C32EE1B613EC4AA800038266 /* CPTShadow.h in Headers */, C32EE1C113EC4BE700038266 /* CPTMutableShadow.h in Headers */, @@ -1937,13 +1938,13 @@ C37EA6311BC83F2A0091C8F7 /* CPTPlotSymbol.h in Headers */, C37EA6321BC83F2A0091C8F7 /* CPTTradingRangePlot.h in Headers */, C37EA6331BC83F2A0091C8F7 /* CPTGraph.h in Headers */, - C37EA6341BC83F2A0091C8F7 /* CPTGridLines.h in Headers */, + C37EA6341BC83F2A0091C8F7 /* _CPTGridLines.h in Headers */, C3BB3C901C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.h in Headers */, C37EA6351BC83F2A0091C8F7 /* CPTTextStyle.h in Headers */, C37EA6361BC83F2A0091C8F7 /* CPTMutablePlotRange.h in Headers */, C37EA6371BC83F2A0091C8F7 /* CPTPieChart.h in Headers */, C37EA6381BC83F2A0091C8F7 /* CPTMutableNumericData+TypeConversion.h in Headers */, - C37EA6391BC83F2A0091C8F7 /* CPTAxisLabelGroup.h in Headers */, + C37EA6391BC83F2A0091C8F7 /* _CPTAxisLabelGroup.h in Headers */, C37EA63A1BC83F2A0091C8F7 /* CPTPlotSpace.h in Headers */, C37EA63B1BC83F2A0091C8F7 /* CPTGraphHostingView.h in Headers */, C37EA63C1BC83F2A0091C8F7 /* CPTColorSpace.h in Headers */, @@ -1973,19 +1974,19 @@ C37EA6541BC83F2A0091C8F7 /* CPTImage.h in Headers */, C37EA6551BC83F2A0091C8F7 /* CPTTheme.h in Headers */, C37EA6561BC83F2A0091C8F7 /* CPTPlatformSpecificCategories.h in Headers */, - C37EA6571BC83F2A0091C8F7 /* NSNumberExtensions.h in Headers */, + C37EA6571BC83F2A0091C8F7 /* _NSNumberExtensions.h in Headers */, C37EA6581BC83F2A0091C8F7 /* _CPTConstraintsRelative.h in Headers */, C37EA6591BC83F2A0091C8F7 /* CPTAnimationOperation.h in Headers */, C37EA65A1BC83F2A0091C8F7 /* _CPTDarkGradientTheme.h in Headers */, C37EA65B1BC83F2A0091C8F7 /* CPTRangePlot.h in Headers */, C37EA65C1BC83F2A0091C8F7 /* _CPTAnimationCGSizePeriod.h in Headers */, - C37EA65D1BC83F2A0091C8F7 /* CPTPlotGroup.h in Headers */, + C37EA65D1BC83F2A0091C8F7 /* _CPTPlotGroup.h in Headers */, C37EA65E1BC83F2A0091C8F7 /* CPTLegend.h in Headers */, C37EA65F1BC83F2A0091C8F7 /* _CPTFillImage.h in Headers */, C37EA6601BC83F2A0091C8F7 /* _CPTAnimationCGRectPeriod.h in Headers */, C37EA6611BC83F2A0091C8F7 /* CPTPlotSpaceAnnotation.h in Headers */, C37EA6621BC83F2A0091C8F7 /* CPTConstraints.h in Headers */, - C37EA6631BC83F2A0091C8F7 /* NSCoderExtensions.h in Headers */, + C37EA6631BC83F2A0091C8F7 /* _NSCoderExtensions.h in Headers */, C37EA6641BC83F2A0091C8F7 /* CPTNumericData+TypeConversion.h in Headers */, C37EA6651BC83F2A0091C8F7 /* _CPTFillColor.h in Headers */, C37EA6661BC83F2A0091C8F7 /* _CPTXYTheme.h in Headers */, @@ -1994,7 +1995,7 @@ C37EA6691BC83F2A0091C8F7 /* CPTAxisTitle.h in Headers */, C37EA66A1BC83F2A0091C8F7 /* _CPTSlateTheme.h in Headers */, C37EA66B1BC83F2A0091C8F7 /* CPTMutableNumericData.h in Headers */, - C37EA66C1BC83F2A0091C8F7 /* CPTGridLineGroup.h in Headers */, + C37EA66C1BC83F2A0091C8F7 /* _CPTGridLineGroup.h in Headers */, C37EA66D1BC83F2A0091C8F7 /* CorePlot.h in Headers */, C37EA66E1BC83F2A0091C8F7 /* CPTMutableLineStyle.h in Headers */, C37EA66F1BC83F2A0091C8F7 /* CPTAnimation.h in Headers */, @@ -2015,7 +2016,7 @@ C37EA67E1BC83F2A0091C8F7 /* CPTFunctionDataSource.h in Headers */, C37EA67F1BC83F2A0091C8F7 /* CPTGradient.h in Headers */, C37EA6801BC83F2A0091C8F7 /* _CPTAnimationCGPointPeriod.h in Headers */, - C37EA6811BC83F2A0091C8F7 /* NSDecimalNumberExtensions.h in Headers */, + C37EA6811BC83F2A0091C8F7 /* _NSDecimalNumberExtensions.h in Headers */, C37EA6821BC83F2A0091C8F7 /* CPTAxis.h in Headers */, C37EA6831BC83F2A0091C8F7 /* CPTPlatformSpecificFunctions.h in Headers */, C37EA6841BC83F2A0091C8F7 /* CPTAnnotationHostLayer.h in Headers */, @@ -2040,13 +2041,13 @@ C38A0AD51A46256B00D45436 /* CPTPlotSymbol.h in Headers */, C38A0AC61A46255C00D45436 /* CPTTradingRangePlot.h in Headers */, C38A0AA71A46240300D45436 /* CPTGraph.h in Headers */, - C38A0ADA1A4625B100D45436 /* CPTGridLines.h in Headers */, + C38A0ADA1A4625B100D45436 /* _CPTGridLines.h in Headers */, C3BB3C8F1C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.h in Headers */, C38A0A4A1A461F1500D45436 /* CPTTextStyle.h in Headers */, C38A09FB1A461D0F00D45436 /* CPTMutablePlotRange.h in Headers */, C38A0AC31A46255C00D45436 /* CPTPieChart.h in Headers */, C3D4147B1A7D82AB00B6F5D6 /* CPTMutableNumericData+TypeConversion.h in Headers */, - C38A0ADC1A4625C100D45436 /* CPTAxisLabelGroup.h in Headers */, + C38A0ADC1A4625C100D45436 /* _CPTAxisLabelGroup.h in Headers */, C38A0AB61A4624C200D45436 /* CPTPlotSpace.h in Headers */, C38A0B291A46265300D45436 /* CPTGraphHostingView.h in Headers */, C38A0A5D1A4620D400D45436 /* CPTColorSpace.h in Headers */, @@ -2076,19 +2077,19 @@ C38A0A5F1A4620D400D45436 /* CPTImage.h in Headers */, C38A0AFD1A46260300D45436 /* CPTTheme.h in Headers */, C38A0B1E1A46264500D45436 /* CPTPlatformSpecificCategories.h in Headers */, - C38A0A9F1A4621A500D45436 /* NSNumberExtensions.h in Headers */, + C38A0A9F1A4621A500D45436 /* _NSNumberExtensions.h in Headers */, C38A0A441A461EFA00D45436 /* _CPTConstraintsRelative.h in Headers */, C38A0A171A461E5B00D45436 /* CPTAnimationOperation.h in Headers */, C38A0AFF1A46260B00D45436 /* _CPTDarkGradientTheme.h in Headers */, C38A0AC41A46255C00D45436 /* CPTRangePlot.h in Headers */, C38A0A231A461E8F00D45436 /* _CPTAnimationCGSizePeriod.h in Headers */, - C38A0AC01A46254E00D45436 /* CPTPlotGroup.h in Headers */, + C38A0AC01A46254E00D45436 /* _CPTPlotGroup.h in Headers */, C38A0AF71A4625F500D45436 /* CPTLegend.h in Headers */, C38A0A7D1A4620EF00D45436 /* _CPTFillImage.h in Headers */, C38A0A261A461E9600D45436 /* _CPTAnimationCGRectPeriod.h in Headers */, C38A0A351A461EC800D45436 /* CPTPlotSpaceAnnotation.h in Headers */, C38A0A3E1A461EE600D45436 /* CPTConstraints.h in Headers */, - C38A0A9D1A4621A500D45436 /* NSCoderExtensions.h in Headers */, + C38A0A9D1A4621A500D45436 /* _NSCoderExtensions.h in Headers */, C3D4147A1A7D82A500B6F5D6 /* CPTNumericData+TypeConversion.h in Headers */, C38A0A7B1A4620EF00D45436 /* _CPTFillColor.h in Headers */, C38A0AFE1A46260B00D45436 /* _CPTXYTheme.h in Headers */, @@ -2097,7 +2098,7 @@ C38A0AF41A4625E800D45436 /* CPTAxisTitle.h in Headers */, C38A0B021A46260B00D45436 /* _CPTSlateTheme.h in Headers */, C3D414781A7D829100B6F5D6 /* CPTMutableNumericData.h in Headers */, - C38A0ADB1A4625B100D45436 /* CPTGridLineGroup.h in Headers */, + C38A0ADB1A4625B100D45436 /* _CPTGridLineGroup.h in Headers */, C3D414E01A7D867200B6F5D6 /* CorePlot.h in Headers */, C38A0A621A4620D400D45436 /* CPTMutableLineStyle.h in Headers */, C38A0A141A461E5000D45436 /* CPTAnimation.h in Headers */, @@ -2118,7 +2119,7 @@ C38A09FE1A461D1800D45436 /* CPTFunctionDataSource.h in Headers */, C38A0A5E1A4620D400D45436 /* CPTGradient.h in Headers */, C38A0A201A461E8800D45436 /* _CPTAnimationCGPointPeriod.h in Headers */, - C38A0A9E1A4621A500D45436 /* NSDecimalNumberExtensions.h in Headers */, + C38A0A9E1A4621A500D45436 /* _NSDecimalNumberExtensions.h in Headers */, C38A0AF11A4625E800D45436 /* CPTAxis.h in Headers */, C38A0B241A46264500D45436 /* CPTPlatformSpecificFunctions.h in Headers */, C38A0A3B1A461EDA00D45436 /* CPTAnnotationHostLayer.h in Headers */, @@ -2465,11 +2466,11 @@ 07975C4A0F3B818800DE45DC /* CPTAxis.m in Sources */, 4CD7E7E80F4B4F8200F9BCBB /* CPTTextLayer.m in Sources */, 4CD7E7ED0F4B4F9600F9BCBB /* CPTLayer.m in Sources */, - 4CD7E7F10F4B4FA700F9BCBB /* NSDecimalNumberExtensions.m in Sources */, + 4CD7E7F10F4B4FA700F9BCBB /* _NSDecimalNumberExtensions.m in Sources */, 32484B440F530E8B002151AD /* CPTPlotRange.m in Sources */, 070A73DD0F5D8C910014FA84 /* CPTDecimalNumberValueTransformer.m in Sources */, 07CA11300FAC8F85000861CE /* CPTGradient.m in Sources */, - 078F42DC0FACC075006E670B /* NSNumberExtensions.m in Sources */, + 078F42DC0FACC075006E670B /* _NSNumberExtensions.m in Sources */, C34260210FAE096D00072842 /* _CPTFillGradient.m in Sources */, C34260220FAE096D00072842 /* CPTFill.m in Sources */, C34260240FAE096D00072842 /* _CPTFillColor.m in Sources */, @@ -2492,7 +2493,7 @@ 4C97EF02104D80C400B554F9 /* CPTNumericData.m in Sources */, 4C97EF04104D80C400B554F9 /* CPTNumericDataType.m in Sources */, 4C97EF13104D819100B554F9 /* CPTMutableNumericData.m in Sources */, - C3F31DE91045EB470058520A /* CPTPlotGroup.m in Sources */, + C3F31DE91045EB470058520A /* _CPTPlotGroup.m in Sources */, C3DA34CC107AD7710051DA02 /* _CPTXYTheme.m in Sources */, BCFC7C3810921FDB00DAECAA /* CPTAxisTitle.m in Sources */, 0772B43B10E24D5C009CD04C /* CPTTradingRangePlot.m in Sources */, @@ -2500,12 +2501,12 @@ BC74A33110FC402600E7E90D /* CPTPieChart.m in Sources */, 070064EA111F2BAA003DE087 /* CPTConstraints.m in Sources */, 07FCF2C7115B54AE00E46606 /* _CPTSlateTheme.m in Sources */, - C34AFE5311021C100041675A /* CPTGridLines.m in Sources */, + C34AFE5311021C100041675A /* _CPTGridLines.m in Sources */, C34AFE5511021C470041675A /* CPTPlotArea.m in Sources */, C34AFE6C11021D010041675A /* CPTPlotSymbol.m in Sources */, E042451525841F2E00C61A67 /* CPTPlatformSpecificCategories.m in Sources */, - C34AFE7111021D880041675A /* CPTAxisLabelGroup.m in Sources */, - C38DD49411A04B7A002A68E7 /* CPTGridLineGroup.m in Sources */, + C34AFE7111021D880041675A /* _CPTAxisLabelGroup.m in Sources */, + C38DD49411A04B7A002A68E7 /* _CPTGridLineGroup.m in Sources */, 07E10BB211D1016B000B8DAB /* CPTPlotSpaceAnnotation.m in Sources */, 07E10BB711D10177000B8DAB /* CPTAnnotation.m in Sources */, 07E10BBC11D10183000B8DAB /* CPTLayerAnnotation.m in Sources */, @@ -2520,7 +2521,7 @@ C3920AC51395B6500045F3BB /* CPTLegend.m in Sources */, E042454125841F3800C61A67 /* CPTPlatformSpecificFunctions.m in Sources */, C30550EE1399BE5400E0151F /* CPTLegendEntry.m in Sources */, - C3978E0713CE653C00A420D9 /* NSCoderExtensions.m in Sources */, + C3978E0713CE653C00A420D9 /* _NSCoderExtensions.m in Sources */, E04245E02584204500C61A67 /* CPTImagePlatformSpecific.m in Sources */, C3BB3C911C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.m in Sources */, C3D3AD2E13DF8DCE0004EA73 /* CPTLineCap.m in Sources */, @@ -2555,7 +2556,7 @@ C37EA5CD1BC83F2A0091C8F7 /* CPTLayer.m in Sources */, C37EA5CE1BC83F2A0091C8F7 /* CPTTimeFormatter.m in Sources */, C37EA5CF1BC83F2A0091C8F7 /* CPTColor.m in Sources */, - C37EA5D01BC83F2A0091C8F7 /* NSCoderExtensions.m in Sources */, + C37EA5D01BC83F2A0091C8F7 /* _NSCoderExtensions.m in Sources */, C37EA5D11BC83F2A0091C8F7 /* CPTMutableNumericData.m in Sources */, C37EA5D21BC83F2A0091C8F7 /* CPTNumericData+TypeConversion.m in Sources */, C37EA5D31BC83F2A0091C8F7 /* CPTTheme.m in Sources */, @@ -2575,7 +2576,7 @@ C37EA5E11BC83F2A0091C8F7 /* CPTNumericData.m in Sources */, C37EA5E31BC83F2A0091C8F7 /* CPTXYAxisSet.m in Sources */, C37EA5E41BC83F2A0091C8F7 /* CPTLimitBand.m in Sources */, - C37EA5E51BC83F2A0091C8F7 /* CPTGridLines.m in Sources */, + C37EA5E51BC83F2A0091C8F7 /* _CPTGridLines.m in Sources */, C3BB3C941C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.m in Sources */, C37EA5E61BC83F2A0091C8F7 /* CPTPathExtensions.m in Sources */, C37EA5E71BC83F2A0091C8F7 /* CPTXYPlotSpace.m in Sources */, @@ -2583,7 +2584,7 @@ C37EA5E91BC83F2A0091C8F7 /* CPTImage.m in Sources */, C37EA5EA1BC83F2A0091C8F7 /* CPTPlotSymbol.m in Sources */, C37EA5EB1BC83F2A0091C8F7 /* CPTAxisSet.m in Sources */, - C37EA5EC1BC83F2A0091C8F7 /* CPTPlotGroup.m in Sources */, + C37EA5EC1BC83F2A0091C8F7 /* _CPTPlotGroup.m in Sources */, C37EA5ED1BC83F2A0091C8F7 /* CPTAnimation.m in Sources */, C37EA5EE1BC83F2A0091C8F7 /* _CPTAnimationNSDecimalPeriod.m in Sources */, C37EA5EF1BC83F2A0091C8F7 /* _CPTAnimationPlotRangePeriod.m in Sources */, @@ -2614,23 +2615,23 @@ C37EA6081BC83F2A0091C8F7 /* _CPTFillColor.m in Sources */, C37EA6091BC83F2A0091C8F7 /* _CPTAnimationTimingFunctions.m in Sources */, C37EA60A1BC83F2A0091C8F7 /* CPTMutableLineStyle.m in Sources */, - C37EA60B1BC83F2A0091C8F7 /* NSDecimalNumberExtensions.m in Sources */, + C37EA60B1BC83F2A0091C8F7 /* _NSDecimalNumberExtensions.m in Sources */, C37EA60C1BC83F2A0091C8F7 /* CPTLegend.m in Sources */, - C37EA60D1BC83F2A0091C8F7 /* CPTAxisLabelGroup.m in Sources */, + C37EA60D1BC83F2A0091C8F7 /* _CPTAxisLabelGroup.m in Sources */, C37EA60E1BC83F2A0091C8F7 /* CPTFill.m in Sources */, C37EA60F1BC83F2A0091C8F7 /* CPTMutableNumericData+TypeConversion.m in Sources */, C37EA6101BC83F2A0091C8F7 /* CPTRangePlot.m in Sources */, C37EA6111BC83F2A0091C8F7 /* CPTGraph.m in Sources */, C37EA6121BC83F2A0091C8F7 /* CPTMutablePlotRange.m in Sources */, C37EA6131BC83F2A0091C8F7 /* _CPTPlainWhiteTheme.m in Sources */, - C37EA6141BC83F2A0091C8F7 /* CPTGridLineGroup.m in Sources */, + C37EA6141BC83F2A0091C8F7 /* _CPTGridLineGroup.m in Sources */, C37EA6151BC83F2A0091C8F7 /* CPTNumericDataType.m in Sources */, C37EA6161BC83F2A0091C8F7 /* CPTPlot.m in Sources */, C37EA6171BC83F2A0091C8F7 /* CPTPlatformSpecificCategories.m in Sources */, C37EA6181BC83F2A0091C8F7 /* CPTConstraints.m in Sources */, C37EA6191BC83F2A0091C8F7 /* CPTTextStyle.m in Sources */, C37EA61A1BC83F2A0091C8F7 /* CPTFunctionDataSource.m in Sources */, - C37EA61B1BC83F2A0091C8F7 /* NSNumberExtensions.m in Sources */, + C37EA61B1BC83F2A0091C8F7 /* _NSNumberExtensions.m in Sources */, C37EA61C1BC83F2A0091C8F7 /* CPTBorderedLayer.m in Sources */, C37EA61D1BC83F2A0091C8F7 /* CPTLineStyle.m in Sources */, C37EA61E1BC83F2A0091C8F7 /* _CPTAnimationCGSizePeriod.m in Sources */, @@ -2688,7 +2689,7 @@ C38A0A061A461D4400D45436 /* CPTLayer.m in Sources */, C38A0A981A46219100D45436 /* CPTTimeFormatter.m in Sources */, C38A0A661A4620E200D45436 /* CPTColor.m in Sources */, - C38A0AA01A4621AC00D45436 /* NSCoderExtensions.m in Sources */, + C38A0AA01A4621AC00D45436 /* _NSCoderExtensions.m in Sources */, C38A09DD1A461C8100D45436 /* CPTMutableNumericData.m in Sources */, C38A09DF1A461C8500D45436 /* CPTNumericData+TypeConversion.m in Sources */, C38A0B041A46261700D45436 /* CPTTheme.m in Sources */, @@ -2708,7 +2709,7 @@ C38A09DB1A461C7D00D45436 /* CPTNumericData.m in Sources */, C38A0AE71A4625D400D45436 /* CPTXYAxisSet.m in Sources */, C38A0AB21A46241700D45436 /* CPTLimitBand.m in Sources */, - C38A0AE11A4625D400D45436 /* CPTGridLines.m in Sources */, + C38A0AE11A4625D400D45436 /* _CPTGridLines.m in Sources */, C3BB3C921C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.m in Sources */, C38A0A6D1A4620E200D45436 /* CPTPathExtensions.m in Sources */, C38A0AB91A46250500D45436 /* CPTXYPlotSpace.m in Sources */, @@ -2716,7 +2717,7 @@ C38A0A691A4620E200D45436 /* CPTImage.m in Sources */, C38A0AD61A46257100D45436 /* CPTPlotSymbol.m in Sources */, C38A0AE01A4625D400D45436 /* CPTAxisSet.m in Sources */, - C38A0AC71A46256500D45436 /* CPTPlotGroup.m in Sources */, + C38A0AC71A46256500D45436 /* _CPTPlotGroup.m in Sources */, C38A0A151A461E5800D45436 /* CPTAnimation.m in Sources */, C38A0A2A1A461EA600D45436 /* _CPTAnimationNSDecimalPeriod.m in Sources */, C38A0A2D1A461EAD00D45436 /* _CPTAnimationPlotRangePeriod.m in Sources */, @@ -2747,23 +2748,23 @@ C38A0A7F1A4620F700D45436 /* _CPTFillColor.m in Sources */, C38A0A301A461EB500D45436 /* _CPTAnimationTimingFunctions.m in Sources */, C38A0A6C1A4620E200D45436 /* CPTMutableLineStyle.m in Sources */, - C38A0AA11A4621AC00D45436 /* NSDecimalNumberExtensions.m in Sources */, + C38A0AA11A4621AC00D45436 /* _NSDecimalNumberExtensions.m in Sources */, C38A0AF91A4625FA00D45436 /* CPTLegend.m in Sources */, - C38A0AE51A4625D400D45436 /* CPTAxisLabelGroup.m in Sources */, + C38A0AE51A4625D400D45436 /* _CPTAxisLabelGroup.m in Sources */, C38A0A7E1A4620F700D45436 /* CPTFill.m in Sources */, C38A09E11A461C8800D45436 /* CPTMutableNumericData+TypeConversion.m in Sources */, C38A0ACB1A46256500D45436 /* CPTRangePlot.m in Sources */, C38A0AA91A46240900D45436 /* CPTGraph.m in Sources */, C38A09FC1A461D1300D45436 /* CPTMutablePlotRange.m in Sources */, C38A0B081A46261700D45436 /* _CPTPlainWhiteTheme.m in Sources */, - C38A0AE21A4625D400D45436 /* CPTGridLineGroup.m in Sources */, + C38A0AE21A4625D400D45436 /* _CPTGridLineGroup.m in Sources */, C38A09D91A461C6B00D45436 /* CPTNumericDataType.m in Sources */, C38A0AC81A46256500D45436 /* CPTPlot.m in Sources */, C38A0B1F1A46264500D45436 /* CPTPlatformSpecificCategories.m in Sources */, C38A0A3F1A461EEB00D45436 /* CPTConstraints.m in Sources */, C38A0A4B1A461F1A00D45436 /* CPTTextStyle.m in Sources */, C38A09FF1A461D1D00D45436 /* CPTFunctionDataSource.m in Sources */, - C38A0AA21A4621AC00D45436 /* NSNumberExtensions.m in Sources */, + C38A0AA21A4621AC00D45436 /* _NSNumberExtensions.m in Sources */, C38A0A091A461D4D00D45436 /* CPTBorderedLayer.m in Sources */, C38A0A6B1A4620E200D45436 /* CPTLineStyle.m in Sources */, C38A0A241A461E9200D45436 /* _CPTAnimationCGSizePeriod.m in Sources */, diff --git a/framework/MacOnly/CPTDecimalNumberValueTransformer.h b/framework/MacOnly/CPTDecimalNumberValueTransformer.h index f32bdc12a..c6a91e3f6 100644 --- a/framework/MacOnly/CPTDecimalNumberValueTransformer.h +++ b/framework/MacOnly/CPTDecimalNumberValueTransformer.h @@ -1,5 +1,9 @@ +#import + #if TARGET_OS_OSX +#import + @interface CPTDecimalNumberValueTransformer : NSValueTransformer @end diff --git a/framework/MacOnly/CPTDecimalNumberValueTransformer.m b/framework/MacOnly/CPTDecimalNumberValueTransformer.m index a479d01fd..82ec3df2d 100644 --- a/framework/MacOnly/CPTDecimalNumberValueTransformer.m +++ b/framework/MacOnly/CPTDecimalNumberValueTransformer.m @@ -2,7 +2,7 @@ #if TARGET_OS_OSX -#import "NSNumberExtensions.h" +#import "_NSNumberExtensions.h" /** * @brief A Cocoa Bindings value transformer for NSDecimalNumber objects. diff --git a/framework/Module/module.private.modulemap b/framework/Module/module.private.modulemap index 61d969633..106ad515d 100644 --- a/framework/Module/module.private.modulemap +++ b/framework/Module/module.private.modulemap @@ -1,5 +1,5 @@ framework module CorePlot_Private { - umbrella header "CorePlot_Private.h" + umbrella header "_CorePlot_Private.h" export * module * { export * } diff --git a/framework/PlatformSpecific/CPTGraphHostingView.h b/framework/PlatformSpecific/CPTGraphHostingView.h index 4928b8ae6..49a393e4c 100644 --- a/framework/PlatformSpecific/CPTGraphHostingView.h +++ b/framework/PlatformSpecific/CPTGraphHostingView.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTDefinitions.h" +#endif @class CPTGraph; diff --git a/framework/PlatformSpecific/CPTGraphHostingView.m b/framework/PlatformSpecific/CPTGraphHostingView.m index 063f4855a..8b8ae8bcb 100644 --- a/framework/PlatformSpecific/CPTGraphHostingView.m +++ b/framework/PlatformSpecific/CPTGraphHostingView.m @@ -697,7 +697,7 @@ -(void)setOpenHandCursor:(nullable NSCursor *)newCursor #pragma mark - iOS, tvOS, Mac Catalyst #pragma mark - -#import "NSNumberExtensions.h" +#import "_NSNumberExtensions.h" /// @cond @interface CPTGraphHostingView() diff --git a/framework/PlatformSpecific/CPTPlatformSpecificCategories.h b/framework/PlatformSpecific/CPTPlatformSpecificCategories.h index 1a2c85642..1ea10da25 100644 --- a/framework/PlatformSpecific/CPTPlatformSpecificCategories.h +++ b/framework/PlatformSpecific/CPTPlatformSpecificCategories.h @@ -1,8 +1,14 @@ #import +#ifdef CPT_IS_FRAMEWORK +#import +#import +#import +#else #import "CPTColor.h" #import "CPTLayer.h" #import "CPTPlatformSpecificDefines.h" +#endif #if TARGET_OS_OSX diff --git a/framework/PlatformSpecific/CPTPlatformSpecificFunctions.h b/framework/PlatformSpecific/CPTPlatformSpecificFunctions.h index 4ad0d9fc3..c7cfbdc97 100644 --- a/framework/PlatformSpecific/CPTPlatformSpecificFunctions.h +++ b/framework/PlatformSpecific/CPTPlatformSpecificFunctions.h @@ -1,5 +1,11 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTDefinitions.h" #import "CPTPlatformSpecificDefines.h" +#endif + #import #if TARGET_OS_OSX diff --git a/framework/SPM Umbrella Header/CorePlot_Private.h b/framework/SPM Umbrella Header/CorePlot_Private.h deleted file mode 100644 index f636ae559..000000000 --- a/framework/SPM Umbrella Header/CorePlot_Private.h +++ /dev/null @@ -1,20 +0,0 @@ -#import - -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST - -#import -#import - -#else - -#import - -#endif - -#import "CPTAxisLabelGroup.h" -#import "CPTGridLineGroup.h" -#import "CPTGridLines.h" -#import "CPTPlotGroup.h" -#import "NSCoderExtensions.h" -#import "NSDecimalNumberExtensions.h" -#import "NSNumberExtensions.h" diff --git a/framework/SPM Umbrella Header/_CorePlot_Private.h b/framework/SPM Umbrella Header/_CorePlot_Private.h new file mode 100644 index 000000000..022f4cfda --- /dev/null +++ b/framework/SPM Umbrella Header/_CorePlot_Private.h @@ -0,0 +1,21 @@ +#import + +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST + +#import +#import + +#else + +#import + +#endif + +#import "_CPTAxisLabelGroup.h" +#import "_CPTGridLineGroup.h" +#import "_CPTGridLines.h" +#import "_CPTPlotGroup.h" + +#import "_NSCoderExtensions.h" +#import "_NSDecimalNumberExtensions.h" +#import "_NSNumberExtensions.h" diff --git a/framework/Source/CPTAnimationOperation.h b/framework/Source/CPTAnimationOperation.h index b179bf210..92adc7ca9 100644 --- a/framework/Source/CPTAnimationOperation.h +++ b/framework/Source/CPTAnimationOperation.h @@ -1,5 +1,10 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTAnimation.h" #import "CPTDefinitions.h" +#endif @class CPTAnimationPeriod; diff --git a/framework/Source/CPTAnimationPeriod.h b/framework/Source/CPTAnimationPeriod.h index cfd21ac63..f93af5e18 100644 --- a/framework/Source/CPTAnimationPeriod.h +++ b/framework/Source/CPTAnimationPeriod.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTAnimation.h" +#endif @class CPTAnimationOperation; @class CPTPlotRange; diff --git a/framework/Source/CPTAnimationPeriod.m b/framework/Source/CPTAnimationPeriod.m index 6dcb72350..c2769dc97 100644 --- a/framework/Source/CPTAnimationPeriod.m +++ b/framework/Source/CPTAnimationPeriod.m @@ -7,9 +7,9 @@ #import "_CPTAnimationNSDecimalPeriod.h" #import "_CPTAnimationNSNumberPeriod.h" #import "_CPTAnimationPlotRangePeriod.h" +#import "_NSNumberExtensions.h" #import "CPTAnimationOperation.h" #import "CPTPlotRange.h" -#import "NSNumberExtensions.h" /// @cond @interface CPTAnimationPeriod() diff --git a/framework/Source/CPTAnnotation.h b/framework/Source/CPTAnnotation.h index cda5d79bc..6922b85a0 100644 --- a/framework/Source/CPTAnnotation.h +++ b/framework/Source/CPTAnnotation.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTDefinitions.h" +#endif /// @file diff --git a/framework/Source/CPTAnnotation.m b/framework/Source/CPTAnnotation.m index 18483ec57..3a281f484 100644 --- a/framework/Source/CPTAnnotation.m +++ b/framework/Source/CPTAnnotation.m @@ -1,7 +1,7 @@ #import "CPTAnnotation.h" +#import "_NSCoderExtensions.h" #import "CPTAnnotationHostLayer.h" -#import "NSCoderExtensions.h" /** @brief An annotation positions a content layer relative to some anchor point. * diff --git a/framework/Source/CPTAnnotationHostLayer.h b/framework/Source/CPTAnnotationHostLayer.h index a8217fa32..df37c3c0d 100644 --- a/framework/Source/CPTAnnotationHostLayer.h +++ b/framework/Source/CPTAnnotationHostLayer.h @@ -1,5 +1,10 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTAnnotation.h" #import "CPTLayer.h" +#endif @interface CPTAnnotationHostLayer : CPTLayer diff --git a/framework/Source/CPTAxis.h b/framework/Source/CPTAxis.h index 7c60d2f2e..a477d6fd0 100644 --- a/framework/Source/CPTAxis.h +++ b/framework/Source/CPTAxis.h @@ -1,3 +1,12 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#import +#import +#import +#import +#import +#import +#else #import "CPTAxisLabel.h" #import "CPTDefinitions.h" #import "CPTFill.h" @@ -5,6 +14,7 @@ #import "CPTLimitBand.h" #import "CPTPlotRange.h" #import "CPTTextStyle.h" +#endif /// @file diff --git a/framework/Source/CPTAxis.m b/framework/Source/CPTAxis.m index 8fa1eaac2..051c6d023 100644 --- a/framework/Source/CPTAxis.m +++ b/framework/Source/CPTAxis.m @@ -1,13 +1,14 @@ #import "CPTAxis.h" -#import "CPTAxisLabelGroup.h" +#import "_CPTAxisLabelGroup.h" +#import "_CPTGridLineGroup.h" +#import "_CPTGridLines.h" +#import "_NSCoderExtensions.h" #import "CPTAxisSet.h" #import "CPTAxisTitle.h" #import "CPTColor.h" #import "CPTExceptions.h" #import "CPTGradient.h" -#import "CPTGridLineGroup.h" -#import "CPTGridLines.h" #import "CPTImage.h" #import "CPTLineCap.h" #import "CPTLineStyle.h" @@ -17,7 +18,6 @@ #import "CPTShadow.h" #import "CPTTextLayer.h" #import "CPTUtilities.h" -#import "NSCoderExtensions.h" /** @defgroup axisAnimation Axes * @brief Axis properties that can be animated using Core Animation. diff --git a/framework/Source/CPTAxisLabel.h b/framework/Source/CPTAxisLabel.h index b78d2ebd9..7b5246a50 100644 --- a/framework/Source/CPTAxisLabel.h +++ b/framework/Source/CPTAxisLabel.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTDefinitions.h" +#endif /// @file diff --git a/framework/Source/CPTAxisLabel.m b/framework/Source/CPTAxisLabel.m index 6deba7a21..dd73af1df 100644 --- a/framework/Source/CPTAxisLabel.m +++ b/framework/Source/CPTAxisLabel.m @@ -1,10 +1,10 @@ #import "CPTAxisLabel.h" +#import "_NSCoderExtensions.h" #import "CPTLayer.h" #import "CPTMutableTextStyle.h" #import "CPTTextLayer.h" #import "CPTUtilities.h" -#import "NSCoderExtensions.h" #import /** @brief An axis label. diff --git a/framework/Source/CPTAxisSet.h b/framework/Source/CPTAxisSet.h index 93bf35cda..504c5835d 100644 --- a/framework/Source/CPTAxisSet.h +++ b/framework/Source/CPTAxisSet.h @@ -1,5 +1,10 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTAxis.h" #import "CPTLayer.h" +#endif @class CPTLineStyle; diff --git a/framework/Source/CPTAxisTitle.h b/framework/Source/CPTAxisTitle.h index e11c3befc..d51729ddd 100644 --- a/framework/Source/CPTAxisTitle.h +++ b/framework/Source/CPTAxisTitle.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTAxisLabel.h" +#endif @interface CPTAxisTitle : CPTAxisLabel diff --git a/framework/Source/CPTBarPlot.h b/framework/Source/CPTBarPlot.h index 9e6c6285e..86e7eae06 100644 --- a/framework/Source/CPTBarPlot.h +++ b/framework/Source/CPTBarPlot.h @@ -1,7 +1,14 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#import +#import +#import +#else #import "CPTDefinitions.h" #import "CPTFill.h" #import "CPTLineStyle.h" #import "CPTPlot.h" +#endif /// @file diff --git a/framework/Source/CPTBarPlot.m b/framework/Source/CPTBarPlot.m index d6170a171..6e42f2be0 100644 --- a/framework/Source/CPTBarPlot.m +++ b/framework/Source/CPTBarPlot.m @@ -1,5 +1,6 @@ #import "CPTBarPlot.h" +#import "_NSCoderExtensions.h" #import "CPTColor.h" #import "CPTExceptions.h" #import "CPTGradient.h" @@ -12,7 +13,6 @@ #import "CPTPlotSpaceAnnotation.h" #import "CPTUtilities.h" #import "CPTXYPlotSpace.h" -#import "NSCoderExtensions.h" #import /** @defgroup plotAnimationBarPlot Bar Plot diff --git a/framework/Source/CPTBorderedLayer.h b/framework/Source/CPTBorderedLayer.h index 617d7bd79..2311c2215 100644 --- a/framework/Source/CPTBorderedLayer.h +++ b/framework/Source/CPTBorderedLayer.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTAnnotationHostLayer.h" +#endif @class CPTLineStyle; @class CPTFill; diff --git a/framework/Source/CPTColor.h b/framework/Source/CPTColor.h index c0601ebdb..b04645ae5 100644 --- a/framework/Source/CPTColor.h +++ b/framework/Source/CPTColor.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTPlatformSpecificDefines.h" +#endif @interface CPTColor : NSObject diff --git a/framework/Source/CPTColor.m b/framework/Source/CPTColor.m index 4a04499c9..a1d6c6eb5 100644 --- a/framework/Source/CPTColor.m +++ b/framework/Source/CPTColor.m @@ -1,9 +1,9 @@ #import "CPTColor.h" +#import "_NSCoderExtensions.h" #import "CPTColorSpace.h" #import "CPTDefinitions.h" #import "CPTPlatformSpecificCategories.h" -#import "NSCoderExtensions.h" /// @cond diff --git a/framework/Source/CPTColorSpace.m b/framework/Source/CPTColorSpace.m index 9c87b6ed4..bf263a38a 100644 --- a/framework/Source/CPTColorSpace.m +++ b/framework/Source/CPTColorSpace.m @@ -1,6 +1,6 @@ #import "CPTColorSpace.h" -#import "NSCoderExtensions.h" +#import "_NSCoderExtensions.h" /** @brief An immutable color space. * diff --git a/framework/Source/CPTConstraints.m b/framework/Source/CPTConstraints.m index 292b1e6b9..5fcfe65bd 100644 --- a/framework/Source/CPTConstraints.m +++ b/framework/Source/CPTConstraints.m @@ -2,8 +2,8 @@ #import "_CPTConstraintsFixed.h" #import "_CPTConstraintsRelative.h" +#import "_NSCoderExtensions.h" #import "CPTDefinitions.h" -#import "NSCoderExtensions.h" /** @brief Implements a one-dimensional constrained position within a given numeric range. * diff --git a/framework/Source/CPTDefinitions.h b/framework/Source/CPTDefinitions.h index 2eedf7431..9c7935caa 100644 --- a/framework/Source/CPTDefinitions.h +++ b/framework/Source/CPTDefinitions.h @@ -1,7 +1,7 @@ #import #import -#if __has_include() +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST #import #else #import diff --git a/framework/Source/CPTExceptions.h b/framework/Source/CPTExceptions.h index 67eed530c..952a2bbd8 100644 --- a/framework/Source/CPTExceptions.h +++ b/framework/Source/CPTExceptions.h @@ -1,6 +1,10 @@ /// @file +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTDefinitions.h" +#endif /** * @brief Custom exception type. diff --git a/framework/Source/CPTFunctionDataSource.h b/framework/Source/CPTFunctionDataSource.h index 251919c40..49a3d2e42 100644 --- a/framework/Source/CPTFunctionDataSource.h +++ b/framework/Source/CPTFunctionDataSource.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTPlot.h" +#endif @class CPTPlotRange; diff --git a/framework/Source/CPTGradient.h b/framework/Source/CPTGradient.h index 28db5148e..1b51fbb0d 100644 --- a/framework/Source/CPTGradient.h +++ b/framework/Source/CPTGradient.h @@ -3,7 +3,11 @@ /// @file +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTDefinitions.h" +#endif /** * @brief A structure representing one node in a linked list of RGBA colors. diff --git a/framework/Source/CPTGradient.m b/framework/Source/CPTGradient.m index 707955965..dbb1ef25a 100644 --- a/framework/Source/CPTGradient.m +++ b/framework/Source/CPTGradient.m @@ -1,10 +1,10 @@ #import "CPTGradient.h" +#import "_NSCoderExtensions.h" #import "CPTColor.h" #import "CPTColorSpace.h" #import "CPTPlatformSpecificFunctions.h" #import "CPTUtilities.h" -#import "NSCoderExtensions.h" #import /// @cond diff --git a/framework/Source/CPTGraph.h b/framework/Source/CPTGraph.h index 7c4c397ac..8d0531a66 100644 --- a/framework/Source/CPTGraph.h +++ b/framework/Source/CPTGraph.h @@ -1,8 +1,15 @@ // Abstract class +#ifdef CPT_IS_FRAMEWORK +#import +#import +#import +#import +#else #import "CPTBorderedLayer.h" #import "CPTDefinitions.h" #import "CPTPlot.h" #import "CPTPlotSpace.h" +#endif /// @file diff --git a/framework/Source/CPTGraph.m b/framework/Source/CPTGraph.m index 356d81563..80c98508e 100644 --- a/framework/Source/CPTGraph.m +++ b/framework/Source/CPTGraph.m @@ -1,5 +1,7 @@ #import "CPTGraph.h" +#import "_CPTPlotGroup.h" +#import "_NSCoderExtensions.h" #import "CPTAxis.h" #import "CPTAxisSet.h" #import "CPTExceptions.h" @@ -9,10 +11,8 @@ #import "CPTMutableTextStyle.h" #import "CPTPlotArea.h" #import "CPTPlotAreaFrame.h" -#import "CPTPlotGroup.h" #import "CPTTextLayer.h" #import "CPTTheme.h" -#import "NSCoderExtensions.h" /** @defgroup graphAnimation Graphs * @brief Graph properties that can be animated using Core Animation. diff --git a/framework/Source/CPTImage.h b/framework/Source/CPTImage.h index 2708be9a5..23629422e 100644 --- a/framework/Source/CPTImage.h +++ b/framework/Source/CPTImage.h @@ -1,5 +1,10 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTDefinitions.h" #import "CPTPlatformSpecificDefines.h" +#endif @interface CPTImage : NSObject diff --git a/framework/Source/CPTImage.m b/framework/Source/CPTImage.m index 2417249a5..76b6d8841 100644 --- a/framework/Source/CPTImage.m +++ b/framework/Source/CPTImage.m @@ -1,8 +1,8 @@ #import "CPTImage.h" +#import "_NSCoderExtensions.h" #import "CPTPlatformSpecificDefines.h" #import "CPTUtilities.h" -#import "NSCoderExtensions.h" /// @cond diff --git a/framework/Source/CPTLayer.h b/framework/Source/CPTLayer.h index 5cb3472aa..049a99ea7 100644 --- a/framework/Source/CPTLayer.h +++ b/framework/Source/CPTLayer.h @@ -1,5 +1,11 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTDefinitions.h" #import "CPTResponder.h" +#endif + #import /// @file diff --git a/framework/Source/CPTLayer.m b/framework/Source/CPTLayer.m index 05d172a0d..791c61ef6 100644 --- a/framework/Source/CPTLayer.m +++ b/framework/Source/CPTLayer.m @@ -1,5 +1,6 @@ #import "CPTLayer.h" +#import "_NSCoderExtensions.h" #import "CPTGraph.h" #import "CPTGraphHostingView.h" #import "CPTPathExtensions.h" @@ -7,7 +8,6 @@ #import "CPTPlatformSpecificFunctions.h" #import "CPTShadow.h" #import "CPTUtilities.h" -#import "NSCoderExtensions.h" #import #import diff --git a/framework/Source/CPTLayerAnnotation.h b/framework/Source/CPTLayerAnnotation.h index 23e1afeea..d9080d520 100644 --- a/framework/Source/CPTLayerAnnotation.h +++ b/framework/Source/CPTLayerAnnotation.h @@ -1,5 +1,10 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTAnnotation.h" #import "CPTDefinitions.h" +#endif @class CPTConstraints; diff --git a/framework/Source/CPTLayerTests.m b/framework/Source/CPTLayerTests.m index d94be1dc5..c40239fbe 100644 --- a/framework/Source/CPTLayerTests.m +++ b/framework/Source/CPTLayerTests.m @@ -1,8 +1,8 @@ #import "CPTLayerTests.h" +#import "_NSNumberExtensions.h" #import "CPTLayer.h" #import "CPTUtilities.h" -#import "NSNumberExtensions.h" static const CGFloat precision = CPTFloat(1.0e-6); diff --git a/framework/Source/CPTLegend.h b/framework/Source/CPTLegend.h index cb9978bc8..2059b1730 100644 --- a/framework/Source/CPTLegend.h +++ b/framework/Source/CPTLegend.h @@ -1,5 +1,10 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTBorderedLayer.h" #import "CPTPlot.h" +#endif /// @file diff --git a/framework/Source/CPTLegend.m b/framework/Source/CPTLegend.m index bcc00ef21..d82dba206 100644 --- a/framework/Source/CPTLegend.m +++ b/framework/Source/CPTLegend.m @@ -1,5 +1,7 @@ #import "CPTLegend.h" +#import "_NSCoderExtensions.h" +#import "_NSNumberExtensions.h" #import "CPTExceptions.h" #import "CPTFill.h" #import "CPTGraph.h" @@ -8,8 +10,6 @@ #import "CPTPathExtensions.h" #import "CPTTextStyle.h" #import "CPTUtilities.h" -#import "NSCoderExtensions.h" -#import "NSNumberExtensions.h" #import /** @defgroup legendAnimation Legends diff --git a/framework/Source/CPTLegendEntry.h b/framework/Source/CPTLegendEntry.h index ce7af2388..e7c484d73 100644 --- a/framework/Source/CPTLegendEntry.h +++ b/framework/Source/CPTLegendEntry.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTDefinitions.h" +#endif /// @file diff --git a/framework/Source/CPTLineCap.m b/framework/Source/CPTLineCap.m index d646ab474..4415fd813 100644 --- a/framework/Source/CPTLineCap.m +++ b/framework/Source/CPTLineCap.m @@ -1,10 +1,10 @@ #import "CPTLineCap.h" +#import "_NSCoderExtensions.h" #import "CPTDefinitions.h" #import "CPTFill.h" #import "CPTLineStyle.h" #import "CPTPlatformSpecificFunctions.h" -#import "NSCoderExtensions.h" #import /// @cond diff --git a/framework/Source/CPTLineStyle.h b/framework/Source/CPTLineStyle.h index 2b5c687b7..30ba807b4 100644 --- a/framework/Source/CPTLineStyle.h +++ b/framework/Source/CPTLineStyle.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTDefinitions.h" +#endif /// @file diff --git a/framework/Source/CPTLineStyle.m b/framework/Source/CPTLineStyle.m index 68cb20db1..f29ebb019 100644 --- a/framework/Source/CPTLineStyle.m +++ b/framework/Source/CPTLineStyle.m @@ -1,13 +1,13 @@ #import "CPTLineStyle.h" +#import "_NSCoderExtensions.h" +#import "_NSNumberExtensions.h" #import "CPTColor.h" #import "CPTFill.h" #import "CPTGradient.h" #import "CPTMutableLineStyle.h" #import "CPTPlatformSpecificFunctions.h" #import "CPTUtilities.h" -#import "NSCoderExtensions.h" -#import "NSNumberExtensions.h" /// @cond @interface CPTLineStyle() diff --git a/framework/Source/CPTMutableLineStyle.h b/framework/Source/CPTMutableLineStyle.h index 0d69bb453..e68cb8fb4 100644 --- a/framework/Source/CPTMutableLineStyle.h +++ b/framework/Source/CPTMutableLineStyle.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTLineStyle.h" +#endif @class CPTColor; diff --git a/framework/Source/CPTMutableNumericData+TypeConversion.h b/framework/Source/CPTMutableNumericData+TypeConversion.h index 92eca65cb..697cd1ff2 100644 --- a/framework/Source/CPTMutableNumericData+TypeConversion.h +++ b/framework/Source/CPTMutableNumericData+TypeConversion.h @@ -1,5 +1,10 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTMutableNumericData.h" #import "CPTNumericDataType.h" +#endif /** @category CPTMutableNumericData(TypeConversion) * @brief Type conversion methods for CPTMutableNumericData. diff --git a/framework/Source/CPTMutableNumericData.h b/framework/Source/CPTMutableNumericData.h index 32d299487..fe51efd40 100644 --- a/framework/Source/CPTMutableNumericData.h +++ b/framework/Source/CPTMutableNumericData.h @@ -1,5 +1,10 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTNumericData.h" #import "CPTNumericDataType.h" +#endif @interface CPTMutableNumericData : CPTNumericData diff --git a/framework/Source/CPTMutablePlotRange.h b/framework/Source/CPTMutablePlotRange.h index a4d602679..cda93223d 100644 --- a/framework/Source/CPTMutablePlotRange.h +++ b/framework/Source/CPTMutablePlotRange.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTPlotRange.h" +#endif @interface CPTMutablePlotRange : CPTPlotRange diff --git a/framework/Source/CPTMutableShadow.h b/framework/Source/CPTMutableShadow.h index 3392da191..d03a13c64 100644 --- a/framework/Source/CPTMutableShadow.h +++ b/framework/Source/CPTMutableShadow.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTShadow.h" +#endif @class CPTColor; diff --git a/framework/Source/CPTMutableTextStyle.h b/framework/Source/CPTMutableTextStyle.h index e63ec361f..98b700370 100644 --- a/framework/Source/CPTMutableTextStyle.h +++ b/framework/Source/CPTMutableTextStyle.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTTextStyle.h" +#endif @class CPTColor; diff --git a/framework/Source/CPTNumericData+TypeConversion.h b/framework/Source/CPTNumericData+TypeConversion.h index 7bd08216b..38088b953 100644 --- a/framework/Source/CPTNumericData+TypeConversion.h +++ b/framework/Source/CPTNumericData+TypeConversion.h @@ -1,5 +1,10 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTNumericData.h" #import "CPTNumericDataType.h" +#endif /** @category CPTNumericData(TypeConversion) * @brief Type conversion methods for CPTNumericData. diff --git a/framework/Source/CPTNumericData.h b/framework/Source/CPTNumericData.h index 0215482fc..ffe62ec0d 100644 --- a/framework/Source/CPTNumericData.h +++ b/framework/Source/CPTNumericData.h @@ -1,5 +1,10 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTDefinitions.h" #import "CPTNumericDataType.h" +#endif @interface CPTNumericData : NSObject diff --git a/framework/Source/CPTPieChart.h b/framework/Source/CPTPieChart.h index 3c42e8818..29fc9dc71 100644 --- a/framework/Source/CPTPieChart.h +++ b/framework/Source/CPTPieChart.h @@ -1,6 +1,12 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#import +#import +#else #import "CPTDefinitions.h" #import "CPTFill.h" #import "CPTPlot.h" +#endif /// @file diff --git a/framework/Source/CPTPieChart.m b/framework/Source/CPTPieChart.m index 9860c7014..8deee742c 100644 --- a/framework/Source/CPTPieChart.m +++ b/framework/Source/CPTPieChart.m @@ -1,5 +1,7 @@ #import "CPTPieChart.h" +#import "_NSCoderExtensions.h" +#import "_NSNumberExtensions.h" #import "CPTColor.h" #import "CPTLegend.h" #import "CPTLineStyle.h" @@ -9,8 +11,6 @@ #import "CPTPlotSpace.h" #import "CPTPlotSpaceAnnotation.h" #import "CPTUtilities.h" -#import "NSCoderExtensions.h" -#import "NSNumberExtensions.h" #import /** @defgroup plotAnimationPieChart Pie Chart diff --git a/framework/Source/CPTPlot.h b/framework/Source/CPTPlot.h index 010bccec8..4ca56cb6c 100644 --- a/framework/Source/CPTPlot.h +++ b/framework/Source/CPTPlot.h @@ -1,6 +1,12 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#import +#import +#else #import "CPTAnnotationHostLayer.h" #import "CPTDefinitions.h" #import "CPTNumericDataType.h" +#endif /// @file diff --git a/framework/Source/CPTPlot.m b/framework/Source/CPTPlot.m index 0acd3719b..6dfbf72ba 100644 --- a/framework/Source/CPTPlot.m +++ b/framework/Source/CPTPlot.m @@ -1,5 +1,6 @@ #import "CPTPlot.h" +#import "_NSCoderExtensions.h" #import "CPTExceptions.h" #import "CPTFill.h" #import "CPTGraph.h" @@ -15,7 +16,6 @@ #import "CPTShadow.h" #import "CPTTextLayer.h" #import "CPTUtilities.h" -#import "NSCoderExtensions.h" #import /** @defgroup plotAnimation Plots diff --git a/framework/Source/CPTPlotArea.h b/framework/Source/CPTPlotArea.h index a9fed95b1..f95957d3e 100644 --- a/framework/Source/CPTPlotArea.h +++ b/framework/Source/CPTPlotArea.h @@ -1,6 +1,12 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#import +#import +#else #import "CPTAnnotationHostLayer.h" #import "CPTGraph.h" #import "CPTLayer.h" +#endif @class CPTAxis; @class CPTAxisLabelGroup; diff --git a/framework/Source/CPTPlotArea.m b/framework/Source/CPTPlotArea.m index 748cf2c41..7a5ced805 100644 --- a/framework/Source/CPTPlotArea.m +++ b/framework/Source/CPTPlotArea.m @@ -1,12 +1,12 @@ #import "CPTPlotArea.h" +#import "_CPTAxisLabelGroup.h" +#import "_CPTGridLineGroup.h" +#import "_CPTPlotGroup.h" #import "CPTAxis.h" -#import "CPTAxisLabelGroup.h" #import "CPTAxisSet.h" #import "CPTFill.h" -#import "CPTGridLineGroup.h" #import "CPTLineStyle.h" -#import "CPTPlotGroup.h" #import "CPTUtilities.h" static const size_t kCPTNumberOfLayers = 6; // number of primary layers to arrange diff --git a/framework/Source/CPTPlotAreaFrame.h b/framework/Source/CPTPlotAreaFrame.h index 89067ce11..1a732dbbb 100644 --- a/framework/Source/CPTPlotAreaFrame.h +++ b/framework/Source/CPTPlotAreaFrame.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTBorderedLayer.h" +#endif @class CPTAxisSet; @class CPTPlotGroup; diff --git a/framework/Source/CPTPlotAreaFrame.m b/framework/Source/CPTPlotAreaFrame.m index c238b30ef..065a3ff74 100644 --- a/framework/Source/CPTPlotAreaFrame.m +++ b/framework/Source/CPTPlotAreaFrame.m @@ -1,8 +1,8 @@ #import "CPTPlotAreaFrame.h" +#import "_CPTPlotGroup.h" #import "CPTAxisSet.h" #import "CPTPlotArea.h" -#import "CPTPlotGroup.h" /// @cond @interface CPTPlotAreaFrame() diff --git a/framework/Source/CPTPlotRange.h b/framework/Source/CPTPlotRange.h index 9a3460e96..5728f57e7 100644 --- a/framework/Source/CPTPlotRange.h +++ b/framework/Source/CPTPlotRange.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTDefinitions.h" +#endif /// @file diff --git a/framework/Source/CPTPlotRange.m b/framework/Source/CPTPlotRange.m index c7b05cbf0..0dd3ab9f5 100644 --- a/framework/Source/CPTPlotRange.m +++ b/framework/Source/CPTPlotRange.m @@ -1,8 +1,8 @@ #import "CPTPlotRange.h" +#import "_NSCoderExtensions.h" #import "CPTMutablePlotRange.h" #import "CPTUtilities.h" -#import "NSCoderExtensions.h" /// @cond @interface CPTPlotRange() diff --git a/framework/Source/CPTPlotSpace.h b/framework/Source/CPTPlotSpace.h index 2d8f904f1..dbfe912da 100644 --- a/framework/Source/CPTPlotSpace.h +++ b/framework/Source/CPTPlotSpace.h @@ -1,6 +1,12 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#import +#import +#else #import "CPTDefinitions.h" #import "CPTPlot.h" #import "CPTResponder.h" +#endif @class CPTLayer; @class CPTPlotRange; diff --git a/framework/Source/CPTPlotSpaceAnnotation.h b/framework/Source/CPTPlotSpaceAnnotation.h index e81554e07..ddf2eada9 100644 --- a/framework/Source/CPTPlotSpaceAnnotation.h +++ b/framework/Source/CPTPlotSpaceAnnotation.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTAnnotation.h" +#endif @class CPTPlotSpace; diff --git a/framework/Source/CPTPlotSymbol.m b/framework/Source/CPTPlotSymbol.m index 7dfeed8d4..9cbb5fe79 100644 --- a/framework/Source/CPTPlotSymbol.m +++ b/framework/Source/CPTPlotSymbol.m @@ -1,11 +1,11 @@ #import "CPTPlotSymbol.h" +#import "_NSCoderExtensions.h" #import "CPTDefinitions.h" #import "CPTFill.h" #import "CPTLineStyle.h" #import "CPTPlatformSpecificFunctions.h" #import "CPTShadow.h" -#import "NSCoderExtensions.h" #import /// @cond diff --git a/framework/Source/CPTRangePlot.h b/framework/Source/CPTRangePlot.h index d1b74c904..8124b64ff 100644 --- a/framework/Source/CPTRangePlot.h +++ b/framework/Source/CPTRangePlot.h @@ -1,6 +1,12 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#import +#import +#else #import "CPTDefinitions.h" #import "CPTLineStyle.h" #import "CPTPlot.h" +#endif @class CPTFill; @class CPTRangePlot; diff --git a/framework/Source/CPTRangePlot.m b/framework/Source/CPTRangePlot.m index bfe9bfc65..d97948eaa 100644 --- a/framework/Source/CPTRangePlot.m +++ b/framework/Source/CPTRangePlot.m @@ -1,5 +1,7 @@ #import "CPTRangePlot.h" +#import "_NSCoderExtensions.h" +#import "_NSNumberExtensions.h" #import "CPTExceptions.h" #import "CPTFill.h" #import "CPTLegend.h" @@ -12,8 +14,6 @@ #import "CPTPlotSpaceAnnotation.h" #import "CPTUtilities.h" #import "CPTXYPlotSpace.h" -#import "NSCoderExtensions.h" -#import "NSNumberExtensions.h" #import /** @defgroup plotAnimationRangePlot Range Plot diff --git a/framework/Source/CPTResponder.h b/framework/Source/CPTResponder.h index a76327587..01a25b057 100644 --- a/framework/Source/CPTResponder.h +++ b/framework/Source/CPTResponder.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTPlatformSpecificDefines.h" +#endif /** * @brief The basis of all event processing in Core Plot. diff --git a/framework/Source/CPTScatterPlot.h b/framework/Source/CPTScatterPlot.h index 91f1e3fbd..0b00bbe88 100644 --- a/framework/Source/CPTScatterPlot.h +++ b/framework/Source/CPTScatterPlot.h @@ -1,7 +1,14 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#import +#import +#import +#else #import "CPTDefinitions.h" #import "CPTLimitBand.h" #import "CPTPlot.h" #import "CPTPlotSymbol.h" +#endif /// @file diff --git a/framework/Source/CPTScatterPlot.m b/framework/Source/CPTScatterPlot.m index b03b01747..1555cded3 100644 --- a/framework/Source/CPTScatterPlot.m +++ b/framework/Source/CPTScatterPlot.m @@ -1,5 +1,6 @@ #import "CPTScatterPlot.h" +#import "_NSCoderExtensions.h" #import "CPTExceptions.h" #import "CPTFill.h" #import "CPTLegend.h" @@ -12,7 +13,6 @@ #import "CPTPlotSpaceAnnotation.h" #import "CPTUtilities.h" #import "CPTXYPlotSpace.h" -#import "NSCoderExtensions.h" #import /** @defgroup plotAnimationScatterPlot Scatter Plot diff --git a/framework/Source/CPTShadow.m b/framework/Source/CPTShadow.m index 65e247089..c40b93596 100644 --- a/framework/Source/CPTShadow.m +++ b/framework/Source/CPTShadow.m @@ -1,9 +1,9 @@ #import "CPTShadow.h" +#import "_NSCoderExtensions.h" #import "CPTColor.h" #import "CPTDefinitions.h" #import "CPTMutableShadow.h" -#import "NSCoderExtensions.h" /// @cond @interface CPTShadow() diff --git a/framework/Source/CPTTextLayer.h b/framework/Source/CPTTextLayer.h index 9d9c85956..07f6dbbb2 100644 --- a/framework/Source/CPTTextLayer.h +++ b/framework/Source/CPTTextLayer.h @@ -1,5 +1,10 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTBorderedLayer.h" #import "CPTTextStyle.h" +#endif /// @file diff --git a/framework/Source/CPTTextStyle.h b/framework/Source/CPTTextStyle.h index df94cd374..1037f73f7 100644 --- a/framework/Source/CPTTextStyle.h +++ b/framework/Source/CPTTextStyle.h @@ -1,6 +1,12 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#import +#import +#else #import "CPTDefinitions.h" #import "CPTPlatformSpecificDefines.h" #import "CPTTextStylePlatformSpecific.h" +#endif @class CPTColor; @class CPTTextStyle; diff --git a/framework/Source/CPTTextStyle.m b/framework/Source/CPTTextStyle.m index f80d6e3cc..36ee4dcb2 100644 --- a/framework/Source/CPTTextStyle.m +++ b/framework/Source/CPTTextStyle.m @@ -1,8 +1,8 @@ #import "CPTTextStyle.h" +#import "_NSCoderExtensions.h" #import "CPTColor.h" #import "CPTMutableTextStyle.h" -#import "NSCoderExtensions.h" /// @cond @interface CPTTextStyle() diff --git a/framework/Source/CPTTheme.h b/framework/Source/CPTTheme.h index 26f59de78..a43f4af90 100644 --- a/framework/Source/CPTTheme.h +++ b/framework/Source/CPTTheme.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTDefinitions.h" +#endif /** * @brief Theme name type. diff --git a/framework/Source/CPTTradingRangePlot.h b/framework/Source/CPTTradingRangePlot.h index 0e46c9ec9..ecd5b20ae 100644 --- a/framework/Source/CPTTradingRangePlot.h +++ b/framework/Source/CPTTradingRangePlot.h @@ -1,7 +1,14 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#import +#import +#import +#else #import "CPTDefinitions.h" #import "CPTFill.h" #import "CPTLineStyle.h" #import "CPTPlot.h" +#endif /// @file diff --git a/framework/Source/CPTTradingRangePlot.m b/framework/Source/CPTTradingRangePlot.m index a26a0406d..5764f58af 100644 --- a/framework/Source/CPTTradingRangePlot.m +++ b/framework/Source/CPTTradingRangePlot.m @@ -1,5 +1,7 @@ #import "CPTTradingRangePlot.h" +#import "_NSCoderExtensions.h" +#import "_NSNumberExtensions.h" #import "CPTColor.h" #import "CPTExceptions.h" #import "CPTLegend.h" @@ -11,8 +13,6 @@ #import "CPTPlotSpaceAnnotation.h" #import "CPTUtilities.h" #import "CPTXYPlotSpace.h" -#import "NSCoderExtensions.h" -#import "NSNumberExtensions.h" #import /** @defgroup plotAnimationTradingRangePlot Trading Range Plot diff --git a/framework/Source/CPTUtilities.h b/framework/Source/CPTUtilities.h index 60d8f5f68..f0e7a51aa 100644 --- a/framework/Source/CPTUtilities.h +++ b/framework/Source/CPTUtilities.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTDefinitions.h" +#endif /// @file diff --git a/framework/Source/CPTXYAxis.h b/framework/Source/CPTXYAxis.h index 36cf150d2..a47308513 100644 --- a/framework/Source/CPTXYAxis.h +++ b/framework/Source/CPTXYAxis.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTAxis.h" +#endif @class CPTConstraints; diff --git a/framework/Source/CPTXYAxis.m b/framework/Source/CPTXYAxis.m index a4fe847b3..eb0d0ba3f 100644 --- a/framework/Source/CPTXYAxis.m +++ b/framework/Source/CPTXYAxis.m @@ -1,5 +1,6 @@ #import "CPTXYAxis.h" +#import "_NSCoderExtensions.h" #import "CPTConstraints.h" #import "CPTFill.h" #import "CPTLimitBand.h" @@ -10,7 +11,6 @@ #import "CPTPlotSpace.h" #import "CPTUtilities.h" #import "CPTXYPlotSpace.h" -#import "NSCoderExtensions.h" #import /// @cond diff --git a/framework/Source/CPTXYAxisSet.h b/framework/Source/CPTXYAxisSet.h index ef7bc8d69..25d5d850b 100644 --- a/framework/Source/CPTXYAxisSet.h +++ b/framework/Source/CPTXYAxisSet.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTAxisSet.h" +#endif @class CPTXYAxis; diff --git a/framework/Source/CPTXYGraph.h b/framework/Source/CPTXYGraph.h index 90bca7639..7c4d278fe 100644 --- a/framework/Source/CPTXYGraph.h +++ b/framework/Source/CPTXYGraph.h @@ -1,5 +1,10 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTDefinitions.h" #import "CPTGraph.h" +#endif @interface CPTXYGraph : CPTGraph diff --git a/framework/Source/CPTXYPlotSpace.h b/framework/Source/CPTXYPlotSpace.h index ed084f42a..66ca20a8c 100644 --- a/framework/Source/CPTXYPlotSpace.h +++ b/framework/Source/CPTXYPlotSpace.h @@ -1,6 +1,14 @@ +#ifdef CPT_IS_FRAMEWORK +#import + +#import +#import +#else +#import "CPTPlotSpace.h" + #import "CPTAnimation.h" #import "CPTDefinitions.h" -#import "CPTPlotSpace.h" +#endif @class CPTPlotRange; diff --git a/framework/Source/CPTXYPlotSpace.m b/framework/Source/CPTXYPlotSpace.m index 01154e4ba..9b971490f 100644 --- a/framework/Source/CPTXYPlotSpace.m +++ b/framework/Source/CPTXYPlotSpace.m @@ -1,6 +1,7 @@ #import "CPTXYPlotSpace.h" #import "_CPTDebugQuickLook.h" +#import "_NSCoderExtensions.h" #import "CPTAnimation.h" #import "CPTAnimationOperation.h" #import "CPTAnimationPeriod.h" @@ -13,7 +14,6 @@ #import "CPTPlotArea.h" #import "CPTPlotAreaFrame.h" #import "CPTUtilities.h" -#import "NSCoderExtensions.h" #import /// @cond diff --git a/framework/Source/_CPTAnimationCGFloatPeriod.m b/framework/Source/_CPTAnimationCGFloatPeriod.m index 7ef51110f..f9961bb9a 100644 --- a/framework/Source/_CPTAnimationCGFloatPeriod.m +++ b/framework/Source/_CPTAnimationCGFloatPeriod.m @@ -1,6 +1,6 @@ #import "_CPTAnimationCGFloatPeriod.h" -#import "NSNumberExtensions.h" +#import "_NSNumberExtensions.h" /// @cond @interface _CPTAnimationCGFloatPeriod() diff --git a/framework/Source/CPTAxisLabelGroup.h b/framework/Source/_CPTAxisLabelGroup.h similarity index 50% rename from framework/Source/CPTAxisLabelGroup.h rename to framework/Source/_CPTAxisLabelGroup.h index e1e33b34b..b3a16154f 100644 --- a/framework/Source/CPTAxisLabelGroup.h +++ b/framework/Source/_CPTAxisLabelGroup.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTLayer.h" +#endif @interface CPTAxisLabelGroup : CPTLayer diff --git a/framework/Source/CPTAxisLabelGroup.m b/framework/Source/_CPTAxisLabelGroup.m similarity index 96% rename from framework/Source/CPTAxisLabelGroup.m rename to framework/Source/_CPTAxisLabelGroup.m index 6fd976d72..cef8ae05d 100644 --- a/framework/Source/CPTAxisLabelGroup.m +++ b/framework/Source/_CPTAxisLabelGroup.m @@ -1,4 +1,4 @@ -#import "CPTAxisLabelGroup.h" +#import "_CPTAxisLabelGroup.h" /** * @brief A container layer for the axis labels. diff --git a/framework/Source/_CPTConstraintsFixed.h b/framework/Source/_CPTConstraintsFixed.h index 6bf4b66c5..012d8d53c 100644 --- a/framework/Source/_CPTConstraintsFixed.h +++ b/framework/Source/_CPTConstraintsFixed.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTConstraints.h" +#endif @interface _CPTConstraintsFixed : CPTConstraints diff --git a/framework/Source/_CPTConstraintsFixed.m b/framework/Source/_CPTConstraintsFixed.m index 8f9c32a3c..05cda10a4 100644 --- a/framework/Source/_CPTConstraintsFixed.m +++ b/framework/Source/_CPTConstraintsFixed.m @@ -1,6 +1,6 @@ #import "_CPTConstraintsFixed.h" -#import "NSCoderExtensions.h" +#import "_NSCoderExtensions.h" /// @cond @interface _CPTConstraintsFixed() diff --git a/framework/Source/_CPTConstraintsRelative.h b/framework/Source/_CPTConstraintsRelative.h index bad6150cb..6a60158af 100644 --- a/framework/Source/_CPTConstraintsRelative.h +++ b/framework/Source/_CPTConstraintsRelative.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTConstraints.h" +#endif @interface _CPTConstraintsRelative : CPTConstraints diff --git a/framework/Source/_CPTConstraintsRelative.m b/framework/Source/_CPTConstraintsRelative.m index b902dbc99..403f796fe 100644 --- a/framework/Source/_CPTConstraintsRelative.m +++ b/framework/Source/_CPTConstraintsRelative.m @@ -1,6 +1,6 @@ #import "_CPTConstraintsRelative.h" -#import "NSCoderExtensions.h" +#import "_NSCoderExtensions.h" #import /// @cond diff --git a/framework/Source/_CPTDarkGradientTheme.h b/framework/Source/_CPTDarkGradientTheme.h index 54494ace7..44f49b40d 100644 --- a/framework/Source/_CPTDarkGradientTheme.h +++ b/framework/Source/_CPTDarkGradientTheme.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "_CPTXYTheme.h" +#endif @interface _CPTDarkGradientTheme : _CPTXYTheme diff --git a/framework/Source/_CPTFillColor.h b/framework/Source/_CPTFillColor.h index b04943ae2..648b6f4e0 100644 --- a/framework/Source/_CPTFillColor.h +++ b/framework/Source/_CPTFillColor.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTFill.h" +#endif @interface _CPTFillColor : CPTFill diff --git a/framework/Source/_CPTFillGradient.h b/framework/Source/_CPTFillGradient.h index 5344bf7fb..8872231d4 100644 --- a/framework/Source/_CPTFillGradient.h +++ b/framework/Source/_CPTFillGradient.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTFill.h" +#endif @class CPTGradient; diff --git a/framework/Source/_CPTFillImage.h b/framework/Source/_CPTFillImage.h index 49bbb205f..ec4b045fa 100644 --- a/framework/Source/_CPTFillImage.h +++ b/framework/Source/_CPTFillImage.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTFill.h" +#endif @class CPTImage; diff --git a/framework/Source/CPTGridLineGroup.h b/framework/Source/_CPTGridLineGroup.h similarity index 76% rename from framework/Source/CPTGridLineGroup.h rename to framework/Source/_CPTGridLineGroup.h index bca74c4cd..32efaa3e6 100644 --- a/framework/Source/CPTGridLineGroup.h +++ b/framework/Source/_CPTGridLineGroup.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTLayer.h" +#endif @class CPTPlotArea; diff --git a/framework/Source/CPTGridLineGroup.m b/framework/Source/_CPTGridLineGroup.m similarity index 99% rename from framework/Source/CPTGridLineGroup.m rename to framework/Source/_CPTGridLineGroup.m index 23ed2ce5f..a8351a438 100644 --- a/framework/Source/CPTGridLineGroup.m +++ b/framework/Source/_CPTGridLineGroup.m @@ -1,4 +1,4 @@ -#import "CPTGridLineGroup.h" +#import "_CPTGridLineGroup.h" #import "CPTAxis.h" #import "CPTAxisSet.h" diff --git a/framework/Source/CPTGridLines.h b/framework/Source/_CPTGridLines.h similarity index 75% rename from framework/Source/CPTGridLines.h rename to framework/Source/_CPTGridLines.h index f5ee267a7..0b389c2f6 100644 --- a/framework/Source/CPTGridLines.h +++ b/framework/Source/_CPTGridLines.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTLayer.h" +#endif @class CPTAxis; diff --git a/framework/Source/CPTGridLines.m b/framework/Source/_CPTGridLines.m similarity index 99% rename from framework/Source/CPTGridLines.m rename to framework/Source/_CPTGridLines.m index 07176a050..2b74d0a97 100644 --- a/framework/Source/CPTGridLines.m +++ b/framework/Source/_CPTGridLines.m @@ -1,4 +1,4 @@ -#import "CPTGridLines.h" +#import "_CPTGridLines.h" #import "CPTAxis.h" diff --git a/framework/Source/_CPTPlainBlackTheme.h b/framework/Source/_CPTPlainBlackTheme.h index 8e9287a5d..399a5ce55 100644 --- a/framework/Source/_CPTPlainBlackTheme.h +++ b/framework/Source/_CPTPlainBlackTheme.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "_CPTXYTheme.h" +#endif @interface _CPTPlainBlackTheme : _CPTXYTheme diff --git a/framework/Source/_CPTPlainWhiteTheme.h b/framework/Source/_CPTPlainWhiteTheme.h index f9248e8d4..a28b08bcf 100644 --- a/framework/Source/_CPTPlainWhiteTheme.h +++ b/framework/Source/_CPTPlainWhiteTheme.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "_CPTXYTheme.h" +#endif @interface _CPTPlainWhiteTheme : _CPTXYTheme diff --git a/framework/Source/CPTPlotGroup.h b/framework/Source/_CPTPlotGroup.h similarity index 83% rename from framework/Source/CPTPlotGroup.h rename to framework/Source/_CPTPlotGroup.h index 3332f3ce1..1c6e9bf78 100644 --- a/framework/Source/CPTPlotGroup.h +++ b/framework/Source/_CPTPlotGroup.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTLayer.h" +#endif @class CPTPlot; diff --git a/framework/Source/CPTPlotGroup.m b/framework/Source/_CPTPlotGroup.m similarity index 98% rename from framework/Source/CPTPlotGroup.m rename to framework/Source/_CPTPlotGroup.m index cc5f9c517..399472a4d 100644 --- a/framework/Source/CPTPlotGroup.m +++ b/framework/Source/_CPTPlotGroup.m @@ -1,4 +1,4 @@ -#import "CPTPlotGroup.h" +#import "_CPTPlotGroup.h" #import "CPTPlot.h" diff --git a/framework/Source/_CPTSlateTheme.h b/framework/Source/_CPTSlateTheme.h index 2d9416a03..cd45a21c7 100644 --- a/framework/Source/_CPTSlateTheme.h +++ b/framework/Source/_CPTSlateTheme.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "_CPTXYTheme.h" +#endif @interface _CPTSlateTheme : _CPTXYTheme diff --git a/framework/Source/_CPTStocksTheme.h b/framework/Source/_CPTStocksTheme.h index fe57426c1..6c2b4d7dd 100644 --- a/framework/Source/_CPTStocksTheme.h +++ b/framework/Source/_CPTStocksTheme.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "_CPTXYTheme.h" +#endif @interface _CPTStocksTheme : _CPTXYTheme diff --git a/framework/Source/_CPTXYTheme.h b/framework/Source/_CPTXYTheme.h index e395011a1..1290ef2d1 100644 --- a/framework/Source/_CPTXYTheme.h +++ b/framework/Source/_CPTXYTheme.h @@ -1,4 +1,8 @@ +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTTheme.h" +#endif @interface _CPTXYTheme : CPTTheme diff --git a/framework/Source/NSCoderExtensions.h b/framework/Source/_NSCoderExtensions.h similarity index 100% rename from framework/Source/NSCoderExtensions.h rename to framework/Source/_NSCoderExtensions.h diff --git a/framework/Source/NSCoderExtensions.m b/framework/Source/_NSCoderExtensions.m similarity index 99% rename from framework/Source/NSCoderExtensions.m rename to framework/Source/_NSCoderExtensions.m index 129a8d202..695c6af19 100644 --- a/framework/Source/NSCoderExtensions.m +++ b/framework/Source/_NSCoderExtensions.m @@ -1,7 +1,7 @@ -#import "NSCoderExtensions.h" +#import "_NSCoderExtensions.h" +#import "_NSNumberExtensions.h" #import "CPTUtilities.h" -#import "NSNumberExtensions.h" void CPTPathApplierFunc(void *info, const CGPathElement *element); diff --git a/framework/Source/NSDecimalNumberExtensions.h b/framework/Source/_NSDecimalNumberExtensions.h similarity index 100% rename from framework/Source/NSDecimalNumberExtensions.h rename to framework/Source/_NSDecimalNumberExtensions.h diff --git a/framework/Source/NSDecimalNumberExtensions.m b/framework/Source/_NSDecimalNumberExtensions.m similarity index 86% rename from framework/Source/NSDecimalNumberExtensions.m rename to framework/Source/_NSDecimalNumberExtensions.m index b27563037..d5997aefc 100644 --- a/framework/Source/NSDecimalNumberExtensions.m +++ b/framework/Source/_NSDecimalNumberExtensions.m @@ -1,4 +1,4 @@ -#import "NSDecimalNumberExtensions.h" +#import "_NSDecimalNumberExtensions.h" @implementation NSDecimalNumber(CPTExtensions) diff --git a/framework/Source/NSNumberExtensions.h b/framework/Source/_NSNumberExtensions.h similarity index 100% rename from framework/Source/NSNumberExtensions.h rename to framework/Source/_NSNumberExtensions.h diff --git a/framework/Source/NSNumberExtensions.m b/framework/Source/_NSNumberExtensions.m similarity index 97% rename from framework/Source/NSNumberExtensions.m rename to framework/Source/_NSNumberExtensions.m index abf98b549..8a2ff8f6d 100644 --- a/framework/Source/NSNumberExtensions.m +++ b/framework/Source/_NSNumberExtensions.m @@ -1,4 +1,4 @@ -#import "NSNumberExtensions.h" +#import "_NSNumberExtensions.h" @implementation NSNumber(CPTExtensions) diff --git a/framework/xcconfig/CorePlotDebugModule.xcconfig b/framework/xcconfig/CorePlotDebugModule.xcconfig index 7d9c62dc7..9bf0beb7d 100644 --- a/framework/xcconfig/CorePlotDebugModule.xcconfig +++ b/framework/xcconfig/CorePlotDebugModule.xcconfig @@ -1,2 +1,4 @@ #include "CorePlotModule.xcconfig" #include "CorePlotDebug.xcconfig" + +GCC_PREPROCESSOR_DEFINITIONS = DEBUG=1 CPT_IS_FRAMEWORK $(inherited) diff --git a/framework/xcconfig/CorePlotModule.xcconfig b/framework/xcconfig/CorePlotModule.xcconfig index 11b158c3c..c30f133d0 100644 --- a/framework/xcconfig/CorePlotModule.xcconfig +++ b/framework/xcconfig/CorePlotModule.xcconfig @@ -1,6 +1,6 @@ DEFINES_MODULE = YES -ENABLE_MODULE_VERIFIER = YES +ENABLE_MODULE_VERIFIER = NO MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = c99 MODULE_VERIFIER_SUPPORTED_LANGUAGES = objective-c MODULEMAP_FILE = $(SOURCE_ROOT)/Module/module.modulemap diff --git a/framework/xcconfig/CorePlotReleaseModule.xcconfig b/framework/xcconfig/CorePlotReleaseModule.xcconfig index 09e64bfff..d4b462c84 100644 --- a/framework/xcconfig/CorePlotReleaseModule.xcconfig +++ b/framework/xcconfig/CorePlotReleaseModule.xcconfig @@ -1,2 +1,4 @@ #include "CorePlotModule.xcconfig" #include "CorePlotRelease.xcconfig" + +GCC_PREPROCESSOR_DEFINITIONS = CPT_IS_FRAMEWORK $(inherited) diff --git a/spm/Sources/core-plot/CPTAxisLabelGroup.m b/spm/Sources/core-plot/CPTAxisLabelGroup.m deleted file mode 120000 index 47052e27a..000000000 --- a/spm/Sources/core-plot/CPTAxisLabelGroup.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTAxisLabelGroup.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTGridLineGroup.m b/spm/Sources/core-plot/CPTGridLineGroup.m deleted file mode 120000 index 172c1c944..000000000 --- a/spm/Sources/core-plot/CPTGridLineGroup.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTGridLineGroup.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTGridLines.m b/spm/Sources/core-plot/CPTGridLines.m deleted file mode 120000 index 1cf83743b..000000000 --- a/spm/Sources/core-plot/CPTGridLines.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTGridLines.m \ No newline at end of file diff --git a/spm/Sources/core-plot/CPTPlotGroup.m b/spm/Sources/core-plot/CPTPlotGroup.m deleted file mode 120000 index 820c6ddd6..000000000 --- a/spm/Sources/core-plot/CPTPlotGroup.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/CPTPlotGroup.m \ No newline at end of file diff --git a/spm/Sources/core-plot/NSCoderExtensions.m b/spm/Sources/core-plot/NSCoderExtensions.m deleted file mode 120000 index f214ee254..000000000 --- a/spm/Sources/core-plot/NSCoderExtensions.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/NSCoderExtensions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/NSDecimalNumberExtensions.m b/spm/Sources/core-plot/NSDecimalNumberExtensions.m deleted file mode 120000 index c4ee7f4f9..000000000 --- a/spm/Sources/core-plot/NSDecimalNumberExtensions.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/NSDecimalNumberExtensions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/NSNumberExtensions.m b/spm/Sources/core-plot/NSNumberExtensions.m deleted file mode 120000 index 0bc3e12de..000000000 --- a/spm/Sources/core-plot/NSNumberExtensions.m +++ /dev/null @@ -1 +0,0 @@ -../../../framework/Source/NSNumberExtensions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAxisLabelGroup.h b/spm/Sources/core-plot/_CPTAxisLabelGroup.h new file mode 120000 index 000000000..0cadb8e0e --- /dev/null +++ b/spm/Sources/core-plot/_CPTAxisLabelGroup.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTAxisLabelGroup.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTAxisLabelGroup.m b/spm/Sources/core-plot/_CPTAxisLabelGroup.m new file mode 120000 index 000000000..abf478e7f --- /dev/null +++ b/spm/Sources/core-plot/_CPTAxisLabelGroup.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTAxisLabelGroup.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTGridLineGroup.h b/spm/Sources/core-plot/_CPTGridLineGroup.h new file mode 120000 index 000000000..e05b39e22 --- /dev/null +++ b/spm/Sources/core-plot/_CPTGridLineGroup.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTGridLineGroup.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTGridLineGroup.m b/spm/Sources/core-plot/_CPTGridLineGroup.m new file mode 120000 index 000000000..a1711fcb2 --- /dev/null +++ b/spm/Sources/core-plot/_CPTGridLineGroup.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTGridLineGroup.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTGridLines.h b/spm/Sources/core-plot/_CPTGridLines.h new file mode 120000 index 000000000..705ee560a --- /dev/null +++ b/spm/Sources/core-plot/_CPTGridLines.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTGridLines.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTGridLines.m b/spm/Sources/core-plot/_CPTGridLines.m new file mode 120000 index 000000000..b9b0090aa --- /dev/null +++ b/spm/Sources/core-plot/_CPTGridLines.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTGridLines.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTPlotGroup.h b/spm/Sources/core-plot/_CPTPlotGroup.h new file mode 120000 index 000000000..4ae1eb4b6 --- /dev/null +++ b/spm/Sources/core-plot/_CPTPlotGroup.h @@ -0,0 +1 @@ +../../../framework/Source/_CPTPlotGroup.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_CPTPlotGroup.m b/spm/Sources/core-plot/_CPTPlotGroup.m new file mode 120000 index 000000000..7d84d338e --- /dev/null +++ b/spm/Sources/core-plot/_CPTPlotGroup.m @@ -0,0 +1 @@ +../../../framework/Source/_CPTPlotGroup.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_CorePlot_Private.h b/spm/Sources/core-plot/_CorePlot_Private.h new file mode 120000 index 000000000..5cfab1d11 --- /dev/null +++ b/spm/Sources/core-plot/_CorePlot_Private.h @@ -0,0 +1 @@ +../../../framework/SPM Umbrella Header/_CorePlot_Private.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_NSCoderExtensions.h b/spm/Sources/core-plot/_NSCoderExtensions.h new file mode 120000 index 000000000..d97c14627 --- /dev/null +++ b/spm/Sources/core-plot/_NSCoderExtensions.h @@ -0,0 +1 @@ +../../../framework/Source/_NSCoderExtensions.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_NSCoderExtensions.m b/spm/Sources/core-plot/_NSCoderExtensions.m new file mode 120000 index 000000000..b98105fb9 --- /dev/null +++ b/spm/Sources/core-plot/_NSCoderExtensions.m @@ -0,0 +1 @@ +../../../framework/Source/_NSCoderExtensions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_NSDecimalNumberExtensions.h b/spm/Sources/core-plot/_NSDecimalNumberExtensions.h new file mode 120000 index 000000000..ad2457c5e --- /dev/null +++ b/spm/Sources/core-plot/_NSDecimalNumberExtensions.h @@ -0,0 +1 @@ +../../../framework/Source/_NSDecimalNumberExtensions.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_NSDecimalNumberExtensions.m b/spm/Sources/core-plot/_NSDecimalNumberExtensions.m new file mode 120000 index 000000000..4cc198ca7 --- /dev/null +++ b/spm/Sources/core-plot/_NSDecimalNumberExtensions.m @@ -0,0 +1 @@ +../../../framework/Source/_NSDecimalNumberExtensions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/_NSNumberExtensions.h b/spm/Sources/core-plot/_NSNumberExtensions.h new file mode 120000 index 000000000..5a3a7fac6 --- /dev/null +++ b/spm/Sources/core-plot/_NSNumberExtensions.h @@ -0,0 +1 @@ +../../../framework/Source/_NSNumberExtensions.h \ No newline at end of file diff --git a/spm/Sources/core-plot/_NSNumberExtensions.m b/spm/Sources/core-plot/_NSNumberExtensions.m new file mode 120000 index 000000000..3449408cb --- /dev/null +++ b/spm/Sources/core-plot/_NSNumberExtensions.m @@ -0,0 +1 @@ +../../../framework/Source/_NSNumberExtensions.m \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTAxisLabelGroup.h b/spm/Sources/core-plot/include/CPTAxisLabelGroup.h deleted file mode 120000 index 40d7b4fd4..000000000 --- a/spm/Sources/core-plot/include/CPTAxisLabelGroup.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTAxisLabelGroup.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTGridLineGroup.h b/spm/Sources/core-plot/include/CPTGridLineGroup.h deleted file mode 120000 index 644db825f..000000000 --- a/spm/Sources/core-plot/include/CPTGridLineGroup.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTGridLineGroup.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTGridLines.h b/spm/Sources/core-plot/include/CPTGridLines.h deleted file mode 120000 index fcf64c697..000000000 --- a/spm/Sources/core-plot/include/CPTGridLines.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTGridLines.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTPlotGroup.h b/spm/Sources/core-plot/include/CPTPlotGroup.h deleted file mode 120000 index 6833290a6..000000000 --- a/spm/Sources/core-plot/include/CPTPlotGroup.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/CPTPlotGroup.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CorePlot_Private.h b/spm/Sources/core-plot/include/CorePlot_Private.h deleted file mode 120000 index c8b8f48c1..000000000 --- a/spm/Sources/core-plot/include/CorePlot_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/SPM Umbrella Header/CorePlot_Private.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/NSCoderExtensions.h b/spm/Sources/core-plot/include/NSCoderExtensions.h deleted file mode 120000 index 1f38f0542..000000000 --- a/spm/Sources/core-plot/include/NSCoderExtensions.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/NSCoderExtensions.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/NSDecimalNumberExtensions.h b/spm/Sources/core-plot/include/NSDecimalNumberExtensions.h deleted file mode 120000 index 82fed29ca..000000000 --- a/spm/Sources/core-plot/include/NSDecimalNumberExtensions.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/NSDecimalNumberExtensions.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/NSNumberExtensions.h b/spm/Sources/core-plot/include/NSNumberExtensions.h deleted file mode 120000 index a775b31b9..000000000 --- a/spm/Sources/core-plot/include/NSNumberExtensions.h +++ /dev/null @@ -1 +0,0 @@ -../../../../framework/Source/NSNumberExtensions.h \ No newline at end of file From 1334342ce273fc93cad6a5d1608157f31964e8da Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 30 Apr 2023 15:24:09 -0400 Subject: [PATCH 170/245] Enabled the module verifier and added a private framework umbrella header to fix the resulting errors. --- framework/CorePlot.xcodeproj/project.pbxproj | 8 +++++ framework/_CorePlot_Private.h | 36 ++++++++++++++++++++ framework/xcconfig/CorePlotModule.xcconfig | 2 +- scripts/generate_spm_sources_layout.sh | 1 + 4 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 framework/_CorePlot_Private.h diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index ade86cff5..dd105ee9d 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -697,6 +697,9 @@ C3D979BB13D2347400145DFF /* CPTFillTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979BA13D2347300145DFF /* CPTFillTests.m */; }; C3DA34CC107AD7710051DA02 /* _CPTXYTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = C3DA34CA107AD7710051DA02 /* _CPTXYTheme.m */; }; C3DA34CD107AD7710051DA02 /* _CPTXYTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = C3DA34CB107AD7710051DA02 /* _CPTXYTheme.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C3E31A9929EF7E4A00310131 /* _CorePlot_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E31A9829EF7E4A00310131 /* _CorePlot_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C3E31A9A29EF7E4A00310131 /* _CorePlot_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E31A9829EF7E4A00310131 /* _CorePlot_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C3E31A9B29EF7E4A00310131 /* _CorePlot_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E31A9829EF7E4A00310131 /* _CorePlot_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; C3EE4E6E1A6C15890098F4E6 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07BF0D630F2B70B8002FCEA7 /* QuartzCore.framework */; }; C3EE4E981A6C1E890098F4E6 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3EE4E971A6C1E890098F4E6 /* Cocoa.framework */; }; C3EE4E9A1A6C1F770098F4E6 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07BF0D630F2B70B8002FCEA7 /* QuartzCore.framework */; }; @@ -1041,6 +1044,7 @@ C3D979BA13D2347300145DFF /* CPTFillTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTFillTests.m; sourceTree = ""; }; C3DA34CA107AD7710051DA02 /* _CPTXYTheme.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTXYTheme.m; sourceTree = ""; }; C3DA34CB107AD7710051DA02 /* _CPTXYTheme.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTXYTheme.h; sourceTree = ""; }; + C3E31A9829EF7E4A00310131 /* _CorePlot_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CorePlot_Private.h; sourceTree = ""; }; C3EE4E971A6C1E890098F4E6 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; C3F244BF28DBCABB008DB9A1 /* CorePlot.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CorePlot.h; sourceTree = ""; }; C3F31DE71045EB470058520A /* _CPTPlotGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTPlotGroup.m; sourceTree = ""; }; @@ -1462,6 +1466,7 @@ children = ( 32DBCF5E0370ADEE00C91783 /* CorePlot_Prefix.pch */, 070CF7AE0F3CA7AB0001FFF4 /* CorePlot.h */, + C3E31A9829EF7E4A00310131 /* _CorePlot_Private.h */, C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */, C3B0E7B229CA7B3200FC94B5 /* CorePlotDebugModule.xcconfig */, C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */, @@ -1829,6 +1834,7 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( + C3E31A9929EF7E4A00310131 /* _CorePlot_Private.h in Headers */, 070CF7B00F3CA7AB0001FFF4 /* CorePlot.h in Headers */, 07BF0D720F2B718F002FCEA7 /* CPTGraph.h in Headers */, 07BF0D780F2B723A002FCEA7 /* CPTPlotAreaFrame.h in Headers */, @@ -1992,6 +1998,7 @@ C37EA6661BC83F2A0091C8F7 /* _CPTXYTheme.h in Headers */, C37EA6671BC83F2A0091C8F7 /* CPTLayerAnnotation.h in Headers */, C37EA6681BC83F2A0091C8F7 /* _CPTAnimationCGFloatPeriod.h in Headers */, + C3E31A9B29EF7E4A00310131 /* _CorePlot_Private.h in Headers */, C37EA6691BC83F2A0091C8F7 /* CPTAxisTitle.h in Headers */, C37EA66A1BC83F2A0091C8F7 /* _CPTSlateTheme.h in Headers */, C37EA66B1BC83F2A0091C8F7 /* CPTMutableNumericData.h in Headers */, @@ -2095,6 +2102,7 @@ C38A0AFE1A46260B00D45436 /* _CPTXYTheme.h in Headers */, C38A0A381A461ED000D45436 /* CPTLayerAnnotation.h in Headers */, C38A0A1D1A461E6E00D45436 /* _CPTAnimationCGFloatPeriod.h in Headers */, + C3E31A9A29EF7E4A00310131 /* _CorePlot_Private.h in Headers */, C38A0AF41A4625E800D45436 /* CPTAxisTitle.h in Headers */, C38A0B021A46260B00D45436 /* _CPTSlateTheme.h in Headers */, C3D414781A7D829100B6F5D6 /* CPTMutableNumericData.h in Headers */, diff --git a/framework/_CorePlot_Private.h b/framework/_CorePlot_Private.h new file mode 100644 index 000000000..5e15597e0 --- /dev/null +++ b/framework/_CorePlot_Private.h @@ -0,0 +1,36 @@ +#define CPT_IS_FRAMEWORK + +#import + +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST + +#import +#import + +#else + +#import + +#endif + +#import +#import +#import +#import + +#import +#import + +#import +#import +#import + +#import +#import +#import +#import +#import + +#import +#import +#import diff --git a/framework/xcconfig/CorePlotModule.xcconfig b/framework/xcconfig/CorePlotModule.xcconfig index c30f133d0..11b158c3c 100644 --- a/framework/xcconfig/CorePlotModule.xcconfig +++ b/framework/xcconfig/CorePlotModule.xcconfig @@ -1,6 +1,6 @@ DEFINES_MODULE = YES -ENABLE_MODULE_VERIFIER = NO +ENABLE_MODULE_VERIFIER = YES MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = c99 MODULE_VERIFIER_SUPPORTED_LANGUAGES = objective-c MODULEMAP_FILE = $(SOURCE_ROOT)/Module/module.modulemap diff --git a/scripts/generate_spm_sources_layout.sh b/scripts/generate_spm_sources_layout.sh index c9525f4f1..4ba8b0652 100755 --- a/scripts/generate_spm_sources_layout.sh +++ b/scripts/generate_spm_sources_layout.sh @@ -59,6 +59,7 @@ function generate_spm_private_sources() { -type f \ -name "_*.[mh]" \ -not -path "*/build/*" \ + -not -path "framework/_CorePlot_Private.h" \ | sed "s| \([^/]\)|:\1|g" ) From 78e70017aed99b680bbf529539a40a3bbea96364 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 13 May 2023 09:06:47 -0400 Subject: [PATCH 171/245] Updated the configuration file for Uncrustify 0.77. --- scripts/uncrustify.cfg | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/scripts/uncrustify.cfg b/scripts/uncrustify.cfg index 20f548cef..ef48dce96 100644 --- a/scripts/uncrustify.cfg +++ b/scripts/uncrustify.cfg @@ -1,4 +1,4 @@ -# Uncrustify-0.76.0_f +# Uncrustify-0.77.0_f newlines = auto input_tab_size = 4 output_tab_size = 4 @@ -45,6 +45,7 @@ sp_paren_brace = force sp_brace_brace = force sp_before_ptr_star = force sp_before_unnamed_ptr_star = force +sp_qualifier_unnamed_ptr_star = force sp_between_ptr_star = remove sp_after_ptr_star = remove sp_after_ptr_block_caret = remove @@ -55,7 +56,9 @@ sp_ptr_star_func_var = remove sp_ptr_star_func_type = remove sp_ptr_star_paren = remove sp_before_ptr_star_func = force +sp_qualifier_ptr_star_func = remove sp_before_ptr_star_trailing = force +sp_qualifier_ptr_star_trailing = force sp_before_byref = force sp_before_unnamed_byref = force sp_after_byref = remove @@ -158,6 +161,9 @@ sp_func_def_paren = remove sp_func_def_paren_empty = remove sp_inside_fparens = remove sp_inside_fparen = remove +sp_func_call_user_inside_rparen = remove +sp_inside_rparens = remove +sp_inside_rparen = remove sp_inside_tparen = remove sp_after_tparen_close = remove sp_square_fparen = remove @@ -243,6 +249,8 @@ sp_after_for_colon = ignore sp_before_for_colon = ignore sp_extern_paren = remove sp_cmt_cpp_start = force +sp_cmt_cpp_pvs = false +sp_cmt_cpp_lint = false sp_cmt_cpp_region = force sp_cmt_cpp_doxygen = true sp_cmt_cpp_qttr = false @@ -693,7 +701,7 @@ align_single_line_func = true align_single_line_brace = true align_single_line_brace_gap = 1 align_oc_msg_spec_span = 0 -align_nl_cont = false +align_nl_cont = 1 align_pp_define_together = false align_pp_define_span = 2 align_pp_define_gap = 1 @@ -751,6 +759,7 @@ mod_full_paren_assign_bool = false mod_full_paren_return_bool = false mod_remove_extra_semicolon = true mod_remove_duplicate_include = true +mod_add_force_c_closebrace_comment = false mod_add_long_function_closebrace_comment = 0 mod_add_long_namespace_closebrace_comment = 0 mod_add_long_class_closebrace_comment = 0 @@ -827,5 +836,5 @@ debug_truncate = 0 debug_sort_the_tracks = true debug_decode_the_flags = false set_numbering_for_html_output = false -# option(s) with 'not default' value: 366 +# option(s) with 'not default' value: 373 # From 6cc504dee0d347f1c714e91e4db9b4a5506822d0 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 13 May 2023 09:06:59 -0400 Subject: [PATCH 172/245] Standardized code formatting. --- framework/Source/CPTAnimation.m | 2 +- framework/Source/CPTAnimationPeriod.m | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/framework/Source/CPTAnimation.m b/framework/Source/CPTAnimation.m index b2b3f1d38..46a88cd8b 100644 --- a/framework/Source/CPTAnimation.m +++ b/framework/Source/CPTAnimation.m @@ -337,7 +337,7 @@ -(void)update CPTAnimationOperationKey: animationOperation, CPTAnimationValueKey: [period tweenedValueForProgress:progress], CPTAnimationValueClassKey: valueClass ? valueClass : [NSNull class], - CPTAnimationStartedKey : @(started), + CPTAnimationStartedKey: @(started), CPTAnimationFinishedKey: @(currentTime >= endTime) }; diff --git a/framework/Source/CPTAnimationPeriod.m b/framework/Source/CPTAnimationPeriod.m index c2769dc97..00f35e276 100644 --- a/framework/Source/CPTAnimationPeriod.m +++ b/framework/Source/CPTAnimationPeriod.m @@ -192,7 +192,7 @@ +(nonnull instancetype)periodWithStartRect:(CGRect)aStartRect endRect:(CGRect)an **/ +(nonnull instancetype)periodWithStartDecimal:(NSDecimal)aStartDecimal endDecimal:(NSDecimal)anEndDecimal duration:(CGFloat)aDuration withDelay:(CGFloat)aDelay { - NSDecimalNumber *start = NSDecimalIsNotANumber(&aStartDecimal) ? nil : [NSDecimalNumber decimalNumberWithDecimal:aStartDecimal]; + NSDecimalNumber *start = NSDecimalIsNotANumber(&aStartDecimal) ? nil : [NSDecimalNumber decimalNumberWithDecimal : aStartDecimal]; return [_CPTAnimationNSDecimalPeriod periodWithStartValue:start endValue:[NSDecimalNumber decimalNumberWithDecimal:anEndDecimal] @@ -383,7 +383,7 @@ -(nonnull instancetype)initWithStartRect:(CGRect)aStartRect endRect:(CGRect)anEn **/ -(nonnull instancetype)initWithStartDecimal:(NSDecimal)aStartDecimal endDecimal:(NSDecimal)anEndDecimal duration:(CGFloat)aDuration withDelay:(CGFloat)aDelay { - NSDecimalNumber *start = NSDecimalIsNotANumber(&aStartDecimal) ? nil : [NSDecimalNumber decimalNumberWithDecimal:aStartDecimal]; + NSDecimalNumber *start = NSDecimalIsNotANumber(&aStartDecimal) ? nil : [NSDecimalNumber decimalNumberWithDecimal : aStartDecimal]; self = [[_CPTAnimationNSDecimalPeriod alloc] initWithStartValue:start endValue:[NSDecimalNumber decimalNumberWithDecimal:anEndDecimal] From a90efc88f9fe16ab16aea5f10903d58b0b0074b9 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 27 May 2023 16:52:44 -0400 Subject: [PATCH 173/245] Updated the Doxygen config files for Doxygen 1.9.7. --- documentation/doxygen/doxygen touch.config | 188 +++++++++++++-------- documentation/doxygen/doxygen.config | 188 +++++++++++++-------- 2 files changed, 234 insertions(+), 142 deletions(-) diff --git a/documentation/doxygen/doxygen touch.config b/documentation/doxygen/doxygen touch.config index b8ba65b32..a9af6ecb8 100644 --- a/documentation/doxygen/doxygen touch.config +++ b/documentation/doxygen/doxygen touch.config @@ -1,4 +1,4 @@ -# Doxyfile 1.9.5 +# Doxyfile 1.9.7 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -86,7 +86,7 @@ CREATE_SUBDIRS = NO # level increment doubles the number of directories, resulting in 4096 # directories at level 8 which is the default and also the maximum value. The # sub-directories are organized in 2 levels, the first level always has a fixed -# numer of 16 directories. +# number of 16 directories. # Minimum value: 0, maximum value: 8, default value: 8. # This tag requires that the tag CREATE_SUBDIRS is set to YES. @@ -372,6 +372,17 @@ MARKDOWN_SUPPORT = NO TOC_INCLUDE_HEADINGS = 0 +# The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to +# generate identifiers for the Markdown headings. Note: Every identifier is +# unique. +# Possible values are: DOXYGEN Use a fixed 'autotoc_md' string followed by a +# sequence number starting at 0. and GITHUB Use the lower case version of title +# with any whitespace replaced by '-' and punctations characters removed.. +# The default value is: DOXYGEN. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +MARKDOWN_ID_STYLE = DOXYGEN + # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by putting a % sign in front of the word or @@ -380,11 +391,11 @@ TOC_INCLUDE_HEADINGS = 0 AUTOLINK_SUPPORT = YES -# If you use STL classes (i.e. std#string, std#vector, etc.) but do not want +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should set this # tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std#string); -# versus func(std#string) {}). This also make the inheritance and collaboration +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. # The default value is: NO. @@ -496,6 +507,14 @@ LOOKUP_CACHE_SIZE = 0 NUM_PROC_THREADS = 1 +# If the TIMESTAMP tag is set different from NO then each generated page will +# contain the date or date and time when the page was generated. Setting this to +# NO can help when comparing the output of multiple runs. +# Possible values are: YES, NO, DATETIME and DATE. +# The default value is: NO. + +TIMESTAMP = NO + #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- @@ -577,7 +596,8 @@ HIDE_UNDOC_MEMBERS = YES # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set # to NO, these classes will be included in the various overviews. This option -# has no effect if EXTRACT_ALL is enabled. +# will also hide undocumented C++ concepts if enabled. This option has no effect +# if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = NO @@ -868,11 +888,26 @@ WARN_IF_INCOMPLETE_DOC = YES WARN_NO_PARAMDOC = YES +# If WARN_IF_UNDOC_ENUM_VAL option is set to YES, doxygen will warn about +# undocumented enumeration values. If set to NO, doxygen will accept +# undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: NO. + +WARN_IF_UNDOC_ENUM_VAL = NO + # If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when # a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS # then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but # at the end of the doxygen process doxygen will return with a non-zero status. -# Possible values are: NO, YES and FAIL_ON_WARNINGS. +# If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS_PRINT then doxygen behaves +# like FAIL_ON_WARNINGS but in case no WARN_LOGFILE is defined doxygen will not +# write the warning messages in between other messages but write them at the end +# of a run, in case a WARN_LOGFILE is defined the warning messages will be +# besides being in the defined file also be shown at the end of a run, unless +# the WARN_LOGFILE is defined as - i.e. standard output (stdout) in that case +# the behavior will remain as with the setting FAIL_ON_WARNINGS. +# Possible values are: NO, YES, FAIL_ON_WARNINGS and FAIL_ON_WARNINGS_PRINT. # The default value is: NO. WARN_AS_ERROR = NO @@ -999,10 +1034,7 @@ EXCLUDE_PATTERNS = *Tests.* \ # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, -# ANamespace#AClass, ANamespace#*Test -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories use the pattern */test/* +# ANamespace::AClass, ANamespace::*Test EXCLUDE_SYMBOLS = @@ -1239,10 +1271,11 @@ CLANG_DATABASE_PATH = ALPHABETICAL_INDEX = YES -# In case all classes in a project start with a common prefix, all classes will -# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag -# can be used to specify a prefix (or a list of prefixes) that should be ignored -# while generating the index headers. +# The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes) +# that should be ignored while generating the index headers. The IGNORE_PREFIX +# tag works for classes, function and member names. The entity will be placed in +# the alphabetical list under the first letter of the entity name that remains +# after removing the prefix. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = CPT \ @@ -1322,7 +1355,12 @@ HTML_STYLESHEET = # Doxygen will copy the style sheet files to the output directory. # Note: The order of the extra style sheet files is of importance (e.g. the last # style sheet in the list overrules the setting of the previous ones in the -# list). For an example see the documentation. +# list). +# Note: Since the styling of scrollbars can currently not be overruled in +# Webkit/Chromium, the styling will be left out of the default doxygen.css if +# one or more extra stylesheets have been specified. So if scrollbar +# customization is desired it has to be added explicitly. For an example see the +# documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = @@ -1338,17 +1376,13 @@ HTML_EXTRA_STYLESHEET = HTML_EXTRA_FILES = # The HTML_COLORSTYLE tag can be used to specify if the generated HTML output -# should be rendered with a dark or light theme. Default setting AUTO_LIGHT -# enables light output unless the user preference is dark output. Other options -# are DARK to always use dark mode, LIGHT to always use light mode, AUTO_DARK to -# default to dark mode unless the user prefers light mode, and TOGGLE to let the -# user toggle between dark and light mode via a button. -# Possible values are: LIGHT Always generate light output., DARK Always generate -# dark output., AUTO_LIGHT Automatically set the mode according to the user -# preference, use light mode if no preference is set (the default)., AUTO_DARK -# Automatically set the mode according to the user preference, use dark mode if -# no preference is set. and TOGGLE Allow to user to switch between light and -# dark mode via a button.. +# should be rendered with a dark or light theme. +# Possible values are: LIGHT always generate light mode output, DARK always +# generate dark mode output, AUTO_LIGHT automatically set the mode according to +# the user preference, use light mode if no preference is set (the default), +# AUTO_DARK automatically set the mode according to the user preference, use +# dark mode if no preference is set and TOGGLE allow to user to switch between +# light and dark mode via a button. # The default value is: AUTO_LIGHT. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1384,15 +1418,6 @@ HTML_COLORSTYLE_SAT = 100 HTML_COLORSTYLE_GAMMA = 80 -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to YES can help to show when doxygen was last run and thus if the -# documentation is up to date. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = NO - # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # documentation will contain a main index with vertical navigation menus that # are dynamically created via JavaScript. If disabled, the navigation index will @@ -1542,6 +1567,16 @@ BINARY_TOC = NO TOC_EXPAND = YES +# The SITEMAP_URL tag is used to specify the full URL of the place where the +# generated documentation will be placed on the server by the user during the +# deployment of the documentation. The generated sitemap is called sitemap.xml +# and placed on the directory specified by HTML_OUTPUT. In case no SITEMAP_URL +# is specified no sitemap is generated. For information about the sitemap +# protocol see https://www.sitemaps.org +# This tag requires that the tag GENERATE_HTML is set to YES. + +SITEMAP_URL = + # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help @@ -1778,8 +1813,8 @@ MATHJAX_RELPATH = http://www.mathjax.org/mathjax # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example -# for MathJax version 2 (see https://docs.mathjax.org/en/v2.7-latest/tex.html -# #tex-and-latex-extensions): +# for MathJax version 2 (see +# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions): # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # For example for MathJax version 3 (see # http://docs.mathjax.org/en/latest/input/tex/extensions/index.html): @@ -2030,9 +2065,16 @@ PDF_HYPERLINKS = YES USE_PDFLATEX = YES -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode -# command to the generated LaTeX files. This will instruct LaTeX to keep running -# if errors occur, instead of asking the user for help. +# The LATEX_BATCHMODE tag ignals the behavior of LaTeX in case of an error. +# Possible values are: NO same as ERROR_STOP, YES same as BATCH, BATCH In batch +# mode nothing is printed on the terminal, errors are scrolled as if is +# hit at every error; missing files that TeX tries to input or request from +# keyboard input (\read on a not open input stream) cause the job to abort, +# NON_STOP In nonstop mode the diagnostic message will appear on the terminal, +# but there is no possibility of user interaction just like in batch mode, +# SCROLL In scroll mode, TeX will stop only for missing files to input or if +# keyboard input is necessary and ERROR_STOP In errorstop mode, TeX will stop at +# each error, asking for user intervention. # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -2053,14 +2095,6 @@ LATEX_HIDE_INDICES = NO LATEX_BIB_STYLE = plain -# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated -# page will contain the date and time when the page was generated. Setting this -# to NO can help when comparing the output of multiple runs. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_TIMESTAMP = NO - # The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute) # path from which the emoji images will be read. If a relative path is entered, # it will be relative to the LATEX_OUTPUT directory. If left blank the @@ -2226,7 +2260,7 @@ DOCBOOK_OUTPUT = docbook #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an -# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures +# AutoGen Definitions (see https://autogen.sourceforge.net/) file that captures # the structure of the code including all documentation. Note that this feature # is still experimental and incomplete at the moment. # The default value is: NO. @@ -2408,16 +2442,9 @@ EXTERNAL_GROUPS = YES EXTERNAL_PAGES = YES #--------------------------------------------------------------------------- -# Configuration options related to the dot tool +# Configuration options related to diagram generator tools #--------------------------------------------------------------------------- -# You can include diagrams made with dia in doxygen documentation. Doxygen will -# then run dia to produce the diagram and insert it in the documentation. The -# DIA_PATH tag allows you to specify the directory where the dia binary resides. -# If left empty dia is assumed to be found in the default search path. - -DIA_PATH = - # If set to YES the inheritance and collaboration graphs will hide inheritance # and usage relations if the target is undocumented or is not a class. # The default value is: YES. @@ -2426,7 +2453,7 @@ HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz (see: -# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent +# https://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent # Bell Labs. The other options in this section have no effect if this option is # set to NO # The default value is: NO. @@ -2479,13 +2506,15 @@ DOT_NODE_ATTR = "shape=box,height=0.2,width=0.4" DOT_FONTPATH = -# If the CLASS_GRAPH tag is set to YES (or GRAPH) then doxygen will generate a -# graph for each documented class showing the direct and indirect inheritance -# relations. In case HAVE_DOT is set as well dot will be used to draw the graph, -# otherwise the built-in generator will be used. If the CLASS_GRAPH tag is set -# to TEXT the direct and indirect inheritance relations will be shown as texts / -# links. -# Possible values are: NO, YES, TEXT and GRAPH. +# If the CLASS_GRAPH tag is set to YES or GRAPH or BUILTIN then doxygen will +# generate a graph for each documented class showing the direct and indirect +# inheritance relations. In case the CLASS_GRAPH tag is set to YES or GRAPH and +# HAVE_DOT is enabled as well, then dot will be used to draw the graph. In case +# the CLASS_GRAPH tag is set to YES and HAVE_DOT is disabled or if the +# CLASS_GRAPH tag is set to BUILTIN, then the built-in generator will be used. +# If the CLASS_GRAPH tag is set to TEXT the direct and indirect inheritance +# relations will be shown as texts / links. +# Possible values are: NO, YES, TEXT, GRAPH and BUILTIN. # The default value is: YES. CLASS_GRAPH = YES @@ -2626,7 +2655,7 @@ DIR_GRAPH_MAX_DEPTH = 1 # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. For an explanation of the image formats see the section # output formats in the documentation of the dot tool (Graphviz (see: -# http://www.graphviz.org/)). +# https://www.graphviz.org/)). # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order # to make the SVG files visible in IE 9+ (other browsers do not have this # requirement). @@ -2663,11 +2692,12 @@ DOT_PATH = /opt/homebrew/bin DOTFILE_DIRS = -# The MSCFILE_DIRS tag can be used to specify one or more directories that -# contain msc files that are included in the documentation (see the \mscfile -# command). +# You can include diagrams made with dia in doxygen documentation. Doxygen will +# then run dia to produce the diagram and insert it in the documentation. The +# DIA_PATH tag allows you to specify the directory where the dia binary resides. +# If left empty dia is assumed to be found in the default search path. -MSCFILE_DIRS = +DIA_PATH = # The DIAFILE_DIRS tag can be used to specify one or more directories that # contain dia files that are included in the documentation (see the \diafile @@ -2744,3 +2774,19 @@ GENERATE_LEGEND = YES # The default value is: YES. DOT_CLEANUP = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. If the MSCGEN_TOOL tag is left empty (the default), then doxygen will +# use a built-in version of mscgen tool to produce the charts. Alternatively, +# the MSCGEN_TOOL tag can also specify the name an external tool. For instance, +# specifying prog as the value, doxygen will call the tool as prog -T +# -o . The external tool should support +# output file formats "png", "eps", "svg", and "ismap". + +MSCGEN_TOOL = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the \mscfile +# command). + +MSCFILE_DIRS = diff --git a/documentation/doxygen/doxygen.config b/documentation/doxygen/doxygen.config index 73dd7f1df..9699cffec 100644 --- a/documentation/doxygen/doxygen.config +++ b/documentation/doxygen/doxygen.config @@ -1,4 +1,4 @@ -# Doxyfile 1.9.5 +# Doxyfile 1.9.7 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -86,7 +86,7 @@ CREATE_SUBDIRS = NO # level increment doubles the number of directories, resulting in 4096 # directories at level 8 which is the default and also the maximum value. The # sub-directories are organized in 2 levels, the first level always has a fixed -# numer of 16 directories. +# number of 16 directories. # Minimum value: 0, maximum value: 8, default value: 8. # This tag requires that the tag CREATE_SUBDIRS is set to YES. @@ -372,6 +372,17 @@ MARKDOWN_SUPPORT = NO TOC_INCLUDE_HEADINGS = 0 +# The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to +# generate identifiers for the Markdown headings. Note: Every identifier is +# unique. +# Possible values are: DOXYGEN Use a fixed 'autotoc_md' string followed by a +# sequence number starting at 0. and GITHUB Use the lower case version of title +# with any whitespace replaced by '-' and punctations characters removed.. +# The default value is: DOXYGEN. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +MARKDOWN_ID_STYLE = DOXYGEN + # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by putting a % sign in front of the word or @@ -380,11 +391,11 @@ TOC_INCLUDE_HEADINGS = 0 AUTOLINK_SUPPORT = YES -# If you use STL classes (i.e. std#string, std#vector, etc.) but do not want +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should set this # tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std#string); -# versus func(std#string) {}). This also make the inheritance and collaboration +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. # The default value is: NO. @@ -496,6 +507,14 @@ LOOKUP_CACHE_SIZE = 0 NUM_PROC_THREADS = 1 +# If the TIMESTAMP tag is set different from NO then each generated page will +# contain the date or date and time when the page was generated. Setting this to +# NO can help when comparing the output of multiple runs. +# Possible values are: YES, NO, DATETIME and DATE. +# The default value is: NO. + +TIMESTAMP = NO + #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- @@ -577,7 +596,8 @@ HIDE_UNDOC_MEMBERS = YES # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set # to NO, these classes will be included in the various overviews. This option -# has no effect if EXTRACT_ALL is enabled. +# will also hide undocumented C++ concepts if enabled. This option has no effect +# if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = NO @@ -868,11 +888,26 @@ WARN_IF_INCOMPLETE_DOC = YES WARN_NO_PARAMDOC = YES +# If WARN_IF_UNDOC_ENUM_VAL option is set to YES, doxygen will warn about +# undocumented enumeration values. If set to NO, doxygen will accept +# undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: NO. + +WARN_IF_UNDOC_ENUM_VAL = NO + # If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when # a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS # then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but # at the end of the doxygen process doxygen will return with a non-zero status. -# Possible values are: NO, YES and FAIL_ON_WARNINGS. +# If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS_PRINT then doxygen behaves +# like FAIL_ON_WARNINGS but in case no WARN_LOGFILE is defined doxygen will not +# write the warning messages in between other messages but write them at the end +# of a run, in case a WARN_LOGFILE is defined the warning messages will be +# besides being in the defined file also be shown at the end of a run, unless +# the WARN_LOGFILE is defined as - i.e. standard output (stdout) in that case +# the behavior will remain as with the setting FAIL_ON_WARNINGS. +# Possible values are: NO, YES, FAIL_ON_WARNINGS and FAIL_ON_WARNINGS_PRINT. # The default value is: NO. WARN_AS_ERROR = NO @@ -1001,10 +1036,7 @@ EXCLUDE_PATTERNS = *Tests.* \ # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, -# ANamespace#AClass, ANamespace#*Test -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories use the pattern */test/* +# ANamespace::AClass, ANamespace::*Test EXCLUDE_SYMBOLS = @@ -1241,10 +1273,11 @@ CLANG_DATABASE_PATH = ALPHABETICAL_INDEX = YES -# In case all classes in a project start with a common prefix, all classes will -# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag -# can be used to specify a prefix (or a list of prefixes) that should be ignored -# while generating the index headers. +# The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes) +# that should be ignored while generating the index headers. The IGNORE_PREFIX +# tag works for classes, function and member names. The entity will be placed in +# the alphabetical list under the first letter of the entity name that remains +# after removing the prefix. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = CPT \ @@ -1324,7 +1357,12 @@ HTML_STYLESHEET = # Doxygen will copy the style sheet files to the output directory. # Note: The order of the extra style sheet files is of importance (e.g. the last # style sheet in the list overrules the setting of the previous ones in the -# list). For an example see the documentation. +# list). +# Note: Since the styling of scrollbars can currently not be overruled in +# Webkit/Chromium, the styling will be left out of the default doxygen.css if +# one or more extra stylesheets have been specified. So if scrollbar +# customization is desired it has to be added explicitly. For an example see the +# documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = @@ -1340,17 +1378,13 @@ HTML_EXTRA_STYLESHEET = HTML_EXTRA_FILES = # The HTML_COLORSTYLE tag can be used to specify if the generated HTML output -# should be rendered with a dark or light theme. Default setting AUTO_LIGHT -# enables light output unless the user preference is dark output. Other options -# are DARK to always use dark mode, LIGHT to always use light mode, AUTO_DARK to -# default to dark mode unless the user prefers light mode, and TOGGLE to let the -# user toggle between dark and light mode via a button. -# Possible values are: LIGHT Always generate light output., DARK Always generate -# dark output., AUTO_LIGHT Automatically set the mode according to the user -# preference, use light mode if no preference is set (the default)., AUTO_DARK -# Automatically set the mode according to the user preference, use dark mode if -# no preference is set. and TOGGLE Allow to user to switch between light and -# dark mode via a button.. +# should be rendered with a dark or light theme. +# Possible values are: LIGHT always generate light mode output, DARK always +# generate dark mode output, AUTO_LIGHT automatically set the mode according to +# the user preference, use light mode if no preference is set (the default), +# AUTO_DARK automatically set the mode according to the user preference, use +# dark mode if no preference is set and TOGGLE allow to user to switch between +# light and dark mode via a button. # The default value is: AUTO_LIGHT. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1386,15 +1420,6 @@ HTML_COLORSTYLE_SAT = 100 HTML_COLORSTYLE_GAMMA = 80 -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to YES can help to show when doxygen was last run and thus if the -# documentation is up to date. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = NO - # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # documentation will contain a main index with vertical navigation menus that # are dynamically created via JavaScript. If disabled, the navigation index will @@ -1544,6 +1569,16 @@ BINARY_TOC = NO TOC_EXPAND = YES +# The SITEMAP_URL tag is used to specify the full URL of the place where the +# generated documentation will be placed on the server by the user during the +# deployment of the documentation. The generated sitemap is called sitemap.xml +# and placed on the directory specified by HTML_OUTPUT. In case no SITEMAP_URL +# is specified no sitemap is generated. For information about the sitemap +# protocol see https://www.sitemaps.org +# This tag requires that the tag GENERATE_HTML is set to YES. + +SITEMAP_URL = + # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help @@ -1780,8 +1815,8 @@ MATHJAX_RELPATH = http://www.mathjax.org/mathjax # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example -# for MathJax version 2 (see https://docs.mathjax.org/en/v2.7-latest/tex.html -# #tex-and-latex-extensions): +# for MathJax version 2 (see +# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions): # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # For example for MathJax version 3 (see # http://docs.mathjax.org/en/latest/input/tex/extensions/index.html): @@ -2032,9 +2067,16 @@ PDF_HYPERLINKS = YES USE_PDFLATEX = YES -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode -# command to the generated LaTeX files. This will instruct LaTeX to keep running -# if errors occur, instead of asking the user for help. +# The LATEX_BATCHMODE tag ignals the behavior of LaTeX in case of an error. +# Possible values are: NO same as ERROR_STOP, YES same as BATCH, BATCH In batch +# mode nothing is printed on the terminal, errors are scrolled as if is +# hit at every error; missing files that TeX tries to input or request from +# keyboard input (\read on a not open input stream) cause the job to abort, +# NON_STOP In nonstop mode the diagnostic message will appear on the terminal, +# but there is no possibility of user interaction just like in batch mode, +# SCROLL In scroll mode, TeX will stop only for missing files to input or if +# keyboard input is necessary and ERROR_STOP In errorstop mode, TeX will stop at +# each error, asking for user intervention. # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -2055,14 +2097,6 @@ LATEX_HIDE_INDICES = NO LATEX_BIB_STYLE = plain -# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated -# page will contain the date and time when the page was generated. Setting this -# to NO can help when comparing the output of multiple runs. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_TIMESTAMP = NO - # The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute) # path from which the emoji images will be read. If a relative path is entered, # it will be relative to the LATEX_OUTPUT directory. If left blank the @@ -2228,7 +2262,7 @@ DOCBOOK_OUTPUT = docbook #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an -# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures +# AutoGen Definitions (see https://autogen.sourceforge.net/) file that captures # the structure of the code including all documentation. Note that this feature # is still experimental and incomplete at the moment. # The default value is: NO. @@ -2408,16 +2442,9 @@ EXTERNAL_GROUPS = YES EXTERNAL_PAGES = YES #--------------------------------------------------------------------------- -# Configuration options related to the dot tool +# Configuration options related to diagram generator tools #--------------------------------------------------------------------------- -# You can include diagrams made with dia in doxygen documentation. Doxygen will -# then run dia to produce the diagram and insert it in the documentation. The -# DIA_PATH tag allows you to specify the directory where the dia binary resides. -# If left empty dia is assumed to be found in the default search path. - -DIA_PATH = - # If set to YES the inheritance and collaboration graphs will hide inheritance # and usage relations if the target is undocumented or is not a class. # The default value is: YES. @@ -2426,7 +2453,7 @@ HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz (see: -# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent +# https://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent # Bell Labs. The other options in this section have no effect if this option is # set to NO # The default value is: NO. @@ -2479,13 +2506,15 @@ DOT_NODE_ATTR = "shape=box,height=0.2,width=0.4" DOT_FONTPATH = -# If the CLASS_GRAPH tag is set to YES (or GRAPH) then doxygen will generate a -# graph for each documented class showing the direct and indirect inheritance -# relations. In case HAVE_DOT is set as well dot will be used to draw the graph, -# otherwise the built-in generator will be used. If the CLASS_GRAPH tag is set -# to TEXT the direct and indirect inheritance relations will be shown as texts / -# links. -# Possible values are: NO, YES, TEXT and GRAPH. +# If the CLASS_GRAPH tag is set to YES or GRAPH or BUILTIN then doxygen will +# generate a graph for each documented class showing the direct and indirect +# inheritance relations. In case the CLASS_GRAPH tag is set to YES or GRAPH and +# HAVE_DOT is enabled as well, then dot will be used to draw the graph. In case +# the CLASS_GRAPH tag is set to YES and HAVE_DOT is disabled or if the +# CLASS_GRAPH tag is set to BUILTIN, then the built-in generator will be used. +# If the CLASS_GRAPH tag is set to TEXT the direct and indirect inheritance +# relations will be shown as texts / links. +# Possible values are: NO, YES, TEXT, GRAPH and BUILTIN. # The default value is: YES. CLASS_GRAPH = YES @@ -2626,7 +2655,7 @@ DIR_GRAPH_MAX_DEPTH = 1 # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. For an explanation of the image formats see the section # output formats in the documentation of the dot tool (Graphviz (see: -# http://www.graphviz.org/)). +# https://www.graphviz.org/)). # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order # to make the SVG files visible in IE 9+ (other browsers do not have this # requirement). @@ -2663,11 +2692,12 @@ DOT_PATH = /opt/homebrew/bin DOTFILE_DIRS = -# The MSCFILE_DIRS tag can be used to specify one or more directories that -# contain msc files that are included in the documentation (see the \mscfile -# command). +# You can include diagrams made with dia in doxygen documentation. Doxygen will +# then run dia to produce the diagram and insert it in the documentation. The +# DIA_PATH tag allows you to specify the directory where the dia binary resides. +# If left empty dia is assumed to be found in the default search path. -MSCFILE_DIRS = +DIA_PATH = # The DIAFILE_DIRS tag can be used to specify one or more directories that # contain dia files that are included in the documentation (see the \diafile @@ -2744,3 +2774,19 @@ GENERATE_LEGEND = YES # The default value is: YES. DOT_CLEANUP = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. If the MSCGEN_TOOL tag is left empty (the default), then doxygen will +# use a built-in version of mscgen tool to produce the charts. Alternatively, +# the MSCGEN_TOOL tag can also specify the name an external tool. For instance, +# specifying prog as the value, doxygen will call the tool as prog -T +# -o . The external tool should support +# output file formats "png", "eps", "svg", and "ismap". + +MSCGEN_TOOL = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the \mscfile +# command). + +MSCFILE_DIRS = From c8524e8a105ec7679d6fc6d0e34230b58af3e033 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 28 May 2023 14:52:18 -0400 Subject: [PATCH 174/245] Added missing documentation for several categories and cross-reference documentation from each category to its base class and vice-versa. --- .../PlatformSpecific/CPTPlatformSpecificCategories.h | 10 ++++++++++ framework/Source/CPTAnimation.m | 2 ++ framework/Source/CPTAnimationPeriod.h | 7 +++++++ framework/Source/CPTAnimationPeriod.m | 2 ++ framework/Source/CPTAnnotation.h | 2 ++ framework/Source/CPTAnnotation.m | 2 ++ framework/Source/CPTAxis.h | 2 ++ framework/Source/CPTAxis.m | 1 + framework/Source/CPTConstraints.h | 2 ++ framework/Source/CPTConstraints.m | 2 ++ framework/Source/CPTFill.h | 2 ++ framework/Source/CPTFill.m | 2 ++ framework/Source/CPTGraph.h | 2 ++ framework/Source/CPTGraph.m | 1 + framework/Source/CPTImage.h | 2 ++ framework/Source/CPTImage.m | 2 ++ framework/Source/CPTLayer.m | 2 ++ .../Source/CPTMutableNumericData+TypeConversion.h | 2 ++ framework/Source/CPTMutableNumericData.m | 2 ++ framework/Source/CPTMutableTextStyle.h | 9 +++++++++ framework/Source/CPTMutableTextStyle.m | 2 ++ framework/Source/CPTNumericData+TypeConversion.h | 2 ++ framework/Source/CPTNumericData.m | 2 ++ framework/Source/CPTPlot.h | 2 ++ framework/Source/CPTPlot.m | 1 + framework/Source/CPTPlotSpace.h | 2 ++ framework/Source/CPTPlotSpace.m | 2 ++ framework/Source/CPTTextStyle.h | 4 ++++ framework/Source/CPTTextStyle.m | 2 ++ framework/Source/CPTTheme.h | 2 ++ framework/Source/CPTTheme.m | 2 ++ framework/Source/_CPTDebugQuickLook.h | 2 ++ framework/Source/_NSCoderExtensions.h | 2 ++ framework/Source/_NSDecimalNumberExtensions.h | 2 ++ framework/Source/_NSNumberExtensions.h | 2 ++ 35 files changed, 89 insertions(+) diff --git a/framework/PlatformSpecific/CPTPlatformSpecificCategories.h b/framework/PlatformSpecific/CPTPlatformSpecificCategories.h index 1ea10da25..b8adee82d 100644 --- a/framework/PlatformSpecific/CPTPlatformSpecificCategories.h +++ b/framework/PlatformSpecific/CPTPlatformSpecificCategories.h @@ -19,6 +19,8 @@ /** @category CPTLayer(CPTPlatformSpecificLayerExtensions) * @brief Platform-specific extensions to CPTLayer. + * + * @see CPTLayer **/ @interface CPTLayer(CPTPlatformSpecificLayerExtensions) @@ -33,6 +35,8 @@ /** @category NSAttributedString(CPTPlatformSpecificAttributedStringExtensions) * @brief NSAttributedString extensions for drawing styled text. + * + * @see NSAttributedString **/ @interface NSAttributedString(CPTPlatformSpecificAttributedStringExtensions) @@ -56,6 +60,8 @@ /** @category CPTLayer(CPTPlatformSpecificLayerExtensions) * @brief Platform-specific extensions to CPTLayer. + * + * @see CPTLayer **/ @interface CPTLayer(CPTPlatformSpecificLayerExtensions) @@ -70,6 +76,8 @@ /** @category NSNumber(CPTPlatformSpecificNumberExtensions) * @brief Platform-specific extensions to NSNumber. + * + * @see NSNumber **/ @interface NSNumber(CPTPlatformSpecificNumberExtensions) @@ -84,6 +92,8 @@ /** @category NSAttributedString(CPTPlatformSpecificAttributedStringExtensions) * @brief NSAttributedString extensions for drawing styled text. + * + * @see NSAttributedString **/ @interface NSAttributedString(CPTPlatformSpecificAttributedStringExtensions) diff --git a/framework/Source/CPTAnimation.m b/framework/Source/CPTAnimation.m index 46a88cd8b..84c161d57 100644 --- a/framework/Source/CPTAnimation.m +++ b/framework/Source/CPTAnimation.m @@ -47,6 +47,8 @@ -(void)update; * * CPTAnimation provides animation support for all of these things. It can animate any property (of the supported data types) * on objects of any class. + * + * @see CPTAnimation(CPTAnimationPeriodAdditions) **/ @implementation CPTAnimation diff --git a/framework/Source/CPTAnimationPeriod.h b/framework/Source/CPTAnimationPeriod.h index f93af5e18..fd94d63b6 100644 --- a/framework/Source/CPTAnimationPeriod.h +++ b/framework/Source/CPTAnimationPeriod.h @@ -47,6 +47,8 @@ /** @category CPTAnimationPeriod(AbstractMethods) * @brief CPTAnimationPeriod abstract methods—must be overridden by subclasses + * + * @see CPTAnimationPeriod **/ @interface CPTAnimationPeriod(AbstractMethods) @@ -69,6 +71,11 @@ #pragma mark - +/** @category CPTAnimation(CPTAnimationPeriodAdditions) + * @brief CPTAnimationPeriod convenience methods added to CPTAnimation. + * + * @see CPTAnimation + **/ @interface CPTAnimation(CPTAnimationPeriodAdditions) /// @name CGFloat Property Animation diff --git a/framework/Source/CPTAnimationPeriod.m b/framework/Source/CPTAnimationPeriod.m index 00f35e276..76d0a77ac 100644 --- a/framework/Source/CPTAnimationPeriod.m +++ b/framework/Source/CPTAnimationPeriod.m @@ -37,6 +37,8 @@ -(nonnull instancetype)initWithStartValue:(nullable NSValue *)aStartValue endVal * - @ref NSNumber * - @ref CPTPlotRange (NSValue wrapper not used) * @note The starting and ending values must be the same type. + * + * @see CPTAnimationPeriod(AbstractMethods) **/ @implementation CPTAnimationPeriod diff --git a/framework/Source/CPTAnnotation.h b/framework/Source/CPTAnnotation.h index 6922b85a0..1c24470ce 100644 --- a/framework/Source/CPTAnnotation.h +++ b/framework/Source/CPTAnnotation.h @@ -40,6 +40,8 @@ typedef NSMutableArray<__kindof CPTAnnotation *> CPTMutableAnnotationArray; /** @category CPTAnnotation(AbstractMethods) * @brief CPTAnnotation abstract methods—must be overridden by subclasses. + * + * @see CPTAnnotation **/ @interface CPTAnnotation(AbstractMethods) diff --git a/framework/Source/CPTAnnotation.m b/framework/Source/CPTAnnotation.m index 3a281f484..ec1fbcd94 100644 --- a/framework/Source/CPTAnnotation.m +++ b/framework/Source/CPTAnnotation.m @@ -8,6 +8,8 @@ * Annotations can be used to add text or images that are anchored to a feature * of a graph. For example, the graph title is an annotation anchored to the graph. * The annotation content layer can be any CPTLayer. + * + * @see CPTAnnotation(AbstractMethods) **/ @implementation CPTAnnotation diff --git a/framework/Source/CPTAxis.h b/framework/Source/CPTAxis.h index a477d6fd0..4ac47d0e0 100644 --- a/framework/Source/CPTAxis.h +++ b/framework/Source/CPTAxis.h @@ -331,6 +331,8 @@ typedef NSMutableArray<__kindof CPTAxis *> CPTMutableAxisArray; /** @category CPTAxis(AbstractMethods) * @brief CPTAxis abstract methods—must be overridden by subclasses + * + * @see CPTAxis **/ @interface CPTAxis(AbstractMethods) diff --git a/framework/Source/CPTAxis.m b/framework/Source/CPTAxis.m index 051c6d023..8b4f6808d 100644 --- a/framework/Source/CPTAxis.m +++ b/framework/Source/CPTAxis.m @@ -68,6 +68,7 @@ -(void)updateMinorTickLabelOffsets; * @nil, the axis and grid lines will extend the full width of the plot area. * @image html "axis ranges.png" "Axis Ranges" * @see See @ref axisAnimation "Axes" for a list of animatable properties. + * @see CPTAxis(AbstractMethods) **/ @implementation CPTAxis diff --git a/framework/Source/CPTConstraints.h b/framework/Source/CPTConstraints.h index 7d86877e9..0c18a12d8 100644 --- a/framework/Source/CPTConstraints.h +++ b/framework/Source/CPTConstraints.h @@ -21,6 +21,8 @@ /** @category CPTConstraints(AbstractMethods) * @brief CPTConstraints abstract methods—must be overridden by subclasses + * + * @see CPTConstraints **/ @interface CPTConstraints(AbstractMethods) diff --git a/framework/Source/CPTConstraints.m b/framework/Source/CPTConstraints.m index 5fcfe65bd..c629efc60 100644 --- a/framework/Source/CPTConstraints.m +++ b/framework/Source/CPTConstraints.m @@ -8,6 +8,8 @@ /** @brief Implements a one-dimensional constrained position within a given numeric range. * * Supports fixed distance from either end of the range and a proportional fraction of the range. + * + * @see CPTConstraints(AbstractMethods) **/ @implementation CPTConstraints diff --git a/framework/Source/CPTFill.h b/framework/Source/CPTFill.h index e60b61e1c..7bc0ae6aa 100644 --- a/framework/Source/CPTFill.h +++ b/framework/Source/CPTFill.h @@ -38,6 +38,8 @@ typedef NSMutableArray CPTMutableFillArray; /** @category CPTFill(AbstractMethods) * @brief CPTFill abstract methods—must be overridden by subclasses + * + * @see CPTFill **/ @interface CPTFill(AbstractMethods) diff --git a/framework/Source/CPTFill.m b/framework/Source/CPTFill.m index 5fca3e248..07af15121 100644 --- a/framework/Source/CPTFill.m +++ b/framework/Source/CPTFill.m @@ -13,6 +13,8 @@ * CPTFill instances can be used to fill drawing areas with colors (including patterns), * gradients, and images. Drawing methods are provided to fill rectangular areas and * arbitrary drawing paths. + * + * @see CPTFill(AbstractMethods) **/ @implementation CPTFill diff --git a/framework/Source/CPTGraph.h b/framework/Source/CPTGraph.h index 8d0531a66..dca7e21b7 100644 --- a/framework/Source/CPTGraph.h +++ b/framework/Source/CPTGraph.h @@ -155,6 +155,8 @@ typedef NS_ENUM (NSInteger, CPTGraphLayerType) { /** @category CPTGraph(AbstractFactoryMethods) * @brief CPTGraph abstract methods—must be overridden by subclasses + * + * @see CPTGraph **/ @interface CPTGraph(AbstractFactoryMethods) diff --git a/framework/Source/CPTGraph.m b/framework/Source/CPTGraph.m index 80c98508e..0ec7b84c6 100644 --- a/framework/Source/CPTGraph.m +++ b/framework/Source/CPTGraph.m @@ -63,6 +63,7 @@ -(CGPoint)contentAnchorForRectAnchor:(CPTRectAnchor)anchor; * a new graph; more may be added as needed. * * @see See @ref graphAnimation "Graphs" for a list of animatable properties. + * @see CPTGraph(AbstractFactoryMethods) **/ @implementation CPTGraph diff --git a/framework/Source/CPTImage.h b/framework/Source/CPTImage.h index 23629422e..5ac51186c 100644 --- a/framework/Source/CPTImage.h +++ b/framework/Source/CPTImage.h @@ -46,6 +46,8 @@ /** @category CPTImage(CPTPlatformSpecificImageExtensions) * @brief Platform-specific extensions to CPTImage. + * + * @see CPTImage **/ @interface CPTImage(CPTPlatformSpecificImageExtensions) diff --git a/framework/Source/CPTImage.m b/framework/Source/CPTImage.m index 76b6d8841..0eae09d06 100644 --- a/framework/Source/CPTImage.m +++ b/framework/Source/CPTImage.m @@ -44,6 +44,8 @@ -(void)drawImage:(nonnull CGImageRef)theImage inContext:(nonnull CGContextRef)co * @if iOSOnly UIImage, @endif * and an @2x version of the image file is available, the image will be rendered correctly on * Retina and non-Retina displays. + * + * @see CPTImage(CPTPlatformSpecificImageExtensions) **/ @implementation CPTImage diff --git a/framework/Source/CPTLayer.m b/framework/Source/CPTLayer.m index 791c61ef6..7e6360554 100644 --- a/framework/Source/CPTLayer.m +++ b/framework/Source/CPTLayer.m @@ -50,6 +50,8 @@ -(CPTGraphHostingView *)findHostingView; * bounds, minus any padding. Default animations for changes in position, bounds, * and sublayers are turned off. The default layer is not opaque and does not mask * to bounds. + * + * @see CPTLayer(CPTPlatformSpecificLayerExtensions) **/ @implementation CPTLayer diff --git a/framework/Source/CPTMutableNumericData+TypeConversion.h b/framework/Source/CPTMutableNumericData+TypeConversion.h index 697cd1ff2..41c656d3b 100644 --- a/framework/Source/CPTMutableNumericData+TypeConversion.h +++ b/framework/Source/CPTMutableNumericData+TypeConversion.h @@ -8,6 +8,8 @@ /** @category CPTMutableNumericData(TypeConversion) * @brief Type conversion methods for CPTMutableNumericData. + * + * @see CPTMutableNumericData **/ @interface CPTMutableNumericData(TypeConversion) diff --git a/framework/Source/CPTMutableNumericData.m b/framework/Source/CPTMutableNumericData.m index 55bf97a26..650b946c7 100644 --- a/framework/Source/CPTMutableNumericData.m +++ b/framework/Source/CPTMutableNumericData.m @@ -21,6 +21,8 @@ -(NSUInteger)sampleIndex:(NSUInteger)idx indexList:(va_list)indexList; * which can be more than one byte in size, is referred to as a @quote{sample}. * The structure of this object is similar to the NumPy ndarray * object. + * + * @see CPTMutableNumericData(TypeConversion) **/ @implementation CPTMutableNumericData diff --git a/framework/Source/CPTMutableTextStyle.h b/framework/Source/CPTMutableTextStyle.h index 98b700370..f07ee5c32 100644 --- a/framework/Source/CPTMutableTextStyle.h +++ b/framework/Source/CPTMutableTextStyle.h @@ -16,3 +16,12 @@ @property (readwrite, assign, nonatomic) NSLineBreakMode lineBreakMode; @end + +/** @category CPTMutableTextStyle(CPTPlatformSpecificMutableTextStyleExtensions) + * @brief Platform-specific extensions to CPTMutableTextStyle + * + * @see CPTMutableTextStyle + **/ +@interface CPTMutableTextStyle(CPTPlatformSpecificMutableTextStyleExtensions) + +@end diff --git a/framework/Source/CPTMutableTextStyle.m b/framework/Source/CPTMutableTextStyle.m index 50cce383a..e2a8c6257 100644 --- a/framework/Source/CPTMutableTextStyle.m +++ b/framework/Source/CPTMutableTextStyle.m @@ -3,6 +3,8 @@ /** @brief Mutable wrapper for text style properties. * * Use this whenever you need to customize the properties of a text style. + * + * @see CPTMutableTextStyle(CPTPlatformSpecificMutableTextStyleExtensions) **/ @implementation CPTMutableTextStyle diff --git a/framework/Source/CPTNumericData+TypeConversion.h b/framework/Source/CPTNumericData+TypeConversion.h index 38088b953..44b861201 100644 --- a/framework/Source/CPTNumericData+TypeConversion.h +++ b/framework/Source/CPTNumericData+TypeConversion.h @@ -8,6 +8,8 @@ /** @category CPTNumericData(TypeConversion) * @brief Type conversion methods for CPTNumericData. + * + * @see CPTNumericData **/ @interface CPTNumericData(TypeConversion) diff --git a/framework/Source/CPTNumericData.m b/framework/Source/CPTNumericData.m index f2336a597..dbdbb2ae8 100644 --- a/framework/Source/CPTNumericData.m +++ b/framework/Source/CPTNumericData.m @@ -43,6 +43,8 @@ -(nonnull NSData *)dataFromArray:(nonnull CPTNumberArray *)newData dataType:(CPT * * All integer and floating point types can be represented using big endian or little endian * byte order. Complex and decimal types support only the the host system’s native byte order. + * + * @see CPTNumericData(TypeConversion) **/ @implementation CPTNumericData diff --git a/framework/Source/CPTPlot.h b/framework/Source/CPTPlot.h index 4ca56cb6c..d64c43269 100644 --- a/framework/Source/CPTPlot.h +++ b/framework/Source/CPTPlot.h @@ -388,6 +388,8 @@ typedef NSMutableArray<__kindof CPTPlot *> CPTMutablePlotArray; /** @category CPTPlot(AbstractMethods) * @brief CPTPlot abstract methods—must be overridden by subclasses + * + * @see CPTPlot **/ @interface CPTPlot(AbstractMethods) diff --git a/framework/Source/CPTPlot.m b/framework/Source/CPTPlot.m index 6dfbf72ba..96e02d913 100644 --- a/framework/Source/CPTPlot.m +++ b/framework/Source/CPTPlot.m @@ -98,6 +98,7 @@ -(void)updateContentAnchorForLabel:(nonnull CPTPlotSpaceAnnotation *)label; * @if MacOnly * @see See @ref plotBindings "Plot Bindings" for a list of binding identifiers supported by each plot type. * @endif + * @see CPTPlot(AbstractMethods) **/ @implementation CPTPlot diff --git a/framework/Source/CPTPlotSpace.h b/framework/Source/CPTPlotSpace.h index dbfe912da..70f686c2e 100644 --- a/framework/Source/CPTPlotSpace.h +++ b/framework/Source/CPTPlotSpace.h @@ -216,6 +216,8 @@ typedef NSMutableArray<__kindof CPTPlotSpace *> CPTMutablePlotSpaceArray; /** @category CPTPlotSpace(AbstractMethods) * @brief CPTPlotSpace abstract methods—must be overridden by subclasses + * + * @see CPTPlotSpace **/ @interface CPTPlotSpace(AbstractMethods) diff --git a/framework/Source/CPTPlotSpace.m b/framework/Source/CPTPlotSpace.m index 74b071b70..75988f064 100644 --- a/framework/Source/CPTPlotSpace.m +++ b/framework/Source/CPTPlotSpace.m @@ -33,6 +33,8 @@ -(nonnull CPTMutableCategorySet *)orderedSetForCoordinate:(CPTCoordinate)coordin * * A plot space determines the mapping between data coordinates * and device coordinates in the plot area. + * + * @see CPTPlotSpace(AbstractMethods) **/ @implementation CPTPlotSpace diff --git a/framework/Source/CPTTextStyle.h b/framework/Source/CPTTextStyle.h index 1037f73f7..2b5ea2009 100644 --- a/framework/Source/CPTTextStyle.h +++ b/framework/Source/CPTTextStyle.h @@ -43,6 +43,8 @@ typedef NSMutableArray CPTMutableTextStyleArray; /** @category CPTTextStyle(CPTPlatformSpecificTextStyleExtensions) * @brief Platform-specific extensions to CPTTextStyle. + * + * @see CPTTextStyle **/ @interface CPTTextStyle(CPTPlatformSpecificTextStyleExtensions) @@ -59,6 +61,8 @@ typedef NSMutableArray CPTMutableTextStyleArray; /** @category NSString(CPTTextStyleExtensions) * @brief NSString extensions for drawing styled text. + * + * @see NSString **/ @interface NSString(CPTTextStyleExtensions) diff --git a/framework/Source/CPTTextStyle.m b/framework/Source/CPTTextStyle.m index 36ee4dcb2..7bc0a33a8 100644 --- a/framework/Source/CPTTextStyle.m +++ b/framework/Source/CPTTextStyle.m @@ -24,6 +24,8 @@ @interface CPTTextStyle() /** @brief Immutable wrapper for various text style properties. * * If you need to customize properties, you should create a CPTMutableTextStyle. + * + * @see CPTTextStyle(CPTPlatformSpecificTextStyleExtensions) **/ @implementation CPTTextStyle diff --git a/framework/Source/CPTTheme.h b/framework/Source/CPTTheme.h index a43f4af90..a8dc968e3 100644 --- a/framework/Source/CPTTheme.h +++ b/framework/Source/CPTTheme.h @@ -43,6 +43,8 @@ extern CPTThemeName __nonnull const kCPTStocksTheme; ///< A graph theme wi /** @category CPTTheme(AbstractMethods) * @brief CPTTheme abstract methods—must be overridden by subclasses + * + * @see CPTTheme **/ @interface CPTTheme(AbstractMethods) diff --git a/framework/Source/CPTTheme.m b/framework/Source/CPTTheme.m index b14669ce4..41fc62ef1 100644 --- a/framework/Source/CPTTheme.m +++ b/framework/Source/CPTTheme.m @@ -39,6 +39,8 @@ +(nonnull CPTThemeDictionary *)themeDictionary; * Using a theme to format the graph does not prevent any of the style properties * from being changed later. Therefore, it is possible to apply initial formatting to * a graph using a theme and then customize the styles to suit the application later. + * + * @see CPTTheme(AbstractMethods) **/ @implementation CPTTheme diff --git a/framework/Source/_CPTDebugQuickLook.h b/framework/Source/_CPTDebugQuickLook.h index 62afb37c9..dd54533b4 100644 --- a/framework/Source/_CPTDebugQuickLook.h +++ b/framework/Source/_CPTDebugQuickLook.h @@ -19,6 +19,8 @@ /** @category NSObject(CPTDebugQuickLookExtension) * @brief Debugging extensions to NSObject. + * + * @see NSObject **/ @interface NSObject(CPTDebugQuickLookExtension) { diff --git a/framework/Source/_NSCoderExtensions.h b/framework/Source/_NSCoderExtensions.h index f2dfea4b1..4dc912787 100644 --- a/framework/Source/_NSCoderExtensions.h +++ b/framework/Source/_NSCoderExtensions.h @@ -3,6 +3,8 @@ /** @category NSCoder(CPTExtensions) * @brief Core Plot extensions to NSCoder. + * + * @see NSCoder **/ @interface NSCoder(CPTExtensions) diff --git a/framework/Source/_NSDecimalNumberExtensions.h b/framework/Source/_NSDecimalNumberExtensions.h index ed9e8f4b1..41c9424d6 100644 --- a/framework/Source/_NSDecimalNumberExtensions.h +++ b/framework/Source/_NSDecimalNumberExtensions.h @@ -2,6 +2,8 @@ /** @category NSDecimalNumber(CPTExtensions) * @brief Core Plot extensions to NSDecimalNumber. + * + * @see NSDecimalNumber **/ @interface NSDecimalNumber(CPTExtensions) diff --git a/framework/Source/_NSNumberExtensions.h b/framework/Source/_NSNumberExtensions.h index 3db301018..3434e6f76 100644 --- a/framework/Source/_NSNumberExtensions.h +++ b/framework/Source/_NSNumberExtensions.h @@ -3,6 +3,8 @@ /** @category NSNumber(CPTExtensions) * @brief Core Plot extensions to NSNumber. + * + * @see NSNumber **/ @interface NSNumber(CPTExtensions) From 60556bd2f96e1cfd85c7c2241a57c19ede01fed7 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Mon, 29 May 2023 19:59:06 -0400 Subject: [PATCH 175/245] Replaced "magic numbers" with predefined constants. Ensure these constants are always defined during compilation and when building documentation. --- documentation/doxygen/doxygen touch.config | 9 ++++ documentation/doxygen/doxygen.config | 8 ++++ framework/CorePlot_Prefix.pch | 42 ++++++++++++++++++- .../CPTTextStylePlatformSpecific.h | 2 +- .../CPTTextStylePlatformSpecific.m | 2 +- framework/Source/CPTAnimation.h | 4 +- framework/Source/CPTDefinitions.h | 2 +- framework/Source/CPTLayer.h | 4 +- 8 files changed, 65 insertions(+), 8 deletions(-) diff --git a/documentation/doxygen/doxygen touch.config b/documentation/doxygen/doxygen touch.config index a9af6ecb8..592c2bae8 100644 --- a/documentation/doxygen/doxygen touch.config +++ b/documentation/doxygen/doxygen touch.config @@ -2366,6 +2366,15 @@ INCLUDE_FILE_PATTERNS = PREDEFINED = TARGET_OS_IPHONE \ TARGET_OS_TV \ TARGET_OS_SIMULATOR \ + __IPHONE_3_0=30000 \ + __IPHONE_4_0=40000 \ + __IPHONE_5_0=50000 \ + __IPHONE_7_0=70000 \ + __IPHONE_10_0=100000 \ + __IPHONE_12_0=120000 \ + __IPHONE_13_0=130000 \ + __IPHONE_OS_VERSION_MIN_REQUIRED=__IPHONE_12_0 \ + __IPHONE_OS_VERSION_MAX_ALLOWED=__IPHONE_10_0 \ NS_DESIGNATED_INITIALIZER \ NS_RETURNS_INNER_POINTER \ "NS_ENUM(_type,_name)=enum _name : _type _name; enum _name : _type" \ diff --git a/documentation/doxygen/doxygen.config b/documentation/doxygen/doxygen.config index 9699cffec..1d13024ea 100644 --- a/documentation/doxygen/doxygen.config +++ b/documentation/doxygen/doxygen.config @@ -2366,6 +2366,14 @@ INCLUDE_FILE_PATTERNS = # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. PREDEFINED = TARGET_OS_OSX \ + MAC_OS_X_VERSION_10_5=1050 \ + MAC_OS_X_VERSION_10_6=1060 \ + MAC_OS_X_VERSION_10_7=1070 \ + MAC_OS_X_VERSION_10_8=1080 \ + MAC_OS_X_VERSION_10_12=101200 \ + MAC_OS_X_VERSION_10_15=101500 \ + MAC_OS_X_VERSION_MIN_REQUIRED=MAC_OS_X_VERSION_10_15 \ + MAC_OS_X_VERSION_MAX_ALLOWED=MAC_OS_X_VERSION_10_15 \ NS_DESIGNATED_INITIALIZER \ NS_RETURNS_INNER_POINTER \ "NS_ENUM(_type,_name)=enum _name : _type _name; enum _name : _type" \ diff --git a/framework/CorePlot_Prefix.pch b/framework/CorePlot_Prefix.pch index c3b0cd071..281ef4a68 100644 --- a/framework/CorePlot_Prefix.pch +++ b/framework/CorePlot_Prefix.pch @@ -5,12 +5,44 @@ #ifdef __OBJC__ #import - #if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST + #if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_TV || TARGET_OS_MACCATALYST #import #import + + #ifndef __IPHONE_3_0 + #define __IPHONE_3_0 30000 + #endif + + #ifndef __IPHONE_4_0 + #define __IPHONE_4_0 40000 + #endif + + #ifndef __IPHONE_5_0 + #define __IPHONE_5_0 50000 + #endif + + #ifndef __IPHONE_7_0 + #define __IPHONE_7_0 70000 + #endif + + #ifndef __IPHONE_10_0 + #define __IPHONE_10_0 100000 + #endif + + #ifndef __IPHONE_12_0 + #define __IPHONE_12_0 120000 + #endif + + #ifndef __IPHONE_13_0 + #define __IPHONE_13_0 130000 + #endif #else #import + #ifndef MAC_OS_X_VERSION_10_5 + #define MAC_OS_X_VERSION_10_5 1050 + #endif + #ifndef MAC_OS_X_VERSION_10_6 #define MAC_OS_X_VERSION_10_6 1060 #endif @@ -22,5 +54,13 @@ #ifndef MAC_OS_X_VERSION_10_8 #define MAC_OS_X_VERSION_10_8 1080 #endif + + #ifndef MAC_OS_X_VERSION_10_12 + #define MAC_OS_X_VERSION_10_12 101200 + #endif + + #ifndef MAC_OS_X_VERSION_10_15 + #define MAC_OS_X_VERSION_10_15 101500 + #endif #endif #endif diff --git a/framework/PlatformSpecific/CPTTextStylePlatformSpecific.h b/framework/PlatformSpecific/CPTTextStylePlatformSpecific.h index 11ecf1d31..e01ef887e 100644 --- a/framework/PlatformSpecific/CPTTextStylePlatformSpecific.h +++ b/framework/PlatformSpecific/CPTTextStylePlatformSpecific.h @@ -12,7 +12,7 @@ /** * @brief Enumeration of paragraph alignments. **/ -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= 101200) +#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_12) typedef NS_ENUM (NSInteger, CPTTextAlignment) { CPTTextAlignmentLeft = NSTextAlignmentLeft, ///< Left alignment. CPTTextAlignmentCenter = NSTextAlignmentCenter, ///< Center alignment. diff --git a/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m b/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m index 5a36b7e78..ecfb6f643 100644 --- a/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m +++ b/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m @@ -498,7 +498,7 @@ -(void)drawInRect:(CGRect)rect withTextStyle:(nullable CPTTextStyle *)style inCo attributes:style.attributes context:nil]; #else -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_7_0 // -drawWithRect:options:attributes:context: method is available in iOS 7.0 and later if ( [self respondsToSelector:@selector(drawWithRect:options:attributes:context:)] ) { [self drawWithRect:rect diff --git a/framework/Source/CPTAnimation.h b/framework/Source/CPTAnimation.h index ce86cdb19..32029784c 100644 --- a/framework/Source/CPTAnimation.h +++ b/framework/Source/CPTAnimation.h @@ -46,8 +46,8 @@ typedef NS_ENUM (NSInteger, CPTAnimationCurve) { /** * @brief Animation delegate. **/ -#if ((TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_TV || TARGET_OS_MACCATALYST) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= 100000)) \ - || (TARGET_OS_OSX && (MAC_OS_X_VERSION_MAX_ALLOWED >= 101200)) +#if ((TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_TV || TARGET_OS_MACCATALYST) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0)) \ + || (TARGET_OS_OSX && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_12)) // CAAnimationDelegate is defined by Core Animation in iOS 10.0+, macOS 10.12+, and tvOS 10.0+ @protocol CPTAnimationDelegate #else diff --git a/framework/Source/CPTDefinitions.h b/framework/Source/CPTDefinitions.h index 9c7935caa..8571c7f2f 100644 --- a/framework/Source/CPTDefinitions.h +++ b/framework/Source/CPTDefinitions.h @@ -29,7 +29,7 @@ #if TARGET_OS_IPHONE && defined(__IPHONE_5_0) && (__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_5_0) && __clang__ && (__clang_major__ >= 3) #define CPT_SDK_SUPPORTS_WEAK 1 -#elif TARGET_OS_OSX && defined(__MAC_10_7) && (MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_7) && __clang__ && (__clang_major__ >= 3) +#elif TARGET_OS_OSX && defined(MAC_OS_X_VERSION_10_7) && (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_7) && __clang__ && (__clang_major__ >= 3) #define CPT_SDK_SUPPORTS_WEAK 1 #else #define CPT_SDK_SUPPORTS_WEAK 0 diff --git a/framework/Source/CPTLayer.h b/framework/Source/CPTLayer.h index 049a99ea7..4c10f85d4 100644 --- a/framework/Source/CPTLayer.h +++ b/framework/Source/CPTLayer.h @@ -74,8 +74,8 @@ typedef NSMutableSet CPTMutableSublayerSet; /** * @brief Layer delegate. **/ -#if ((TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_TV || TARGET_OS_MACCATALYST) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= 100000)) \ - || (TARGET_OS_OSX && (MAC_OS_X_VERSION_MAX_ALLOWED >= 101200)) +#if ((TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_TV || TARGET_OS_MACCATALYST) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0)) \ + || (TARGET_OS_OSX && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_12)) // CALayerDelegate is defined by Core Animation in iOS 10.0+, macOS 10.12+, and tvOS 10.0+ @protocol CPTLayerDelegate #else From 71b3b026b9af6e4a442f958c0483b21ec69c2bb5 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Mon, 29 May 2023 20:08:57 -0400 Subject: [PATCH 176/245] Updated the Doxygen link from http to https. --- README.md | 2 +- framework/Source/mainpage.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2f189a6c3..6e3a5730e 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Documentation of the Core Plot API and high-level architecture can be found in t * [Change log](https://github.com/core-plot/core-plot/blob/master/documentation/changelog.markdown) * [API documentation](https://core-plot.github.io/MacOS/index.html) for Mac * [API documentation](https://core-plot.github.io/iOS/index.html) for iOS and tvOS - * API documentation built with [Doxygen](http://www.doxygen.org/) and installed locally in Xcode (see the [instructions](https://github.com/core-plot/core-plot/blob/master/READMEs/README%20for%20Docs%20Install.md) in the **READMEs** folder for details) + * API documentation built with [Doxygen](https://www.doxygen.nl/) and installed locally in Xcode (see the [instructions](https://github.com/core-plot/core-plot/blob/master/READMEs/README%20for%20Docs%20Install.md) in the **READMEs** folder for details) * [Project Wiki](https://github.com/core-plot/core-plot/wiki) on GitHub * [Documentation](https://github.com/core-plot/core-plot/tree/master/documentation) folder in the code repository diff --git a/framework/Source/mainpage.h b/framework/Source/mainpage.h index 3a6dd9495..b3739be3f 100644 --- a/framework/Source/mainpage.h +++ b/framework/Source/mainpage.h @@ -22,7 +22,7 @@ * - Change log * - API documentation for Mac * - API documentation for iOS - * - API documentation built with Doxygen and installed locally in Xcode + * - API documentation built with Doxygen and installed locally in Xcode * (see the instructions * in the READMEs folder for details) * - Project Wiki on GitHub From 2923cfb511919b9398eb0a8b51d2e73f193906a8 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Tue, 30 May 2023 18:30:09 -0400 Subject: [PATCH 177/245] Removed redundant protocol conformance declarations from CPTFill subclasses. --- framework/Source/_CPTFillColor.h | 2 +- framework/Source/_CPTFillGradient.h | 2 +- framework/Source/_CPTFillImage.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/framework/Source/_CPTFillColor.h b/framework/Source/_CPTFillColor.h index 648b6f4e0..5c6e67ae7 100644 --- a/framework/Source/_CPTFillColor.h +++ b/framework/Source/_CPTFillColor.h @@ -4,7 +4,7 @@ #import "CPTFill.h" #endif -@interface _CPTFillColor : CPTFill +@interface _CPTFillColor : CPTFill /// @name Initialization /// @{ diff --git a/framework/Source/_CPTFillGradient.h b/framework/Source/_CPTFillGradient.h index 8872231d4..339a36ae5 100644 --- a/framework/Source/_CPTFillGradient.h +++ b/framework/Source/_CPTFillGradient.h @@ -6,7 +6,7 @@ @class CPTGradient; -@interface _CPTFillGradient : CPTFill +@interface _CPTFillGradient : CPTFill /// @name Initialization /// @{ diff --git a/framework/Source/_CPTFillImage.h b/framework/Source/_CPTFillImage.h index ec4b045fa..204922836 100644 --- a/framework/Source/_CPTFillImage.h +++ b/framework/Source/_CPTFillImage.h @@ -6,7 +6,7 @@ @class CPTImage; -@interface _CPTFillImage : CPTFill +@interface _CPTFillImage : CPTFill /// @name Initialization /// @{ From ea43189312757cfff92d32c8dba7f62996056a37 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Tue, 30 May 2023 19:12:09 -0400 Subject: [PATCH 178/245] Added @file command at the beginning of each header file to fix Doxygen parsing errors. --- framework/PlatformSpecific/CPTGraphHostingView.h | 2 ++ framework/PlatformSpecific/CPTPlatformSpecificCategories.h | 2 ++ framework/PlatformSpecific/CPTPlatformSpecificFunctions.h | 6 ++---- framework/PlatformSpecific/CPTTextStylePlatformSpecific.h | 2 -- framework/Source/CPTAnimationOperation.h | 2 ++ framework/Source/CPTAnimationPeriod.h | 2 ++ framework/Source/CPTAnnotation.h | 4 ++-- framework/Source/CPTAnnotationHostLayer.h | 2 ++ framework/Source/CPTAxis.h | 4 ++-- framework/Source/CPTAxisLabel.h | 4 ++-- framework/Source/CPTAxisSet.h | 2 ++ framework/Source/CPTAxisTitle.h | 2 ++ framework/Source/CPTBarPlot.h | 4 ++-- framework/Source/CPTBorderedLayer.h | 2 ++ framework/Source/CPTColor.h | 2 ++ framework/Source/CPTDefinitions.h | 4 ++-- framework/Source/CPTFill.h | 4 ++-- framework/Source/CPTFunctionDataSource.h | 4 ++-- framework/Source/CPTGraph.h | 4 ++-- framework/Source/CPTImage.h | 2 ++ framework/Source/CPTLayer.h | 4 ++-- framework/Source/CPTLayerAnnotation.h | 2 ++ framework/Source/CPTLegend.h | 4 ++-- framework/Source/CPTLegendEntry.h | 4 ++-- framework/Source/CPTLimitBand.h | 4 ++-- framework/Source/CPTLineCap.h | 4 ++-- framework/Source/CPTLineStyle.h | 4 ++-- framework/Source/CPTMutableLineStyle.h | 2 ++ framework/Source/CPTMutableNumericData+TypeConversion.h | 2 ++ framework/Source/CPTMutableNumericData.h | 2 ++ framework/Source/CPTMutablePlotRange.h | 2 ++ framework/Source/CPTMutableShadow.h | 2 ++ framework/Source/CPTMutableTextStyle.h | 2 ++ framework/Source/CPTNumericData+TypeConversion.h | 2 ++ framework/Source/CPTNumericData.h | 2 ++ framework/Source/CPTNumericDataType.h | 4 ++-- framework/Source/CPTPathExtensions.h | 3 ++- framework/Source/CPTPieChart.h | 4 ++-- framework/Source/CPTPlot.h | 4 ++-- framework/Source/CPTPlotArea.h | 2 ++ framework/Source/CPTPlotAreaFrame.h | 2 ++ framework/Source/CPTPlotRange.h | 4 ++-- framework/Source/CPTPlotSpace.h | 2 ++ framework/Source/CPTPlotSpaceAnnotation.h | 2 ++ framework/Source/CPTPlotSymbol.h | 4 ++-- framework/Source/CPTRangePlot.h | 2 ++ framework/Source/CPTResponder.h | 2 ++ framework/Source/CPTScatterPlot.h | 4 ++-- framework/Source/CPTTextLayer.h | 4 ++-- framework/Source/CPTTextStyle.h | 2 ++ framework/Source/CPTTheme.h | 2 ++ framework/Source/CPTTradingRangePlot.h | 4 ++-- framework/Source/CPTUtilities.h | 4 ++-- framework/Source/CPTXYAxis.h | 2 ++ framework/Source/CPTXYAxisSet.h | 2 ++ framework/Source/CPTXYGraph.h | 2 ++ framework/Source/CPTXYPlotSpace.h | 2 ++ framework/Source/_CPTAnimationTimingFunctions.h | 4 ++-- framework/Source/_CPTAxisLabelGroup.h | 2 ++ framework/Source/_CPTConstraintsFixed.h | 2 ++ framework/Source/_CPTConstraintsRelative.h | 2 ++ framework/Source/_CPTDarkGradientTheme.h | 2 ++ framework/Source/_CPTFillColor.h | 2 ++ framework/Source/_CPTFillGradient.h | 2 ++ framework/Source/_CPTFillImage.h | 2 ++ framework/Source/_CPTGridLineGroup.h | 2 ++ framework/Source/_CPTGridLines.h | 2 ++ framework/Source/_CPTPlainBlackTheme.h | 2 ++ framework/Source/_CPTPlainWhiteTheme.h | 2 ++ framework/Source/_CPTPlotGroup.h | 2 ++ framework/Source/_CPTSlateTheme.h | 2 ++ framework/Source/_CPTStocksTheme.h | 2 ++ framework/Source/_CPTXYTheme.h | 2 ++ 73 files changed, 144 insertions(+), 55 deletions(-) diff --git a/framework/PlatformSpecific/CPTGraphHostingView.h b/framework/PlatformSpecific/CPTGraphHostingView.h index 49a393e4c..9d8695e28 100644 --- a/framework/PlatformSpecific/CPTGraphHostingView.h +++ b/framework/PlatformSpecific/CPTGraphHostingView.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/PlatformSpecific/CPTPlatformSpecificCategories.h b/framework/PlatformSpecific/CPTPlatformSpecificCategories.h index b8adee82d..1fda1336c 100644 --- a/framework/PlatformSpecific/CPTPlatformSpecificCategories.h +++ b/framework/PlatformSpecific/CPTPlatformSpecificCategories.h @@ -1,3 +1,5 @@ +/// @file + #import #ifdef CPT_IS_FRAMEWORK diff --git a/framework/PlatformSpecific/CPTPlatformSpecificFunctions.h b/framework/PlatformSpecific/CPTPlatformSpecificFunctions.h index c7cfbdc97..f0b002cc3 100644 --- a/framework/PlatformSpecific/CPTPlatformSpecificFunctions.h +++ b/framework/PlatformSpecific/CPTPlatformSpecificFunctions.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #import @@ -13,8 +15,6 @@ #pragma mark macOS #pragma mark - -/// @file - #ifdef __cplusplus #if __cplusplus extern "C" { @@ -52,8 +52,6 @@ CPTNativeImage *__nonnull CPTQuickLookImage(CGRect rect, __nonnull CPTQuickLookI #pragma mark - iOS, tvOS, Mac Catalyst #pragma mark - -/// @file - #ifdef __cplusplus #if __cplusplus extern "C" { diff --git a/framework/PlatformSpecific/CPTTextStylePlatformSpecific.h b/framework/PlatformSpecific/CPTTextStylePlatformSpecific.h index e01ef887e..4268f3f20 100644 --- a/framework/PlatformSpecific/CPTTextStylePlatformSpecific.h +++ b/framework/PlatformSpecific/CPTTextStylePlatformSpecific.h @@ -37,8 +37,6 @@ typedef NS_ENUM (NSInteger, CPTTextAlignment) { #import -/// @file - /** * @brief Enumeration of paragraph alignments. **/ diff --git a/framework/Source/CPTAnimationOperation.h b/framework/Source/CPTAnimationOperation.h index 92adc7ca9..590949427 100644 --- a/framework/Source/CPTAnimationOperation.h +++ b/framework/Source/CPTAnimationOperation.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #import diff --git a/framework/Source/CPTAnimationPeriod.h b/framework/Source/CPTAnimationPeriod.h index fd94d63b6..135a2e1d0 100644 --- a/framework/Source/CPTAnimationPeriod.h +++ b/framework/Source/CPTAnimationPeriod.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/CPTAnnotation.h b/framework/Source/CPTAnnotation.h index 1c24470ce..afa12e709 100644 --- a/framework/Source/CPTAnnotation.h +++ b/framework/Source/CPTAnnotation.h @@ -1,11 +1,11 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else #import "CPTDefinitions.h" #endif -/// @file - @class CPTAnnotation; @class CPTAnnotationHostLayer; @class CPTLayer; diff --git a/framework/Source/CPTAnnotationHostLayer.h b/framework/Source/CPTAnnotationHostLayer.h index df37c3c0d..b167cc921 100644 --- a/framework/Source/CPTAnnotationHostLayer.h +++ b/framework/Source/CPTAnnotationHostLayer.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #import diff --git a/framework/Source/CPTAxis.h b/framework/Source/CPTAxis.h index 4ac47d0e0..d05bf9fd6 100644 --- a/framework/Source/CPTAxis.h +++ b/framework/Source/CPTAxis.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #import @@ -16,8 +18,6 @@ #import "CPTTextStyle.h" #endif -/// @file - @class CPTAxis; @class CPTAxisSet; @class CPTAxisTitle; diff --git a/framework/Source/CPTAxisLabel.h b/framework/Source/CPTAxisLabel.h index 7b5246a50..edb316175 100644 --- a/framework/Source/CPTAxisLabel.h +++ b/framework/Source/CPTAxisLabel.h @@ -1,11 +1,11 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else #import "CPTDefinitions.h" #endif -/// @file - @class CPTAxisLabel; @class CPTLayer; @class CPTTextStyle; diff --git a/framework/Source/CPTAxisSet.h b/framework/Source/CPTAxisSet.h index 504c5835d..d24528f47 100644 --- a/framework/Source/CPTAxisSet.h +++ b/framework/Source/CPTAxisSet.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #import diff --git a/framework/Source/CPTAxisTitle.h b/framework/Source/CPTAxisTitle.h index d51729ddd..5b288ad39 100644 --- a/framework/Source/CPTAxisTitle.h +++ b/framework/Source/CPTAxisTitle.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/CPTBarPlot.h b/framework/Source/CPTBarPlot.h index 86e7eae06..62fe6fcd4 100644 --- a/framework/Source/CPTBarPlot.h +++ b/framework/Source/CPTBarPlot.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #import @@ -10,8 +12,6 @@ #import "CPTPlot.h" #endif -/// @file - @class CPTMutableNumericData; @class CPTNumericData; @class CPTPlotRange; diff --git a/framework/Source/CPTBorderedLayer.h b/framework/Source/CPTBorderedLayer.h index 2311c2215..de8176f3c 100644 --- a/framework/Source/CPTBorderedLayer.h +++ b/framework/Source/CPTBorderedLayer.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/CPTColor.h b/framework/Source/CPTColor.h index b04645ae5..c4db56a4a 100644 --- a/framework/Source/CPTColor.h +++ b/framework/Source/CPTColor.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/CPTDefinitions.h b/framework/Source/CPTDefinitions.h index 8571c7f2f..63c4e11c5 100644 --- a/framework/Source/CPTDefinitions.h +++ b/framework/Source/CPTDefinitions.h @@ -1,3 +1,5 @@ +/// @file + #import #import @@ -7,8 +9,6 @@ #import #endif -/// @file - #pragma mark - #pragma mark Memory management diff --git a/framework/Source/CPTFill.h b/framework/Source/CPTFill.h index 7bc0ae6aa..17ca37bb7 100644 --- a/framework/Source/CPTFill.h +++ b/framework/Source/CPTFill.h @@ -1,8 +1,8 @@ +/// @file + #import #import -/// @file - @class CPTGradient; @class CPTImage; @class CPTColor; diff --git a/framework/Source/CPTFunctionDataSource.h b/framework/Source/CPTFunctionDataSource.h index 49a3d2e42..56739d178 100644 --- a/framework/Source/CPTFunctionDataSource.h +++ b/framework/Source/CPTFunctionDataSource.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else @@ -6,8 +8,6 @@ @class CPTPlotRange; -/// @file - /** * @brief A function called to generate plot data in a CPTFunctionDataSource datasource. **/ diff --git a/framework/Source/CPTGraph.h b/framework/Source/CPTGraph.h index dca7e21b7..6ff27ee00 100644 --- a/framework/Source/CPTGraph.h +++ b/framework/Source/CPTGraph.h @@ -1,4 +1,6 @@ // Abstract class +/// @file + #ifdef CPT_IS_FRAMEWORK #import #import @@ -11,8 +13,6 @@ #import "CPTPlotSpace.h" #endif -/// @file - @class CPTAxisSet; @class CPTGraphHostingView; @class CPTLegend; diff --git a/framework/Source/CPTImage.h b/framework/Source/CPTImage.h index 5ac51186c..4e28980f2 100644 --- a/framework/Source/CPTImage.h +++ b/framework/Source/CPTImage.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #import diff --git a/framework/Source/CPTLayer.h b/framework/Source/CPTLayer.h index 4c10f85d4..27bea51fe 100644 --- a/framework/Source/CPTLayer.h +++ b/framework/Source/CPTLayer.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #import @@ -8,8 +10,6 @@ #import -/// @file - @class CPTGraph; @class CPTLayer; @class CPTShadow; diff --git a/framework/Source/CPTLayerAnnotation.h b/framework/Source/CPTLayerAnnotation.h index d9080d520..616670c78 100644 --- a/framework/Source/CPTLayerAnnotation.h +++ b/framework/Source/CPTLayerAnnotation.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #import diff --git a/framework/Source/CPTLegend.h b/framework/Source/CPTLegend.h index 2059b1730..504f9c872 100644 --- a/framework/Source/CPTLegend.h +++ b/framework/Source/CPTLegend.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #import @@ -6,8 +8,6 @@ #import "CPTPlot.h" #endif -/// @file - @class CPTFill; @class CPTLegend; @class CPTLineStyle; diff --git a/framework/Source/CPTLegendEntry.h b/framework/Source/CPTLegendEntry.h index e7c484d73..24873ddee 100644 --- a/framework/Source/CPTLegendEntry.h +++ b/framework/Source/CPTLegendEntry.h @@ -1,11 +1,11 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else #import "CPTDefinitions.h" #endif -/// @file - @class CPTLegendEntry; @class CPTPlot; @class CPTTextStyle; diff --git a/framework/Source/CPTLimitBand.h b/framework/Source/CPTLimitBand.h index e7cf493b6..b257d16a4 100644 --- a/framework/Source/CPTLimitBand.h +++ b/framework/Source/CPTLimitBand.h @@ -1,7 +1,7 @@ -#import - /// @file +#import + @class CPTFill; @class CPTLimitBand; @class CPTPlotRange; diff --git a/framework/Source/CPTLineCap.h b/framework/Source/CPTLineCap.h index 21b3b5ddf..d82ac4775 100644 --- a/framework/Source/CPTLineCap.h +++ b/framework/Source/CPTLineCap.h @@ -1,8 +1,8 @@ +/// @file + #import #import -/// @file - @class CPTLineStyle; @class CPTFill; diff --git a/framework/Source/CPTLineStyle.h b/framework/Source/CPTLineStyle.h index 30ba807b4..263f3509d 100644 --- a/framework/Source/CPTLineStyle.h +++ b/framework/Source/CPTLineStyle.h @@ -1,11 +1,11 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else #import "CPTDefinitions.h" #endif -/// @file - @class CPTColor; @class CPTFill; @class CPTGradient; diff --git a/framework/Source/CPTMutableLineStyle.h b/framework/Source/CPTMutableLineStyle.h index e68cb8fb4..1303b8d4f 100644 --- a/framework/Source/CPTMutableLineStyle.h +++ b/framework/Source/CPTMutableLineStyle.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/CPTMutableNumericData+TypeConversion.h b/framework/Source/CPTMutableNumericData+TypeConversion.h index 41c656d3b..01e4104dd 100644 --- a/framework/Source/CPTMutableNumericData+TypeConversion.h +++ b/framework/Source/CPTMutableNumericData+TypeConversion.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #import diff --git a/framework/Source/CPTMutableNumericData.h b/framework/Source/CPTMutableNumericData.h index fe51efd40..e43316be1 100644 --- a/framework/Source/CPTMutableNumericData.h +++ b/framework/Source/CPTMutableNumericData.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #import diff --git a/framework/Source/CPTMutablePlotRange.h b/framework/Source/CPTMutablePlotRange.h index cda93223d..6c9a46bd6 100644 --- a/framework/Source/CPTMutablePlotRange.h +++ b/framework/Source/CPTMutablePlotRange.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/CPTMutableShadow.h b/framework/Source/CPTMutableShadow.h index d03a13c64..6e5517720 100644 --- a/framework/Source/CPTMutableShadow.h +++ b/framework/Source/CPTMutableShadow.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/CPTMutableTextStyle.h b/framework/Source/CPTMutableTextStyle.h index f07ee5c32..208ade490 100644 --- a/framework/Source/CPTMutableTextStyle.h +++ b/framework/Source/CPTMutableTextStyle.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/CPTNumericData+TypeConversion.h b/framework/Source/CPTNumericData+TypeConversion.h index 44b861201..1fe2f4b6a 100644 --- a/framework/Source/CPTNumericData+TypeConversion.h +++ b/framework/Source/CPTNumericData+TypeConversion.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #import diff --git a/framework/Source/CPTNumericData.h b/framework/Source/CPTNumericData.h index ffe62ec0d..0d097dc90 100644 --- a/framework/Source/CPTNumericData.h +++ b/framework/Source/CPTNumericData.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #import diff --git a/framework/Source/CPTNumericDataType.h b/framework/Source/CPTNumericDataType.h index c3f288502..060ff20af 100644 --- a/framework/Source/CPTNumericDataType.h +++ b/framework/Source/CPTNumericDataType.h @@ -1,7 +1,7 @@ -#import - /// @file +#import + /** * @brief Enumeration of data formats for numeric data. **/ diff --git a/framework/Source/CPTPathExtensions.h b/framework/Source/CPTPathExtensions.h index f5a371690..449aa715a 100644 --- a/framework/Source/CPTPathExtensions.h +++ b/framework/Source/CPTPathExtensions.h @@ -1,6 +1,7 @@ -#import /// @file +#import + #ifdef __cplusplus #if __cplusplus extern "C" { diff --git a/framework/Source/CPTPieChart.h b/framework/Source/CPTPieChart.h index 29fc9dc71..d4deb780d 100644 --- a/framework/Source/CPTPieChart.h +++ b/framework/Source/CPTPieChart.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #import @@ -8,8 +10,6 @@ #import "CPTPlot.h" #endif -/// @file - @class CPTColor; @class CPTPieChart; @class CPTTextLayer; diff --git a/framework/Source/CPTPlot.h b/framework/Source/CPTPlot.h index d64c43269..9c9444d4d 100644 --- a/framework/Source/CPTPlot.h +++ b/framework/Source/CPTPlot.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #import @@ -8,8 +10,6 @@ #import "CPTNumericDataType.h" #endif -/// @file - @class CPTLegend; @class CPTMutableNumericData; @class CPTNumericData; diff --git a/framework/Source/CPTPlotArea.h b/framework/Source/CPTPlotArea.h index f95957d3e..55ead340f 100644 --- a/framework/Source/CPTPlotArea.h +++ b/framework/Source/CPTPlotArea.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #import diff --git a/framework/Source/CPTPlotAreaFrame.h b/framework/Source/CPTPlotAreaFrame.h index 1a732dbbb..fe3e1f4aa 100644 --- a/framework/Source/CPTPlotAreaFrame.h +++ b/framework/Source/CPTPlotAreaFrame.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/CPTPlotRange.h b/framework/Source/CPTPlotRange.h index 5728f57e7..1c531b623 100644 --- a/framework/Source/CPTPlotRange.h +++ b/framework/Source/CPTPlotRange.h @@ -1,11 +1,11 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else #import "CPTDefinitions.h" #endif -/// @file - @class CPTPlotRange; /** diff --git a/framework/Source/CPTPlotSpace.h b/framework/Source/CPTPlotSpace.h index 70f686c2e..e4a49049f 100644 --- a/framework/Source/CPTPlotSpace.h +++ b/framework/Source/CPTPlotSpace.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #import diff --git a/framework/Source/CPTPlotSpaceAnnotation.h b/framework/Source/CPTPlotSpaceAnnotation.h index ddf2eada9..f1eadd47a 100644 --- a/framework/Source/CPTPlotSpaceAnnotation.h +++ b/framework/Source/CPTPlotSpaceAnnotation.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/CPTPlotSymbol.h b/framework/Source/CPTPlotSymbol.h index 876e5830b..75e61ab30 100644 --- a/framework/Source/CPTPlotSymbol.h +++ b/framework/Source/CPTPlotSymbol.h @@ -1,8 +1,8 @@ +/// @file + #import #import -/// @file - @class CPTLineStyle; @class CPTFill; @class CPTPlotSymbol; diff --git a/framework/Source/CPTRangePlot.h b/framework/Source/CPTRangePlot.h index 8124b64ff..a96ff8747 100644 --- a/framework/Source/CPTRangePlot.h +++ b/framework/Source/CPTRangePlot.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #import diff --git a/framework/Source/CPTResponder.h b/framework/Source/CPTResponder.h index 01a25b057..09759105e 100644 --- a/framework/Source/CPTResponder.h +++ b/framework/Source/CPTResponder.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/CPTScatterPlot.h b/framework/Source/CPTScatterPlot.h index 0b00bbe88..ebca2b44a 100644 --- a/framework/Source/CPTScatterPlot.h +++ b/framework/Source/CPTScatterPlot.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #import @@ -10,8 +12,6 @@ #import "CPTPlotSymbol.h" #endif -/// @file - @class CPTLineStyle; @class CPTScatterPlot; @class CPTFill; diff --git a/framework/Source/CPTTextLayer.h b/framework/Source/CPTTextLayer.h index 07f6dbbb2..1d6f379ae 100644 --- a/framework/Source/CPTTextLayer.h +++ b/framework/Source/CPTTextLayer.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #import @@ -6,8 +8,6 @@ #import "CPTTextStyle.h" #endif -/// @file - extern const CGFloat kCPTTextLayerMarginWidth; ///< Margin width around the text. @interface CPTTextLayer : CPTBorderedLayer diff --git a/framework/Source/CPTTextStyle.h b/framework/Source/CPTTextStyle.h index 2b5ea2009..795fe84dd 100644 --- a/framework/Source/CPTTextStyle.h +++ b/framework/Source/CPTTextStyle.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #import diff --git a/framework/Source/CPTTheme.h b/framework/Source/CPTTheme.h index a8dc968e3..7923411b9 100644 --- a/framework/Source/CPTTheme.h +++ b/framework/Source/CPTTheme.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/CPTTradingRangePlot.h b/framework/Source/CPTTradingRangePlot.h index ecd5b20ae..3db6ccec2 100644 --- a/framework/Source/CPTTradingRangePlot.h +++ b/framework/Source/CPTTradingRangePlot.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #import @@ -10,8 +12,6 @@ #import "CPTPlot.h" #endif -/// @file - @class CPTTradingRangePlot; /** diff --git a/framework/Source/CPTUtilities.h b/framework/Source/CPTUtilities.h index f0e7a51aa..58c137d47 100644 --- a/framework/Source/CPTUtilities.h +++ b/framework/Source/CPTUtilities.h @@ -1,11 +1,11 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else #import "CPTDefinitions.h" #endif -/// @file - #pragma clang assume_nonnull begin @class CPTLineStyle; diff --git a/framework/Source/CPTXYAxis.h b/framework/Source/CPTXYAxis.h index a47308513..cf15f624d 100644 --- a/framework/Source/CPTXYAxis.h +++ b/framework/Source/CPTXYAxis.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/CPTXYAxisSet.h b/framework/Source/CPTXYAxisSet.h index 25d5d850b..353d01619 100644 --- a/framework/Source/CPTXYAxisSet.h +++ b/framework/Source/CPTXYAxisSet.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/CPTXYGraph.h b/framework/Source/CPTXYGraph.h index 7c4d278fe..685e6910c 100644 --- a/framework/Source/CPTXYGraph.h +++ b/framework/Source/CPTXYGraph.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #import diff --git a/framework/Source/CPTXYPlotSpace.h b/framework/Source/CPTXYPlotSpace.h index 66ca20a8c..6c19e3bab 100644 --- a/framework/Source/CPTXYPlotSpace.h +++ b/framework/Source/CPTXYPlotSpace.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import diff --git a/framework/Source/_CPTAnimationTimingFunctions.h b/framework/Source/_CPTAnimationTimingFunctions.h index a983ae877..da5d128b1 100644 --- a/framework/Source/_CPTAnimationTimingFunctions.h +++ b/framework/Source/_CPTAnimationTimingFunctions.h @@ -1,7 +1,7 @@ -#import - /// @file +#import + typedef CGFloat (*CPTAnimationTimingFunction)(CGFloat, CGFloat); #ifdef __cplusplus diff --git a/framework/Source/_CPTAxisLabelGroup.h b/framework/Source/_CPTAxisLabelGroup.h index b3a16154f..1b4732184 100644 --- a/framework/Source/_CPTAxisLabelGroup.h +++ b/framework/Source/_CPTAxisLabelGroup.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/_CPTConstraintsFixed.h b/framework/Source/_CPTConstraintsFixed.h index 012d8d53c..527bab273 100644 --- a/framework/Source/_CPTConstraintsFixed.h +++ b/framework/Source/_CPTConstraintsFixed.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/_CPTConstraintsRelative.h b/framework/Source/_CPTConstraintsRelative.h index 6a60158af..865d89703 100644 --- a/framework/Source/_CPTConstraintsRelative.h +++ b/framework/Source/_CPTConstraintsRelative.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/_CPTDarkGradientTheme.h b/framework/Source/_CPTDarkGradientTheme.h index 44f49b40d..fd92cb413 100644 --- a/framework/Source/_CPTDarkGradientTheme.h +++ b/framework/Source/_CPTDarkGradientTheme.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/_CPTFillColor.h b/framework/Source/_CPTFillColor.h index 5c6e67ae7..a2c788aa4 100644 --- a/framework/Source/_CPTFillColor.h +++ b/framework/Source/_CPTFillColor.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/_CPTFillGradient.h b/framework/Source/_CPTFillGradient.h index 339a36ae5..aa5b72e76 100644 --- a/framework/Source/_CPTFillGradient.h +++ b/framework/Source/_CPTFillGradient.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/_CPTFillImage.h b/framework/Source/_CPTFillImage.h index 204922836..dfd6a907e 100644 --- a/framework/Source/_CPTFillImage.h +++ b/framework/Source/_CPTFillImage.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/_CPTGridLineGroup.h b/framework/Source/_CPTGridLineGroup.h index 32efaa3e6..62ab1bf08 100644 --- a/framework/Source/_CPTGridLineGroup.h +++ b/framework/Source/_CPTGridLineGroup.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/_CPTGridLines.h b/framework/Source/_CPTGridLines.h index 0b389c2f6..bb74ffb2b 100644 --- a/framework/Source/_CPTGridLines.h +++ b/framework/Source/_CPTGridLines.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/_CPTPlainBlackTheme.h b/framework/Source/_CPTPlainBlackTheme.h index 399a5ce55..69787896f 100644 --- a/framework/Source/_CPTPlainBlackTheme.h +++ b/framework/Source/_CPTPlainBlackTheme.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/_CPTPlainWhiteTheme.h b/framework/Source/_CPTPlainWhiteTheme.h index a28b08bcf..6a1ebc96e 100644 --- a/framework/Source/_CPTPlainWhiteTheme.h +++ b/framework/Source/_CPTPlainWhiteTheme.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/_CPTPlotGroup.h b/framework/Source/_CPTPlotGroup.h index 1c6e9bf78..3e966ac46 100644 --- a/framework/Source/_CPTPlotGroup.h +++ b/framework/Source/_CPTPlotGroup.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/_CPTSlateTheme.h b/framework/Source/_CPTSlateTheme.h index cd45a21c7..50e59cf77 100644 --- a/framework/Source/_CPTSlateTheme.h +++ b/framework/Source/_CPTSlateTheme.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/_CPTStocksTheme.h b/framework/Source/_CPTStocksTheme.h index 6c2b4d7dd..f3ac96259 100644 --- a/framework/Source/_CPTStocksTheme.h +++ b/framework/Source/_CPTStocksTheme.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else diff --git a/framework/Source/_CPTXYTheme.h b/framework/Source/_CPTXYTheme.h index 1290ef2d1..c60b77fc7 100644 --- a/framework/Source/_CPTXYTheme.h +++ b/framework/Source/_CPTXYTheme.h @@ -1,3 +1,5 @@ +/// @file + #ifdef CPT_IS_FRAMEWORK #import #else From 82287a2e0460ed772ff82567ad134a0895beda44 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Wed, 31 May 2023 18:45:47 -0400 Subject: [PATCH 179/245] Moved the Doxygen build scripts out of the project file into a separate script file and parameterized it to share common code. --- framework/CorePlot.xcodeproj/project.pbxproj | 6 ++- scripts/generate_core_plot_docs.sh | 50 ++++++++++++++++++++ 2 files changed, 54 insertions(+), 2 deletions(-) create mode 100755 scripts/generate_core_plot_docs.sh diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index dd105ee9d..7f507bd38 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -943,6 +943,7 @@ C34AFE6A11021D010041675A /* CPTPlotSymbol.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlotSymbol.m; sourceTree = ""; }; C34BF5BA10A67633007F0894 /* CPTPlotArea.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTPlotArea.h; sourceTree = ""; }; C34BF5BB10A67633007F0894 /* CPTPlotArea.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlotArea.m; sourceTree = ""; }; + C34C19D72A2803060009BDDA /* generate_core_plot_docs.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = generate_core_plot_docs.sh; sourceTree = ""; }; C34F570D19D8CE5500446248 /* CorePlotWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotWarnings.xcconfig; path = xcconfig/CorePlotWarnings.xcconfig; sourceTree = ""; }; C3564CBD22A2D0E1000A54C9 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; C36468A80FE5533F0064B186 /* CPTTextStyleTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTTextStyleTests.h; sourceTree = ""; }; @@ -1767,6 +1768,7 @@ children = ( C3D0F67729C6053E00190D2C /* createrelease.py */, C3D0F67829C6055700190D2C /* prefixer.py */, + C34C19D72A2803060009BDDA /* generate_core_plot_docs.sh */, C3D0F67529C6053E00190D2C /* generate_spm_sources_layout.sh */, C3D0F67629C6053E00190D2C /* format_core_plot.sh */, C3D0F67929C6087100190D2C /* uncrustify.cfg */, @@ -2370,7 +2372,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# Build the doxygen documentation for the project and load the docset into Xcode.\n\n# Use the following to adjust the value of the $DOXYGEN_PATH User-Defined Setting:\n# Binary install location: /Applications/Doxygen.app/Contents/Resources/doxygen\n# Source build install location: /usr/local/bin/doxygen\n\n# Graphical class diagrams require Graphviz.\n# Graphviz.app is available free online\n# http://www.graphviz.org/Download_macos.php\n\n# If the config file doesn't exist, run 'doxygen -g \"${SOURCE_ROOT}/../documentation/doxygen/doxygen.config\"' to \n# a get default file.\n\nDOXYGEN_FOLDER=\"${SOURCE_ROOT}/../documentation/doxygen\"\n\nif ! [ -f \"${DOXYGEN_FOLDER}/doxygen.config\" ] \nthen \n echo doxygen config file does not exist\n ${DOXYGEN_PATH} -g \"${DOXYGEN_FOLDER}/doxygen.config\"\nfi\n\n# Run doxygen on the updated config file.\n# Note: doxygen creates a Makefile that does most of the heavy lifting.\n${DOXYGEN_PATH} \"${DOXYGEN_FOLDER}/doxygen.config\"\n\n# make a copy of the html docs\nDOCS_FOLDER=\"${SOURCE_ROOT}/../documentation/html/MacOS\"\nmkdir -p \"${DOCS_FOLDER}\"\ncp -R \"${SOURCE_ROOT}/CorePlotDocs.docset/html/\" \"${DOCS_FOLDER}\"\nrm -Rf \"${SOURCE_ROOT}/CorePlotDocs.docset\"\nrm -f \"${DOCS_FOLDER}/Info.plist\"\nrm -f \"${DOCS_FOLDER}/Makefile\"\nrm -f \"${DOCS_FOLDER}/Nodes.xml\"\nrm -f \"${DOCS_FOLDER}/Tokens.xml\"\n\n# Fix capitalization for GitHub pages\ncd \"${DOCS_FOLDER}\"\nls _*.* | while read a; do n=$(echo $a | sed -e 's/^_//'); mv \"$a\" \"$n\"; done\nls *.html | xargs sed -i '' 's/\\\"_/\\\"/g'\nls *.js | xargs sed -i '' 's/\\\"_/\\\"/g'\nls *.map | xargs sed -i '' 's/\\\"$_/\\\"$/g'\n\nexit 0\n"; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${SOURCE_ROOT}/../scripts/generate_core_plot_docs.sh\" doxygen macOS CorePlotDocs\n"; }; C36BE54626FF6865004287F2 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; @@ -2402,7 +2404,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# Build the doxygen documentation for the project and load the docset into Xcode.\n\n# Use the following to adjust the value of the $DOXYGEN_PATH User-Defined Setting:\n# Binary install location: /Applications/Doxygen.app/Contents/Resources/doxygen\n# Source build install location: /usr/local/bin/doxygen\n\n# Graphical class diagrams require Graphviz.\n# Graphviz.app is available free online\n# http://www.graphviz.org/Download_macos.php\n\n# If the config file doesn't exist, run 'doxygen -g \"${SOURCE_ROOT}/../documentation/doxygen/doxygen touch.config\"' to\n# a get default file.\n\nDOXYGEN_FOLDER=\"${SOURCE_ROOT}/../documentation/doxygen\"\n\nif ! [ -f \"${DOXYGEN_FOLDER}/doxygen.config\" ]\nthen\necho doxygen config file does not exist\n${DOXYGEN_PATH} -g \"${DOXYGEN_FOLDER}/doxygen.config\"\nfi\n\n# Run doxygen on the updated config file.\n# Note: doxygen creates a Makefile that does most of the heavy lifting.\n${DOXYGEN_PATH} \"${SOURCE_ROOT}/../documentation/doxygen/doxygen touch.config\"\n\n# make a copy of the html docs\nDOCS_FOLDER=\"${SOURCE_ROOT}/../documentation/html/iOS\"\nmkdir -p \"${DOCS_FOLDER}\"\ncp -R \"${SOURCE_ROOT}/CorePlotTouchDocs.docset/html/\" \"${DOCS_FOLDER}\"\nrm -Rf \"${SOURCE_ROOT}/CorePlotTouchDocs.docset\"\nrm -f \"${DOCS_FOLDER}/Info.plist\"\nrm -f \"${DOCS_FOLDER}/Makefile\"\nrm -f \"${DOCS_FOLDER}/Nodes.xml\"\nrm -f \"${DOCS_FOLDER}/Tokens.xml\"\n\n# Fix capitalization for GitHub pages\ncd \"${DOCS_FOLDER}\"\nls _*.* | while read a; do n=$(echo $a | sed -e 's/^_//'); mv \"$a\" \"$n\"; done\nls *.html | xargs sed -i '' 's/\\\"_/\\\"/g'\nls *.js | xargs sed -i '' 's/\\\"_/\\\"/g'\nls *.map | xargs sed -i '' 's/\\\"$_/\\\"$/g'\n\nexit 0\n"; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${SOURCE_ROOT}/../scripts/generate_core_plot_docs.sh\" \"doxygen touch\" iOS CorePlotTouchDocs\n"; }; C3AC175C244B594800E7380C /* ShellScript */ = { isa = PBXShellScriptBuildPhase; diff --git a/scripts/generate_core_plot_docs.sh b/scripts/generate_core_plot_docs.sh new file mode 100755 index 000000000..7467932db --- /dev/null +++ b/scripts/generate_core_plot_docs.sh @@ -0,0 +1,50 @@ +#!/bin/sh + +# Build the doxygen documentation for the project and load the docset into Xcode. + +# Use the following to adjust the value of the $DOXYGEN_PATH User-Defined Setting: +# Binary install location: /Applications/Doxygen.app/Contents/Resources/doxygen +# Source build install location: /usr/local/bin/doxygen + +# Graphical class diagrams require Graphviz. +# Graphviz.app is available free online +# http://www.graphviz.org/Download_macos.php + +# If the config file doesn't exist, run 'doxygen -g "${SOURCE_ROOT}/../documentation/doxygen/$1.config"' to +# create a default file. + +DOXYGEN_FOLDER="${SOURCE_ROOT}/../documentation/doxygen" + +if ! [ -f "${DOXYGEN_FOLDER}/$1.config" ] +then + echo doxygen config file does not exist + ${DOXYGEN_PATH} -g "${DOXYGEN_FOLDER}/$1.config" +fi + +# Run doxygen on the updated config file. +# Note: doxygen creates a Makefile that does most of the heavy lifting. +${DOXYGEN_PATH} "${DOXYGEN_FOLDER}/$1.config" + +# make a copy of the html docs +DOCS_FOLDER="${SOURCE_ROOT}/../documentation/html/$2" + +rm -Rf "${DOCS_FOLDER}" +mkdir -p "${DOCS_FOLDER}" + +cp -R "${SOURCE_ROOT}/$3.docset/html/" "${DOCS_FOLDER}" + +rm -Rf "${SOURCE_ROOT}/$3.docset" +rm -f "${DOCS_FOLDER}/Info.plist" +rm -f "${DOCS_FOLDER}/Makefile" +rm -f "${DOCS_FOLDER}/Nodes.xml" +rm -f "${DOCS_FOLDER}/Tokens.xml" + +# Fix capitalization for GitHub pages +cd "${DOCS_FOLDER}" + +ls _*.* | while read a; do n=$(echo $a | sed -e 's/^_//'); mv "$a" "$n"; done +ls *.html | xargs sed -i '' 's/\"_/\"/g' +ls *.js | xargs sed -i '' 's/\"_/\"/g' +ls *.map | xargs sed -i '' 's/\"$_/\"$/g' + +exit 0 From 410a14d32fe353d1274c38e9380fbe50eecf02c1 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Thu, 1 Jun 2023 21:10:21 -0400 Subject: [PATCH 180/245] Removed redundant documentation comments and method declarations. --- framework/Source/_CPTConstraintsFixed.h | 10 ---------- framework/Source/_CPTConstraintsFixed.m | 5 ----- framework/Source/_CPTConstraintsRelative.h | 10 ---------- framework/Source/_CPTConstraintsRelative.m | 5 ----- 4 files changed, 30 deletions(-) diff --git a/framework/Source/_CPTConstraintsFixed.h b/framework/Source/_CPTConstraintsFixed.h index 527bab273..a1bd10fd4 100644 --- a/framework/Source/_CPTConstraintsFixed.h +++ b/framework/Source/_CPTConstraintsFixed.h @@ -15,14 +15,4 @@ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)decoder NS_DESIGNATED_INITIALIZER; /// @} -/// @name Comparison -/// @{ --(BOOL)isEqualToConstraint:(nullable CPTConstraints *)otherConstraint; -/// @} - -/// @name Position -/// @{ --(CGFloat)positionForLowerBound:(CGFloat)lowerBound upperBound:(CGFloat)upperBound; -/// @} - @end diff --git a/framework/Source/_CPTConstraintsFixed.m b/framework/Source/_CPTConstraintsFixed.m index 05cda10a4..815b0776c 100644 --- a/framework/Source/_CPTConstraintsFixed.m +++ b/framework/Source/_CPTConstraintsFixed.m @@ -69,11 +69,6 @@ -(BOOL)isEqualToConstraint:(nullable CPTConstraints *)otherConstraint #pragma mark - #pragma mark Positioning -/** @brief Compute the position given a range of values. - * @param lowerBound The lower bound; must be less than or equal to the upperBound. - * @param upperBound The upper bound; must be greater than or equal to the lowerBound. - * @return The calculated position. - **/ -(CGFloat)positionForLowerBound:(CGFloat)lowerBound upperBound:(CGFloat)upperBound { NSAssert(lowerBound <= upperBound, @"lowerBound must be less than or equal to upperBound"); diff --git a/framework/Source/_CPTConstraintsRelative.h b/framework/Source/_CPTConstraintsRelative.h index 865d89703..0908d60e0 100644 --- a/framework/Source/_CPTConstraintsRelative.h +++ b/framework/Source/_CPTConstraintsRelative.h @@ -14,14 +14,4 @@ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)decoder NS_DESIGNATED_INITIALIZER; /// @} -/// @name Comparison -/// @{ --(BOOL)isEqualToConstraint:(nullable CPTConstraints *)otherConstraint; -/// @} - -/// @name Position -/// @{ --(CGFloat)positionForLowerBound:(CGFloat)lowerBound upperBound:(CGFloat)upperBound; -/// @} - @end diff --git a/framework/Source/_CPTConstraintsRelative.m b/framework/Source/_CPTConstraintsRelative.m index 403f796fe..aad2057a2 100644 --- a/framework/Source/_CPTConstraintsRelative.m +++ b/framework/Source/_CPTConstraintsRelative.m @@ -56,11 +56,6 @@ -(BOOL)isEqualToConstraint:(nullable CPTConstraints *)otherConstraint #pragma mark - #pragma mark Positioning -/** @brief Compute the position given a range of values. - * @param lowerBound The lower bound; must be less than or equal to the upperBound. - * @param upperBound The upper bound; must be greater than or equal to the lowerBound. - * @return The calculated position. - **/ -(CGFloat)positionForLowerBound:(CGFloat)lowerBound upperBound:(CGFloat)upperBound { NSAssert(lowerBound <= upperBound, @"lowerBound must be less than or equal to upperBound"); From 596594add8e7279f5beaa6bfa5c765fe724f0a6d Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Thu, 1 Jun 2023 21:17:05 -0400 Subject: [PATCH 181/245] Moved category documentation comments to above the @implementation block. --- .../CPTImagePlatformSpecific.m | 10 +++++ .../CPTPlatformSpecificCategories.h | 25 ------------ .../CPTPlatformSpecificCategories.m | 25 ++++++++++++ .../CPTTextStylePlatformSpecific.m | 31 +++++++++++++++ framework/Source/CPTAnimationPeriod.h | 10 ----- framework/Source/CPTAnimationPeriod.m | 38 +++++++++++++------ framework/Source/CPTAnnotation.h | 5 --- framework/Source/CPTAnnotation.m | 5 +++ framework/Source/CPTAxis.h | 5 --- framework/Source/CPTAxis.m | 5 +++ framework/Source/CPTConstraints.h | 5 --- framework/Source/CPTConstraints.m | 5 +++ framework/Source/CPTFill.h | 5 --- framework/Source/CPTFill.m | 5 +++ framework/Source/CPTGraph.h | 5 --- framework/Source/CPTGraph.m | 5 +++ framework/Source/CPTImage.h | 5 --- .../CPTMutableNumericData+TypeConversion.h | 5 --- .../CPTMutableNumericData+TypeConversion.m | 5 +++ framework/Source/CPTMutableTextStyle.h | 5 --- .../Source/CPTNumericData+TypeConversion.h | 5 --- .../Source/CPTNumericData+TypeConversion.m | 5 +++ framework/Source/CPTPlot.h | 5 --- framework/Source/CPTPlot.m | 5 +++ framework/Source/CPTPlotSpace.h | 5 --- framework/Source/CPTPlotSpace.m | 5 +++ framework/Source/CPTTextStyle.h | 10 ----- framework/Source/CPTTheme.h | 5 --- framework/Source/CPTTheme.m | 5 +++ framework/Source/_CPTDebugQuickLook.h | 2 +- framework/Source/_NSCoderExtensions.h | 5 --- framework/Source/_NSCoderExtensions.m | 5 +++ framework/Source/_NSDecimalNumberExtensions.h | 5 --- framework/Source/_NSDecimalNumberExtensions.m | 5 +++ framework/Source/_NSNumberExtensions.h | 5 --- framework/Source/_NSNumberExtensions.m | 5 +++ 36 files changed, 158 insertions(+), 133 deletions(-) diff --git a/framework/PlatformSpecific/CPTImagePlatformSpecific.m b/framework/PlatformSpecific/CPTImagePlatformSpecific.m index 270a50216..6c54cc9b2 100644 --- a/framework/PlatformSpecific/CPTImagePlatformSpecific.m +++ b/framework/PlatformSpecific/CPTImagePlatformSpecific.m @@ -6,6 +6,11 @@ #pragma mark macOS #pragma mark - +/** + * @brief Platform-specific extensions to CPTImage. + * + * @see CPTImage + **/ @implementation CPTImage(CPTPlatformSpecificImageExtensions) #pragma mark - @@ -78,6 +83,11 @@ -(nonnull instancetype)initForPNGFile:(nonnull NSString *)path #import "CPTUtilities.h" +/** + * @brief Platform-specific extensions to CPTImage. + * + * @see CPTImage + **/ @implementation CPTImage(CPTPlatformSpecificImageExtensions) #pragma mark - diff --git a/framework/PlatformSpecific/CPTPlatformSpecificCategories.h b/framework/PlatformSpecific/CPTPlatformSpecificCategories.h index 1fda1336c..13bfbfc42 100644 --- a/framework/PlatformSpecific/CPTPlatformSpecificCategories.h +++ b/framework/PlatformSpecific/CPTPlatformSpecificCategories.h @@ -19,11 +19,6 @@ #pragma mark CPTLayer -/** @category CPTLayer(CPTPlatformSpecificLayerExtensions) - * @brief Platform-specific extensions to CPTLayer. - * - * @see CPTLayer - **/ @interface CPTLayer(CPTPlatformSpecificLayerExtensions) /// @name Images @@ -35,11 +30,6 @@ #pragma mark - NSAttributedString -/** @category NSAttributedString(CPTPlatformSpecificAttributedStringExtensions) - * @brief NSAttributedString extensions for drawing styled text. - * - * @see NSAttributedString - **/ @interface NSAttributedString(CPTPlatformSpecificAttributedStringExtensions) /// @name Drawing @@ -60,11 +50,6 @@ #pragma mark - CPTLayer -/** @category CPTLayer(CPTPlatformSpecificLayerExtensions) - * @brief Platform-specific extensions to CPTLayer. - * - * @see CPTLayer - **/ @interface CPTLayer(CPTPlatformSpecificLayerExtensions) /// @name Images @@ -76,11 +61,6 @@ #pragma mark - NSNumber -/** @category NSNumber(CPTPlatformSpecificNumberExtensions) - * @brief Platform-specific extensions to NSNumber. - * - * @see NSNumber - **/ @interface NSNumber(CPTPlatformSpecificNumberExtensions) -(BOOL)isLessThan:(nonnull NSNumber *)other; @@ -92,11 +72,6 @@ #pragma mark - NSAttributedString -/** @category NSAttributedString(CPTPlatformSpecificAttributedStringExtensions) - * @brief NSAttributedString extensions for drawing styled text. - * - * @see NSAttributedString - **/ @interface NSAttributedString(CPTPlatformSpecificAttributedStringExtensions) /// @name Drawing diff --git a/framework/PlatformSpecific/CPTPlatformSpecificCategories.m b/framework/PlatformSpecific/CPTPlatformSpecificCategories.m index b8a13ba01..0288e9373 100644 --- a/framework/PlatformSpecific/CPTPlatformSpecificCategories.m +++ b/framework/PlatformSpecific/CPTPlatformSpecificCategories.m @@ -11,6 +11,11 @@ #pragma mark CPTLayer +/** + * @brief Platform-specific extensions to CPTLayer. + * + * @see CPTLayer + **/ @implementation CPTLayer(CPTPlatformSpecificLayerExtensions) /** @brief Gets an image of the layer contents. @@ -78,6 +83,11 @@ -(nonnull CPTNativeImage *)imageOfLayer #pragma mark - NSAttributedString +/** + * @brief NSAttributedString extensions for drawing styled text. + * + * @see NSAttributedString + **/ @implementation NSAttributedString(CPTPlatformSpecificAttributedStringExtensions) /** @brief Draws the styled text into the given graphics context. @@ -129,6 +139,11 @@ -(CGSize)sizeAsDrawn #pragma mark - CPTLayer +/** + * @brief Platform-specific extensions to CPTLayer. + * + * @see CPTLayer + **/ @implementation CPTLayer(CPTPlatformSpecificLayerExtensions) /** @brief Gets an image of the layer contents. @@ -163,6 +178,11 @@ -(nullable CPTNativeImage *)imageOfLayer #pragma mark - NSNumber +/** + * @brief Platform-specific extensions to NSNumber. + * + * @see NSNumber + **/ @implementation NSNumber(CPTPlatformSpecificNumberExtensions) /** @brief Returns a Boolean value that indicates whether the receiver is less than another given number. @@ -205,6 +225,11 @@ -(BOOL)isGreaterThanOrEqualTo:(nonnull NSNumber *)other #pragma mark - NSAttributedString +/** + * @brief NSAttributedString extensions for drawing styled text. + * + * @see NSAttributedString + **/ @implementation NSAttributedString(CPTPlatformSpecificAttributedStringExtensions) /** @brief Draws the styled text into the given graphics context. diff --git a/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m b/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m index ecfb6f643..1a094d8f9 100644 --- a/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m +++ b/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m @@ -9,6 +9,11 @@ #pragma mark macOS #pragma mark - +/** + * @brief Platform-specific extensions to CPTTextStyle. + * + * @see CPTTextStyle + **/ @implementation CPTTextStyle(CPTPlatformSpecificTextStyleExtensions) /** @property nonnull CPTDictionary *attributes @@ -133,6 +138,11 @@ -(nonnull CPTDictionary *)attributes #pragma mark - +/** + * @brief Platform-specific extensions to CPTMutableTextStyle + * + * @see CPTMutableTextStyle + **/ @implementation CPTMutableTextStyle(CPTPlatformSpecificMutableTextStyleExtensions) /** @brief Creates and returns a new CPTMutableTextStyle instance initialized from a dictionary of text attributes. @@ -200,6 +210,11 @@ +(nonnull instancetype)textStyleWithAttributes:(nullable CPTDictionary *)attribu #pragma mark - +/** + * @brief NSString extensions for drawing styled text. + * + * @see NSString + **/ @implementation NSString(CPTTextStyleExtensions) #pragma mark - @@ -289,6 +304,11 @@ -(void)drawInRect:(CGRect)rect withTextStyle:(nullable CPTTextStyle *)style inCo #import "CPTColor.h" #import +/** + * @brief Platform-specific extensions to CPTTextStyle. + * + * @see CPTTextStyle + **/ @implementation CPTTextStyle(CPTPlatformSpecificTextStyleExtensions) /** @property nonnull CPTDictionary *attributes @@ -396,6 +416,11 @@ -(nonnull CPTDictionary *)attributes #pragma mark - +/** + * @brief Platform-specific extensions to CPTMutableTextStyle + * + * @see CPTMutableTextStyle + **/ @implementation CPTMutableTextStyle(CPTPlatformSpecificMutableTextStyleExtensions) /** @brief Creates and returns a new CPTMutableTextStyle instance initialized from a dictionary of text attributes. @@ -446,6 +471,12 @@ +(nonnull instancetype)textStyleWithAttributes:(nullable CPTDictionary *)attribu #pragma mark - +/** + * @brief NSString extensions for drawing styled text. + * + * @see NSString + **/ + @implementation NSString(CPTTextStyleExtensions) #pragma mark - diff --git a/framework/Source/CPTAnimationPeriod.h b/framework/Source/CPTAnimationPeriod.h index 135a2e1d0..2fb20be26 100644 --- a/framework/Source/CPTAnimationPeriod.h +++ b/framework/Source/CPTAnimationPeriod.h @@ -47,11 +47,6 @@ #pragma mark - -/** @category CPTAnimationPeriod(AbstractMethods) - * @brief CPTAnimationPeriod abstract methods—must be overridden by subclasses - * - * @see CPTAnimationPeriod - **/ @interface CPTAnimationPeriod(AbstractMethods) /// @name Initialization @@ -73,11 +68,6 @@ #pragma mark - -/** @category CPTAnimation(CPTAnimationPeriodAdditions) - * @brief CPTAnimationPeriod convenience methods added to CPTAnimation. - * - * @see CPTAnimation - **/ @interface CPTAnimation(CPTAnimationPeriodAdditions) /// @name CGFloat Property Animation diff --git a/framework/Source/CPTAnimationPeriod.m b/framework/Source/CPTAnimationPeriod.m index 76d0a77ac..e04e63464 100644 --- a/framework/Source/CPTAnimationPeriod.m +++ b/framework/Source/CPTAnimationPeriod.m @@ -452,9 +452,30 @@ -(nonnull instancetype)init /// @endcond +#pragma mark - +#pragma mark Description + +/// @cond + +-(nullable NSString *)description +{ + return [NSString stringWithFormat:@"<%@ from: %@; to: %@; duration: %g, delay: %g>", super.description, self.startValue, self.endValue, (double)self.duration, (double)self.delay]; +} + +/// @endcond + +@end + #pragma mark - #pragma mark Abstract Methods +/** + * @brief CPTAnimationPeriod abstract methods—must be overridden by subclasses + * + * @see CPTAnimationPeriod + **/ +@implementation CPTAnimationPeriod(AbstractMethods) + /** * @brief Initialize the start value from the property getter. * @param boundObject The object to update for each animation frame. @@ -494,22 +515,15 @@ -(BOOL)canStartWithValueFromObject:(nonnull id __unused)boundObject propertyGett return NO; } -#pragma mark - -#pragma mark Description - -/// @cond - --(nullable NSString *)description -{ - return [NSString stringWithFormat:@"<%@ from: %@; to: %@; duration: %g, delay: %g>", super.description, self.startValue, self.endValue, (double)self.duration, (double)self.delay]; -} - -/// @endcond - @end #pragma mark - +/** + * @brief CPTAnimationPeriod convenience methods added to CPTAnimation. + * + * @see CPTAnimation + **/ @implementation CPTAnimation(CPTAnimationPeriodAdditions) // CGFloat diff --git a/framework/Source/CPTAnnotation.h b/framework/Source/CPTAnnotation.h index afa12e709..9e9d66879 100644 --- a/framework/Source/CPTAnnotation.h +++ b/framework/Source/CPTAnnotation.h @@ -38,11 +38,6 @@ typedef NSMutableArray<__kindof CPTAnnotation *> CPTMutableAnnotationArray; #pragma mark - -/** @category CPTAnnotation(AbstractMethods) - * @brief CPTAnnotation abstract methods—must be overridden by subclasses. - * - * @see CPTAnnotation - **/ @interface CPTAnnotation(AbstractMethods) /// @name Layout diff --git a/framework/Source/CPTAnnotation.m b/framework/Source/CPTAnnotation.m index ec1fbcd94..3157a1e01 100644 --- a/framework/Source/CPTAnnotation.m +++ b/framework/Source/CPTAnnotation.m @@ -186,6 +186,11 @@ -(void)setRotation:(CGFloat)newRotation #pragma mark - #pragma mark Layout +/** + * @brief CPTAnnotation abstract methods—must be overridden by subclasses. + * + * @see CPTAnnotation + **/ @implementation CPTAnnotation(AbstractMethods) /** @brief Positions the content layer relative to its reference anchor. diff --git a/framework/Source/CPTAxis.h b/framework/Source/CPTAxis.h index d05bf9fd6..85bbf4c69 100644 --- a/framework/Source/CPTAxis.h +++ b/framework/Source/CPTAxis.h @@ -329,11 +329,6 @@ typedef NSMutableArray<__kindof CPTAxis *> CPTMutableAxisArray; #pragma mark - -/** @category CPTAxis(AbstractMethods) - * @brief CPTAxis abstract methods—must be overridden by subclasses - * - * @see CPTAxis - **/ @interface CPTAxis(AbstractMethods) /// @name Coordinate Space Conversions diff --git a/framework/Source/CPTAxis.m b/framework/Source/CPTAxis.m index 8b4f6808d..ba51b27f6 100644 --- a/framework/Source/CPTAxis.m +++ b/framework/Source/CPTAxis.m @@ -3267,6 +3267,11 @@ -(void)setHidden:(BOOL)newHidden #pragma mark - +/** + * @brief CPTAxis abstract methods—must be overridden by subclasses + * + * @see CPTAxis + **/ @implementation CPTAxis(AbstractMethods) /** @brief Converts a position on the axis to drawing coordinates. diff --git a/framework/Source/CPTConstraints.h b/framework/Source/CPTConstraints.h index 0c18a12d8..979b9b7d1 100644 --- a/framework/Source/CPTConstraints.h +++ b/framework/Source/CPTConstraints.h @@ -19,11 +19,6 @@ @end -/** @category CPTConstraints(AbstractMethods) - * @brief CPTConstraints abstract methods—must be overridden by subclasses - * - * @see CPTConstraints - **/ @interface CPTConstraints(AbstractMethods) /// @name Comparison diff --git a/framework/Source/CPTConstraints.m b/framework/Source/CPTConstraints.m index c629efc60..9140cf0af 100644 --- a/framework/Source/CPTConstraints.m +++ b/framework/Source/CPTConstraints.m @@ -148,6 +148,11 @@ +(BOOL)supportsSecureCoding #pragma mark - +/** + * @brief CPTConstraints abstract methods—must be overridden by subclasses + * + * @see CPTConstraints + **/ @implementation CPTConstraints(AbstractMethods) #pragma mark - diff --git a/framework/Source/CPTFill.h b/framework/Source/CPTFill.h index 17ca37bb7..3fe1a9181 100644 --- a/framework/Source/CPTFill.h +++ b/framework/Source/CPTFill.h @@ -36,11 +36,6 @@ typedef NSMutableArray CPTMutableFillArray; @end -/** @category CPTFill(AbstractMethods) - * @brief CPTFill abstract methods—must be overridden by subclasses - * - * @see CPTFill - **/ @interface CPTFill(AbstractMethods) @property (nonatomic, readonly, getter = isOpaque) BOOL opaque; diff --git a/framework/Source/CPTFill.m b/framework/Source/CPTFill.m index 07af15121..ebe98d863 100644 --- a/framework/Source/CPTFill.m +++ b/framework/Source/CPTFill.m @@ -149,6 +149,11 @@ +(BOOL)supportsSecureCoding #pragma mark - +/** + * @brief CPTFill abstract methods—must be overridden by subclasses + * + * @see CPTFill + **/ @implementation CPTFill(AbstractMethods) /** @property BOOL opaque diff --git a/framework/Source/CPTGraph.h b/framework/Source/CPTGraph.h index 6ff27ee00..2464498a5 100644 --- a/framework/Source/CPTGraph.h +++ b/framework/Source/CPTGraph.h @@ -153,11 +153,6 @@ typedef NS_ENUM (NSInteger, CPTGraphLayerType) { #pragma mark - -/** @category CPTGraph(AbstractFactoryMethods) - * @brief CPTGraph abstract methods—must be overridden by subclasses - * - * @see CPTGraph - **/ @interface CPTGraph(AbstractFactoryMethods) /// @name Factory Methods diff --git a/framework/Source/CPTGraph.m b/framework/Source/CPTGraph.m index 0ec7b84c6..138fb22b3 100644 --- a/framework/Source/CPTGraph.m +++ b/framework/Source/CPTGraph.m @@ -1377,6 +1377,11 @@ -(BOOL)scrollWheelEvent:(nonnull CPTNativeEvent *)event fromPoint:(CGPoint)fromP #pragma mark - +/** + * @brief CPTGraph abstract methods—must be overridden by subclasses + * + * @see CPTGraph + **/ @implementation CPTGraph(AbstractFactoryMethods) /** @brief Creates a new plot space for the graph. diff --git a/framework/Source/CPTImage.h b/framework/Source/CPTImage.h index 4e28980f2..188d2219a 100644 --- a/framework/Source/CPTImage.h +++ b/framework/Source/CPTImage.h @@ -46,11 +46,6 @@ #pragma mark - -/** @category CPTImage(CPTPlatformSpecificImageExtensions) - * @brief Platform-specific extensions to CPTImage. - * - * @see CPTImage - **/ @interface CPTImage(CPTPlatformSpecificImageExtensions) /// @name Initialization diff --git a/framework/Source/CPTMutableNumericData+TypeConversion.h b/framework/Source/CPTMutableNumericData+TypeConversion.h index 01e4104dd..09936b9aa 100644 --- a/framework/Source/CPTMutableNumericData+TypeConversion.h +++ b/framework/Source/CPTMutableNumericData+TypeConversion.h @@ -8,11 +8,6 @@ #import "CPTNumericDataType.h" #endif -/** @category CPTMutableNumericData(TypeConversion) - * @brief Type conversion methods for CPTMutableNumericData. - * - * @see CPTMutableNumericData - **/ @interface CPTMutableNumericData(TypeConversion) /// @name Data Format diff --git a/framework/Source/CPTMutableNumericData+TypeConversion.m b/framework/Source/CPTMutableNumericData+TypeConversion.m index 4d537c5b6..24cb993c5 100644 --- a/framework/Source/CPTMutableNumericData+TypeConversion.m +++ b/framework/Source/CPTMutableNumericData+TypeConversion.m @@ -2,6 +2,11 @@ #import "CPTNumericData+TypeConversion.h" +/** + * @brief Type conversion methods for CPTMutableNumericData. + * + * @see CPTMutableNumericData + **/ @implementation CPTMutableNumericData(TypeConversion) /** @property CPTNumericDataType dataType diff --git a/framework/Source/CPTMutableTextStyle.h b/framework/Source/CPTMutableTextStyle.h index 208ade490..00613a46f 100644 --- a/framework/Source/CPTMutableTextStyle.h +++ b/framework/Source/CPTMutableTextStyle.h @@ -19,11 +19,6 @@ @end -/** @category CPTMutableTextStyle(CPTPlatformSpecificMutableTextStyleExtensions) - * @brief Platform-specific extensions to CPTMutableTextStyle - * - * @see CPTMutableTextStyle - **/ @interface CPTMutableTextStyle(CPTPlatformSpecificMutableTextStyleExtensions) @end diff --git a/framework/Source/CPTNumericData+TypeConversion.h b/framework/Source/CPTNumericData+TypeConversion.h index 1fe2f4b6a..fda14d19c 100644 --- a/framework/Source/CPTNumericData+TypeConversion.h +++ b/framework/Source/CPTNumericData+TypeConversion.h @@ -8,11 +8,6 @@ #import "CPTNumericDataType.h" #endif -/** @category CPTNumericData(TypeConversion) - * @brief Type conversion methods for CPTNumericData. - * - * @see CPTNumericData - **/ @interface CPTNumericData(TypeConversion) /// @name Type Conversion diff --git a/framework/Source/CPTNumericData+TypeConversion.m b/framework/Source/CPTNumericData+TypeConversion.m index dcce6ba8d..c79e23c7c 100644 --- a/framework/Source/CPTNumericData+TypeConversion.m +++ b/framework/Source/CPTNumericData+TypeConversion.m @@ -3,6 +3,11 @@ #import "complex.h" #import "CPTUtilities.h" +/** + * @brief Type conversion methods for CPTNumericData. + * + * @see CPTNumericData + **/ @implementation CPTNumericData(TypeConversion) /** @brief Copies the current numeric data and converts the data to a new data type. diff --git a/framework/Source/CPTPlot.h b/framework/Source/CPTPlot.h index 9c9444d4d..4c79f7bd4 100644 --- a/framework/Source/CPTPlot.h +++ b/framework/Source/CPTPlot.h @@ -386,11 +386,6 @@ typedef NSMutableArray<__kindof CPTPlot *> CPTMutablePlotArray; #pragma mark - -/** @category CPTPlot(AbstractMethods) - * @brief CPTPlot abstract methods—must be overridden by subclasses - * - * @see CPTPlot - **/ @interface CPTPlot(AbstractMethods) /// @name Fields diff --git a/framework/Source/CPTPlot.m b/framework/Source/CPTPlot.m index 96e02d913..dadcfac89 100644 --- a/framework/Source/CPTPlot.m +++ b/framework/Source/CPTPlot.m @@ -2249,6 +2249,11 @@ -(void)setHidden:(BOOL)newHidden #pragma mark - +/** + * @brief CPTPlot abstract methods—must be overridden by subclasses + * + * @see CPTPlot + **/ @implementation CPTPlot(AbstractMethods) #pragma mark - diff --git a/framework/Source/CPTPlotSpace.h b/framework/Source/CPTPlotSpace.h index e4a49049f..3e0dc80e4 100644 --- a/framework/Source/CPTPlotSpace.h +++ b/framework/Source/CPTPlotSpace.h @@ -216,11 +216,6 @@ typedef NSMutableArray<__kindof CPTPlotSpace *> CPTMutablePlotSpaceArray; #pragma mark - -/** @category CPTPlotSpace(AbstractMethods) - * @brief CPTPlotSpace abstract methods—must be overridden by subclasses - * - * @see CPTPlotSpace - **/ @interface CPTPlotSpace(AbstractMethods) /// @name Coordinate Space Conversions diff --git a/framework/Source/CPTPlotSpace.m b/framework/Source/CPTPlotSpace.m index 75988f064..bef32d1fa 100644 --- a/framework/Source/CPTPlotSpace.m +++ b/framework/Source/CPTPlotSpace.m @@ -493,6 +493,11 @@ -(BOOL)scrollWheelEvent:(nonnull CPTNativeEvent *)event fromPoint:(CGPoint)fromP #pragma mark - +/** + * @brief CPTPlotSpace abstract methods—must be overridden by subclasses + * + * @see CPTPlotSpace + **/ @implementation CPTPlotSpace(AbstractMethods) /// @cond diff --git a/framework/Source/CPTTextStyle.h b/framework/Source/CPTTextStyle.h index 795fe84dd..082d087f4 100644 --- a/framework/Source/CPTTextStyle.h +++ b/framework/Source/CPTTextStyle.h @@ -43,11 +43,6 @@ typedef NSMutableArray CPTMutableTextStyleArray; #pragma mark - -/** @category CPTTextStyle(CPTPlatformSpecificTextStyleExtensions) - * @brief Platform-specific extensions to CPTTextStyle. - * - * @see CPTTextStyle - **/ @interface CPTTextStyle(CPTPlatformSpecificTextStyleExtensions) @property (readonly, nonatomic, nonnull) CPTDictionary *attributes; @@ -61,11 +56,6 @@ typedef NSMutableArray CPTMutableTextStyleArray; #pragma mark - -/** @category NSString(CPTTextStyleExtensions) - * @brief NSString extensions for drawing styled text. - * - * @see NSString - **/ @interface NSString(CPTTextStyleExtensions) /// @name Measurement diff --git a/framework/Source/CPTTheme.h b/framework/Source/CPTTheme.h index 7923411b9..7cdfa3077 100644 --- a/framework/Source/CPTTheme.h +++ b/framework/Source/CPTTheme.h @@ -43,11 +43,6 @@ extern CPTThemeName __nonnull const kCPTStocksTheme; ///< A graph theme wi @end -/** @category CPTTheme(AbstractMethods) - * @brief CPTTheme abstract methods—must be overridden by subclasses - * - * @see CPTTheme - **/ @interface CPTTheme(AbstractMethods) /// @name Theme Usage diff --git a/framework/Source/CPTTheme.m b/framework/Source/CPTTheme.m index 41fc62ef1..9204a1dd6 100644 --- a/framework/Source/CPTTheme.m +++ b/framework/Source/CPTTheme.m @@ -284,6 +284,11 @@ -(void)applyThemeToGraph:(nonnull CPTGraph *)graph #pragma mark - +/** + * @brief CPTTheme abstract methods—must be overridden by subclasses + * + * @see CPTTheme + **/ @implementation CPTTheme(AbstractMethods) /** @brief Creates a new graph styled with the theme. diff --git a/framework/Source/_CPTDebugQuickLook.h b/framework/Source/_CPTDebugQuickLook.h index dd54533b4..6d7d1660f 100644 --- a/framework/Source/_CPTDebugQuickLook.h +++ b/framework/Source/_CPTDebugQuickLook.h @@ -17,7 +17,7 @@ #pragma mark - -/** @category NSObject(CPTDebugQuickLookExtension) +/** * @brief Debugging extensions to NSObject. * * @see NSObject diff --git a/framework/Source/_NSCoderExtensions.h b/framework/Source/_NSCoderExtensions.h index 4dc912787..97e0e95f0 100644 --- a/framework/Source/_NSCoderExtensions.h +++ b/framework/Source/_NSCoderExtensions.h @@ -1,11 +1,6 @@ #import #import -/** @category NSCoder(CPTExtensions) - * @brief Core Plot extensions to NSCoder. - * - * @see NSCoder - **/ @interface NSCoder(CPTExtensions) /// @name Encoding Data diff --git a/framework/Source/_NSCoderExtensions.m b/framework/Source/_NSCoderExtensions.m index 695c6af19..30cd4f257 100644 --- a/framework/Source/_NSCoderExtensions.m +++ b/framework/Source/_NSCoderExtensions.m @@ -7,6 +7,11 @@ #pragma mark - +/** + * @brief Core Plot extensions to NSCoder. + * + * @see NSCoder + **/ @implementation NSCoder(CPTExtensions) #pragma mark - diff --git a/framework/Source/_NSDecimalNumberExtensions.h b/framework/Source/_NSDecimalNumberExtensions.h index 41c9424d6..6b55fc3a4 100644 --- a/framework/Source/_NSDecimalNumberExtensions.h +++ b/framework/Source/_NSDecimalNumberExtensions.h @@ -1,10 +1,5 @@ #import -/** @category NSDecimalNumber(CPTExtensions) - * @brief Core Plot extensions to NSDecimalNumber. - * - * @see NSDecimalNumber - **/ @interface NSDecimalNumber(CPTExtensions) -(nonnull NSDecimalNumber *)decimalNumber; diff --git a/framework/Source/_NSDecimalNumberExtensions.m b/framework/Source/_NSDecimalNumberExtensions.m index d5997aefc..2c3cf1c01 100644 --- a/framework/Source/_NSDecimalNumberExtensions.m +++ b/framework/Source/_NSDecimalNumberExtensions.m @@ -1,5 +1,10 @@ #import "_NSDecimalNumberExtensions.h" +/** + * @brief Core Plot extensions to NSDecimalNumber. + * + * @see NSDecimalNumber + **/ @implementation NSDecimalNumber(CPTExtensions) /** @brief Returns the value of the receiver as an NSDecimalNumber. diff --git a/framework/Source/_NSNumberExtensions.h b/framework/Source/_NSNumberExtensions.h index 3434e6f76..10efdac36 100644 --- a/framework/Source/_NSNumberExtensions.h +++ b/framework/Source/_NSNumberExtensions.h @@ -1,11 +1,6 @@ #import #import -/** @category NSNumber(CPTExtensions) - * @brief Core Plot extensions to NSNumber. - * - * @see NSNumber - **/ @interface NSNumber(CPTExtensions) +(nonnull instancetype)numberWithCGFloat:(CGFloat)number; diff --git a/framework/Source/_NSNumberExtensions.m b/framework/Source/_NSNumberExtensions.m index 8a2ff8f6d..269e55c6c 100644 --- a/framework/Source/_NSNumberExtensions.m +++ b/framework/Source/_NSNumberExtensions.m @@ -1,5 +1,10 @@ #import "_NSNumberExtensions.h" +/** + * @brief Core Plot extensions to NSNumber. + * + * @see NSNumber + **/ @implementation NSNumber(CPTExtensions) /** @brief Creates and returns an NSNumber object containing a given value, treating it as a @ref CGFloat. From 9ee41509940bd4849a6983e32270e364b4143051 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Thu, 1 Jun 2023 21:27:39 -0400 Subject: [PATCH 182/245] Fixed @see links to category names. --- framework/Source/CPTAnimation.m | 2 +- framework/Source/CPTAnimationPeriod.m | 2 +- framework/Source/CPTAnnotation.m | 2 +- framework/Source/CPTAxis.m | 2 +- framework/Source/CPTConstraints.m | 2 +- framework/Source/CPTFill.m | 2 +- framework/Source/CPTGraph.m | 2 +- framework/Source/CPTImage.m | 2 +- framework/Source/CPTLayer.m | 2 +- framework/Source/CPTMutableNumericData.m | 2 +- framework/Source/CPTMutableTextStyle.m | 2 +- framework/Source/CPTNumericData.m | 2 +- framework/Source/CPTPlot.m | 2 +- framework/Source/CPTPlotSpace.m | 2 +- framework/Source/CPTTextStyle.m | 2 +- framework/Source/CPTTheme.m | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/framework/Source/CPTAnimation.m b/framework/Source/CPTAnimation.m index 84c161d57..582b37a4b 100644 --- a/framework/Source/CPTAnimation.m +++ b/framework/Source/CPTAnimation.m @@ -48,7 +48,7 @@ -(void)update; * CPTAnimation provides animation support for all of these things. It can animate any property (of the supported data types) * on objects of any class. * - * @see CPTAnimation(CPTAnimationPeriodAdditions) + * @see @ref "CPTAnimation(CPTAnimationPeriodAdditions)" **/ @implementation CPTAnimation diff --git a/framework/Source/CPTAnimationPeriod.m b/framework/Source/CPTAnimationPeriod.m index e04e63464..6617a6492 100644 --- a/framework/Source/CPTAnimationPeriod.m +++ b/framework/Source/CPTAnimationPeriod.m @@ -38,7 +38,7 @@ -(nonnull instancetype)initWithStartValue:(nullable NSValue *)aStartValue endVal * - @ref CPTPlotRange (NSValue wrapper not used) * @note The starting and ending values must be the same type. * - * @see CPTAnimationPeriod(AbstractMethods) + * @see @ref "CPTAnimationPeriod(AbstractMethods)" **/ @implementation CPTAnimationPeriod diff --git a/framework/Source/CPTAnnotation.m b/framework/Source/CPTAnnotation.m index 3157a1e01..afebd4743 100644 --- a/framework/Source/CPTAnnotation.m +++ b/framework/Source/CPTAnnotation.m @@ -9,7 +9,7 @@ * of a graph. For example, the graph title is an annotation anchored to the graph. * The annotation content layer can be any CPTLayer. * - * @see CPTAnnotation(AbstractMethods) + * @see @ref "CPTAnnotation(AbstractMethods)" **/ @implementation CPTAnnotation diff --git a/framework/Source/CPTAxis.m b/framework/Source/CPTAxis.m index ba51b27f6..54fc531d4 100644 --- a/framework/Source/CPTAxis.m +++ b/framework/Source/CPTAxis.m @@ -68,7 +68,7 @@ -(void)updateMinorTickLabelOffsets; * @nil, the axis and grid lines will extend the full width of the plot area. * @image html "axis ranges.png" "Axis Ranges" * @see See @ref axisAnimation "Axes" for a list of animatable properties. - * @see CPTAxis(AbstractMethods) + * @see @ref "CPTAxis(AbstractMethods)" **/ @implementation CPTAxis diff --git a/framework/Source/CPTConstraints.m b/framework/Source/CPTConstraints.m index 9140cf0af..7e695809f 100644 --- a/framework/Source/CPTConstraints.m +++ b/framework/Source/CPTConstraints.m @@ -9,7 +9,7 @@ * * Supports fixed distance from either end of the range and a proportional fraction of the range. * - * @see CPTConstraints(AbstractMethods) + * @see @ref "CPTConstraints(AbstractMethods)" **/ @implementation CPTConstraints diff --git a/framework/Source/CPTFill.m b/framework/Source/CPTFill.m index ebe98d863..25148fd09 100644 --- a/framework/Source/CPTFill.m +++ b/framework/Source/CPTFill.m @@ -14,7 +14,7 @@ * gradients, and images. Drawing methods are provided to fill rectangular areas and * arbitrary drawing paths. * - * @see CPTFill(AbstractMethods) + * @see @ref "CPTFill(AbstractMethods)" **/ @implementation CPTFill diff --git a/framework/Source/CPTGraph.m b/framework/Source/CPTGraph.m index 138fb22b3..52957cba5 100644 --- a/framework/Source/CPTGraph.m +++ b/framework/Source/CPTGraph.m @@ -63,7 +63,7 @@ -(CGPoint)contentAnchorForRectAnchor:(CPTRectAnchor)anchor; * a new graph; more may be added as needed. * * @see See @ref graphAnimation "Graphs" for a list of animatable properties. - * @see CPTGraph(AbstractFactoryMethods) + * @see @ref "CPTGraph(AbstractFactoryMethods)" **/ @implementation CPTGraph diff --git a/framework/Source/CPTImage.m b/framework/Source/CPTImage.m index 0eae09d06..a5a40c165 100644 --- a/framework/Source/CPTImage.m +++ b/framework/Source/CPTImage.m @@ -45,7 +45,7 @@ -(void)drawImage:(nonnull CGImageRef)theImage inContext:(nonnull CGContextRef)co * and an @2x version of the image file is available, the image will be rendered correctly on * Retina and non-Retina displays. * - * @see CPTImage(CPTPlatformSpecificImageExtensions) + * @see @ref "CPTImage(CPTPlatformSpecificImageExtensions)" **/ @implementation CPTImage diff --git a/framework/Source/CPTLayer.m b/framework/Source/CPTLayer.m index 7e6360554..e83e383d8 100644 --- a/framework/Source/CPTLayer.m +++ b/framework/Source/CPTLayer.m @@ -51,7 +51,7 @@ -(CPTGraphHostingView *)findHostingView; * and sublayers are turned off. The default layer is not opaque and does not mask * to bounds. * - * @see CPTLayer(CPTPlatformSpecificLayerExtensions) + * @see @ref "CPTLayer(CPTPlatformSpecificLayerExtensions)" **/ @implementation CPTLayer diff --git a/framework/Source/CPTMutableNumericData.m b/framework/Source/CPTMutableNumericData.m index 650b946c7..c36864038 100644 --- a/framework/Source/CPTMutableNumericData.m +++ b/framework/Source/CPTMutableNumericData.m @@ -22,7 +22,7 @@ -(NSUInteger)sampleIndex:(NSUInteger)idx indexList:(va_list)indexList; * The structure of this object is similar to the NumPy ndarray * object. * - * @see CPTMutableNumericData(TypeConversion) + * @see @ref "CPTMutableNumericData(TypeConversion)" **/ @implementation CPTMutableNumericData diff --git a/framework/Source/CPTMutableTextStyle.m b/framework/Source/CPTMutableTextStyle.m index e2a8c6257..97673b1ea 100644 --- a/framework/Source/CPTMutableTextStyle.m +++ b/framework/Source/CPTMutableTextStyle.m @@ -4,7 +4,7 @@ * * Use this whenever you need to customize the properties of a text style. * - * @see CPTMutableTextStyle(CPTPlatformSpecificMutableTextStyleExtensions) + * @see @ref "CPTMutableTextStyle(CPTPlatformSpecificMutableTextStyleExtensions)" **/ @implementation CPTMutableTextStyle diff --git a/framework/Source/CPTNumericData.m b/framework/Source/CPTNumericData.m index dbdbb2ae8..332f26fbb 100644 --- a/framework/Source/CPTNumericData.m +++ b/framework/Source/CPTNumericData.m @@ -44,7 +44,7 @@ -(nonnull NSData *)dataFromArray:(nonnull CPTNumberArray *)newData dataType:(CPT * All integer and floating point types can be represented using big endian or little endian * byte order. Complex and decimal types support only the the host system’s native byte order. * - * @see CPTNumericData(TypeConversion) + * @see @ref "CPTNumericData(TypeConversion)" **/ @implementation CPTNumericData diff --git a/framework/Source/CPTPlot.m b/framework/Source/CPTPlot.m index dadcfac89..9e639b484 100644 --- a/framework/Source/CPTPlot.m +++ b/framework/Source/CPTPlot.m @@ -98,7 +98,7 @@ -(void)updateContentAnchorForLabel:(nonnull CPTPlotSpaceAnnotation *)label; * @if MacOnly * @see See @ref plotBindings "Plot Bindings" for a list of binding identifiers supported by each plot type. * @endif - * @see CPTPlot(AbstractMethods) + * @see @ref "CPTPlot(AbstractMethods)" **/ @implementation CPTPlot diff --git a/framework/Source/CPTPlotSpace.m b/framework/Source/CPTPlotSpace.m index bef32d1fa..2f4ac4d00 100644 --- a/framework/Source/CPTPlotSpace.m +++ b/framework/Source/CPTPlotSpace.m @@ -34,7 +34,7 @@ -(nonnull CPTMutableCategorySet *)orderedSetForCoordinate:(CPTCoordinate)coordin * A plot space determines the mapping between data coordinates * and device coordinates in the plot area. * - * @see CPTPlotSpace(AbstractMethods) + * @see @ref "CPTPlotSpace(AbstractMethods)" **/ @implementation CPTPlotSpace diff --git a/framework/Source/CPTTextStyle.m b/framework/Source/CPTTextStyle.m index 7bc0a33a8..bc9c7bcc0 100644 --- a/framework/Source/CPTTextStyle.m +++ b/framework/Source/CPTTextStyle.m @@ -25,7 +25,7 @@ @interface CPTTextStyle() * * If you need to customize properties, you should create a CPTMutableTextStyle. * - * @see CPTTextStyle(CPTPlatformSpecificTextStyleExtensions) + * @see @ref "CPTTextStyle(CPTPlatformSpecificTextStyleExtensions)" **/ @implementation CPTTextStyle diff --git a/framework/Source/CPTTheme.m b/framework/Source/CPTTheme.m index 9204a1dd6..d94ec28b3 100644 --- a/framework/Source/CPTTheme.m +++ b/framework/Source/CPTTheme.m @@ -40,7 +40,7 @@ +(nonnull CPTThemeDictionary *)themeDictionary; * from being changed later. Therefore, it is possible to apply initial formatting to * a graph using a theme and then customize the styles to suit the application later. * - * @see CPTTheme(AbstractMethods) + * @see @ref "CPTTheme(AbstractMethods)" **/ @implementation CPTTheme From 58ce4907d59b987c7c43b90d68fa02642d1854f2 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 3 Jun 2023 14:49:40 -0400 Subject: [PATCH 183/245] End all documentation comments with "**/". --- framework/Source/CPTAxis.m | 14 +++++++------- framework/Source/CPTAxisLabel.m | 2 +- framework/Source/CPTCalendarFormatter.m | 2 +- framework/Source/CPTColor.m | 4 ++-- framework/Source/CPTColorSpace.m | 2 +- framework/Source/CPTFill.m | 4 ++-- framework/Source/CPTGradient.m | 2 +- framework/Source/CPTImage.m | 4 ++-- framework/Source/CPTLayer.m | 6 +++--- framework/Source/CPTLayerAnnotation.m | 2 +- framework/Source/CPTLimitBand.m | 2 +- framework/Source/CPTLineCap.m | 2 +- framework/Source/CPTLineStyle.m | 2 +- framework/Source/CPTNumericData.m | 2 +- framework/Source/CPTPlot.m | 4 ++-- framework/Source/CPTPlotRange.m | 2 +- framework/Source/CPTPlotSpace.m | 20 ++++++++++---------- framework/Source/CPTPlotSpaceAnnotation.m | 2 +- framework/Source/CPTPlotSymbol.m | 2 +- framework/Source/CPTTimeFormatter.m | 2 +- framework/Source/_CPTConstraintsFixed.m | 2 +- framework/Source/_CPTConstraintsRelative.m | 2 +- framework/Source/_CPTFillColor.m | 2 +- framework/Source/_CPTFillGradient.m | 2 +- framework/Source/_CPTFillImage.m | 2 +- 25 files changed, 46 insertions(+), 46 deletions(-) diff --git a/framework/Source/CPTAxis.m b/framework/Source/CPTAxis.m index 54fc531d4..c5304806b 100644 --- a/framework/Source/CPTAxis.m +++ b/framework/Source/CPTAxis.m @@ -932,7 +932,7 @@ +(BOOL)needsDisplayForKey:(nonnull NSString *)aKey * @brief Generate major and minor tick locations using the fixed interval labeling policy. * @param newMajorLocations A new NSSet containing the major tick locations. * @param newMinorLocations A new NSSet containing the minor tick locations. - */ + **/ -(void)generateFixedIntervalMajorTickLocations:(CPTNumberSet *__autoreleasing *)newMajorLocations minorTickLocations:(CPTNumberSet *__autoreleasing *)newMinorLocations { CPTMutableNumberSet *majorLocations = [NSMutableSet set]; @@ -1012,7 +1012,7 @@ -(void)generateFixedIntervalMajorTickLocations:(CPTNumberSet *__autoreleasing *) * @brief Generate major and minor tick locations using the automatic labeling policy. * @param newMajorLocations A new NSSet containing the major tick locations. * @param newMinorLocations A new NSSet containing the minor tick locations. - */ + **/ -(void)autoGenerateMajorTickLocations:(CPTNumberSet *__autoreleasing *)newMajorLocations minorTickLocations:(CPTNumberSet *__autoreleasing *)newMinorLocations { // Create sets for locations @@ -1307,7 +1307,7 @@ -(void)autoGenerateMajorTickLocations:(CPTNumberSet *__autoreleasing *)newMajorL * @brief Generate major and minor tick locations using the equal divisions labeling policy. * @param newMajorLocations A new NSSet containing the major tick locations. * @param newMinorLocations A new NSSet containing the minor tick locations. - */ + **/ -(void)generateEqualMajorTickLocations:(CPTNumberSet *__autoreleasing *)newMajorLocations minorTickLocations:(CPTNumberSet *__autoreleasing *)newMinorLocations { CPTMutableNumberSet *majorLocations = [NSMutableSet set]; @@ -1378,7 +1378,7 @@ -(void)generateEqualMajorTickLocations:(CPTNumberSet *__autoreleasing *)newMajor * @internal * @brief Determines a @quote{nice} number (a multiple of @num{2}, @num{5}, or @num{10}) near the given number. * @param x The number to round. - */ + **/ NSDecimal CPTNiceNum(NSDecimal x) { NSDecimal zero = CPTDecimalFromInteger(0); @@ -1431,7 +1431,7 @@ NSDecimal CPTNiceNum(NSDecimal x) * @internal * @brief Determines a @quote{nice} range length (a multiple of @num{2}, @num{5}, or @num{10}) less than or equal to the given length. * @param length The length to round. - */ + **/ NSDecimal CPTNiceLength(NSDecimal length) { NSDecimal zero = CPTDecimalFromInteger(0); @@ -1470,7 +1470,7 @@ NSDecimal CPTNiceLength(NSDecimal length) * @brief Removes any tick locations falling inside the label exclusion ranges from a set of tick locations. * @param allLocations A set of tick locations. * @return The filtered set of tick locations. - */ + **/ -(nullable CPTNumberSet *)filteredTickLocations:(nullable CPTNumberSet *)allLocations { CPTPlotRangeArray *exclusionRanges = self.labelExclusionRanges; @@ -1831,7 +1831,7 @@ -(void)relabel /** * @internal * @brief Updates the position of all custom labels, hiding the ones that are outside the visible range. - */ + **/ -(void)updateCustomTickLabels { CPTMutablePlotRange *range = [[self.plotSpace plotRangeForCoordinate:self.coordinate] mutableCopy]; diff --git a/framework/Source/CPTAxisLabel.m b/framework/Source/CPTAxisLabel.m index dd73af1df..1fd31256f 100644 --- a/framework/Source/CPTAxisLabel.m +++ b/framework/Source/CPTAxisLabel.m @@ -102,7 +102,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /** @brief Returns an object initialized from data in a given unarchiver. * @param coder An unarchiver object. * @return An object initialized from data in a given unarchiver. - */ + **/ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { if ((self = [super init])) { diff --git a/framework/Source/CPTCalendarFormatter.m b/framework/Source/CPTCalendarFormatter.m index ac9d9455f..af312874c 100644 --- a/framework/Source/CPTCalendarFormatter.m +++ b/framework/Source/CPTCalendarFormatter.m @@ -96,7 +96,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /** @brief Returns an object initialized from data in a given unarchiver. * @param coder An unarchiver object. * @return An object initialized from data in a given unarchiver. - */ + **/ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { if ((self = [super init])) { diff --git a/framework/Source/CPTColor.m b/framework/Source/CPTColor.m index a1d6c6eb5..89ae73fce 100644 --- a/framework/Source/CPTColor.m +++ b/framework/Source/CPTColor.m @@ -119,7 +119,7 @@ -(CGColorRef)cgColor /** @property BOOL opaque * @brief If @YES, the color is completely opaque. - */ + **/ @dynamic opaque; #pragma mark - @@ -646,7 +646,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /** @brief Returns an object initialized from data in a given unarchiver. * @param coder An unarchiver object. * @return An object initialized from data in a given unarchiver. - */ + **/ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { if ((self = [super init])) { diff --git a/framework/Source/CPTColorSpace.m b/framework/Source/CPTColorSpace.m index bf263a38a..ab7d7275e 100644 --- a/framework/Source/CPTColorSpace.m +++ b/framework/Source/CPTColorSpace.m @@ -103,7 +103,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /** @brief Returns an object initialized from data in a given unarchiver. * @param coder An unarchiver object. * @return An object initialized from data in a given unarchiver. - */ + **/ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { if ((self = [super init])) { diff --git a/framework/Source/CPTFill.m b/framework/Source/CPTFill.m index 25148fd09..f6dc9e546 100644 --- a/framework/Source/CPTFill.m +++ b/framework/Source/CPTFill.m @@ -158,12 +158,12 @@ @implementation CPTFill(AbstractMethods) /** @property BOOL opaque * @brief If @YES, the fill is completely opaque. - */ + **/ @dynamic opaque; /** @property nullable CGColorRef cgColor * @brief Returns a @ref CGColorRef describing the fill if the fill can be represented as a color, @NULL otherwise. - */ + **/ @dynamic cgColor; #pragma mark - diff --git a/framework/Source/CPTGradient.m b/framework/Source/CPTGradient.m index dbb1ef25a..f42919218 100644 --- a/framework/Source/CPTGradient.m +++ b/framework/Source/CPTGradient.m @@ -92,7 +92,7 @@ @implementation CPTGradient /** @property BOOL opaque * @brief If @YES, the gradient is completely opaque. - */ + **/ @dynamic opaque; @synthesize elementList; diff --git a/framework/Source/CPTImage.m b/framework/Source/CPTImage.m index a5a40c165..ff60ae7a4 100644 --- a/framework/Source/CPTImage.m +++ b/framework/Source/CPTImage.m @@ -98,7 +98,7 @@ @implementation CPTImage /** @property BOOL opaque * @brief If @YES, the image is completely opaque. - */ + **/ @dynamic opaque; /** @internal @@ -215,7 +215,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /** @brief Returns an object initialized from data in a given unarchiver. * @param coder An unarchiver object. * @return An object initialized from data in a given unarchiver. - */ + **/ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { if ((self = [super init])) { diff --git a/framework/Source/CPTLayer.m b/framework/Source/CPTLayer.m index e83e383d8..30b85666b 100644 --- a/framework/Source/CPTLayer.m +++ b/framework/Source/CPTLayer.m @@ -204,7 +204,7 @@ -(nonnull instancetype)init /** @brief Override to copy or initialize custom fields of the specified layer. * @param layer The layer from which custom fields should be copied. * @return A layer instance with any custom instance variables copied from @par{layer}. - */ + **/ -(nonnull instancetype)initWithLayer:(nonnull id)layer { if ((self = [super initWithLayer:layer])) { @@ -265,7 +265,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /** @brief Returns an object initialized from data in a given unarchiver. * @param coder An unarchiver object. * @return An object initialized from data in a given unarchiver. - */ + **/ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { if ((self = [super initWithCoder:coder])) { @@ -518,7 +518,7 @@ -(void)applyTransform:(CATransform3D)transform3D toContext:(nonnull CGContextRef /** @brief Updates the layer layout if needed and then draws layer content and the content of all sublayers into the provided graphics context. * @param context The graphics context to draw into. - */ + **/ -(void)layoutAndRenderInContext:(nonnull CGContextRef)context { [self layoutIfNeeded]; diff --git a/framework/Source/CPTLayerAnnotation.m b/framework/Source/CPTLayerAnnotation.m index bf64ae7ab..180b6335c 100644 --- a/framework/Source/CPTLayerAnnotation.m +++ b/framework/Source/CPTLayerAnnotation.m @@ -115,7 +115,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /** @brief Returns an object initialized from data in a given unarchiver. * @param coder An unarchiver object. * @return An object initialized from data in a given unarchiver. - */ + **/ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { if ((self = [super initWithCoder:coder])) { diff --git a/framework/Source/CPTLimitBand.m b/framework/Source/CPTLimitBand.m index f1b05a6fe..8cf2b30e0 100644 --- a/framework/Source/CPTLimitBand.m +++ b/framework/Source/CPTLimitBand.m @@ -88,7 +88,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)encoder /** @brief Returns an object initialized from data in a given unarchiver. * @param decoder An unarchiver object. * @return An object initialized from data in a given unarchiver. - */ + **/ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)decoder { if ((self = [super init])) { diff --git a/framework/Source/CPTLineCap.m b/framework/Source/CPTLineCap.m index 4415fd813..0488a10c1 100644 --- a/framework/Source/CPTLineCap.m +++ b/framework/Source/CPTLineCap.m @@ -22,7 +22,7 @@ -(nonnull CGPathRef)newLineCapPath; /** * @brief End cap decorations for lines. - */ + **/ @implementation CPTLineCap /** @property CGSize size; diff --git a/framework/Source/CPTLineStyle.m b/framework/Source/CPTLineStyle.m index f29ebb019..089d3b677 100644 --- a/framework/Source/CPTLineStyle.m +++ b/framework/Source/CPTLineStyle.m @@ -96,7 +96,7 @@ @implementation CPTLineStyle /** @property BOOL opaque * @brief If @YES, a line drawn using the line style is completely opaque. - */ + **/ @dynamic opaque; #pragma mark - diff --git a/framework/Source/CPTNumericData.m b/framework/Source/CPTNumericData.m index 332f26fbb..e55015590 100644 --- a/framework/Source/CPTNumericData.m +++ b/framework/Source/CPTNumericData.m @@ -1177,7 +1177,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)encoder /** @brief Returns an object initialized from data in a given unarchiver. * @param decoder An unarchiver object. * @return An object initialized from data in a given unarchiver. - */ + **/ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)decoder { if ((self = [super init])) { diff --git a/framework/Source/CPTPlot.m b/framework/Source/CPTPlot.m index 9e639b484..767a7175f 100644 --- a/framework/Source/CPTPlot.m +++ b/framework/Source/CPTPlot.m @@ -2287,7 +2287,7 @@ -(nonnull CPTNumberArray *)fieldIdentifiersForCoordinate:(CPTCoordinate __unused /** @brief The coordinate value that corresponds to a particular field identifier. * @param field The field identifier for which the corresponding coordinate is desired. * @return The coordinate that corresponds to a particular field identifier or #CPTCoordinateNone if there is no matching coordinate. - */ + **/ -(CPTCoordinate)coordinateForFieldIdentifier:(NSUInteger __unused)field { return CPTCoordinateNone; @@ -2312,7 +2312,7 @@ -(void)positionLabelAnnotation:(nonnull CPTPlotSpaceAnnotation *__unused)label f * @brief Determines the index of the data element that is under the given point. * @param point The coordinates of the interaction. * @return The index of the data point that is under the given point or @ref NSNotFound if none was found. - */ + **/ -(NSUInteger)dataIndexFromInteractionPoint:(CGPoint __unused)point { return NSNotFound; diff --git a/framework/Source/CPTPlotRange.m b/framework/Source/CPTPlotRange.m index 0dd3ab9f5..495fbb6bd 100644 --- a/framework/Source/CPTPlotRange.m +++ b/framework/Source/CPTPlotRange.m @@ -470,7 +470,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)encoder /** @brief Returns an object initialized from data in a given unarchiver. * @param decoder An unarchiver object. * @return An object initialized from data in a given unarchiver. - */ + **/ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)decoder { if ((self = [super init])) { diff --git a/framework/Source/CPTPlotSpace.m b/framework/Source/CPTPlotSpace.m index 2f4ac4d00..9d09abecb 100644 --- a/framework/Source/CPTPlotSpace.m +++ b/framework/Source/CPTPlotSpace.m @@ -143,7 +143,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /** @brief Returns an object initialized from data in a given unarchiver. * @param coder An unarchiver object. * @return An object initialized from data in a given unarchiver. - */ + **/ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { if ((self = [super init])) { @@ -183,7 +183,7 @@ +(BOOL)supportsSecureCoding * @brief Gets the ordered set of categories for the given coordinate, creating it if necessary. * @param coordinate The axis coordinate. * @return The ordered set of categories for the given coordinate. - */ + **/ -(nonnull CPTMutableCategorySet *)orderedSetForCoordinate:(CPTCoordinate)coordinate { NSMutableDictionary *names = self.categoryNames; @@ -216,7 +216,7 @@ -(nonnull CPTMutableCategorySet *)orderedSetForCoordinate:(CPTCoordinate)coordin * * @param category The category name. * @param coordinate The axis coordinate. - */ + **/ -(void)addCategory:(nonnull NSString *)category forCoordinate:(CPTCoordinate)coordinate { NSParameterAssert(category); @@ -230,7 +230,7 @@ -(void)addCategory:(nonnull NSString *)category forCoordinate:(CPTCoordinate)coo * @brief Removes the named category for the given coordinate. * @param category The category name. * @param coordinate The axis coordinate. - */ + **/ -(void)removeCategory:(nonnull NSString *)category forCoordinate:(CPTCoordinate)coordinate { NSParameterAssert(category); @@ -248,7 +248,7 @@ -(void)removeCategory:(nonnull NSString *)category forCoordinate:(CPTCoordinate) * @param category The category name. * @param coordinate The axis coordinate. * @param idx The index in the list of category names. - */ + **/ -(void)insertCategory:(nonnull NSString *)category forCoordinate:(CPTCoordinate)coordinate atIndex:(NSUInteger)idx { NSParameterAssert(category); @@ -264,7 +264,7 @@ -(void)insertCategory:(nonnull NSString *)category forCoordinate:(CPTCoordinate) * @brief Replace all category names for the given coordinate with the names in the supplied array. * @param newCategories An array of category names. * @param coordinate The axis coordinate. - */ + **/ -(void)setCategories:(nullable CPTStringArray *)newCategories forCoordinate:(CPTCoordinate)coordinate { NSMutableDictionary *names = self.categoryNames; @@ -289,7 +289,7 @@ -(void)setCategories:(nullable CPTStringArray *)newCategories forCoordinate:(CPT /** * @brief Remove all categories for every coordinate. - */ + **/ -(void)removeAllCategories { self.categoryNames = nil; @@ -299,7 +299,7 @@ -(void)removeAllCategories * @brief Returns a list of all category names for the given coordinate. * @param coordinate The axis coordinate. * @return An array of category names. - */ + **/ -(nonnull CPTStringArray *)categoriesForCoordinate:(CPTCoordinate)coordinate { CPTMutableCategorySet *categories = [self orderedSetForCoordinate:coordinate]; @@ -312,7 +312,7 @@ -(nonnull CPTStringArray *)categoriesForCoordinate:(CPTCoordinate)coordinate * @param coordinate The axis coordinate. * @param idx The index in the list of category names. * @return The category name. - */ + **/ -(nullable NSString *)categoryForCoordinate:(CPTCoordinate)coordinate atIndex:(NSUInteger)idx { CPTMutableCategorySet *categories = [self orderedSetForCoordinate:coordinate]; @@ -327,7 +327,7 @@ -(nullable NSString *)categoryForCoordinate:(CPTCoordinate)coordinate atIndex:(N * @param category The category name. * @param coordinate The axis coordinate. * @return The category index. - */ + **/ -(NSUInteger)indexOfCategory:(nonnull NSString *)category forCoordinate:(CPTCoordinate)coordinate { NSParameterAssert(category); diff --git a/framework/Source/CPTPlotSpaceAnnotation.m b/framework/Source/CPTPlotSpaceAnnotation.m index d3790db74..e70864cfd 100644 --- a/framework/Source/CPTPlotSpaceAnnotation.m +++ b/framework/Source/CPTPlotSpaceAnnotation.m @@ -109,7 +109,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /** @brief Returns an object initialized from data in a given unarchiver. * @param coder An unarchiver object. * @return An object initialized from data in a given unarchiver. - */ + **/ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { if ((self = [super initWithCoder:coder])) { diff --git a/framework/Source/CPTPlotSymbol.m b/framework/Source/CPTPlotSymbol.m index 9cbb5fe79..c57099406 100644 --- a/framework/Source/CPTPlotSymbol.m +++ b/framework/Source/CPTPlotSymbol.m @@ -25,7 +25,7 @@ -(CGSize)layerSizeForScale:(CGFloat)scale; #pragma mark - /** @brief Plot symbols for CPTScatterPlot. - */ +**/ @implementation CPTPlotSymbol /** @property CGPoint anchorPoint diff --git a/framework/Source/CPTTimeFormatter.m b/framework/Source/CPTTimeFormatter.m index b607e771f..05500d652 100644 --- a/framework/Source/CPTTimeFormatter.m +++ b/framework/Source/CPTTimeFormatter.m @@ -74,7 +74,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /** @brief Returns an object initialized from data in a given unarchiver. * @param coder An unarchiver object. * @return An object initialized from data in a given unarchiver. - */ + **/ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { if ((self = [super init])) { diff --git a/framework/Source/_CPTConstraintsFixed.m b/framework/Source/_CPTConstraintsFixed.m index 815b0776c..1b8fb1486 100644 --- a/framework/Source/_CPTConstraintsFixed.m +++ b/framework/Source/_CPTConstraintsFixed.m @@ -123,7 +123,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /** @brief Returns an object initialized from data in a given unarchiver. * @param coder An unarchiver object. * @return An object initialized from data in a given unarchiver. - */ + **/ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { if ((self = [super init])) { diff --git a/framework/Source/_CPTConstraintsRelative.m b/framework/Source/_CPTConstraintsRelative.m index aad2057a2..c4a61edd7 100644 --- a/framework/Source/_CPTConstraintsRelative.m +++ b/framework/Source/_CPTConstraintsRelative.m @@ -101,7 +101,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /** @brief Returns an object initialized from data in a given unarchiver. * @param coder An unarchiver object. * @return An object initialized from data in a given unarchiver. - */ + **/ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { if ((self = [super init])) { diff --git a/framework/Source/_CPTFillColor.m b/framework/Source/_CPTFillColor.m index 2680d1896..dda4a2979 100644 --- a/framework/Source/_CPTFillColor.m +++ b/framework/Source/_CPTFillColor.m @@ -116,7 +116,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /** @brief Returns an object initialized from data in a given unarchiver. * @param coder An unarchiver object. * @return An object initialized from data in a given unarchiver. - */ + **/ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { if ((self = [super init])) { diff --git a/framework/Source/_CPTFillGradient.m b/framework/Source/_CPTFillGradient.m index 19a7cdaea..90fddd583 100644 --- a/framework/Source/_CPTFillGradient.m +++ b/framework/Source/_CPTFillGradient.m @@ -102,7 +102,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /** @brief Returns an object initialized from data in a given unarchiver. * @param coder An unarchiver object. * @return An object initialized from data in a given unarchiver. - */ + **/ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { if ((self = [super init])) { diff --git a/framework/Source/_CPTFillImage.m b/framework/Source/_CPTFillImage.m index c26e39c75..505977950 100644 --- a/framework/Source/_CPTFillImage.m +++ b/framework/Source/_CPTFillImage.m @@ -109,7 +109,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder /** @brief Returns an object initialized from data in a given unarchiver. * @param coder An unarchiver object. * @return An object initialized from data in a given unarchiver. - */ + **/ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { if ((self = [super init])) { From 5c39b66866ef3a15c0bb27aa69f7fca3a95f2b01 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 4 Jun 2023 12:04:33 -0400 Subject: [PATCH 184/245] Removed the Travis CI badge and Flattr link from the README file. --- README.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 6e3a5730e..c270055cc 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,14 @@ *Cocoa plotting framework for macOS, iOS, and tvOS.* -[![Build Status](https://secure.travis-ci.org/core-plot/core-plot.svg)](http://travis-ci.org/core-plot/core-plot) [![core-plot CI](https://github.com/core-plot/core-plot/actions/workflows/ci.yml/badge.svg)](https://github.com/core-plot/core-plot/actions/workflows/ci.yml) [![Version Status](https://img.shields.io/cocoapods/v/CorePlot.svg)](https://cocoapods.org/pods/CorePlot) [![license MIT](https://img.shields.io/cocoapods/l/CorePlot.svg)](http://opensource.org/licenses/BSD-3-Clause) [![Platform](https://img.shields.io/cocoapods/p/CorePlot.svg)](http://core-plot.github.io) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![Swift Package Manager compatible](https://img.shields.io/badge/SPM-compatible-brightgreen.svg)](https://github.com/apple/swift-package-manager) +[![core-plot CI](https://github.com/core-plot/core-plot/actions/workflows/ci.yml/badge.svg)](https://github.com/core-plot/core-plot/actions/workflows/ci.yml) +[![Cocoapods](https://img.shields.io/cocoapods/v/CorePlot)](https://cocoapods.org/pods/CorePlot) +[![GitHub license](https://img.shields.io/github/license/core-plot/core-plot?color=brightgreen)](https://opensource.org/licenses/BSD-3-Clause) +[![Cocoapods platforms](https://img.shields.io/cocoapods/p/CorePlot)](https://core-plot.github.io) +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-brightgreen?style=flat)](https://github.com/Carthage/Carthage) +[![Swift Package Manager compatible](https://img.shields.io/badge/SPM-compatible-brightgreen)](https://github.com/apple/swift-package-manager) + +[![GitHub top language](https://img.shields.io/github/languages/top/core-plot/core-plot)]() # Introduction @@ -49,7 +56,3 @@ Core Plot includes a [script](https://github.com/core-plot/core-plot/blob/master ## Testing Core Plot is intended to be applied in scientific, financial, and other domains where correctness is paramount. In order to assure the quality of the framework, unit testing is integrated. Good test coverage protects developers from introducing accidental regressions, and helps them to experiment and refactor without breaking existing code. See the [unit testing](https://github.com/core-plot/core-plot/wiki/Unit-Testing) wiki page for instructions on how to build unit tests for any new code you add to the project. - -# Support Core Plot - -Flattr this From 626434945002a6a7e3d27720d351c98b27177e48 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 4 Jun 2023 12:07:43 -0400 Subject: [PATCH 185/245] Added a step to the create release instructions. --- scripts/README Creating a release package.md | 28 +++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/scripts/README Creating a release package.md b/scripts/README Creating a release package.md index b22c4694b..fcd000c6b 100644 --- a/scripts/README Creating a release package.md +++ b/scripts/README Creating a release package.md @@ -12,29 +12,31 @@ Follow these steps to create a Core Plot release and post it to GitHub: 2. Ensure the [change log](https://github.com/core-plot/core-plot/blob/master/documentation/changelog.markdown) and [podspec](https://github.com/core-plot/core-plot/blob/master/CorePlot.podspec) are up-to-date and committed to the Git repository. -3. In the "Core Plot" project build settings, set the "Current Project Version" to the release version. Commit the change in Git. +3. Merge the development branch into `master`, resolve any merge conflicts, and commit the change. -4. Using Git, ensure your local Core Plot source directory is in sync with the public repository on GitHub. +4. In the "Core Plot" project build settings, set the "Current Project Version" to the release version. Commit the change in Git. -5. Open the Terminal application and `cd` to the root directory of your local Core Plot source directory. +5. Using Git, ensure your local Core Plot source directory is in sync with the public repository on GitHub. -6. Tag the current revision with the release version: +6. Open the Terminal application and `cd` to the root directory of your local Core Plot source directory. + +7. Tag the current revision with the release version: `$ git tag ` where **<version>** is the semantic version number for this release, e.g., 2.5.0. -7. Change to the **scripts** folder: +8. Change to the **scripts** folder: `$ cd scripts` -8. Run the createrelease script: +9. Run the createrelease script: `$ python createrelease.py ` -9. Review the messages printed in the Terminal window and verify that all build steps succeeded. +10. Review the messages printed in the Terminal window and verify that all build steps succeeded. -10. The release products were placed in a folder called **CorePlot_<version>** and placed on your desktop. Open this folder and verify that the following subfolders and files are present: +11. The release products were placed in a folder called **CorePlot_<version>** and placed on your desktop. Open this folder and verify that the following subfolders and files are present:

    • Binaries/iOS/
    • @@ -46,13 +48,13 @@ Follow these steps to create a Core Plot release and post it to GitHub:
    • License.txt
    -11. Right-click the release folder on your desktop and select **Compress "<filename>"** from the menu. +12. Right-click the release folder on your desktop and select **Compress "<filename>"** from the menu. -12. Log into GitHub and navigate to the [Releases](https://github.com/core-plot/core-plot/releases) page. +13. Log into GitHub and navigate to the [Releases](https://github.com/core-plot/core-plot/releases) page. -13. Click **Draft a new release**. +14. Click **Draft a new release**. -14. Select the tag for the new release (``). +15. Select the tag for the new release (``). Enter the following: @@ -61,7 +63,7 @@ Follow these steps to create a Core Plot release and post it to GitHub:
  • Binaries: drag the Core Plot zip file on your desktop to the box
  • -15. Click **Publish release**. +16. Click **Publish release**. # Update Documentation From a42d50c23bc47b3bd682d778a884484d32d00fe8 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 4 Jun 2023 12:40:10 -0400 Subject: [PATCH 186/245] Fixed documentation typos. --- .../PlatformSpecific/CPTPlatformSpecificCategories.m | 4 ++-- framework/PlatformSpecific/CPTTextStylePlatformSpecific.m | 8 ++++---- framework/Source/CPTFill.m | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/framework/PlatformSpecific/CPTPlatformSpecificCategories.m b/framework/PlatformSpecific/CPTPlatformSpecificCategories.m index 0288e9373..fff9c6b8e 100644 --- a/framework/PlatformSpecific/CPTPlatformSpecificCategories.m +++ b/framework/PlatformSpecific/CPTPlatformSpecificCategories.m @@ -19,7 +19,7 @@ @implementation CPTLayer(CPTPlatformSpecificLayerExtensions) /** @brief Gets an image of the layer contents. - * @return A native image representation of the layer content. + * @return A platform-native image representation of the layer content. **/ -(nonnull CPTNativeImage *)imageOfLayer { @@ -147,7 +147,7 @@ -(CGSize)sizeAsDrawn @implementation CPTLayer(CPTPlatformSpecificLayerExtensions) /** @brief Gets an image of the layer contents. - * @return A native image representation of the layer content. + * @return A platform-native image representation of the layer content. **/ -(nullable CPTNativeImage *)imageOfLayer { diff --git a/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m b/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m index 1a094d8f9..cbee9fcc9 100644 --- a/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m +++ b/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m @@ -37,7 +37,7 @@ @implementation CPTTextStyle(CPTPlatformSpecificTextStyleExtensions) * - #NSForegroundColorAttributeName: Sets the @link CPTTextStyle::color color @endlink. * - #NSParagraphStyleAttributeName: Sets the @link CPTTextStyle::textAlignment textAlignment @endlink and @link CPTTextStyle::lineBreakMode lineBreakMode @endlink. * - * Properties associated with missing keys will be inialized to their default values. + * Properties associated with missing keys will be initialized to their default values. * * @param attributes A dictionary of standard text attributes. * @return A new CPTTextStyle instance. @@ -153,7 +153,7 @@ @implementation CPTMutableTextStyle(CPTPlatformSpecificMutableTextStyleExtension * - #NSForegroundColorAttributeName: Sets the @link CPTMutableTextStyle::color color @endlink. * - #NSParagraphStyleAttributeName: Sets the @link CPTMutableTextStyle::textAlignment textAlignment @endlink and @link CPTMutableTextStyle::lineBreakMode lineBreakMode @endlink. * - * Properties associated with missing keys will be inialized to their default values. + * Properties associated with missing keys will be initialized to their default values. * * @param attributes A dictionary of standard text attributes. * @return A new CPTMutableTextStyle instance. @@ -332,7 +332,7 @@ @implementation CPTTextStyle(CPTPlatformSpecificTextStyleExtensions) * - #NSForegroundColorAttributeName: Sets the @link CPTTextStyle::color color @endlink. * - #NSParagraphStyleAttributeName: Sets the @link CPTTextStyle::textAlignment textAlignment @endlink and @link CPTTextStyle::lineBreakMode lineBreakMode @endlink. * - * Properties associated with missing keys will be inialized to their default values. + * Properties associated with missing keys will be initialized to their default values. * * @param attributes A dictionary of standard text attributes. * @return A new CPTTextStyle instance. @@ -431,7 +431,7 @@ @implementation CPTMutableTextStyle(CPTPlatformSpecificMutableTextStyleExtension * - #NSForegroundColorAttributeName: Sets the @link CPTMutableTextStyle::color color @endlink. * - #NSParagraphStyleAttributeName: Sets the @link CPTMutableTextStyle::textAlignment textAlignment @endlink and @link CPTMutableTextStyle::lineBreakMode lineBreakMode @endlink. * - * Properties associated with missing keys will be inialized to their default values. + * Properties associated with missing keys will be initialized to their default values. * * @param attributes A dictionary of standard text attributes. * @return A new CPTMutableTextStyle instance. diff --git a/framework/Source/CPTFill.m b/framework/Source/CPTFill.m index f6dc9e546..1fb58e946 100644 --- a/framework/Source/CPTFill.m +++ b/framework/Source/CPTFill.m @@ -191,7 +191,7 @@ -(nullable CGColorRef)cgColor #pragma mark - #pragma mark Drawing -/** @brief Draws the gradient into the given graphics context inside the provided rectangle. +/** @brief Draws the fill into the given graphics context inside the provided rectangle. * @param rect The rectangle to draw into. * @param context The graphics context to draw into. **/ @@ -200,7 +200,7 @@ -(void)fillRect:(CGRect __unused)rect inContext:(nonnull CGContextRef __unused)c // do nothing--subclasses override to do drawing here } -/** @brief Draws the gradient into the given graphics context clipped to the current drawing path. +/** @brief Draws the fill into the given graphics context clipped to the current drawing path. * @param context The graphics context to draw into. **/ -(void)fillPathInContext:(nonnull CGContextRef __unused)context From 0d0cdb3edb0bd684a6f328f16a87a7f4c2d81f3d Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 4 Jun 2023 12:47:56 -0400 Subject: [PATCH 187/245] Moved the -debugQuickLookObject method into CPTFill and out of the category implementation. --- framework/Source/CPTFill.m | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/framework/Source/CPTFill.m b/framework/Source/CPTFill.m index 1fb58e946..58ffcb4c1 100644 --- a/framework/Source/CPTFill.m +++ b/framework/Source/CPTFill.m @@ -145,6 +145,22 @@ +(BOOL)supportsSecureCoding /// @endcond +#pragma mark - +#pragma mark Debugging + +/// @cond + +-(nullable id)debugQuickLookObject +{ + const CGRect rect = CPTRectMake(0.0, 0.0, 100.0, 100.0); + + return CPTQuickLookImage(rect, ^(CGContextRef context, CGFloat __unused scale, CGRect bounds) { + [self fillRect:bounds inContext:context]; + }); +} + +/// @endcond + @end #pragma mark - @@ -208,20 +224,4 @@ -(void)fillPathInContext:(nonnull CGContextRef __unused)context // do nothing--subclasses override to do drawing here } -#pragma mark - -#pragma mark Debugging - -/// @cond - --(nullable id)debugQuickLookObject -{ - const CGRect rect = CGRectMake(0.0, 0.0, 100.0, 100.0); - - return CPTQuickLookImage(rect, ^(CGContextRef context, CGFloat __unused scale, CGRect bounds) { - [self fillRect:bounds inContext:context]; - }); -} - -/// @endcond - @end From f34d59bfaa33cc387ab743fa8f6937bb068b9559 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 4 Jun 2023 12:49:02 -0400 Subject: [PATCH 188/245] Removed redundant method declarations from CPTFill subclasses. --- framework/Source/_CPTFillColor.h | 6 ------ framework/Source/_CPTFillGradient.h | 6 ------ framework/Source/_CPTFillImage.h | 6 ------ 3 files changed, 18 deletions(-) diff --git a/framework/Source/_CPTFillColor.h b/framework/Source/_CPTFillColor.h index a2c788aa4..0a9aae160 100644 --- a/framework/Source/_CPTFillColor.h +++ b/framework/Source/_CPTFillColor.h @@ -14,10 +14,4 @@ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder NS_DESIGNATED_INITIALIZER; /// @} -/// @name Drawing -/// @{ --(void)fillRect:(CGRect)rect inContext:(nonnull CGContextRef)context; --(void)fillPathInContext:(nonnull CGContextRef)context; -/// @} - @end diff --git a/framework/Source/_CPTFillGradient.h b/framework/Source/_CPTFillGradient.h index aa5b72e76..b0cefe2e1 100644 --- a/framework/Source/_CPTFillGradient.h +++ b/framework/Source/_CPTFillGradient.h @@ -16,10 +16,4 @@ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder NS_DESIGNATED_INITIALIZER; /// @} -/// @name Drawing -/// @{ --(void)fillRect:(CGRect)rect inContext:(nonnull CGContextRef)context; --(void)fillPathInContext:(nonnull CGContextRef)context; -/// @} - @end diff --git a/framework/Source/_CPTFillImage.h b/framework/Source/_CPTFillImage.h index dfd6a907e..2deaac191 100644 --- a/framework/Source/_CPTFillImage.h +++ b/framework/Source/_CPTFillImage.h @@ -16,10 +16,4 @@ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder NS_DESIGNATED_INITIALIZER; /// @} -/// @name Drawing -/// @{ --(void)fillRect:(CGRect)rect inContext:(nonnull CGContextRef)context; --(void)fillPathInContext:(nonnull CGContextRef)context; -/// @} - @end From 7579205f5b27d9a9af07b6a46bd068a21da0e469 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 4 Jun 2023 12:50:13 -0400 Subject: [PATCH 189/245] Updated the Doxygen config files. --- documentation/doxygen/doxygen touch.config | 22 +++++++++++++-------- documentation/doxygen/doxygen.config | 23 ++++++++++++++-------- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/documentation/doxygen/doxygen touch.config b/documentation/doxygen/doxygen touch.config index 592c2bae8..40e036392 100644 --- a/documentation/doxygen/doxygen touch.config +++ b/documentation/doxygen/doxygen touch.config @@ -1026,6 +1026,7 @@ EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = *Tests.* \ *TestCase.* \ + CPT*Debug*.* \ CPT*Derived*.* \ _CPT*.* \ *.py @@ -2363,9 +2364,11 @@ INCLUDE_FILE_PATTERNS = # recursively expanded use the := operator instead of the = operator. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -PREDEFINED = TARGET_OS_IPHONE \ - TARGET_OS_TV \ - TARGET_OS_SIMULATOR \ +PREDEFINED = TARGET_OS_OSX=0 \ + TARGET_OS_IPHONE=1 \ + TARGET_OS_TV=1 \ + TARGET_OS_SIMULATOR=1 \ + TARGET_OS_MACCATALYST=1 \ __IPHONE_3_0=30000 \ __IPHONE_4_0=40000 \ __IPHONE_5_0=50000 \ @@ -2375,15 +2378,18 @@ PREDEFINED = TARGET_OS_IPHONE \ __IPHONE_13_0=130000 \ __IPHONE_OS_VERSION_MIN_REQUIRED=__IPHONE_12_0 \ __IPHONE_OS_VERSION_MAX_ALLOWED=__IPHONE_10_0 \ - NS_DESIGNATED_INITIALIZER \ - NS_RETURNS_INNER_POINTER \ + CGFLOAT_IS_DOUBLE=1 \ + NS_DESIGNATED_INITIALIZER= \ + NS_RETURNS_INNER_POINTER= \ "NS_ENUM(_type,_name)=enum _name : _type _name; enum _name : _type" \ "NS_CLOSED_ENUM(_type,_name)=enum _name : _type _name; enum _name : _type" \ "NS_OPTIONS(_type,_name)=enum _name : _type _name; enum _name : _type" \ "NS_SWIFT_NAME(_name)=" \ - cpt_deprecated \ - cpt_swift_enum \ - cpt_swift_struct + cpt_deprecated= \ + cpt_swift_enum= \ + cpt_swift_struct= \ + cpt_unused= \ + __unused= # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this # tag can be used to specify a list of macro names that should be expanded. The diff --git a/documentation/doxygen/doxygen.config b/documentation/doxygen/doxygen.config index 1d13024ea..63e33fb64 100644 --- a/documentation/doxygen/doxygen.config +++ b/documentation/doxygen/doxygen.config @@ -952,8 +952,7 @@ WARN_LOGFILE = # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = "$(SOURCE_ROOT)/CorePlot.h" \ - "$(SOURCE_ROOT)/Source" \ +INPUT = "$(SOURCE_ROOT)/Source" \ "$(SOURCE_ROOT)/PlatformSpecific" \ "$(SOURCE_ROOT)/MacOnly" @@ -1028,6 +1027,7 @@ EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = *Tests.* \ *TestCase.* \ + CPT*Debug*.* \ CPT*Derived*.* \ _CPT*.* \ *.py @@ -2365,7 +2365,11 @@ INCLUDE_FILE_PATTERNS = # recursively expanded use the := operator instead of the = operator. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -PREDEFINED = TARGET_OS_OSX \ +PREDEFINED = TARGET_OS_OSX=1 \ + TARGET_OS_IPHONE=0 \ + TARGET_OS_TV=0 \ + TARGET_OS_SIMULATOR=0 \ + TARGET_OS_MACCATALYST=0 \ MAC_OS_X_VERSION_10_5=1050 \ MAC_OS_X_VERSION_10_6=1060 \ MAC_OS_X_VERSION_10_7=1070 \ @@ -2374,15 +2378,18 @@ PREDEFINED = TARGET_OS_OSX \ MAC_OS_X_VERSION_10_15=101500 \ MAC_OS_X_VERSION_MIN_REQUIRED=MAC_OS_X_VERSION_10_15 \ MAC_OS_X_VERSION_MAX_ALLOWED=MAC_OS_X_VERSION_10_15 \ - NS_DESIGNATED_INITIALIZER \ - NS_RETURNS_INNER_POINTER \ + CGFLOAT_IS_DOUBLE=1 \ + NS_DESIGNATED_INITIALIZER= \ + NS_RETURNS_INNER_POINTER= \ "NS_ENUM(_type,_name)=enum _name : _type _name; enum _name : _type" \ "NS_CLOSED_ENUM(_type,_name)=enum _name : _type _name; enum _name : _type" \ "NS_OPTIONS(_type,_name)=enum _name : _type _name; enum _name : _type" \ "NS_SWIFT_NAME(_name)=" \ - cpt_deprecated \ - cpt_swift_enum \ - cpt_swift_struct + cpt_deprecated= \ + cpt_swift_enum= \ + cpt_swift_struct= \ + cpt_unused= \ + __unused= # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this # tag can be used to specify a list of macro names that should be expanded. The From 2af3e3599cf4e577c751c260d770dae0071d7ba7 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 4 Jun 2023 13:00:02 -0400 Subject: [PATCH 190/245] Fixed protocol inheritance errors in the Doxygen tag files. --- documentation/doxygen/doxygen-cocoa-tags.xml | 3 --- documentation/doxygen/doxygen-cocoa-touch-tags.xml | 4 ---- 2 files changed, 7 deletions(-) diff --git a/documentation/doxygen/doxygen-cocoa-tags.xml b/documentation/doxygen/doxygen-cocoa-tags.xml index 1578dd526..e08c43cb3 100644 --- a/documentation/doxygen/doxygen-cocoa-tags.xml +++ b/documentation/doxygen/doxygen-cocoa-tags.xml @@ -190,7 +190,6 @@ NSObject NSCoding-p NSCopying-p - NSMutableCopying-p NSDate @@ -347,8 +346,6 @@ NSMutableData https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableData_Class/index.html NSData - NSCoding-p - NSCopying-p NSMutableCopying-p diff --git a/documentation/doxygen/doxygen-cocoa-touch-tags.xml b/documentation/doxygen/doxygen-cocoa-touch-tags.xml index 1de3c13d3..8c58e38c5 100644 --- a/documentation/doxygen/doxygen-cocoa-touch-tags.xml +++ b/documentation/doxygen/doxygen-cocoa-touch-tags.xml @@ -156,7 +156,6 @@ https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIColor_Class/Reference/Reference.html NSObject NSCoding-p - NSObject-p NSCopying @@ -173,7 +172,6 @@ NSObject NSCoding-p NSCopying-p - NSMutableCopying-p NSDate @@ -282,8 +280,6 @@ NSMutableData https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableData_Class/index.html NSData - NSCoding-p - NSCopying-p NSMutableCopying-p From 0592241ce9b541c3efee4aea925e96ea794f454d Mon Sep 17 00:00:00 2001 From: Christian Tietze Date: Thu, 8 Jun 2023 10:07:47 +0200 Subject: [PATCH 191/245] lower deployment target in SPM --- Package.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Package.swift b/Package.swift index 7f91d1f21..fc9c080b2 100644 --- a/Package.swift +++ b/Package.swift @@ -6,7 +6,7 @@ import PackageDescription let package = Package( name: "CorePlot", platforms: [ - .macOS(.v10_14), + .macOS(.v10_13), .iOS(.v12), .tvOS(.v12) ], From a5867c28a0df3e982e19df08d7f9558a56812d0a Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 17 Jun 2023 08:22:58 -0400 Subject: [PATCH 192/245] Added ENABLE_USER_SCRIPT_SANDBOXING build setting for Xcode 15.0 beta. --- framework/xcconfig/CorePlot.xcconfig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/framework/xcconfig/CorePlot.xcconfig b/framework/xcconfig/CorePlot.xcconfig index 3c036b68d..bf809b75c 100644 --- a/framework/xcconfig/CorePlot.xcconfig +++ b/framework/xcconfig/CorePlot.xcconfig @@ -16,6 +16,8 @@ CODE_SIGN_INJECT_BASE_ENTITLEMENTS = YES CODE_SIGN_STYLE = Automatic DEVELOPMENT_TEAM = +ENABLE_USER_SCRIPT_SANDBOXING = NO + ALWAYS_SEARCH_USER_PATHS = NO BUILD_LIBRARY_FOR_DISTRIBUTION = YES From 6ad7241d2dc86f611ab4ef8c23642bc13799ae19 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 17 Jun 2023 08:24:58 -0400 Subject: [PATCH 193/245] Documentation updates. --- framework/Source/CPTMutableTextStyle.m | 2 +- framework/Source/CPTTextStyle.m | 4 ++-- framework/Source/CPTUtilities.h | 28 ++++++++++++++++++++++---- framework/Source/CPTUtilities.m | 11 ++++++++++ 4 files changed, 38 insertions(+), 7 deletions(-) diff --git a/framework/Source/CPTMutableTextStyle.m b/framework/Source/CPTMutableTextStyle.m index 97673b1ea..09be8dc7a 100644 --- a/framework/Source/CPTMutableTextStyle.m +++ b/framework/Source/CPTMutableTextStyle.m @@ -37,7 +37,7 @@ @implementation CPTMutableTextStyle @dynamic textAlignment; /** @property NSLineBreakMode lineBreakMode - * @brief The line break mode used when laying out the text. Default is @link NSParagraphStyle::NSLineBreakByWordWrapping NSLineBreakByWordWrapping @endlink. + * @brief The line break mode used when laying out the text. Default is #NSLineBreakByWordWrapping. **/ @dynamic lineBreakMode; diff --git a/framework/Source/CPTTextStyle.m b/framework/Source/CPTTextStyle.m index bc9c7bcc0..6cf278831 100644 --- a/framework/Source/CPTTextStyle.m +++ b/framework/Source/CPTTextStyle.m @@ -58,7 +58,7 @@ @implementation CPTTextStyle @synthesize textAlignment; /** @property NSLineBreakMode lineBreakMode - * @brief The line break mode used when laying out the text. Default is @link NSParagraphStyle::NSLineBreakByWordWrapping NSLineBreakByWordWrapping @endlink. + * @brief The line break mode used when laying out the text. Default is #NSLineBreakByWordWrapping. **/ @synthesize lineBreakMode; @@ -108,7 +108,7 @@ +(nonnull instancetype)textStyleWithStyle:(nullable CPTTextStyle *)textStyle * - @ref fontSize = @num{12.0} * - @ref color = opaque black * - @ref textAlignment = #CPTTextAlignmentLeft - * - @ref lineBreakMode = @link NSParagraphStyle::NSLineBreakByWordWrapping NSLineBreakByWordWrapping @endlink + * - @ref lineBreakMode = #NSLineBreakByWordWrapping * * @return The initialized object. **/ diff --git a/framework/Source/CPTUtilities.h b/framework/Source/CPTUtilities.h index 58c137d47..23e81bded 100644 --- a/framework/Source/CPTUtilities.h +++ b/framework/Source/CPTUtilities.h @@ -114,14 +114,34 @@ CPTRGBAColor CPTRGBAColorFromCGColor(__nonnull CGColorRef color); /// @{ /** - * @brief A function called to align a point in a CGContext. + * @fn CPTAlignPointFunction + * @brief A function called to align a point in a @ref CGContextRef. + * + * @param context The graphics context. + * @param point The point in user space. + * @return The device aligned point in user space. **/ -typedef CGPoint (*CPTAlignPointFunction)(__nonnull CGContextRef, CGPoint); +typedef CGPoint (*CPTAlignPointFunction)(__nonnull CGContextRef context, CGPoint point); /** - * @brief A function called to align a rectangle in a CGContext. + * @fn CPTAlignSizeFunction + * @brief A function called to align a size in a @ref CGContextRef. + * + * @param context The graphics context. + * @param size The size in user space. + * @return The device aligned size in user space. **/ -typedef CGRect (*CPTAlignRectFunction)(__nonnull CGContextRef, CGRect); +typedef CGSize (*CPTAlignSizeFunction)(__nonnull CGContextRef context, CGSize size); + +/** + * @fn CPTAlignRectFunction + * @brief A function called to align a rectangle in a @ref CGContextRef. + * + * @param context The graphics context. + * @param rect The rectangle in user space. + * @return The device aligned rectangle in user space. + **/ +typedef CGRect (*CPTAlignRectFunction)(__nonnull CGContextRef context, CGRect rect); CGPoint CPTAlignPointToUserSpace(__nonnull CGContextRef context, CGPoint point); CGSize CPTAlignSizeToUserSpace(__nonnull CGContextRef context, CGSize size); diff --git a/framework/Source/CPTUtilities.m b/framework/Source/CPTUtilities.m index c40785c25..123207eb6 100644 --- a/framework/Source/CPTUtilities.m +++ b/framework/Source/CPTUtilities.m @@ -991,6 +991,17 @@ CGRect CPTAlignIntegralRectToUserSpace(__nonnull CGContextRef context, CGRect re return CGContextConvertRectToUserSpace(context, rect); } +/** + * @brief Aligns a bordered rectangle in user space in device space, positioning it where the border will be drawn the sharpest. + * + * Ensures that the x and y coordinates are aligned on or between pixels in device space + * and the width and height are an integer number of device pixels. + * + * @param context The graphics context. + * @param rect The rectangle in user space. + * @param borderLineStyle The border line style. + * @return The device aligned rectangle in user space. + **/ CGRect CPTAlignBorderedRectToUserSpace(__nonnull CGContextRef context, CGRect rect, CPTLineStyle *__nonnull borderLineStyle) { CGRect borderRect; From deefacd131236bfecfbf7eaaa3b338b002380b90 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 17 Jun 2023 08:27:27 -0400 Subject: [PATCH 194/245] Refactored the Doxygen tag files for Apple APIs to move common items into a shared file and updated links to Apple documentation pages. --- documentation/doxygen/doxygen touch.config | 14 +- documentation/doxygen/doxygen-cocoa-tags.xml | 1062 +--------------- .../doxygen/doxygen-cocoa-touch-tags.xml | 980 +-------------- documentation/doxygen/doxygen-common-tags.xml | 1086 +++++++++++++++++ documentation/doxygen/doxygen.config | 14 +- framework/CorePlot.xcodeproj/project.pbxproj | 6 +- framework/Source/CPTShadow.m | 4 +- scripts/generate_core_plot_docs.sh | 15 +- 8 files changed, 1181 insertions(+), 2000 deletions(-) create mode 100644 documentation/doxygen/doxygen-common-tags.xml diff --git a/documentation/doxygen/doxygen touch.config b/documentation/doxygen/doxygen touch.config index 40e036392..73b5fb7e1 100644 --- a/documentation/doxygen/doxygen touch.config +++ b/documentation/doxygen/doxygen touch.config @@ -273,10 +273,10 @@ TAB_SIZE = 4 # with the commands \{ and \} for these it is advised to use the version @{ and # @} or use a double escape (\\{ and \\}) -ALIASES = "YES=@ref YES" \ - "NO=@ref NO" \ - "nil=@ref nil" \ - "Nil=@ref Nil" \ +ALIASES = "YES=@ref YES" \ + "NO=@ref NO" \ + "nil=@ref nil" \ + "Nil=@ref Nil" \ "NULL=NULL" \ "NAN=NaN" \ "super=super" \ @@ -2386,6 +2386,7 @@ PREDEFINED = TARGET_OS_OSX=0 \ "NS_OPTIONS(_type,_name)=enum _name : _type _name; enum _name : _type" \ "NS_SWIFT_NAME(_name)=" \ cpt_deprecated= \ + cpt_requires_super= \ cpt_swift_enum= \ cpt_swift_struct= \ cpt_unused= \ @@ -2427,13 +2428,14 @@ SKIP_FUNCTION_MACROS = YES # the path). If a tag file is not located in the directory in which doxygen is # run, you must also specify the path to the tagfile here. -TAGFILES = "$(SOURCE_ROOT)/../documentation/doxygen/doxygen-cocoa-touch-tags.xml" +TAGFILES = "$(SOURCE_ROOT)/../documentation/doxygen/doxygen-common-tags.xml" \ + "$(SOURCE_ROOT)/../documentation/doxygen/doxygen-cocoa-touch-tags.xml" # When a file name is specified after GENERATE_TAGFILE, doxygen will create a # tag file that is based on the input files it reads. See section "Linking to # external documentation" for more information about the usage of tag files. -GENERATE_TAGFILE = $(SOURCE_ROOT)/../documentation/doxygen/core-plot-touch-tags.xml +GENERATE_TAGFILE = "$(SOURCE_ROOT)/../documentation/doxygen/core-plot-touch-tags.xml" # If the ALLEXTERNALS tag is set to YES, all external class will be listed in # the class index. If set to NO, only the inherited external classes will be diff --git a/documentation/doxygen/doxygen-cocoa-tags.xml b/documentation/doxygen/doxygen-cocoa-tags.xml index e08c43cb3..a216168d6 100644 --- a/documentation/doxygen/doxygen-cocoa-tags.xml +++ b/documentation/doxygen/doxygen-cocoa-tags.xml @@ -1,1079 +1,123 @@ - - NSArray - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/Reference/Reference.html - NSObject - NSCoding-p - NSCopying-p - NSFastEnumeration-p - NSMutableCopying-p - - - NSMutableArray - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html - NSObject - NSCoding-p - NSCopying-p - NSFastEnumeration-p - NSMutableCopying-p - - - NSAttributedString - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSAttributedString_Class/Reference/NSAttributedString.html - NSObject - NSCoding-p - NSCopying-p - NSMutableCopying-p - - - NSMutableAttributedString - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableAttributedString_Class/Reference/NSMutableAttributedString.html - NSObject - NSCoding-p - NSCopying-p - NSMutableCopying-p - - - NSCalendar - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - NSObject - NSCoding-p - NSCopying-p - NSObject-p - - - NSCalendar Class Reference - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - - NSCalendarUnit - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/c/tdef/NSCalendarUnit - - - NSEraCalendarUnit - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSEraCalendarUnit - - - NSYearCalendarUnit - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSYearCalendarUnit - - - NSMonthCalendarUnit - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSMonthCalendarUnit - - - NSDayCalendarUnit - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSDayCalendarUnit - - - NSHourCalendarUnit - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSHourCalendarUnit - - - NSMinuteCalendarUnit - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSMinuteCalendarUnit - - - NSSecondCalendarUnit - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSSecondCalendarUnit - - - NSWeekCalendarUnit - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSWeekCalendarUnit - - - NSWeekdayCalendarUnit - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSWeekdayCalendarUnit - - - NSWeekdayOrdinalCalendarUnit - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSWeekdayOrdinalCalendarUnit - - - NSQuarterCalendarUnit - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSQuarterCalendarUnit - - - NSWeekOfMonthCalendarUnit - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSWeekOfMonthCalendarUnit - - - NSWeekOfYearCalendarUnit - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSWeekOfYearCalendarUnit - - - NSYearForWeekOfYearCalendarUnit - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSYearForWeekOfYearCalendarUnit - - - NSCalendarCalendarUnit - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSCalendarCalendarUnit - - - NSTimeZoneCalendarUnit - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSTimeZoneCalendarUnit - - - - NSCoder - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCoder_Class/Reference/NSCoder.html - NSObject - - - NSCoding - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSCoding_Protocol/Reference/Reference.html - - id - initWithCoder: - //apple_ref/occ/intfm/NSCoding/initWithCoder: - - - void - encodeWithCoder: - //apple_ref/occ/intfm/NSCoding/encodeWithCoder: - - NSColor - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSColor_Class/Reference/Reference.html + https://developer.apple.com/documentation/appkit/NSColor NSObject - NSCoding-p - NSCopying-p - NSObject-p - - - NSCopying - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSCopying_Protocol/Reference/Reference.html - - id - copyWithZone: - //apple_ref/occ/intfm/NSCopying/copyWithZone: - + NSCoding + NSCopying NSCursor - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSCursor_Class/Reference/Reference.html + https://developer.apple.com/documentation/appkit/NSCursor NSObject - NSCoding-p + NSCoding NSCursor * closedHandCursor - //apple_ref/occ/clm/NSCursor/closedHandCursor + https://developer.apple.com/documentation/appkit/nscursor/1524603-closedhand NSCursor * openHandCursor - //apple_ref/occ/clm/NSCursor/openHandCursor + https://developer.apple.com/documentation/appkit/nscursor/1528540-openhand - NSData - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/Reference/Reference.html + NSEvent + https://developer.apple.com/documentation/appkit/NSEvent NSObject - NSCoding-p - NSCopying-p + NSCoding + NSCopying - NSDate - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDate_Class/Reference/Reference.html + NSGraphicsContext + https://developer.apple.com/documentation/appkit/NSGraphicsContext NSObject - NSCoding-p - NSCopying-p - NSObject-p - NSDateFormatter - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html + NSImage + https://developer.apple.com/documentation/appkit/NSImage NSObject - NSCoding-p - NSCopying-p - NSObject-p + NSCoding + NSCopying + + + NSObject + https://developer.apple.com/documentation/objectivec/NSObject + NSKeyValueBindingCreation - NSDateFormatter Class Reference - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html - - NSDateFormatterStyle - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html - //apple_ref/c/tdef/NSDateFormatterStyle - - - NSDateFormatterNoStyle - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html - //apple_ref/doc/c_ref/NSDateFormatterNoStyle - - - NSDateFormatterShortStyle - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html - //apple_ref/doc/c_ref/NSDateFormatterShortStyle - - - NSDateFormatterMediumStyle - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html - //apple_ref/doc/c_ref/NSDateFormatterMediumStyle - - - NSDateFormatterLongStyle - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html - //apple_ref/doc/c_ref/NSDateFormatterLongStyle + NSKeyValueBindingCreation Reference + https://developer.apple.com/documentation/objectivec/nsobject/NSKeyValueBindingCreation + + NSBindingInfoKey + https://developer.apple.com/documentation/appkit/NSBindingInfoKey - - NSDateFormatterFullStyle - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html - //apple_ref/doc/c_ref/NSDateFormatterFullStyle + + NSBindingName + https://developer.apple.com/documentation/appkit/NSBindingName - - - NSDecimalNumber - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDecimalNumber_Class/Reference/Reference.html - NSNumber - NSCoding-p - NSCopying-p - - - NSDictionary - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/Reference/Reference.html - NSObject - NSCoding-p - NSCopying-p - NSFastEnumeration-p - NSMutableCopying-p - - - NSMutableDictionary - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableDictionary_Class/Reference/Reference.html - NSObject - NSCoding-p - NSCopying-p - NSFastEnumeration-p - NSMutableCopying-p - - - NSEvent - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSEvent_Class/Reference/Reference.html - NSObject - NSCoding-p - NSCopying-p - - - NSFastEnumeration - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSFastEnumeration_protocol/Reference/NSFastEnumeration.html - - NSUInteger - countByEnumeratingWithState:objects:count: - //apple_ref/occ/intfm/NSFastEnumeration/countByEnumeratingWithState:objects:count: + + NSBindingOption + https://developer.apple.com/documentation/appkit/NSBindingOption - - NSGraphicsContext - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSGraphicsContext_Class/Reference/Reference.html - NSObject - - - NSImage - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSImage_Class/Reference/Reference.html - NSObject - NSCoding-p - NSCopying-p - NSKeyValueBindingCreation - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Protocols/NSKeyValueBindingCreation_Protocol/Reference/Reference.html + https://developer.apple.com/documentation/objectivec/nsobject/NSKeyValueBindingCreation void exposeBinding: - //apple_ref/occ/clm/NSObject/exposeBinding: + https://developer.apple.com/documentation/objectivec/nsobject/1458184-exposeBinding + (NSBindingName binding) - NSArray * + NSArray<NSBindingName> *exposedBindings exposedBindings - //apple_ref/occ/instm/NSObject/exposedBindings + https://developer.apple.com/documentation/objectivec/nsobject/1458048-exposedBindings Class valueClassForBinding: - //apple_ref/occ/instm/NSObject/valueClassForBinding: + https://developer.apple.com/documentation/objectivec/nsobject/1458101-valueClassForBinding + (NSBindingName binding) void bind:toObject:withKeyPath:options: - //apple_ref/occ/instm/NSObject/bind:toObject:withKeyPath:options: + https://developer.apple.com/documentation/objectivec/nsobject/1458185-bind + (NSBindingName binding, id observable, NSString *keyPath, NSDictionary<NSBindingOption, id> *options) - NSArray * + NSArray<NSAttributeDescription *> * optionDescriptionsForBinding: - //apple_ref/occ/instm/NSObject/optionDescriptionsForBinding: + https://developer.apple.com/documentation/objectivec/nsobject/1458174-optiondescriptionsforbinding + (NSBindingName binding) - NSDictionary * + NSDictionary<NSBindingInfoKey, id*> * infoForBinding: - //apple_ref/occ/instm/NSObject/infoForBinding: + https://developer.apple.com/documentation/objectivec/nsobject/1458122-infoForBinding + (NSBindingName binding) void unbind: - //apple_ref/occ/instm/NSObject/unbind: - - - - NSMutableCopying - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSMutableCopying_Protocol/Reference/Reference.html - - id - mutableCopyWithZone: - //apple_ref/occ/intfm/NSMutableCopying/mutableCopyWithZone: - - - - NSMutableData - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableData_Class/index.html - NSData - NSMutableCopying-p - - - NSNull - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNull_Class/Reference/Reference.html - NSObject - NSCoding-p - NSCopying-p - - NSNull * - null - //apple_ref/occ/clm/NSNull/null - - - - NSNumber - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/Reference/Reference.html - NSValue - NSCoding-p - NSCopying-p - - - NSNumberFormatter - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNumberFormatter_Class/Reference/Reference.html - NSFormatter - - - NSFormatter - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSFormatter_Class/Reference/Reference.html - NSObject - NSCoding-p - NSCopying-p - - - NSObject - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html - NSObject-p - NSKeyValueBindingCreation-p - - id - alloc - //apple_ref/occ/clm/NSObject/alloc - - - Class - class - //apple_ref/occ/clm/NSObject/class - - - void - initialize - //apple_ref/occ/clm/NSObject/initialize - - - void - load - //apple_ref/occ/clm/NSObject/load - - - id - new - //apple_ref/occ/clm/NSObject/new - - - Class - classForCoder - //apple_ref/occ/instm/NSObject/classForCoder - - - id - copy - //apple_ref/occ/instm/NSObject/copy - - - void - dealloc - //apple_ref/occ/instm/NSObject/dealloc - - - void - finalize - //apple_ref/occ/instm/NSObject/finalize - - - id - init - //apple_ref/occ/instm/NSObject/init - - - id - mutableCopy - //apple_ref/occ/instm/NSObject/mutableCopy - - - - NSObject - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html - - NSString * - description - //apple_ref/occ/intfm/NSObject/description - - - NSUInteger - hash - //apple_ref/occ/intfm/NSObject/hash - - - BOOL - isEqual: - //apple_ref/occ/intfm/NSObject/isEqual: - - - - NSParagraphStyle - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSParagraphStyle_Class/Reference/Reference.html - NSObject - NSCoding-p - NSCopying-p - NSMutableCopying-p - - NSLineBreakMode - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSParagraphStyle_Class/Reference/Reference.html - //apple_ref/c/tdef/NSLineBreakMode - - - NSLineBreakByWordWrapping - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSParagraphStyle_Class/Reference/Reference.html - //apple_ref/doc/c_ref/NSLineBreakByWordWrapping - - - NSLineBreakByCharWrapping - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSParagraphStyle_Class/Reference/Reference.html - //apple_ref/doc/c_ref/NSLineBreakByCharWrapping - - - NSLineBreakByClipping - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSParagraphStyle_Class/Reference/Reference.html - //apple_ref/doc/c_ref/NSLineBreakByClipping - - - NSLineBreakByTruncatingHead - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSParagraphStyle_Class/Reference/Reference.html - //apple_ref/doc/c_ref/NSLineBreakByTruncatingHead - - - NSLineBreakByTruncatingTail - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSParagraphStyle_Class/Reference/Reference.html - //apple_ref/doc/c_ref/NSLineBreakByTruncatingTail - - - NSLineBreakByTruncatingMiddle - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSParagraphStyle_Class/Reference/Reference.html - //apple_ref/doc/c_ref/NSLineBreakByTruncatingMiddle + https://developer.apple.com/documentation/objectivec/nsobject/1458088-unbind + (NSBindingName binding) NSResponder - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSResponder_Class/Reference/Reference.html - NSObject - NSCoding-p - - - NSSet - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSSet_Class/Reference/Reference.html - NSObject - NSCoding-p - NSCopying-p - NSFastEnumeration-p - NSMutableCopying-p - - - NSMutableSet - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableSet_Class/Reference/Reference.html - NSObject - NSCoding-p - NSCopying-p - NSFastEnumeration-p - NSMutableCopying-p - - - NSSecureCoding - https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSSecureCoding_Protocol_Ref/ - - BOOL - supportsSecureCoding: - //apple_ref/occ/intfcm/NSSecureCoding/supportsSecureCoding - - - - NSString - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html - NSObject - NSCoding-p - NSCopying-p - NSMutableCopying-p - - - NSValue - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSValue_Class/Reference/Reference.html - NSObject - NSCoding-p - NSCopying-p - - - NSValueTransformer - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSValueTransformer_Class/Reference/Reference.html + https://developer.apple.com/documentation/appkit/NSResponder NSObject + NSCoding NSView - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSView_Class/Reference/NSView.html + https://developer.apple.com/documentation/appkit/NSView NSResponder - - - NSAttributedString Application Kit Additions Reference - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSAttributedString_AppKitAdditions/Reference/Reference.html - - NSFontAttributeName - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSAttributedString_AppKitAdditions/Reference/Reference.html - //apple_ref/doc/c_ref/NSFontAttributeName - - - NSForegroundColorAttributeName - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSAttributedString_AppKitAdditions/Reference/Reference.html - //apple_ref/doc/c_ref/NSForegroundColorAttributeName - - - NSParagraphStyleAttributeName - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSAttributedString_AppKitAdditions/Reference/Reference.html - //apple_ref/doc/c_ref/NSParagraphStyleAttributeName - - - - - - CGColor Reference - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGColor/Reference/reference.html - - CGColorRef - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGColor/Reference/reference.html - //apple_ref/c/tdef/CGColorRef - - - - CGColorSpace Reference - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGColorSpace/Reference/reference.html - - CGColorSpaceRef - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGColorSpace/Reference/reference.html - //apple_ref/c/tdef/CGColorSpaceRef - - - CGColorSpaceRef - CGColorSpaceCreateWithName - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGColorSpace/Reference/reference.html - //apple_ref/c/func/CGColorSpaceCreateWithName - - - kCGColorSpaceGenericRGB - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGColorSpace/Reference/reference.html - //apple_ref/doc/c_ref/kCGColorSpaceGenericRGB - - - - CGContext Reference - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGContext/Reference/reference.html - - CGContextRef - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGContext/Reference/reference.html - //apple_ref/c/tdef/CGContextRef - - - - CGFunction Reference - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGFunction/Reference/reference.html - - CGFunctionRef - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGFunction/Reference/reference.html - //apple_ref/c/tdef/CGFunctionRef - - - - CGGeometry Reference - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html - - CGFloat - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html - //apple_ref/c/tdef/CGFloat - - - CGPoint - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html - //apple_ref/c/tdef/CGPoint - - - CGRect - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html - //apple_ref/c/tdef/CGRect - - - CGRectNull - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html - //apple_ref/c/tdef/CGRectNull - - - CGSize - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html - //apple_ref/c/tdef/CGSize - - - CGPoint - CGPointMake - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html - //apple_ref/c/func/CGPointMake - (CGFloat x, CGFloat y) - - - CGRect - CGRectInset - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html - //apple_ref/c/func/CGRectInset - (CGRect rect, CGFloat dx, CGFloat dy) - - - CGRect - CGRectMake - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html - //apple_ref/c/func/CGRectMake - (CGFloat x, CGFloat y, CGFloat width, CGFloat height) - - - CGSize - CGSizeMake - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html - //apple_ref/c/func/CGSizeMake - (CGFloat width, CGFloat height) - - - - CGImage Reference - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGImage/Reference/reference.html - - CGImageRef - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGImage/Reference/reference.html - //apple_ref/c/tdef/CGImageRef - - - - CGPath Reference - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGPath/Reference/reference.html - - CGPathRef - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGPath/Reference/reference.html - //apple_ref/c/tdef/CGPathRef - - - CGLineCap - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGPath/Reference/reference.html - //apple_ref/c/tdef/CGLineCap - - - kCGLineCapButt - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGPath/Reference/reference.html - //apple_ref/doc/c_ref/kCGLineCapButt - - - kCGLineCapRound - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGPath/Reference/reference.html - //apple_ref/doc/c_ref/kCGLineCapRound - - - kCGLineCapSquare - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGPath/Reference/reference.html - //apple_ref/doc/c_ref/kCGLineCapSquare - - - CGLineJoin - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGPath/Reference/reference.html - //apple_ref/c/tdef/CGLineJoin - - - kCGLineJoinMiter - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGPath/Reference/reference.html - //apple_ref/doc/c_ref/kCGLineJoinMiter - - - kCGLineJoinRound - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGPath/Reference/reference.html - //apple_ref/doc/c_ref/kCGLineJoinRound - - - kCGLineJoinBevel - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGPath/Reference/reference.html - //apple_ref/doc/c_ref/kCGLineJoinBevel - - - - CGShading Reference - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGShading/Reference/reference.html - - CGShadingRef - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGShading/Reference/reference.html - //apple_ref/c/tdef/CGShadingRef - - - - - - CAAnimationDelegate - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CAAnimationDelegate_protocol/Introduction/Introduction.html/ - NSObject-p - - void - animationDidStart: - //apple_ref/occ/intfcm/CAAnimationDelegate/animationDidStart - - - void - animationDidStop:finished: - //apple_ref/occ/intfcm/CAAnimationDelegate/animationDidStopfinished - - - - CALayer - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CALayer_class/Introduction/Introduction.html - NSObject - NSCoding-p - CAMediaTiming-p - - CGPoint - anchorPoint - //apple_ref/occ/instp/CALayer/anchorPoint - - - CGRect - bounds - //apple_ref/occ/instp/CALayer/bounds - - - CGFloat - contentsScale - //apple_ref/occ/instp/CALayer/contentsScale - - - CGFloat - cornerRadius - //apple_ref/occ/instp/CALayer/cornerRadius - - - id - delegate - //apple_ref/occ/instp/CALayer/delegate - - - CGRect - frame - //apple_ref/occ/instp/CALayer/frame - - - BOOL - masksToBounds - //apple_ref/occ/instp/CALayer/masksToBounds - - - BOOL - needsDisplayOnBoundsChange - //apple_ref/occ/instp/CALayer/needsDisplayOnBoundsChange - - - BOOL - opacity - //apple_ref/occ/instp/CALayer/opacity - - - BOOL - opaque - //apple_ref/occ/instp/CALayer/opaque - - - id - layer - //apple_ref/occ/clm/CALayer/layer - - - BOOL - containsPoint: - //apple_ref/occ/instm/CALayer/containsPoint: - - - void - drawInContext: - //apple_ref/occ/instm/CALayer/drawInContext: - - - id - init - //apple_ref/occ/instm/CALayer/init - - - id - initWithLayer - //apple_ref/occ/instm/CALayer/initWithLayer - - - void - layoutSublayers - //apple_ref/occ/instm/CALayer/layoutSublayers - - - void - setNeedsDisplay - //apple_ref/occ/instm/CALayer/setNeedsDisplay - - - void - setNeedsDisplayInRect: - //apple_ref/occ/instm/CALayer/setNeedsDisplayInRect: - - - void - setNeedsLayout - //apple_ref/occ/instm/CALayer/setNeedsLayout - - - - CALayerDelegate - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CALayerDelegate_protocol/Introduction/Introduction.html/ - NSObject-p - - id - actionForLayer:forKey: - //apple_ref/occ/intfcm/CALayerDelegate/actionForLayerforKey - - - void - displayLayer: - //apple_ref/occ/intfcm/CALayerDelegate/displayLayer - - - void - drawLayer:inContext: - //apple_ref/occ/intfcm/CALayerDelegate/drawLayerinContext - - - void - layerWillDraw: - //apple_ref/occ/intfcm/CALayerDelegate/layerWillDraw - - - void - layoutSublayersOfLayer: - //apple_ref/occ/intfcm/CALayerDelegate/layoutSublayersOfLayer - - - - CAMediaTiming - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CAMediaTiming_protocol/Introduction/Introduction.html - - BOOL - autoreverses - //apple_ref/occ/intfp/CAMediaTiming/autoreverses - - - CFTimeInterval - beginTime - //apple_ref/occ/intfp/CAMediaTiming/beginTime - - - CFTimeInterval - duration - //apple_ref/occ/intfp/CAMediaTiming/duration - - - NSString * - fillMode - //apple_ref/occ/intfp/CAMediaTiming/fillMode - - - float - repeatCount - //apple_ref/occ/intfp/CAMediaTiming/repeatCount - - - id - repeatDuration - //apple_ref/occ/intfp/CAMediaTiming/repeatDuration - - - float - speed - //apple_ref/occ/intfp/CAMediaTiming/speed - - - CFTimeInterval - timeOffset - //apple_ref/occ/intfp/CAMediaTiming/timeOffset - - - - - - CIImage - https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/QuartzCoreFramework/Classes/CIImage_Class/Reference/Reference.html - NSObject - NSCoding-p - NSCopying-p - - - - - Byte-Order Utilties Reference - https://developer.apple.com/library/mac/#documentation/corefoundation/Reference/CFByteOrderUtils/Reference/reference.html - - CFByteOrder - https://developer.apple.com/library/mac/#documentation/corefoundation/Reference/CFByteOrderUtils/Reference/reference.html - //apple_ref/doc/c_ref/CFByteOrder - - - - Time Utilities Reference - https://developer.apple.com/library/mac/#documentation/CoreFoundation/Reference/CFTimeUtils/Reference/reference.html - - CFTimeInterval - https://developer.apple.com/library/mac/#documentation/CoreFoundation/Reference/CFTimeUtils/Reference/reference.html - //apple_ref/doc/c_ref/CFTimeInterval - - - - Foundation Functions Reference - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html - - BOOL - NSDecimalIsNotANumber - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html - //apple_ref/c/func/NSDecimalIsNotANumber - - - - - - Obective-C Runtime Utlities Reference - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html - - BOOL - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html - //apple_ref/c/tdef/BOOL - - - Class - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html - //apple_ref/c/tdef/Class - - - id - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html - //apple_ref/c/tdef/id - - - YES - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html - //apple_ref/doc/c_ref/YES - - - NO - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html - //apple_ref/doc/c_ref/NO - - - nil - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html - //apple_ref/doc/c_ref/nil - - - Nil - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html - //apple_ref/doc/c_ref/Nil - - - SEL - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html - //apple_ref/c/tdef/SEL - - - - - Foundation Constants Reference - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Constants/Reference/reference.html - - NSNotFound - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Constants/Reference/reference.html - //apple_ref/doc/c_ref/NSNotFound - - - - - Foundation Data Types Reference - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html - - NSDecimal - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html - //apple_ref/c/tdef/NSDecimal - - - NSRange - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html - //apple_ref/c/tdef/NSRange - - - NSInteger - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html - //apple_ref/c/tdef/NSInteger - - - NSUInteger - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html - //apple_ref/c/tdef/NSUInteger - - - NSRect - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html - //apple_ref/c/tdef/NSRect - - - NSZone - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html - //apple_ref/c/tdef/NSZone - - diff --git a/documentation/doxygen/doxygen-cocoa-touch-tags.xml b/documentation/doxygen/doxygen-cocoa-touch-tags.xml index 8c58e38c5..750e79c31 100644 --- a/documentation/doxygen/doxygen-cocoa-touch-tags.xml +++ b/documentation/doxygen/doxygen-cocoa-touch-tags.xml @@ -1,998 +1,30 @@ - - NSArray - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html - NSObject - NSCoding-p - NSCopying-p - NSFastEnumeration-p - NSMutableCopying-p - - - NSMutableArray - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html - NSObject - NSCoding-p - NSCopying-p - NSFastEnumeration-p - NSMutableCopying-p - - - NSAttributedString - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSAttributedString_Class/Reference/NSAttributedString.html - NSObject - NSCoding-p - NSCopying-p - NSMutableCopying-p - - - NSMutableAttributedString - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableAttributedString_Class/Reference/NSMutableAttributedString.html - NSObject - NSCoding-p - NSCopying-p - NSMutableCopying-p - - - NSCalendar - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - NSObject - NSCoding-p - NSCopying-p - NSObject-p - - - NSCalendar Class Reference - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - - NSCalendarUnit - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/c/tdef/NSCalendarUnit - - - NSEraCalendarUnit - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSEraCalendarUnit - - - NSYearCalendarUnit - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSYearCalendarUnit - - - NSMonthCalendarUnit - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSMonthCalendarUnit - - - NSDayCalendarUnit - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSDayCalendarUnit - - - NSHourCalendarUnit - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSHourCalendarUnit - - - NSMinuteCalendarUnit - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSMinuteCalendarUnit - - - NSSecondCalendarUnit - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSSecondCalendarUnit - - - NSWeekCalendarUnit - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSWeekCalendarUnit - - - NSWeekdayCalendarUnit - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSWeekdayCalendarUnit - - - NSWeekdayOrdinalCalendarUnit - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSWeekdayOrdinalCalendarUnit - - - NSQuarterCalendarUnit - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSQuarterCalendarUnit - - - NSWeekOfMonthCalendarUnit - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSWeekOfMonthCalendarUnit - - - NSWeekOfYearCalendarUnit - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSWeekOfYearCalendarUnit - - - NSYearForWeekOfYearCalendarUnit - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSYearForWeekOfYearCalendarUnit - - - NSCalendarCalendarUnit - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSCalendarCalendarUnit - - - NSTimeZoneCalendarUnit - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html - //apple_ref/doc/c_ref/NSTimeZoneCalendarUnit - - - - NSCoder - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCoder_Class/Reference/NSCoder.html - NSObject - - - NSCoding - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Protocols/NSCoding_Protocol/Reference/Reference.html - - id - initWithCoder: - //apple_ref/occ/intfm/NSCoding/initWithCoder: - - - void - encodeWithCoder: - //apple_ref/occ/intfm/NSCoding/encodeWithCoder: - - UIColor - https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIColor_Class/Reference/Reference.html - NSObject - NSCoding-p - - - NSCopying - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Protocols/NSCopying_Protocol/Reference/Reference.html - - id - copyWithZone: - //apple_ref/occ/intfm/NSCopying/copyWithZone: - - - - NSData - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/Reference/Reference.html + https://developer.apple.com/documentation/uikit/UIColor NSObject - NSCoding-p - NSCopying-p - - - NSDate - https://developer.apple.com/library/iOS/#documentation/Cocoa/Reference/Foundation/Classes/NSDate_Class/Reference/Reference.html - NSObject - NSCoding-p - NSCopying-p - NSObject-p - - - NSDateFormatter - https://developer.apple.com/library/iOS/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html - NSObject - NSCoding-p - NSCopying-p - NSObject-p - - - NSDateFormatter Class Reference - https://developer.apple.com/library/iOS/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html - - NSDateFormatterStyle - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html - //apple_ref/c/tdef/NSDateFormatterStyle - - - NSDateFormatterNoStyle - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html - //apple_ref/doc/c_ref/NSDateFormatterNoStyle - - - NSDateFormatterShortStyle - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html - //apple_ref/doc/c_ref/NSDateFormatterShortStyle - - - NSDateFormatterMediumStyle - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html - //apple_ref/doc/c_ref/NSDateFormatterMediumStyle - - - NSDateFormatterLongStyle - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html - //apple_ref/doc/c_ref/NSDateFormatterLongStyle - - - NSDateFormatterFullStyle - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html - //apple_ref/doc/c_ref/NSDateFormatterFullStyle - - - - NSDecimalNumber - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSDecimalNumber_Class/Reference/Reference.html - NSNumber - NSCoding-p - NSCopying-p - - - NSDictionary - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/Reference/Reference.html - NSObject - NSCoding-p - NSCopying-p - NSFastEnumeration-p - NSMutableCopying-p - - - NSMutableDictionary - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableDictionary_Class/Reference/Reference.html - NSObject - NSCoding-p - NSCopying-p - NSFastEnumeration-p - NSMutableCopying-p + NSCoding UIEvent - https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIEvent_Class/Reference/Reference.html + https://developer.apple.com/documentation/uikit/UIEvent NSObject - - NSFastEnumeration - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/NSFastEnumeration_protocol/Reference/NSFastEnumeration.html - - NSUInteger - countByEnumeratingWithState:objects:count: - //apple_ref/occ/intfm/NSFastEnumeration/countByEnumeratingWithState:objects:count: - - UIImage - https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIImage_Class/Reference/Reference.html - NSObject - - - NSMutableCopying - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Protocols/NSMutableCopying_Protocol/Reference/Reference.html - - id - mutableCopyWithZone: - //apple_ref/occ/intfm/NSMutableCopying/mutableCopyWithZone: - - - - NSMutableData - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableData_Class/index.html - NSData - NSMutableCopying-p - - - NSNull - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSNull_Class/Reference/Reference.html + https://developer.apple.com/documentation/uikit/UIImage NSObject - NSCoding-p - NSCopying-p - - NSNull * - null - //apple_ref/occ/clm/NSNull/null - - - - NSNumber - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/Reference/Reference.html - NSValue - NSCoding-p - NSCopying-p - - - NSNumberFormatter - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSNumberFormatter_Class/Reference/Reference.html#//apple_ref/occ/cl/NSNumberFormatter - NSFormatter - - - NSFormatter - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSFormatter_Class/Reference/Reference.html - NSObject - NSCoding-p - NSCopying-p - - - NSObject - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html - NSObject-p - NSKeyValueBindingCreation-p - - id - alloc - //apple_ref/occ/clm/NSObject/alloc - - - Class - class - //apple_ref/occ/clm/NSObject/class - - - void - initialize - //apple_ref/occ/clm/NSObject/initialize - - - void - load - //apple_ref/occ/clm/NSObject/load - - - id - new - //apple_ref/occ/clm/NSObject/new - - - Class - classForCoder - //apple_ref/occ/instm/NSObject/classForCoder - - - id - copy - //apple_ref/occ/instm/NSObject/copy - - - void - dealloc - //apple_ref/occ/instm/NSObject/dealloc - - - void - finalize - //apple_ref/occ/instm/NSObject/finalize - - - id - init - //apple_ref/occ/instm/NSObject/init - - - id - mutableCopy - //apple_ref/occ/instm/NSObject/mutableCopy - - - - NSObject - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html - - NSString * - description - //apple_ref/occ/intfm/NSObject/description - - - NSUInteger - hash - //apple_ref/occ/intfm/NSObject/hash - - - BOOL - isEqual: - //apple_ref/occ/intfm/NSObject/isEqual: - - - - NSParagraphStyle - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSParagraphStyle_Class/Reference/Reference.html - NSObject - NSCoding-p - NSCopying-p - NSMutableCopying-p - - NSLineBreakMode - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSParagraphStyle_Class/Reference/Reference.html - //apple_ref/c/tdef/NSLineBreakMode - - - NSLineBreakByWordWrapping - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSParagraphStyle_Class/Reference/Reference.html - //apple_ref/doc/c_ref/NSLineBreakByWordWrapping - - - NSLineBreakByCharWrapping - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSParagraphStyle_Class/Reference/Reference.html - //apple_ref/doc/c_ref/NSLineBreakByCharWrapping - - - NSLineBreakByClipping - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSParagraphStyle_Class/Reference/Reference.html - //apple_ref/doc/c_ref/NSLineBreakByClipping - - - NSLineBreakByTruncatingHead - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSParagraphStyle_Class/Reference/Reference.html - //apple_ref/doc/c_ref/NSLineBreakByTruncatingHead - - - NSLineBreakByTruncatingTail - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSParagraphStyle_Class/Reference/Reference.html - //apple_ref/doc/c_ref/NSLineBreakByTruncatingTail - - - NSLineBreakByTruncatingMiddle - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSParagraphStyle_Class/Reference/Reference.html - //apple_ref/doc/c_ref/NSLineBreakByTruncatingMiddle - - - - NSSet - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSSet_Class/Reference/Reference.html - NSObject - NSCoding-p - NSCopying-p - NSFastEnumeration-p - NSMutableCopying-p - - - NSMutableSet - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableSet_Class/Reference/Reference.html - NSObject - NSCoding-p - NSCopying-p - NSFastEnumeration-p - NSMutableCopying-p UIResponder - https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIResponder_Class/Reference/Reference.html#//apple_ref/occ/cl/UIResponder - NSObject - - - NSSecureCoding - https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSSecureCoding_Protocol_Ref/ - - BOOL - supportsSecureCoding: - //apple_ref/occ/intfcm/NSSecureCoding/supportsSecureCoding - - - - NSString - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html - NSObject - NSCoding-p - NSCopying-p - NSMutableCopying-p - - - NSValue - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSValue_Class/Reference/Reference.html - NSObject - NSCoding-p - NSCopying-p - - - NSValueTransformer - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSValueTransformer_Class/Reference/Reference.html + https://developer.apple.com/documentation/uikit/UIResponder NSObject UIView - https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIView_Class/UIView/UIView.html + https://developer.apple.com/documentation/uikit/UIView UIResponder - - - NSAttributedString UIKit Additions Reference - https://developer.apple.com/library/ios/#documentation/UIKit/reference/NSAttributedString_UIKit_Additions/Reference/Reference.html - - NSFontAttributeName - https://developer.apple.com/library/ios/#documentation/UIKit/reference/NSAttributedString_UIKit_Additions/Reference/Reference.html - //apple_ref/doc/c_ref/NSFontAttributeName - - - NSForegroundColorAttributeName - https://developer.apple.com/library/ios/#documentation/UIKit/reference/NSAttributedString_UIKit_Additions/Reference/Reference.html - //apple_ref/doc/c_ref/NSForegroundColorAttributeName - - - NSParagraphStyleAttributeName - https://developer.apple.com/library/ios/#documentation/UIKit/reference/NSAttributedString_UIKit_Additions/Reference/Reference.html - //apple_ref/doc/c_ref/NSParagraphStyleAttributeName - - - - - - CGColor Reference - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGColor/Reference/reference.html - - CGColorRef - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGColor/Reference/reference.html - //apple_ref/c/tdef/CGColorRef - - - - CGColorSpace Reference - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGColorSpace/Reference/reference.html - - CGColorSpaceRef - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGColorSpace/Reference/reference.html - //apple_ref/c/tdef/CGColorSpaceRef - - - CGColorSpaceRef - CGColorSpaceCreateDeviceRGB - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGColorSpace/Reference/reference.html - //apple_ref/c/func/CGColorSpaceCreateDeviceRGB - - - - CGContext Reference - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGContext/Reference/reference.html - - CGContextRef - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGContext/Reference/reference.html - //apple_ref/c/tdef/CGContextRef - - - - CGFunction Reference - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGFunction/Reference/reference.html - - CGFunctionRef - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGFunction/Reference/reference.html - //apple_ref/c/tdef/CGFunctionRef - - - - CGGeometry Reference - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html - - CGFloat - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html - //apple_ref/c/tdef/CGFloat - - - CGPoint - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html - //apple_ref/c/tdef/CGPoint - - - CGRect - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html - //apple_ref/c/tdef/CGRect - - - CGRectNull - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html - //apple_ref/c/tdef/CGRectNull - - - CGSize - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html - //apple_ref/c/tdef/CGSize - - - CGPoint - CGPointMake - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html - //apple_ref/c/func/CGPointMake - (CGFloat x, CGFloat y) - - - CGRect - CGRectInset - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html - //apple_ref/c/func/CGRectInset - (CGRect rect, CGFloat dx, CGFloat dy) - - - CGRect - CGRectMake - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html - //apple_ref/c/func/CGRectMake - (CGFloat x, CGFloat y, CGFloat width, CGFloat height) - - - CGSize - CGSizeMake - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html - //apple_ref/c/func/CGSizeMake - (CGFloat width, CGFloat height) - - - - CGImage Reference - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGImage/Reference/reference.html - - CGImageRef - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGImage/Reference/reference.html - //apple_ref/c/tdef/CGImageRef - - - - CGPath Reference - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGPath/Reference/reference.html - - CGPathRef - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGPath/Reference/reference.html - //apple_ref/c/tdef/CGPathRef - - - CGLineCap - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGPath/Reference/reference.html - //apple_ref/c/tdef/CGLineCap - - - kCGLineCapButt - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGPath/Reference/reference.html - //apple_ref/doc/c_ref/kCGLineCapButt - - - kCGLineCapRound - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGPath/Reference/reference.html - //apple_ref/doc/c_ref/kCGLineCapRound - - - kCGLineCapSquare - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGPath/Reference/reference.html - //apple_ref/doc/c_ref/kCGLineCapSquare - - - CGLineJoin - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGPath/Reference/reference.html - //apple_ref/c/tdef/CGLineJoin - - - kCGLineJoinMiter - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGPath/Reference/reference.html - //apple_ref/doc/c_ref/kCGLineJoinMiter - - - kCGLineJoinRound - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGPath/Reference/reference.html - //apple_ref/doc/c_ref/kCGLineJoinRound - - - kCGLineJoinBevel - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGPath/Reference/reference.html - //apple_ref/doc/c_ref/kCGLineJoinBevel - - - - CGShading Reference - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGShading/Reference/reference.html - - CGShadingRef - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGShading/Reference/reference.html - //apple_ref/c/tdef/CGShadingRef - - - - - - CAAnimationDelegate - https://developer.apple.com/library/ios/documentation/Foundation/Reference/CAAnimationDelegate_Protocol_Ref/ - NSObject-p - - void - animationDidStart: - //apple_ref/occ/intfcm/CAAnimationDelegate/animationDidStart - - - void - animationDidStop:finished: - //apple_ref/occ/intfcm/CAAnimationDelegate/animationDidStopfinished - - - - CALayer - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CALayer_class/Introduction/Introduction.html - NSObject - CAMediaTiming-p - - CGPoint - anchorPoint - //apple_ref/occ/instp/CALayer/anchorPoint - - - CGRect - bounds - //apple_ref/occ/instp/CALayer/bounds - - - CGFloat - contentsScale - //apple_ref/occ/instp/CALayer/contentsScale - - - CGFloat - cornerRadius - //apple_ref/occ/instp/CALayer/cornerRadius - - - id - delegate - //apple_ref/occ/instp/CALayer/delegate - - - CGRect - frame - //apple_ref/occ/instp/CALayer/frame - - - BOOL - masksToBounds - //apple_ref/occ/instp/CALayer/masksToBounds - - - BOOL - needsDisplayOnBoundsChange - //apple_ref/occ/instp/CALayer/needsDisplayOnBoundsChange - - - BOOL - opacity - //apple_ref/occ/instp/CALayer/opacity - - - BOOL - opaque - //apple_ref/occ/instp/CALayer/opaque - - - id - layer - //apple_ref/occ/clm/CALayer/layer - - - BOOL - containsPoint: - //apple_ref/occ/instm/CALayer/containsPoint: - - - void - drawInContext: - //apple_ref/occ/instm/CALayer/drawInContext: - - - id - init - //apple_ref/occ/instm/CALayer/init - - - id - initWithLayer - //apple_ref/occ/instm/CALayer/initWithLayer - - - void - layoutSublayers - //apple_ref/occ/instm/CALayer/layoutSublayers - - - void - setNeedsDisplay - //apple_ref/occ/instm/CALayer/setNeedsDisplay - - - void - setNeedsDisplayInRect: - //apple_ref/occ/instm/CALayer/setNeedsDisplayInRect: - - - void - setNeedsLayout - //apple_ref/occ/instm/CALayer/setNeedsLayout - - - - CALayerDelegate - https://developer.apple.com/library/ios/documentation/Foundation/Reference/CALayerDelegate_Protocol_Ref/ - NSObject-p - - id - actionForLayer:forKey: - //apple_ref/occ/intfcm/CALayerDelegate/actionForLayerforKey - - - void - displayLayer: - //apple_ref/occ/intfcm/CALayerDelegate/displayLayer - - - void - drawLayer:inContext: - //apple_ref/occ/intfcm/CALayerDelegate/drawLayerinContext - - - void - layerWillDraw: - //apple_ref/occ/intfcm/CALayerDelegate/layerWillDraw - - - void - layoutSublayersOfLayer: - //apple_ref/occ/intfcm/CALayerDelegate/layoutSublayersOfLayer - - - - CAMediaTiming - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CAMediaTiming_protocol/Introduction/Introduction.html - - BOOL - autoreverses - //apple_ref/occ/intfp/CAMediaTiming/autoreverses - - - CFTimeInterval - beginTime - //apple_ref/occ/intfp/CAMediaTiming/beginTime - - - CFTimeInterval - duration - //apple_ref/occ/intfp/CAMediaTiming/duration - - - NSString * - fillMode - //apple_ref/occ/intfp/CAMediaTiming/fillMode - - - float - repeatCount - //apple_ref/occ/intfp/CAMediaTiming/repeatCount - - - id - repeatDuration - //apple_ref/occ/intfp/CAMediaTiming/repeatDuration - - - float - speed - //apple_ref/occ/intfp/CAMediaTiming/speed - - - CFTimeInterval - timeOffset - //apple_ref/occ/intfp/CAMediaTiming/timeOffset - - - - - - CFByteOrder - https://developer.apple.com/library/ios/#documentation/corefoundation/Reference/CFByteOrderUtils/Reference/reference.html - - - - - Byte-Order Utilties Reference - https://developer.apple.com/library/ios/#documentation/corefoundation/Reference/CFByteOrderUtils/Reference/reference.html - - CFByteOrder - https://developer.apple.com/library/ios/#documentation/corefoundation/Reference/CFByteOrderUtils/Reference/reference.html - //apple_ref/doc/c_ref/CFByteOrder - - - - Time Utilities Reference - https://developer.apple.com/library/ios/#documentation/CoreFoundation/Reference/CFTimeUtils/Reference/reference.html - - CFTimeInterval - https://developer.apple.com/library/ios/#documentation/CoreFoundation/Reference/CFTimeUtils/Reference/reference.html - //apple_ref/doc/c_ref/CFTimeInterval - - - - Foundation Functions Reference - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html - - BOOL - NSDecimalIsNotANumber - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html - //apple_ref/c/func/NSDecimalIsNotANumber - - - - - - Obective-C Runtime Utlities Reference - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html - - BOOL - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html - //apple_ref/c/tdef/BOOL - - - Class - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html - //apple_ref/c/tdef/Class - - - id - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html - //apple_ref/c/tdef/id - - - YES - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html - //apple_ref/doc/c_ref/YES - - - NO - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html - //apple_ref/doc/c_ref/NO - - - nil - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html - //apple_ref/doc/c_ref/nil - - - Nil - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html - //apple_ref/doc/c_ref/Nil - - - SEL - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html - //apple_ref/c/tdef/SEL - - - - - Foundation Constants Reference - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Constants/Reference/reference.html - - NSNotFound - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Constants/Reference/reference.html - //apple_ref/doc/c_ref/NSNotFound - - - - - Foundation Data Types - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html - - NSDecimal - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html - //apple_ref/c/tdef/NSDecimal - - - NSRange - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html - //apple_ref/c/tdef/NSRange - - - NSInteger - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html - //apple_ref/c/tdef/NSInteger - - - NSUInteger - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html - //apple_ref/c/tdef/NSUInteger - - - NSZone - https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html - //apple_ref/c/tdef/NSZone - - diff --git a/documentation/doxygen/doxygen-common-tags.xml b/documentation/doxygen/doxygen-common-tags.xml new file mode 100644 index 000000000..f03e32228 --- /dev/null +++ b/documentation/doxygen/doxygen-common-tags.xml @@ -0,0 +1,1086 @@ + + + + + NSArray + https://developer.apple.com/documentation/foundation/NSArray + NSObject + NSCoding + NSCopying + NSFastEnumeration + NSMutableCopying + + + NSMutableArray + https://developer.apple.com/documentation/foundation/NSMutableArray + NSObject + NSCoding + NSCopying + NSFastEnumeration + NSMutableCopying + + + + NSAttributedString + https://developer.apple.com/documentation/foundation/NSAttributedString + NSObject + NSCoding + NSCopying + NSMutableCopying + + + NSAttributedString Key Reference + https://developer.apple.com/documentation/foundation/NSAttributedString/key + + NSFontAttributeName + https://developer.apple.com/documentation/uikit/NSFontAttributeName + + + NSForegroundColorAttributeName + https://developer.apple.com/documentation/uikit/NSForegroundColorAttributeName + + + NSParagraphStyleAttributeName + https://developer.apple.com/documentation/uikit/NSParagraphStyleAttributeName + + + + + NSMutableAttributedString + https://developer.apple.com/documentation/foundation/NSMutableAttributedString + NSObject + NSCoding + NSCopying + NSMutableCopying + + + NSCalendar + https://developer.apple.com/documentation/foundation/NSCalendar + NSObject + NSCoding + NSCopying + + + + NSCalendar Class Reference + https://developer.apple.com/documentation/foundation/NSCalendar + + NSCalendarUnit + https://developer.apple.com/documentation/foundation/NSCalendarUnit + + + NSCalendarUnitEra + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitEra + + + NSEraCalendarUnit + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitEra + + + NSCalendarUnitYear + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitYear + + + NSYearCalendarUnit + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitYear + + + NSCalendarUnitMonth + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitMonth + + + NSMonthCalendarUnit + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitMonth + + + NSCalendarUnitDay + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitDay + + + NSDayCalendarUnit + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitDay + + + NSCalendarUnitHour + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitHour + + + NSHourCalendarUnit + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitHour + + + NSCalendarUnitMinute + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitMinute + + + NSMinuteCalendarUnit + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitMinute + + + NSCalendarUnitSecond + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitSecond + + + NSSecondCalendarUnit + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitSecond + + + NSCalendarUnitWeekday + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitWeekday + + + NSWeekdayCalendarUnit + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitWeekday + + + NSCalendarUnitWeekdayOrdinal + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitWeekdayOrdinal + + + NSWeekdayOrdinalCalendarUnit + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitWeekdayOrdinal + + + NSQuarterCalendarUnit + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitDay + + + NSCalendarUnitQuarter + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitQuarter + + + NSCalendarUnitWeekOfMonth + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitWeekOfMonth + + + NSWeekOfMonthCalendarUnit + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitWeekOfMonth + + + NSCalendarUnitWeekOfYear + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitWeekOfYear + + + NSWeekOfYearCalendarUnit + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitWeekOfYear + + + NSCalendarUnitYearForWeekOfYear + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitYearForWeekOfYear + + + NSYearForWeekOfYearCalendarUnit + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitYearForWeekOfYear + + + NSCalendarUnitNanosecond + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitNanosecond + + + NSCalendarUnitCalendar + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitCalendar + + + NSCalendarCalendarUnit + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitCalendar + + + NSCalendarUnitTimeZone + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitTimeZone + + + NSTimeZoneCalendarUnit + https://developer.apple.com/documentation/foundation/nscalendarunit/NSCalendarUnitTimeZone + + + + NSCoder + https://developer.apple.com/documentation/foundation/NSCoder + NSObject + + + NSCoding + https://developer.apple.com/documentation/foundation/NSCoding + + id + initWithCoder: + https://developer.apple.com/documentation/foundation/nscoding/1416145-init + (NSCoder *coder) + + + void + encodeWithCoder: + https://developer.apple.com/documentation/foundation/nscoding/1413933-encode + (NSCoder *coder) + + + + NSCopying + https://developer.apple.com/documentation/foundation/NSCopying + + id + copyWithZone: + https://developer.apple.com/documentation/foundation/nscopying/1410311-copyWithZone + (NSZone *zone) + + + + NSData + https://developer.apple.com/documentation/foundation/NSData + NSObject + NSCoding + NSCopying + + + NSDate + https://developer.apple.com/documentation/foundation/NSDate + NSObject + NSCoding + NSCopying + + + NSDateFormatter + https://developer.apple.com/documentation/foundation/NSDateFormatter + NSObject + NSCoding + NSCopying + + + NSDateFormatter Class Reference + https://developer.apple.com/documentation/foundation/NSDateFormatter + + NSDateFormatterStyle + https://developer.apple.com/documentation/foundation/NSDateFormatter/NSDateFormatterStyle + + + NSDateFormatterNoStyle + https://developer.apple.com/documentation/foundation/NSDateFormatter/NSDateFormatterNoStyle + + + NSDateFormatterShortStyle + https://developer.apple.com/documentation/foundation/NSDateFormatter/NSDateFormatterShortStyle + + + NSDateFormatterMediumStyle + https://developer.apple.com/documentation/foundation/NSDateFormatter/NSDateFormatterMediumStyle + + + NSDateFormatterLongStyle + https://developer.apple.com/documentation/foundation/NSDateFormatter/NSDateFormatterLongStyle + + + NSDateFormatterFullStyle + https://developer.apple.com/documentation/foundation/NSDateFormatter/NSDateFormatterFullStyle + + + + NSDecimalNumber + https://developer.apple.com/documentation/foundation/NSDecimalNumber + NSNumber + NSCoding + NSCopying + + + NSDictionary + https://developer.apple.com/documentation/foundation/NSDictionary + NSObject + NSCoding + NSCopying + NSFastEnumeration + NSMutableCopying + + + NSMutableDictionary + https://developer.apple.com/documentation/foundation/NSMutableDictionary + NSObject + NSCoding + NSCopying + NSFastEnumeration + NSMutableCopying + + + NSFastEnumerationState + https://developer.apple.com/documentation/foundation/NSFastEnumerationState + + + NSFastEnumeration + https://developer.apple.com/documentation/foundation/NSFastEnumeration + + NSUInteger + countByEnumeratingWithState:objects:count: + https://developer.apple.com/documentation/foundation/nsfastenumeration/1412867-countByEnumerating + (NSFastEnumerationState *state, id _Nullable *buffer, NSUInteger len) + + + + NSMutableCopying + https://developer.apple.com/documentation/foundation/NSMutableCopying + + id + mutableCopyWithZone: + https://developer.apple.com/documentation/foundation/nsmutablecopying/1414175-mutablecopy + (NSZone *zone) + + + + NSMutableData + https://developer.apple.com/documentation/foundation/NSMutableData + NSData + NSMutableCopying + + + NSNull + https://developer.apple.com/documentation/foundation/NSNull + NSObject + NSCoding + NSCopying + + NSNull * + null + https://developer.apple.com/documentation/foundation/nsnull/1520557-null + + + + NSNumber + https://developer.apple.com/documentation/foundation/NSNumber + NSValue + NSCoding + NSCopying + + + NSNumberFormatter + https://developer.apple.com/documentation/foundation/NSNumberFormatter + NSFormatter + + + NSFormatter + https://developer.apple.com/documentation/foundation/NSFormatter + NSObject + NSCoding + NSCopying + + + NSObject + https://developer.apple.com/documentation/objectivec/NSObject + NSObject-p + + instancetype + alloc + https://developer.apple.com/documentation/objectivec/nsobject/1571958-alloc + + + instancetype + allocWithZone: + https://developer.apple.com/documentation/objectivec/nsobject/1571945-allocWithZone + (struct _NSZone *zone + + + Class + class + https://developer.apple.com/documentation/objectivec/nsobject/1571950-class + + + void + initialize + https://developer.apple.com/documentation/objectivec/nsobject/1418639-initialize + + + void + load + https://developer.apple.com/documentation/objectivec/nsobject/1418815-load + + + instancetype + new + https://developer.apple.com/documentation/objectivec/nsobject/1571948-new + + + Class + classForCoder + https://developer.apple.com/documentation/objectivec/nsobject/1411876-classForCoder + + + id + copy + https://developer.apple.com/documentation/objectivec/nsobject/1418807-copy + + + id + copyWithZone: + https://developer.apple.com/documentation/objectivec/nsobject/1571953-copyWithZone + (struct _NSZone *zone + + + void + dealloc + https://developer.apple.com/documentation/objectivec/nsobject/1571947-dealloc + + + instancetype + init + https://developer.apple.com/documentation/objectivec/nsobject/1418641-init + + + id + mutableCopy + https://developer.apple.com/documentation/objectivec/nsobject/1418978-mutablecopy + + + id + mutableCopyWithZone: + https://developer.apple.com/documentation/objectivec/nsobject/1571956-mutableCopyWithZone + (struct _NSZone *zone + + + + NSObject-p + https://developer.apple.com/documentation/objectivec/NSObjectProtocol + + NSString * + description + https://developer.apple.com/documentation/objectivec/1418956-nsobject/1418746-description + + + NSUInteger + hash + https://developer.apple.com/documentation/objectivec/1418956-nsobject/1418859-hash + + + BOOL + isEqual: + https://developer.apple.com/documentation/objectivec/1418956-nsobject/1418795-isEqual + (id object) + + + + NSParagraphStyle + https://developer.apple.com/documentation/uikit/NSParagraphStyle + NSObject + NSCoding + NSCopying + NSMutableCopying + + + NSLineBreakMode Enumeration Reference + https://developer.apple.com/documentation/uikit/NSLineBreakMode + + NSLineBreakMode + https://developer.apple.com/documentation/uikit/NSLineBreakMode + + + NSLineBreakByWordWrapping + https://developer.apple.com/documentation/uikit/NSLineBreakMode/ByWordWrapping + + + NSLineBreakByCharWrapping + https://developer.apple.com/documentation/uikit/NSLineBreakMode/ByCharWrapping + + + NSLineBreakByClipping + https://developer.apple.com/documentation/uikit/NSLineBreakMode/ByClipping + + + NSLineBreakByTruncatingHead + https://developer.apple.com/documentation/uikit/NSLineBreakMode/ByTruncatingHead + + + NSLineBreakByTruncatingTail + https://developer.apple.com/documentation/uikit/NSLineBreakMode/ByTruncatingTail + + + NSLineBreakByTruncatingMiddle + https://developer.apple.com/documentation/uikit/NSLineBreakMode/ByTruncatingMiddle + + + + NSSet + https://developer.apple.com/documentation/foundation/NSSet + NSObject + NSCoding + NSCopying + NSFastEnumeration + NSMutableCopying + + + NSMutableSet + https://developer.apple.com/documentation/foundation/NSMutableSet + NSObject + NSCoding + NSCopying + NSFastEnumeration + NSMutableCopying + + + NSSecureCoding + https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSSecureCoding_Protocol_Ref + + BOOL + supportsSecureCoding + https://developer.apple.com/documentation/foundation/nssecurecoding/1855946-supportsSecureCoding + + + + NSString + https://developer.apple.com/documentation/foundation/NSString + NSObject + NSCoding + NSCopying + NSMutableCopying + + + NSValue + https://developer.apple.com/documentation/foundation/NSValue + NSObject + NSCoding + NSCopying + + + NSValueTransformer + https://developer.apple.com/documentation/foundation/NSValueTransformer + NSObject + + + + + CGColor Reference + https://developer.apple.com/documentation/coregraphics/CGColor + + CGColorRef + https://developer.apple.com/documentation/coregraphics/CGColorRef + + + + CGColorSpace Reference + https://developer.apple.com/documentation/coregraphics/CGColorSpace + + CGColorSpaceRef + https://developer.apple.com/documentation/coregraphics/CGColorSpaceRef + + + CGColorSpaceRef + CGColorSpaceCreateDeviceRGB + https://developer.apple.com/documentation/coregraphics/1408837-CGColorSpaceCreateDeviceRGB + + + CGColorSpaceRef + CGColorSpaceCreateWithName + https://developer.apple.com/documentation/coregraphics/1408921-CGColorSpaceCreateWithName + + + kCGColorSpaceGenericRGB + https://developer.apple.com/documentation/coregraphics/kCGColorSpaceGenericRGB + + + kCGColorSpaceSRGB + https://developer.apple.com/documentation/coregraphics/kCGColorSpaceSRGB + + + + CGContext Reference + https://developer.apple.com/documentation/coregraphics/CGContext + + CGContextRef + https://developer.apple.com/documentation/coregraphics/CGContextRef + + + + CGFunction Reference + https://developer.apple.com/documentation/coregraphics/CGFunction + + CGFunctionRef + https://developer.apple.com/documentation/coregraphics/CGFunctionRef + + + + Core Graphics Reference + https://developer.apple.com/documentation/coregraphics + + CGFloat + https://developer.apple.com/documentation/corefoundation/CGFloat + + + CGPoint + https://developer.apple.com/documentation/corefoundation/CGPoint + + + CGRect + https://developer.apple.com/documentation/corefoundation/CGRect + + + CGRectNull + https://developer.apple.com/documentation/corefoundation/CGRectNull + + + CGSize + https://developer.apple.com/documentation/corefoundation/CGSize + + + CGVector + https://developer.apple.com/documentation/corefoundation/CGVector + + + CGPoint + CGPointMake + https://developer.apple.com/documentation/coregraphics/1455746-CGPointMake + (CGFloat x, CGFloat y) + + + CGRect + CGRectInset + https://developer.apple.com/documentation/coregraphics/1454218-CGRectInset + (CGRect rect, CGFloat dx, CGFloat dy) + + + CGRect + CGRectMake + https://developer.apple.com/documentation/coregraphics/1455245-CGRectMake + (CGFloat x, CGFloat y, CGFloat width, CGFloat height) + + + CGSize + CGSizeMake + https://developer.apple.com/documentation/coregraphics/1455082-CGSizeMake + (CGFloat width, CGFloat height) + + + + CGImage Reference + https://developer.apple.com/documentation/coregraphics/CGImage + + CGImageRef + https://developer.apple.com/documentation/coregraphics/CGImageRef + + + + CGPath Reference + https://developer.apple.com/documentation/coregraphics/CGPath + + CGPathRef + https://developer.apple.com/documentation/coregraphics/CGPathRef + + + CGLineCap + https://developer.apple.com/documentation/coregraphics/CGLineCap + + + kCGLineCapButt + https://developer.apple.com/documentation/coregraphics/CGLineCap/Butt + + + kCGLineCapRound + https://developer.apple.com/documentation/coregraphics/CGLineCap/Round + + + kCGLineCapSquare + https://developer.apple.com/documentation/coregraphics/CGLineCap/Square + + + CGLineJoin + https://developer.apple.com/documentation/coregraphics/CGLineJoin + + + kCGLineJoinMiter + https://developer.apple.com/documentation/coregraphics/CGLineJoin/Miter + + + kCGLineJoinRound + https://developer.apple.com/documentation/coregraphics/CGLineJoin/Round + + + kCGLineJoinBevel + https://developer.apple.com/documentation/coregraphics/CGLineJoin/Bevel + + + + CGShading Reference + https://developer.apple.com/documentation/coregraphics/CGShading + + CGShadingRef + https://developer.apple.com/documentation/coregraphics/CGShadingRef + + + + + + Core Animation Data Types Reference + https://developer.apple.com/documentation/quartzcore/core_animation_data_types + + CAMediaTimingFillMode + https://developer.apple.com/documentation/quartzcore/CAMediaTimingFillMode + + + + + CAAnimation + https://developer.apple.com/documentation/quartzcore/CAAnimation + NSObject + + + CAAnimationDelegate + https://developer.apple.com/documentation/quartzcore/CAAnimationDelegate + NSObject-p + + void + animationDidStart: + https://developer.apple.com/documentation/quartzcore/caanimationdelegate/2097265-animationDidStart + (CAAnimation *anim) + + + void + animationDidStop:finished: + https://developer.apple.com/documentation/quartzcore/caanimationdelegate/2097259-animationDidStop + (CAAnimation *anim, BOOL flag) + + + + CALayer + https://developer.apple.com/documentation/quartzcore/CALayer + NSObject + NSCoding + CAMediaTiming + + CGPoint + anchorPoint + https://developer.apple.com/documentation/quartzcore/calayer/1410817-anchorPoint + + + CGRect + bounds + https://developer.apple.com/documentation/quartzcore/calayer/1410915-bounds + + + CGFloat + contentsScale + https://developer.apple.com/documentation/quartzcore/calayer/1410746-contentsScale + + + CGFloat + cornerRadius + https://developer.apple.com/documentation/quartzcore/calayer/1410818-cornerRadius + + + id<CALayerDelegate> + delegate + https://developer.apple.com/documentation/quartzcore/calayer/1410984-delegate + + + CGRect + frame + https://developer.apple.com/documentation/quartzcore/calayer/1410779-frame + + + BOOL + masksToBounds + https://developer.apple.com/documentation/quartzcore/calayer/1410896-masksToBounds + + + BOOL + needsDisplayOnBoundsChange + https://developer.apple.com/documentation/quartzcore/calayer/1410923-needsDisplayOnBoundsChange + + + BOOL + opacity + https://developer.apple.com/documentation/quartzcore/calayer/1410933-opacity + + + BOOL + opaque + https://developer.apple.com/documentation/quartzcore/calayer/1410763-opaque + + + instancetype + layer + https://developer.apple.com/documentation/quartzcore/calayer/1410793-layer + + + BOOL + containsPoint: + https://developer.apple.com/documentation/quartzcore/calayer/1410857-containsPoint + (CGPoint p) + + + void + drawInContext: + https://developer.apple.com/documentation/quartzcore/calayer/1410757-drawInContext + (CGContextRef ctx) + + + instancetype + init + https://developer.apple.com/documentation/quartzcore/calayer/1410835-init + + + instancetype + initWithLayer: + https://developer.apple.com/documentation/quartzcore/calayer/1410842-initWithLayer + (id layer) + + + void + layoutSublayers + https://developer.apple.com/documentation/quartzcore/calayer/1410935-layoutSublayers + + + void + setNeedsDisplay + https://developer.apple.com/documentation/quartzcore/calayer/1410855-setNeedsDisplay + + + void + setNeedsDisplayInRect: + https://developer.apple.com/documentation/quartzcore/calayer/1410800-setNeedsDisplayInRect + (CGRect r) + + + void + setNeedsLayout + https://developer.apple.com/documentation/quartzcore/calayer/1410946-setNeedsLayout + + + + CALayerDelegate + https://developer.apple.com/documentation/quartzcore/CALayerDelegate + NSObject-p + + id + actionForLayer:forKey: + https://developer.apple.com/documentation/quartzcore/calayerdelegate/2097264-actionForLayer + (CALayer *layer, NSString * event) + + + void + displayLayer: + https://developer.apple.com/documentation/quartzcore/calayerdelegate/2097261-displayLayer + (CALayer *layer) + + + void + drawLayer:inContext: + https://developer.apple.com/documentation/quartzcore/calayerdelegate/2097262-drawLayer + (CALayer *layer, CGContextRef ctx) + + + void + layerWillDraw: + https://developer.apple.com/documentation/quartzcore/calayerdelegate/2097263-layerWillDraw + (CALayer *layer) + + + void + layoutSublayersOfLayer: + https://developer.apple.com/documentation/quartzcore/calayerdelegate/2097257-layoutSublayersOfLayer + (CALayer *layer) + + + + CAMediaTiming + https://developer.apple.com/documentation/quartzcore/CAMediaTiming + + BOOL + autoreverses + https://developer.apple.com/documentation/quartzcore/camediatiming/1427645-autoreverses + + + CFTimeInterval + beginTime + https://developer.apple.com/documentation/quartzcore/camediatiming/1427654-begintime + + + CFTimeInterval + duration + https://developer.apple.com/documentation/quartzcore/camediatiming/1427652-duration + + + CAMediaTimingFillMode + fillMode + https://developer.apple.com/documentation/quartzcore/camediatiming/1427656-fillMode + + + float + repeatCount + https://developer.apple.com/documentation/quartzcore/camediatiming/1427666-repeatCount + + + CFTimeInterval + repeatDuration + https://developer.apple.com/documentation/quartzcore/camediatiming/1427643-repeatDuration + + + float + speed + https://developer.apple.com/documentation/quartzcore/camediatiming/1427647-speed + + + CFTimeInterval + timeOffset + https://developer.apple.com/documentation/quartzcore/camediatiming/1427650-timeOffset + + + + + + NSPropertyDescription + https://developer.apple.com/documentation/coredata/NSPropertyDescription + NSObject + + + NSAttributeDescription + https://developer.apple.com/documentation/coredata/NSAttributeDescription + NSPropertyDescription + + + + + CIImage + https://developer.apple.com/documentation/coreimage/CIImage + NSObject + NSCoding + NSCopying + + + + + Byte-Order Utilties Reference + https://developer.apple.com/documentation/corefoundation/byte-order_utilities + + CFByteOrder + https://developer.apple.com/documentation/corefoundation/CFByteOrder + + + + Time Utilities Reference + https://developer.apple.com/documentation/corefoundation/time_utilities + + CFTimeInterval + https://developer.apple.com/documentation/corefoundation/CFTimeInterval + + + + NSNumber Functions Reference + https://developer.apple.com/documentation/foundation/NSNumber + + BOOL + NSDecimalIsNotANumber + https://developer.apple.com/documentation/foundation/1414177-NSDecimalIsNotANumber + (const NSDecimal *dcm) + + + + + + Obective-C Runtime Utlities Reference + https://developer.apple.com/documentation/objectivec/objective-c_runtime + + BOOL + https://developer.apple.com/documentation/objectivec/BOOL + + + Class + https://developer.apple.com/documentation/objectivec/Class + + + id + https://developer.apple.com/documentation/objectivec/id + + + NSInteger + https://developer.apple.com/documentation/objectivec/NSInteger + + + NSUInteger + https://developer.apple.com/documentation/objectivec/NSUInteger + + + YES + https://developer.apple.com/documentation/objectivec/YES + + + NO + https://developer.apple.com/documentation/objectivec/NO + + + nil + https://developer.apple.com/documentation/objectivec/nil-2gl + + + Nil + https://developer.apple.com/documentation/objectivec/Nil + + + SEL + https://developer.apple.com/documentation/objectivec/SEL + + + + + Foundation Collections Reference + https://developer.apple.com/documentation/foundation/collections + + NSNotFound + https://developer.apple.com/documentation/foundation/NSNotFound-8f9 + + + + + Foundation Data Types Reference + https://developer.apple.com/documentation/foundation/numbers_data_and_basic_values + + NSDecimal + https://developer.apple.com/documentation/foundation/NSDecimal + + + NSRange + https://developer.apple.com/documentation/foundation/NSRange + + + NSRect + https://developer.apple.com/documentation/foundation/NSRect + + + NSZone + https://developer.apple.com/documentation/foundation/NSZone + + + + + Kernel Data Types Reference + https://developer.apple.com/documentation/kernel/kernel_data_types + + int8_t + https://developer.apple.com/documentation/kernel/int8_t + + + int16_t + https://developer.apple.com/documentation/kernel/int16_t + + + int32_t + https://developer.apple.com/documentation/kernel/int32_t + + + int64_t + https://developer.apple.com/documentation/kernel/int64_t + + + size_t + https://developer.apple.com/documentation/kernel/size_t + + + uint8_t + https://developer.apple.com/documentation/kernel/uint8_t + + + uint16_t + https://developer.apple.com/documentation/kernel/uint16_t + + + uint32_t + https://developer.apple.com/documentation/kernel/uint32_t + + + uint64_t + https://developer.apple.com/documentation/kernel/uint64_t + + + diff --git a/documentation/doxygen/doxygen.config b/documentation/doxygen/doxygen.config index 63e33fb64..7060652c0 100644 --- a/documentation/doxygen/doxygen.config +++ b/documentation/doxygen/doxygen.config @@ -273,10 +273,10 @@ TAB_SIZE = 4 # with the commands \{ and \} for these it is advised to use the version @{ and # @} or use a double escape (\\{ and \\}) -ALIASES = "YES=@ref YES" \ - "NO=@ref NO" \ - "nil=@ref nil" \ - "Nil=@ref Nil" \ +ALIASES = "YES=@ref YES" \ + "NO=@ref NO" \ + "nil=@ref nil" \ + "Nil=@ref Nil" \ "NULL=NULL" \ "NAN=NaN" \ "super=super" \ @@ -2386,6 +2386,7 @@ PREDEFINED = TARGET_OS_OSX=1 \ "NS_OPTIONS(_type,_name)=enum _name : _type _name; enum _name : _type" \ "NS_SWIFT_NAME(_name)=" \ cpt_deprecated= \ + cpt_requires_super= \ cpt_swift_enum= \ cpt_swift_struct= \ cpt_unused= \ @@ -2427,13 +2428,14 @@ SKIP_FUNCTION_MACROS = YES # the path). If a tag file is not located in the directory in which doxygen is # run, you must also specify the path to the tagfile here. -TAGFILES = "$(SOURCE_ROOT)/../documentation/doxygen/doxygen-cocoa-tags.xml" +TAGFILES = "$(SOURCE_ROOT)/../documentation/doxygen/doxygen-common-tags.xml" \ + "$(SOURCE_ROOT)/../documentation/doxygen/doxygen-cocoa-tags.xml" # When a file name is specified after GENERATE_TAGFILE, doxygen will create a # tag file that is based on the input files it reads. See section "Linking to # external documentation" for more information about the usage of tag files. -GENERATE_TAGFILE = $(SOURCE_ROOT)/../documentation/doxygen/core-plot-tags.xml +GENERATE_TAGFILE = "$(SOURCE_ROOT)/../documentation/doxygen/core-plot-tags.xml" # If the ALLEXTERNALS tag is set to YES, all external class will be listed in # the class index. If set to NO, only the inherited external classes will be diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 7f507bd38..7dd9cb5a4 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -880,7 +880,7 @@ 4CD7E9620F4B625900F9BCBB /* CPTUtilitiesTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTUtilitiesTests.h; sourceTree = ""; }; 4CD7E9630F4B625900F9BCBB /* CPTUtilitiesTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTUtilitiesTests.m; sourceTree = ""; }; 8DC2EF5B0486A6940098B216 /* CorePlot.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CorePlot.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 9021E5690FC69B2900443472 /* doxygen.config */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; lineEnding = 0; name = doxygen.config; path = ../documentation/doxygen/doxygen.config; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = ""; }; + 9021E5690FC69B2900443472 /* doxygen.config */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; lineEnding = 0; name = doxygen.config; path = ../documentation/doxygen/doxygen.config; sourceTree = SOURCE_ROOT; }; 906156BC0F375598001B75FC /* CPTLineStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLineStyle.h; sourceTree = ""; }; 906156BD0F375598001B75FC /* CPTLineStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLineStyle.m; sourceTree = ""; }; 90AF4FB90F36D39700753D26 /* CPTXYPlotSpace.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTXYPlotSpace.m; sourceTree = ""; }; @@ -910,7 +910,7 @@ C318F4AB11EA188700595FF9 /* CPTLimitBand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLimitBand.h; sourceTree = ""; }; C318F4AC11EA188700595FF9 /* CPTLimitBand.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLimitBand.m; sourceTree = ""; }; C31908A41998168C00B61898 /* CorePlot.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlot.xcconfig; path = xcconfig/CorePlot.xcconfig; sourceTree = ""; }; - C3226A451A69ED0900F77249 /* doxygen touch.config */ = {isa = PBXFileReference; lastKnownFileType = text; lineEnding = 0; name = "doxygen touch.config"; path = "../documentation/doxygen/doxygen touch.config"; sourceTree = ""; xcLanguageSpecificationIdentifier = ""; }; + C3226A451A69ED0900F77249 /* doxygen touch.config */ = {isa = PBXFileReference; lastKnownFileType = text; lineEnding = 0; name = "doxygen touch.config"; path = "../documentation/doxygen/doxygen touch.config"; sourceTree = ""; }; C3226A461A69ED1F00F77249 /* doxygen-cocoa-touch-tags.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = "doxygen-cocoa-touch-tags.xml"; path = "../documentation/doxygen/doxygen-cocoa-touch-tags.xml"; sourceTree = ""; }; C3226A511A69F6DA00F77249 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; C3226A531A69F6DF00F77249 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; @@ -980,6 +980,7 @@ C3920AC31395B6500045F3BB /* CPTLegend.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLegend.m; sourceTree = ""; }; C3978E0413CE653B00A420D9 /* _NSCoderExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _NSCoderExtensions.h; sourceTree = ""; }; C3978E0513CE653B00A420D9 /* _NSCoderExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = _NSCoderExtensions.m; sourceTree = ""; }; + C3A259E12A329D1D00D2BDA7 /* doxygen-common-tags.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = "doxygen-common-tags.xml"; path = "../documentation/doxygen/doxygen-common-tags.xml"; sourceTree = ""; }; C3A695E3146A19BC00AF5653 /* CPTMutablePlotRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTMutablePlotRange.h; sourceTree = ""; }; C3A695E4146A19BC00AF5653 /* CPTMutablePlotRange.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTMutablePlotRange.m; sourceTree = ""; }; C3AFC9CF0FB62969005DFFDC /* CPTImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTImage.h; sourceTree = ""; }; @@ -1555,6 +1556,7 @@ C3FF6EF00FFFA51D00AF0496 /* mainpage.h */, C3B235631009931400970270 /* doxygen-cocoa-tags.xml */, C3226A461A69ED1F00F77249 /* doxygen-cocoa-touch-tags.xml */, + C3A259E12A329D1D00D2BDA7 /* doxygen-common-tags.xml */, C30E979F14B290520012204A /* DoxygenLayout.xml */, ); name = Documentation; diff --git a/framework/Source/CPTShadow.m b/framework/Source/CPTShadow.m index c40b93596..6714ffbac 100644 --- a/framework/Source/CPTShadow.m +++ b/framework/Source/CPTShadow.m @@ -18,8 +18,8 @@ @interface CPTShadow() /** @brief Immutable wrapper for various shadow drawing properties. * - * @see See Apple’s Quartz 2D - * and CGContext + * @see See Apple’s Quartz 2D + * and CGContext * documentation for more information about each of these properties. * * In general, you will want to create a CPTMutableShadow if you want to customize properties. diff --git a/scripts/generate_core_plot_docs.sh b/scripts/generate_core_plot_docs.sh index 7467932db..e5a8a1877 100755 --- a/scripts/generate_core_plot_docs.sh +++ b/scripts/generate_core_plot_docs.sh @@ -1,6 +1,11 @@ #!/bin/sh -# Build the doxygen documentation for the project and load the docset into Xcode. +# Build the doxygen documentation for the project + +# Required script parameters: +# $1: Doxygen .config filename +# $2: Output folder name +# $3: Docset filename (defined in the .config file) # Use the following to adjust the value of the $DOXYGEN_PATH User-Defined Setting: # Binary install location: /Applications/Doxygen.app/Contents/Resources/doxygen @@ -47,4 +52,12 @@ ls *.html | xargs sed -i '' 's/\"_/\"/g' ls *.js | xargs sed -i '' 's/\"_/\"/g' ls *.map | xargs sed -i '' 's/\"$_/\"$/g' +# Remove ".html" from Apple documentation links +findString="\(apple\.com[A-Z0-9/]*/[A-Z0-9_-]*\)\.html" +replaceString="\1" + +for filename in *.html; do + sed -i "" "s#${findString}#${replaceString}#gi" ${filename} +done + exit 0 From 57b07e45ae333737da8264afd2ecbb9b107665e2 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 17 Jun 2023 10:03:32 -0400 Subject: [PATCH 195/245] Updated project files and Xcode build schemes for Xcode 15.0 beta. --- .../xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme | 2 +- .../xcshareddata/xcschemes/CPTTestApp-iPhone.xcscheme | 2 +- .../xcshareddata/xcschemes/CPTTestApp.xcscheme | 2 +- .../xcshareddata/xcschemes/Plot Gallery-Mac.xcscheme | 2 +- .../xcshareddata/xcschemes/Plot Gallery-iOS.xcscheme | 2 +- .../xcshareddata/xcschemes/Plot Gallery-tvOS.xcscheme | 2 +- .../DatePlot.xcodeproj/xcshareddata/xcschemes/DatePlot.xcscheme | 2 +- .../DropPlot.xcodeproj/xcshareddata/xcschemes/DropPlot.xcscheme | 2 +- .../xcshareddata/xcschemes/minorTickFormatter.xcscheme | 2 +- .../xcshareddata/xcschemes/RangePlot.xcscheme | 2 +- framework/CorePlot.xcodeproj/project.pbxproj | 2 +- .../xcshareddata/xcschemes/CorePlot Mac.xcscheme | 2 +- .../xcshareddata/xcschemes/CorePlot iOS.xcscheme | 2 +- .../xcshareddata/xcschemes/CorePlot tvOS.xcscheme | 2 +- .../xcshareddata/xcschemes/Documentation-Mac.xcscheme | 2 +- .../xcshareddata/xcschemes/Documentation-iOS.xcscheme | 2 +- .../xcshareddata/xcschemes/Universal XCFramework.xcscheme | 2 +- .../xcshareddata/xcschemes/Update SPM Files.xcscheme | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme index 90b13200c..1c0f59e90 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme @@ -1,6 +1,6 @@ Date: Sat, 17 Jun 2023 10:05:28 -0400 Subject: [PATCH 196/245] Enabled aggressive number object conversion warnings and fixed the resulting warnings. --- examples/CPTTestApp/Source/Controller.m | 2 +- framework/Source/CPTAxis.m | 8 ++++---- framework/Source/CPTAxisLabel.m | 4 ++-- framework/Source/CPTAxisTitle.m | 2 +- framework/Source/CPTBarPlot.m | 10 +++++----- framework/Source/CPTMutablePlotRange.m | 4 ++-- framework/Source/CPTNumericData.m | 2 +- framework/Source/CPTPlotRange.m | 4 ++-- framework/Source/CPTRangePlot.m | 4 ++-- framework/Source/CPTScatterPlot.m | 4 ++-- framework/Source/CPTTradingRangePlot.m | 4 ++-- framework/Source/CPTXYAxis.m | 2 +- framework/xcconfig/CorePlotWarnings.xcconfig | 2 +- 13 files changed, 26 insertions(+), 26 deletions(-) diff --git a/examples/CPTTestApp/Source/Controller.m b/examples/CPTTestApp/Source/Controller.m index 0d5208afb..facaa1f90 100644 --- a/examples/CPTTestApp/Source/Controller.m +++ b/examples/CPTTestApp/Source/Controller.m @@ -597,7 +597,7 @@ -(void)barPlot:(nonnull CPTBarPlot *)plot barWasSelectedAtRecordIndex:(NSUIntege const CGFloat duration = 0.25; NSNumber *barWidth = plot.barWidth; - if ( barWidth ) { + if ( barWidth != nil ) { [CPTAnimation animate:plot property:@"barWidth" fromNumber:plot.barWidth diff --git a/framework/Source/CPTAxis.m b/framework/Source/CPTAxis.m index c5304806b..1851f5412 100644 --- a/framework/Source/CPTAxis.m +++ b/framework/Source/CPTAxis.m @@ -809,7 +809,7 @@ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder forKey:@"CPTAxis.axisLineCapMax"] copy]; NSNumber *origin = [coder decodeObjectOfClass:[NSNumber class] forKey:@"CPTAxis.labelingOrigin"]; - labelingOrigin = origin ? origin : @0.0; + labelingOrigin = origin != nil ? origin : @0.0; majorIntervalLength = [coder decodeObjectOfClass:[NSNumber class] forKey:@"CPTAxis.majorIntervalLength"]; minorTicksPerInterval = (NSUInteger)[coder decodeIntegerForKey:@"CPTAxis.minorTicksPerInterval"]; @@ -2567,7 +2567,7 @@ -(void)setTitleLocation:(nullable NSNumber *)newLocation { BOOL needsUpdate = YES; - if ( newLocation ) { + if ( newLocation != nil ) { NSNumber *location = newLocation; needsUpdate = ![titleLocation isEqualToNumber:location]; } @@ -2874,7 +2874,7 @@ -(void)setLabelingOrigin:(nonnull NSNumber *)newLabelingOrigin { BOOL needsUpdate = YES; - if ( newLabelingOrigin ) { + if ( newLabelingOrigin != nil ) { needsUpdate = ![labelingOrigin isEqualToNumber:newLabelingOrigin]; } @@ -2889,7 +2889,7 @@ -(void)setMajorIntervalLength:(nullable NSNumber *)newIntervalLength { BOOL needsUpdate = YES; - if ( newIntervalLength ) { + if ( newIntervalLength != nil ) { NSNumber *interval = newIntervalLength; needsUpdate = ![majorIntervalLength isEqualToNumber:interval]; } diff --git a/framework/Source/CPTAxisLabel.m b/framework/Source/CPTAxisLabel.m index 1fd31256f..3a8579a41 100644 --- a/framework/Source/CPTAxisLabel.m +++ b/framework/Source/CPTAxisLabel.m @@ -113,7 +113,7 @@ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder alignment = (CPTAlignment)[coder decodeIntegerForKey:@"CPTAxisLabel.alignment"]; NSNumber *location = [coder decodeObjectOfClass:[NSNumber class] forKey:@"CPTAxisLabel.tickLocation"]; - tickLocation = location ? location : @0.0; + tickLocation = location != nil ? location : @0.0; } return self; } @@ -332,7 +332,7 @@ -(BOOL)isEqual:(nullable id)object else if ( [object isKindOfClass:[self class]] ) { NSNumber *location = ((CPTAxisLabel *)object).tickLocation; - if ( location ) { + if ( location != nil ) { return [self.tickLocation isEqualToNumber:location]; } else { diff --git a/framework/Source/CPTAxisTitle.m b/framework/Source/CPTAxisTitle.m index c5f37c903..0cc29c092 100644 --- a/framework/Source/CPTAxisTitle.m +++ b/framework/Source/CPTAxisTitle.m @@ -58,7 +58,7 @@ -(BOOL)isEqual:(nullable id)object NSNumber *location = ((CPTAxisLabel *)object).tickLocation; - if ( location ) { + if ( location != nil ) { return [self.tickLocation isEqualToNumber:location]; } else { diff --git a/framework/Source/CPTBarPlot.m b/framework/Source/CPTBarPlot.m index 6e42f2be0..e3189defb 100644 --- a/framework/Source/CPTBarPlot.m +++ b/framework/Source/CPTBarPlot.m @@ -326,15 +326,15 @@ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder forKey:@"CPTBarPlot.fill"] copy]; num = [coder decodeObjectOfClass:[NSNumber class] forKey:@"CPTBarPlot.barWidth"]; - barWidth = num ? num : @0.0; + barWidth = num != nil ? num : @0.0; num = [coder decodeObjectOfClass:[NSNumber class] forKey:@"CPTBarPlot.barOffset"]; - barOffset = num ? num : @0.0; + barOffset = num != nil ? num : @0.0; barCornerRadius = [coder decodeCGFloatForKey:@"CPTBarPlot.barCornerRadius"]; barBaseCornerRadius = [coder decodeCGFloatForKey:@"CPTBarPlot.barBaseCornerRadius"]; num = [coder decodeObjectOfClass:[NSNumber class] forKey:@"CPTBarPlot.baseValue"]; - baseValue = num ? num : @0.0; + baseValue = num != nil ? num : @0.0; barsAreHorizontal = [coder decodeBoolForKey:@"CPTBarPlot.barsAreHorizontal"]; barBasesVary = [coder decodeBoolForKey:@"CPTBarPlot.barBasesVary"]; barWidthsAreInViewCoordinates = [coder decodeBoolForKey:@"CPTBarPlot.barWidthsAreInViewCoordinates"]; @@ -632,7 +632,7 @@ -(void)reloadBarWidthsInIndexRange:(NSRange)indexRange for ( NSUInteger idx = indexRange.location; idx < maxIndex; idx++ ) { NSNumber *width = [theDataSource barWidthForBarPlot:self recordIndex:idx]; - if ( width ) { + if ( width != nil ) { [array addObject:width]; } else { @@ -1179,7 +1179,7 @@ -(nonnull NSNumber *)barWidthForIndex:(NSUInteger)idx { NSNumber *theBarWidth = [self cachedValueForKey:CPTBarPlotBindingBarWidths recordIndex:idx]; - if ( !theBarWidth || (theBarWidth == [CPTPlot nilData])) { + if ((theBarWidth == nil) || (theBarWidth == [CPTPlot nilData])) { theBarWidth = self.barWidth; } diff --git a/framework/Source/CPTMutablePlotRange.m b/framework/Source/CPTMutablePlotRange.m index eb1079824..676eadee2 100644 --- a/framework/Source/CPTMutablePlotRange.m +++ b/framework/Source/CPTMutablePlotRange.m @@ -302,7 +302,7 @@ -(void)shiftEndToFitInRange:(nonnull CPTPlotRange *)otherRange -(void)setLocation:(nonnull NSNumber *)newLocation { - NSParameterAssert(newLocation); + NSParameterAssert(newLocation != nil); self.inValueUpdate = YES; @@ -314,7 +314,7 @@ -(void)setLocation:(nonnull NSNumber *)newLocation -(void)setLength:(nonnull NSNumber *)newLength { - NSParameterAssert(newLength); + NSParameterAssert(newLength != nil); self.inValueUpdate = YES; diff --git a/framework/Source/CPTNumericData.m b/framework/Source/CPTNumericData.m index e55015590..7ebc0c400 100644 --- a/framework/Source/CPTNumericData.m +++ b/framework/Source/CPTNumericData.m @@ -775,7 +775,7 @@ -(nonnull CPTNumberArray *)sampleArray for ( NSUInteger i = 0; i < sampleCount; i++ ) { NSNumber *sampleValue = [self sampleValue:i]; - if ( sampleValue ) { + if ( sampleValue != nil ) { [samples addObject:sampleValue]; } } diff --git a/framework/Source/CPTPlotRange.m b/framework/Source/CPTPlotRange.m index 495fbb6bd..80e088df4 100644 --- a/framework/Source/CPTPlotRange.m +++ b/framework/Source/CPTPlotRange.m @@ -166,8 +166,8 @@ +(nonnull instancetype)plotRangeWithLocationDecimal:(NSDecimal)loc lengthDecimal **/ -(nonnull instancetype)initWithLocation:(nonnull NSNumber *)loc length:(nonnull NSNumber *)len { - NSParameterAssert(loc); - NSParameterAssert(len); + NSParameterAssert(loc != nil); + NSParameterAssert(len != nil); if ((self = [super init])) { locationDecimal = loc.decimalValue; diff --git a/framework/Source/CPTRangePlot.m b/framework/Source/CPTRangePlot.m index d97948eaa..71ac954d8 100644 --- a/framework/Source/CPTRangePlot.m +++ b/framework/Source/CPTRangePlot.m @@ -664,7 +664,7 @@ -(void)reloadBarWidthsInIndexRange:(NSRange)indexRange for ( NSUInteger idx = indexRange.location; idx < maxIndex; idx++ ) { NSNumber *width = [theDataSource barWidthForRangePlot:self recordIndex:idx]; - if ( width ) { + if ( width != nil ) { [array addObject:width]; } else { @@ -1021,7 +1021,7 @@ -(nonnull NSNumber *)barWidthForIndex:(NSUInteger)idx { NSNumber *theBarWidth = [self cachedValueForKey:CPTRangePlotBindingBarWidths recordIndex:idx]; - if ( !theBarWidth || (theBarWidth == [CPTPlot nilData])) { + if ((theBarWidth == nil) || (theBarWidth == [CPTPlot nilData])) { theBarWidth = @(self.barWidth); } diff --git a/framework/Source/CPTScatterPlot.m b/framework/Source/CPTScatterPlot.m index 1555cded3..77c06df9e 100644 --- a/framework/Source/CPTScatterPlot.m +++ b/framework/Source/CPTScatterPlot.m @@ -2264,7 +2264,7 @@ -(void)setAreaBaseValue:(nullable NSNumber *)newAreaBaseValue { BOOL needsUpdate = YES; - if ( newAreaBaseValue ) { + if ( newAreaBaseValue != nil ) { NSNumber *baseValue = newAreaBaseValue; needsUpdate = ![areaBaseValue isEqualToNumber:baseValue]; } @@ -2280,7 +2280,7 @@ -(void)setAreaBaseValue2:(nullable NSNumber *)newAreaBaseValue { BOOL needsUpdate = YES; - if ( newAreaBaseValue ) { + if ( newAreaBaseValue != nil ) { NSNumber *baseValue = newAreaBaseValue; needsUpdate = ![areaBaseValue2 isEqualToNumber:baseValue]; } diff --git a/framework/Source/CPTTradingRangePlot.m b/framework/Source/CPTTradingRangePlot.m index 5764f58af..b4dcf43d8 100644 --- a/framework/Source/CPTTradingRangePlot.m +++ b/framework/Source/CPTTradingRangePlot.m @@ -586,7 +586,7 @@ -(void)reloadBarWidthsInIndexRange:(NSRange)indexRange for ( NSUInteger idx = indexRange.location; idx < maxIndex; idx++ ) { NSNumber *width = [theDataSource barWidthForTradingRangePlot:self recordIndex:idx]; - if ( width ) { + if ( width != nil ) { [array addObject:width]; } else { @@ -1176,7 +1176,7 @@ -(nonnull NSNumber *)barWidthForIndex:(NSUInteger)idx { NSNumber *theBarWidth = [self cachedValueForKey:CPTTradingRangePlotBindingBarWidths recordIndex:idx]; - if ( !theBarWidth || (theBarWidth == [CPTPlot nilData])) { + if ((theBarWidth == nil) || (theBarWidth == [CPTPlot nilData])) { theBarWidth = @(self.barWidth); } diff --git a/framework/Source/CPTXYAxis.m b/framework/Source/CPTXYAxis.m index eb0d0ba3f..3002ec0bd 100644 --- a/framework/Source/CPTXYAxis.m +++ b/framework/Source/CPTXYAxis.m @@ -872,7 +872,7 @@ -(void)setOrthogonalPosition:(nullable NSNumber *)newPosition { BOOL needsUpdate = YES; - if ( newPosition ) { + if ( newPosition != nil ) { NSNumber *position = newPosition; needsUpdate = ![orthogonalPosition isEqualToNumber:position]; } diff --git a/framework/xcconfig/CorePlotWarnings.xcconfig b/framework/xcconfig/CorePlotWarnings.xcconfig index ca44cfacf..f4d52efe3 100644 --- a/framework/xcconfig/CorePlotWarnings.xcconfig +++ b/framework/xcconfig/CorePlotWarnings.xcconfig @@ -10,7 +10,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES CLANG_ANALYZER_MEMORY_MANAGEMENT = YES CLANG_ANALYZER_MIG_CONVENTIONS = YES CLANG_ANALYZER_NONNULL = YES -CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES +CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE CLANG_ANALYZER_NULL_DEREFERENCE = YES CLANG_ANALYZER_OBJC_ATSYNC = YES CLANG_ANALYZER_OBJC_COLLECTIONS = YES From e5dfde2a7f2ea4118db344a680cf761c5da9c06e Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 17 Jun 2023 10:23:31 -0400 Subject: [PATCH 197/245] Removed the CorePlot-latest.podspec file because its presence is confusing and it's never used. --- CorePlot-latest.podspec | 43 ----------------------------------------- 1 file changed, 43 deletions(-) delete mode 100644 CorePlot-latest.podspec diff --git a/CorePlot-latest.podspec b/CorePlot-latest.podspec deleted file mode 100644 index 7e1f6c15e..000000000 --- a/CorePlot-latest.podspec +++ /dev/null @@ -1,43 +0,0 @@ -Pod::Spec.new do |s| - s.name = 'CorePlot' - s.version = '99.99.99' - s.license = 'BSD' - s.summary = 'Cocoa plotting framework for macOS, iOS, and tvOS.' - s.homepage = 'https://github.com/core-plot' - s.social_media_url = 'https://twitter.com/CorePlot' - s.documentation_url = 'https://core-plot.github.io' - - s.authors = { 'Drew McCormack' => 'drewmccormack@mac.com', - 'Brad Larson' => 'larson@sunsetlakesoftware.com', - 'Eric Skroch' => 'eskroch@mac.com', - 'Barry Wark' => 'barrywark@gmail.com' } - - s.source = { :git => 'https://github.com/core-plot/core-plot.git' } - - s.description = 'Core Plot is a plotting framework for macOS, iOS, and tvOS. It provides 2D visualization ' \ - 'of data, and is tightly integrated with Apple technologies like Core Animation, ' \ - 'Core Data, and Cocoa Bindings.' - - s.ios.deployment_target = '12.0' - s.osx.deployment_target = '10.14.6' - s.tvos.deployment_target = '12.0' - - s.ios.header_dir = 'ios' - s.osx.header_dir = 'osx' - s.tvos.header_dir = 'tvos' - - s.source_files = 'framework/Source/*.{h,m}', 'framework/CocoaPods/*.h', 'framework/PlatformSpecific/*.{h,m}' - s.exclude_files = '**/*{TestCase,Tests}.{h,m}', '**/mainpage.h' - s.osx.source_files = 'framework/MacOnly/*.{h,m}' - s.private_header_files = '**/_*.h' - - s.requires_arc = true - s.ios.xcconfig = { 'HEADER_SEARCH_PATHS' => '"${PODS_ROOT}/Headers/Private/CorePlot/ios"' } - s.osx.xcconfig = { 'HEADER_SEARCH_PATHS' => '"${PODS_ROOT}/Headers/Private/CorePlot/osx"' } - s.tvos.xcconfig = { 'HEADER_SEARCH_PATHS' => '"${PODS_ROOT}/Headers/Private/CorePlot/tvos"' } - - s.frameworks = 'QuartzCore' - s.ios.frameworks = 'UIKit', 'Foundation' - s.tvos.frameworks = 'UIKit', 'Foundation' - s.osx.frameworks = 'Cocoa' -end \ No newline at end of file From 12e6792dcb3a2edfa28796be57b0f48b79109338 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 17 Jun 2023 10:24:53 -0400 Subject: [PATCH 198/245] Updated version information in podspec file and added a step to the release instructions to verify it. --- CorePlot.podspec | 10 +++---- scripts/README Creating a release package.md | 30 +++++++++++--------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/CorePlot.podspec b/CorePlot.podspec index 04e9c5639..32ed9470e 100644 --- a/CorePlot.podspec +++ b/CorePlot.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'CorePlot' - s.version = '2.3' + s.version = '2.4' s.license = 'BSD' s.summary = 'Cocoa plotting framework for macOS, iOS, and tvOS.' s.homepage = 'https://github.com/core-plot' @@ -12,15 +12,15 @@ Pod::Spec.new do |s| 'Eric Skroch' => 'eskroch@mac.com', 'Barry Wark' => 'barrywark@gmail.com' } - s.source = { :git => 'https://github.com/core-plot/core-plot.git', :tag => '2.3.0'} + s.source = { :git => 'https://github.com/core-plot/core-plot.git', :branch => 'release-2.4' } s.description = 'Core Plot is a plotting framework for macOS, iOS, and tvOS. It provides 2D visualization ' \ 'of data, and is tightly integrated with Apple technologies like Core Animation, ' \ 'Core Data, and Cocoa Bindings.' - s.ios.deployment_target = '9.0' - s.osx.deployment_target = '10.9' - s.tvos.deployment_target = '9.0' + s.ios.deployment_target = '12.0' + s.osx.deployment_target = '10.14.6' + s.tvos.deployment_target = '12.0' s.ios.header_dir = 'ios' s.osx.header_dir = 'osx' diff --git a/scripts/README Creating a release package.md b/scripts/README Creating a release package.md index fcd000c6b..0ec63d29b 100644 --- a/scripts/README Creating a release package.md +++ b/scripts/README Creating a release package.md @@ -14,29 +14,33 @@ Follow these steps to create a Core Plot release and post it to GitHub: 3. Merge the development branch into `master`, resolve any merge conflicts, and commit the change. -4. In the "Core Plot" project build settings, set the "Current Project Version" to the release version. Commit the change in Git. +4. Remove the branch qualifier from the `source` link in the [podspec](https://github.com/core-plot/core-plot/blob/master/CorePlot.podspec): -5. Using Git, ensure your local Core Plot source directory is in sync with the public repository on GitHub. + `s.source = { :git => 'https://github.com/core-plot/core-plot.git' }` -6. Open the Terminal application and `cd` to the root directory of your local Core Plot source directory. +5. In the "Core Plot" project build settings, set the "Current Project Version" to the release version. Commit the change in Git. -7. Tag the current revision with the release version: +6. Using Git, ensure your local Core Plot source directory is in sync with the public repository on GitHub. + +7. Open the Terminal application and `cd` to the root directory of your local Core Plot source directory. + +8. Tag the current revision with the release version: `$ git tag ` where **<version>** is the semantic version number for this release, e.g., 2.5.0. -8. Change to the **scripts** folder: +9. Change to the **scripts** folder: `$ cd scripts` -9. Run the createrelease script: +10. Run the createrelease script: `$ python createrelease.py ` -10. Review the messages printed in the Terminal window and verify that all build steps succeeded. +11. Review the messages printed in the Terminal window and verify that all build steps succeeded. -11. The release products were placed in a folder called **CorePlot_<version>** and placed on your desktop. Open this folder and verify that the following subfolders and files are present: +12. The release products were placed in a folder called **CorePlot_<version>** and placed on your desktop. Open this folder and verify that the following subfolders and files are present:
    • Binaries/iOS/
    • @@ -48,13 +52,13 @@ Follow these steps to create a Core Plot release and post it to GitHub:
    • License.txt
    -12. Right-click the release folder on your desktop and select **Compress "<filename>"** from the menu. +13. Right-click the release folder on your desktop and select **Compress "<filename>"** from the menu. -13. Log into GitHub and navigate to the [Releases](https://github.com/core-plot/core-plot/releases) page. +14. Log into GitHub and navigate to the [Releases](https://github.com/core-plot/core-plot/releases) page. -14. Click **Draft a new release**. +15. Click **Draft a new release**. -15. Select the tag for the new release (``). +16. Select the tag for the new release (``). Enter the following: @@ -63,7 +67,7 @@ Follow these steps to create a Core Plot release and post it to GitHub:
  • Binaries: drag the Core Plot zip file on your desktop to the box
  • -16. Click **Publish release**. +17. Click **Publish release**. # Update Documentation From 9d37027b30e1d29de0822df062fbff272694fcc2 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Wed, 5 Jul 2023 06:51:55 -0400 Subject: [PATCH 199/245] Changed all private headers to project headers to simplify module definitions and fix issues with CocoaPods. Fixed issue #477. --- CorePlot.podspec | 12 +- framework/CocoaPods/CorePlot.h | 80 ---------- framework/CorePlot.h | 80 ++++++++++ framework/CorePlot.xcodeproj/project.pbxproj | 140 +++++++----------- framework/Module/module.private.modulemap | 6 - framework/SPM Umbrella Header/CorePlot.h | 80 ---------- .../SPM Umbrella Header/_CorePlot_Private.h | 21 --- framework/_CorePlot_Private.h | 36 ----- framework/xcconfig/CorePlotModule.xcconfig | 1 - scripts/generate_spm_sources_layout.sh | 5 - spm/Sources/core-plot/_CorePlot_Private.h | 1 - spm/Sources/core-plot/include/CorePlot.h | 2 +- 12 files changed, 143 insertions(+), 321 deletions(-) delete mode 100644 framework/CocoaPods/CorePlot.h delete mode 100644 framework/Module/module.private.modulemap delete mode 100644 framework/SPM Umbrella Header/CorePlot.h delete mode 100644 framework/SPM Umbrella Header/_CorePlot_Private.h delete mode 100644 framework/_CorePlot_Private.h delete mode 120000 spm/Sources/core-plot/_CorePlot_Private.h diff --git a/CorePlot.podspec b/CorePlot.podspec index 32ed9470e..2e810f987 100644 --- a/CorePlot.podspec +++ b/CorePlot.podspec @@ -26,18 +26,22 @@ Pod::Spec.new do |s| s.osx.header_dir = 'osx' s.tvos.header_dir = 'tvos' - s.source_files = 'framework/Source/*.{h,m}', 'framework/CocoaPods/*.h', 'framework/PlatformSpecific/*.{h,m}' + s.source_files = 'framework/*CorePlot*.h', 'framework/Source/*.{h,m}', 'framework/PlatformSpecific/*.{h,m}' s.exclude_files = '**/*{TestCase,Tests}.{h,m}', '**/mainpage.h' s.osx.source_files = 'framework/MacOnly/*.{h,m}' - s.private_header_files = '**/_*.h' + s.project_header_files = '**/_*.h' s.requires_arc = true + + s.module_map = false + + s.xcconfig = { 'DEFINES_MODULE' => 'YES' } s.ios.xcconfig = { 'HEADER_SEARCH_PATHS' => '"${PODS_ROOT}/Headers/Private/CorePlot/ios"' } s.osx.xcconfig = { 'HEADER_SEARCH_PATHS' => '"${PODS_ROOT}/Headers/Private/CorePlot/osx"' } s.tvos.xcconfig = { 'HEADER_SEARCH_PATHS' => '"${PODS_ROOT}/Headers/Private/CorePlot/tvos"' } - + s.frameworks = 'QuartzCore' s.ios.frameworks = 'UIKit', 'Foundation' - s.tvos.frameworks = 'UIKit', 'Foundation' s.osx.frameworks = 'Cocoa' + s.tvos.frameworks = 'UIKit', 'Foundation' end \ No newline at end of file diff --git a/framework/CocoaPods/CorePlot.h b/framework/CocoaPods/CorePlot.h deleted file mode 100644 index 4be4415a4..000000000 --- a/framework/CocoaPods/CorePlot.h +++ /dev/null @@ -1,80 +0,0 @@ -#import - -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST - -#import -#import - -#else - -#import - -#import "CPTDecimalNumberValueTransformer.h" - -#endif - -#import "CPTAnimation.h" -#import "CPTAnimationOperation.h" -#import "CPTAnimationPeriod.h" -#import "CPTAnnotation.h" -#import "CPTAnnotationHostLayer.h" -#import "CPTAxis.h" -#import "CPTAxisLabel.h" -#import "CPTAxisSet.h" -#import "CPTAxisTitle.h" -#import "CPTBarPlot.h" -#import "CPTBorderedLayer.h" -#import "CPTCalendarFormatter.h" -#import "CPTColor.h" -#import "CPTColorSpace.h" -#import "CPTConstraints.h" -#import "CPTDefinitions.h" -#import "CPTExceptions.h" -#import "CPTFill.h" -#import "CPTFunctionDataSource.h" -#import "CPTGradient.h" -#import "CPTGraph.h" -#import "CPTGraphHostingView.h" -#import "CPTImage.h" -#import "CPTLayer.h" -#import "CPTLayerAnnotation.h" -#import "CPTLegend.h" -#import "CPTLegendEntry.h" -#import "CPTLimitBand.h" -#import "CPTLineCap.h" -#import "CPTLineStyle.h" -#import "CPTMutableLineStyle.h" -#import "CPTMutableNumericData+TypeConversion.h" -#import "CPTMutableNumericData.h" -#import "CPTMutablePlotRange.h" -#import "CPTMutableShadow.h" -#import "CPTMutableTextStyle.h" -#import "CPTNumericData+TypeConversion.h" -#import "CPTNumericData.h" -#import "CPTNumericDataType.h" -#import "CPTPathExtensions.h" -#import "CPTPieChart.h" -#import "CPTPlatformSpecificCategories.h" -#import "CPTPlatformSpecificDefines.h" -#import "CPTPlatformSpecificFunctions.h" -#import "CPTPlot.h" -#import "CPTPlotArea.h" -#import "CPTPlotAreaFrame.h" -#import "CPTPlotRange.h" -#import "CPTPlotSpace.h" -#import "CPTPlotSpaceAnnotation.h" -#import "CPTPlotSymbol.h" -#import "CPTRangePlot.h" -#import "CPTResponder.h" -#import "CPTScatterPlot.h" -#import "CPTShadow.h" -#import "CPTTextLayer.h" -#import "CPTTextStyle.h" -#import "CPTTheme.h" -#import "CPTTimeFormatter.h" -#import "CPTTradingRangePlot.h" -#import "CPTUtilities.h" -#import "CPTXYAxis.h" -#import "CPTXYAxisSet.h" -#import "CPTXYGraph.h" -#import "CPTXYPlotSpace.h" diff --git a/framework/CorePlot.h b/framework/CorePlot.h index bc4a0dc3c..0fa428638 100644 --- a/framework/CorePlot.h +++ b/framework/CorePlot.h @@ -1,4 +1,8 @@ +#if defined __has_include +#if __has_include() #define CPT_IS_FRAMEWORK +#endif +#endif #import @@ -11,10 +15,16 @@ #import +#ifdef CPT_IS_FRAMEWORK #import +#else +#import "CPTDecimalNumberValueTransformer.h" +#endif #endif +#ifdef CPT_IS_FRAMEWORK + #import #import #import @@ -80,3 +90,73 @@ #import #import #import + +#else + +#import "CPTAnimation.h" +#import "CPTAnimationOperation.h" +#import "CPTAnimationPeriod.h" +#import "CPTAnnotation.h" +#import "CPTAnnotationHostLayer.h" +#import "CPTAxis.h" +#import "CPTAxisLabel.h" +#import "CPTAxisSet.h" +#import "CPTAxisTitle.h" +#import "CPTBarPlot.h" +#import "CPTBorderedLayer.h" +#import "CPTCalendarFormatter.h" +#import "CPTColor.h" +#import "CPTColorSpace.h" +#import "CPTConstraints.h" +#import "CPTDefinitions.h" +#import "CPTExceptions.h" +#import "CPTFill.h" +#import "CPTFunctionDataSource.h" +#import "CPTGradient.h" +#import "CPTGraph.h" +#import "CPTGraphHostingView.h" +#import "CPTImage.h" +#import "CPTLayer.h" +#import "CPTLayerAnnotation.h" +#import "CPTLegend.h" +#import "CPTLegendEntry.h" +#import "CPTLimitBand.h" +#import "CPTLineCap.h" +#import "CPTLineStyle.h" +#import "CPTMutableLineStyle.h" +#import "CPTMutableNumericData+TypeConversion.h" +#import "CPTMutableNumericData.h" +#import "CPTMutablePlotRange.h" +#import "CPTMutableShadow.h" +#import "CPTMutableTextStyle.h" +#import "CPTNumericData+TypeConversion.h" +#import "CPTNumericData.h" +#import "CPTNumericDataType.h" +#import "CPTPathExtensions.h" +#import "CPTPieChart.h" +#import "CPTPlatformSpecificCategories.h" +#import "CPTPlatformSpecificDefines.h" +#import "CPTPlatformSpecificFunctions.h" +#import "CPTPlot.h" +#import "CPTPlotArea.h" +#import "CPTPlotAreaFrame.h" +#import "CPTPlotRange.h" +#import "CPTPlotSpace.h" +#import "CPTPlotSpaceAnnotation.h" +#import "CPTPlotSymbol.h" +#import "CPTRangePlot.h" +#import "CPTResponder.h" +#import "CPTScatterPlot.h" +#import "CPTShadow.h" +#import "CPTTextLayer.h" +#import "CPTTextStyle.h" +#import "CPTTheme.h" +#import "CPTTimeFormatter.h" +#import "CPTTradingRangePlot.h" +#import "CPTUtilities.h" +#import "CPTXYAxis.h" +#import "CPTXYAxisSet.h" +#import "CPTXYGraph.h" +#import "CPTXYPlotSpace.h" + +#endif diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 6eef0c472..3088534e9 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -78,11 +78,11 @@ 0772B43B10E24D5C009CD04C /* CPTTradingRangePlot.m in Sources */ = {isa = PBXBuildFile; fileRef = 0772B43810E24D5C009CD04C /* CPTTradingRangePlot.m */; }; 0772C9270FE2F71600EC4C16 /* CPTTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = 0772C9250FE2F71600EC4C16 /* CPTTheme.h */; settings = {ATTRIBUTES = (Public, ); }; }; 0772C9280FE2F71600EC4C16 /* CPTTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = 0772C9260FE2F71600EC4C16 /* CPTTheme.m */; }; - 0772C92F0FE2F89000EC4C16 /* _CPTDarkGradientTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = 0772C92D0FE2F89000EC4C16 /* _CPTDarkGradientTheme.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 0772C92F0FE2F89000EC4C16 /* _CPTDarkGradientTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = 0772C92D0FE2F89000EC4C16 /* _CPTDarkGradientTheme.h */; }; 0772C9300FE2F89000EC4C16 /* _CPTDarkGradientTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = 0772C92E0FE2F89000EC4C16 /* _CPTDarkGradientTheme.m */; }; 0783DD550FBF097E006C3696 /* CPTXYAxis.h in Headers */ = {isa = PBXBuildFile; fileRef = 0783DD530FBF097E006C3696 /* CPTXYAxis.h */; settings = {ATTRIBUTES = (Public, ); }; }; 0783DD560FBF097E006C3696 /* CPTXYAxis.m in Sources */ = {isa = PBXBuildFile; fileRef = 0783DD540FBF097E006C3696 /* CPTXYAxis.m */; }; - 078F42DB0FACC075006E670B /* _NSNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 078F42D90FACC075006E670B /* _NSNumberExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 078F42DB0FACC075006E670B /* _NSNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 078F42D90FACC075006E670B /* _NSNumberExtensions.h */; }; 078F42DC0FACC075006E670B /* _NSNumberExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 078F42DA0FACC075006E670B /* _NSNumberExtensions.m */; }; 07975C430F3B816600DE45DC /* CPTXYAxisSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 07975C410F3B816600DE45DC /* CPTXYAxisSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; 07975C440F3B816600DE45DC /* CPTXYAxisSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 07975C420F3B816600DE45DC /* CPTXYAxisSet.m */; }; @@ -128,7 +128,7 @@ 07E10BB711D10177000B8DAB /* CPTAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 07E10BB511D10177000B8DAB /* CPTAnnotation.m */; }; 07E10BBB11D10183000B8DAB /* CPTLayerAnnotation.h in Headers */ = {isa = PBXBuildFile; fileRef = 07E10BB911D10183000B8DAB /* CPTLayerAnnotation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 07E10BBC11D10183000B8DAB /* CPTLayerAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 07E10BBA11D10183000B8DAB /* CPTLayerAnnotation.m */; }; - 07FCF2C6115B54AE00E46606 /* _CPTSlateTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = 07FCF2C4115B54AE00E46606 /* _CPTSlateTheme.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 07FCF2C6115B54AE00E46606 /* _CPTSlateTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = 07FCF2C4115B54AE00E46606 /* _CPTSlateTheme.h */; }; 07FCF2C7115B54AE00E46606 /* _CPTSlateTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = 07FCF2C5115B54AE00E46606 /* _CPTSlateTheme.m */; }; 32484B430F530E8B002151AD /* CPTPlotRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 32484B3F0F530E8B002151AD /* CPTPlotRange.h */; settings = {ATTRIBUTES = (Public, ); }; }; 32484B440F530E8B002151AD /* CPTPlotRange.m in Sources */ = {isa = PBXBuildFile; fileRef = 32484B400F530E8B002151AD /* CPTPlotRange.m */; }; @@ -143,7 +143,7 @@ 4CD7E7E80F4B4F8200F9BCBB /* CPTTextLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7E7E60F4B4F8200F9BCBB /* CPTTextLayer.m */; }; 4CD7E7EC0F4B4F9600F9BCBB /* CPTLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CD7E7EA0F4B4F9600F9BCBB /* CPTLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4CD7E7ED0F4B4F9600F9BCBB /* CPTLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7E7EB0F4B4F9600F9BCBB /* CPTLayer.m */; }; - 4CD7E7F00F4B4FA700F9BCBB /* _NSDecimalNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CD7E7EE0F4B4FA700F9BCBB /* _NSDecimalNumberExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 4CD7E7F00F4B4FA700F9BCBB /* _NSDecimalNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CD7E7EE0F4B4FA700F9BCBB /* _NSDecimalNumberExtensions.h */; }; 4CD7E7F10F4B4FA700F9BCBB /* _NSDecimalNumberExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7E7EF0F4B4FA700F9BCBB /* _NSDecimalNumberExtensions.m */; }; 8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; }; 906156BE0F375598001B75FC /* CPTLineStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 906156BC0F375598001B75FC /* CPTLineStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -159,11 +159,11 @@ A92C0C48A737EFEBA33ABC75 /* _CPTAnimationPlotRangePeriod.h in Headers */ = {isa = PBXBuildFile; fileRef = A92C0E16290C226BC4BE3936 /* _CPTAnimationPlotRangePeriod.h */; }; A92C0C9E536E2E8E89D6E5FB /* _CPTAnimationPlotRangePeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = A92C091B8592D9F32AC384CB /* _CPTAnimationPlotRangePeriod.m */; }; A92C0FF1D344D29225207775 /* _CPTAnimationNSDecimalPeriod.h in Headers */ = {isa = PBXBuildFile; fileRef = A92C0685ACE3281299F10F73 /* _CPTAnimationNSDecimalPeriod.h */; }; - BC55023210059F22005DF982 /* _CPTPlainBlackTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = BC55022C10059F22005DF982 /* _CPTPlainBlackTheme.h */; settings = {ATTRIBUTES = (Private, ); }; }; + BC55023210059F22005DF982 /* _CPTPlainBlackTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = BC55022C10059F22005DF982 /* _CPTPlainBlackTheme.h */; }; BC55023310059F22005DF982 /* _CPTPlainBlackTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = BC55022D10059F22005DF982 /* _CPTPlainBlackTheme.m */; }; - BC55023410059F22005DF982 /* _CPTPlainWhiteTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = BC55022E10059F22005DF982 /* _CPTPlainWhiteTheme.h */; settings = {ATTRIBUTES = (Private, ); }; }; + BC55023410059F22005DF982 /* _CPTPlainWhiteTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = BC55022E10059F22005DF982 /* _CPTPlainWhiteTheme.h */; }; BC55023510059F22005DF982 /* _CPTPlainWhiteTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = BC55022F10059F22005DF982 /* _CPTPlainWhiteTheme.m */; }; - BC55023610059F22005DF982 /* _CPTStocksTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = BC55023010059F22005DF982 /* _CPTStocksTheme.h */; settings = {ATTRIBUTES = (Private, ); }; }; + BC55023610059F22005DF982 /* _CPTStocksTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = BC55023010059F22005DF982 /* _CPTStocksTheme.h */; }; BC55023710059F22005DF982 /* _CPTStocksTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = BC55023110059F22005DF982 /* _CPTStocksTheme.m */; }; BC74A33010FC402600E7E90D /* CPTPieChart.h in Headers */ = {isa = PBXBuildFile; fileRef = BC74A32E10FC402600E7E90D /* CPTPieChart.h */; settings = {ATTRIBUTES = (Public, ); }; }; BC74A33110FC402600E7E90D /* CPTPieChart.m in Sources */ = {isa = PBXBuildFile; fileRef = BC74A32F10FC402600E7E90D /* CPTPieChart.m */; }; @@ -187,13 +187,13 @@ C3392A491225FB69008DA6BD /* CPTNumericDataTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C97EF06104D80D400B554F9 /* CPTNumericDataTests.m */; }; C3408C3E15FC1C3E004F1D70 /* _CPTBorderLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = C3408C3C15FC1C3E004F1D70 /* _CPTBorderLayer.h */; settings = {ATTRIBUTES = (); }; }; C3408C3F15FC1C3E004F1D70 /* _CPTBorderLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = C3408C3D15FC1C3E004F1D70 /* _CPTBorderLayer.m */; }; - C34260200FAE096D00072842 /* _CPTFillImage.h in Headers */ = {isa = PBXBuildFile; fileRef = C34260180FAE096C00072842 /* _CPTFillImage.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C34260200FAE096D00072842 /* _CPTFillImage.h in Headers */ = {isa = PBXBuildFile; fileRef = C34260180FAE096C00072842 /* _CPTFillImage.h */; }; C34260210FAE096D00072842 /* _CPTFillGradient.m in Sources */ = {isa = PBXBuildFile; fileRef = C34260190FAE096C00072842 /* _CPTFillGradient.m */; }; C34260220FAE096D00072842 /* CPTFill.m in Sources */ = {isa = PBXBuildFile; fileRef = C342601A0FAE096C00072842 /* CPTFill.m */; }; - C34260230FAE096D00072842 /* _CPTFillColor.h in Headers */ = {isa = PBXBuildFile; fileRef = C342601B0FAE096C00072842 /* _CPTFillColor.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C34260230FAE096D00072842 /* _CPTFillColor.h in Headers */ = {isa = PBXBuildFile; fileRef = C342601B0FAE096C00072842 /* _CPTFillColor.h */; }; C34260240FAE096D00072842 /* _CPTFillColor.m in Sources */ = {isa = PBXBuildFile; fileRef = C342601C0FAE096C00072842 /* _CPTFillColor.m */; }; C34260250FAE096D00072842 /* _CPTFillImage.m in Sources */ = {isa = PBXBuildFile; fileRef = C342601D0FAE096C00072842 /* _CPTFillImage.m */; }; - C34260260FAE096D00072842 /* _CPTFillGradient.h in Headers */ = {isa = PBXBuildFile; fileRef = C342601E0FAE096C00072842 /* _CPTFillGradient.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C34260260FAE096D00072842 /* _CPTFillGradient.h in Headers */ = {isa = PBXBuildFile; fileRef = C342601E0FAE096C00072842 /* _CPTFillGradient.h */; }; C34260270FAE096D00072842 /* CPTFill.h in Headers */ = {isa = PBXBuildFile; fileRef = C342601F0FAE096C00072842 /* CPTFill.h */; settings = {ATTRIBUTES = (Public, ); }; }; C349DCB4151AAFBF00BFD6A7 /* CPTCalendarFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = C349DCB2151AAFBF00BFD6A7 /* CPTCalendarFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; C349DCB5151AAFBF00BFD6A7 /* CPTCalendarFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = C349DCB3151AAFBF00BFD6A7 /* CPTCalendarFormatter.m */; }; @@ -202,8 +202,8 @@ C34AFE6B11021D010041675A /* CPTPlotSymbol.h in Headers */ = {isa = PBXBuildFile; fileRef = C34AFE6911021D010041675A /* CPTPlotSymbol.h */; settings = {ATTRIBUTES = (Public, ); }; }; C34AFE6C11021D010041675A /* CPTPlotSymbol.m in Sources */ = {isa = PBXBuildFile; fileRef = C34AFE6A11021D010041675A /* CPTPlotSymbol.m */; }; C34AFE7111021D880041675A /* _CPTAxisLabelGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C032C810B8DEDC003A11B6 /* _CPTAxisLabelGroup.m */; }; - C34AFE96110224630041675A /* _CPTAxisLabelGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C032C710B8DEDC003A11B6 /* _CPTAxisLabelGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C34AFE98110224710041675A /* _CPTGridLines.h in Headers */ = {isa = PBXBuildFile; fileRef = C32B391610AA4C78000470D4 /* _CPTGridLines.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C34AFE96110224630041675A /* _CPTAxisLabelGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C032C710B8DEDC003A11B6 /* _CPTAxisLabelGroup.h */; }; + C34AFE98110224710041675A /* _CPTGridLines.h in Headers */ = {isa = PBXBuildFile; fileRef = C32B391610AA4C78000470D4 /* _CPTGridLines.h */; }; C34AFE9B1102248D0041675A /* CPTPlotArea.h in Headers */ = {isa = PBXBuildFile; fileRef = C34BF5BA10A67633007F0894 /* CPTPlotArea.h */; settings = {ATTRIBUTES = (Public, ); }; }; C34F0D58121CB3EC0020FDD3 /* CPTTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 0730F64D109494D100E95162 /* CPTTestCase.m */; }; C34F0D59121CB3F00020FDD3 /* CPTDataSourceTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C9A745E0FB24C7200918464 /* CPTDataSourceTestCase.m */; }; @@ -313,12 +313,12 @@ C37EA6311BC83F2A0091C8F7 /* CPTPlotSymbol.h in Headers */ = {isa = PBXBuildFile; fileRef = C34AFE6911021D010041675A /* CPTPlotSymbol.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6321BC83F2A0091C8F7 /* CPTTradingRangePlot.h in Headers */ = {isa = PBXBuildFile; fileRef = 0772B43710E24D5C009CD04C /* CPTTradingRangePlot.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6331BC83F2A0091C8F7 /* CPTGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = 07BF0D700F2B718F002FCEA7 /* CPTGraph.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C37EA6341BC83F2A0091C8F7 /* _CPTGridLines.h in Headers */ = {isa = PBXBuildFile; fileRef = C32B391610AA4C78000470D4 /* _CPTGridLines.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C37EA6341BC83F2A0091C8F7 /* _CPTGridLines.h in Headers */ = {isa = PBXBuildFile; fileRef = C32B391610AA4C78000470D4 /* _CPTGridLines.h */; }; C37EA6351BC83F2A0091C8F7 /* CPTTextStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B69A5B12B6215000F4C16C /* CPTTextStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6361BC83F2A0091C8F7 /* CPTMutablePlotRange.h in Headers */ = {isa = PBXBuildFile; fileRef = C3A695E3146A19BC00AF5653 /* CPTMutablePlotRange.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6371BC83F2A0091C8F7 /* CPTPieChart.h in Headers */ = {isa = PBXBuildFile; fileRef = BC74A32E10FC402600E7E90D /* CPTPieChart.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6381BC83F2A0091C8F7 /* CPTMutableNumericData+TypeConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = C3CAFB241229E41F00F5C989 /* CPTMutableNumericData+TypeConversion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C37EA6391BC83F2A0091C8F7 /* _CPTAxisLabelGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C032C710B8DEDC003A11B6 /* _CPTAxisLabelGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C37EA6391BC83F2A0091C8F7 /* _CPTAxisLabelGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C032C710B8DEDC003A11B6 /* _CPTAxisLabelGroup.h */; }; C37EA63A1BC83F2A0091C8F7 /* CPTPlotSpace.h in Headers */ = {isa = PBXBuildFile; fileRef = 07BF0D7A0F2B72B0002FCEA7 /* CPTPlotSpace.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA63B1BC83F2A0091C8F7 /* CPTGraphHostingView.h in Headers */ = {isa = PBXBuildFile; fileRef = C38A0B271A46265300D45436 /* CPTGraphHostingView.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA63C1BC83F2A0091C8F7 /* CPTColorSpace.h in Headers */ = {isa = PBXBuildFile; fileRef = 079FC0BB0FB9762B0037E990 /* CPTColorSpace.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -328,15 +328,15 @@ C37EA6401BC83F2A0091C8F7 /* _CPTBorderLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = C3408C3C15FC1C3E004F1D70 /* _CPTBorderLayer.h */; }; C37EA6411BC83F2A0091C8F7 /* CPTNumericData.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C97EEFA104D80C400B554F9 /* CPTNumericData.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6421BC83F2A0091C8F7 /* CPTLineCap.h in Headers */ = {isa = PBXBuildFile; fileRef = C3D3AD2B13DF8DCE0004EA73 /* CPTLineCap.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C37EA6431BC83F2A0091C8F7 /* _CPTFillGradient.h in Headers */ = {isa = PBXBuildFile; fileRef = C342601E0FAE096C00072842 /* _CPTFillGradient.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C37EA6431BC83F2A0091C8F7 /* _CPTFillGradient.h in Headers */ = {isa = PBXBuildFile; fileRef = C342601E0FAE096C00072842 /* _CPTFillGradient.h */; }; C37EA6441BC83F2A0091C8F7 /* CPTNumericDataType.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C97EEFC104D80C400B554F9 /* CPTNumericDataType.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6451BC83F2A0091C8F7 /* CPTAnimationPeriod.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C9CB11165DB50300739006 /* CPTAnimationPeriod.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C37EA6461BC83F2A0091C8F7 /* _CPTPlainWhiteTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = BC55022E10059F22005DF982 /* _CPTPlainWhiteTheme.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C37EA6461BC83F2A0091C8F7 /* _CPTPlainWhiteTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = BC55022E10059F22005DF982 /* _CPTPlainWhiteTheme.h */; }; C37EA6471BC83F2A0091C8F7 /* CPTBorderedLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0706223A0FDF215C0066A6C4 /* CPTBorderedLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6481BC83F2A0091C8F7 /* CPTAxisSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 07BF0D820F2B7340002FCEA7 /* CPTAxisSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6491BC83F2A0091C8F7 /* CPTScatterPlot.h in Headers */ = {isa = PBXBuildFile; fileRef = 07BF0D950F2B73CA002FCEA7 /* CPTScatterPlot.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA64A1BC83F2A0091C8F7 /* CPTMutableShadow.h in Headers */ = {isa = PBXBuildFile; fileRef = C32EE1BF13EC4BE700038266 /* CPTMutableShadow.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C37EA64B1BC83F2A0091C8F7 /* _CPTPlainBlackTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = BC55022C10059F22005DF982 /* _CPTPlainBlackTheme.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C37EA64B1BC83F2A0091C8F7 /* _CPTPlainBlackTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = BC55022C10059F22005DF982 /* _CPTPlainBlackTheme.h */; }; C37EA64C1BC83F2A0091C8F7 /* _CPTAnimationNSDecimalPeriod.h in Headers */ = {isa = PBXBuildFile; fileRef = A92C0685ACE3281299F10F73 /* _CPTAnimationNSDecimalPeriod.h */; }; C37EA64D1BC83F2A0091C8F7 /* CPTCalendarFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = C349DCB2151AAFBF00BFD6A7 /* CPTCalendarFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA64E1BC83F2A0091C8F7 /* CPTTextLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CD7E7E50F4B4F8200F9BCBB /* CPTTextLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -344,32 +344,32 @@ C37EA6501BC83F2A0091C8F7 /* CPTLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CD7E7EA0F4B4F9600F9BCBB /* CPTLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6511BC83F2A0091C8F7 /* CPTPlotAreaFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 07BF0D760F2B723A002FCEA7 /* CPTPlotAreaFrame.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6521BC83F2A0091C8F7 /* CPTXYAxis.h in Headers */ = {isa = PBXBuildFile; fileRef = 0783DD530FBF097E006C3696 /* CPTXYAxis.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C37EA6531BC83F2A0091C8F7 /* _CPTStocksTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = BC55023010059F22005DF982 /* _CPTStocksTheme.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C37EA6531BC83F2A0091C8F7 /* _CPTStocksTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = BC55023010059F22005DF982 /* _CPTStocksTheme.h */; }; C37EA6541BC83F2A0091C8F7 /* CPTImage.h in Headers */ = {isa = PBXBuildFile; fileRef = C3AFC9CF0FB62969005DFFDC /* CPTImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6551BC83F2A0091C8F7 /* CPTTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = 0772C9250FE2F71600EC4C16 /* CPTTheme.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6561BC83F2A0091C8F7 /* CPTPlatformSpecificCategories.h in Headers */ = {isa = PBXBuildFile; fileRef = C38A0B181A46264500D45436 /* CPTPlatformSpecificCategories.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C37EA6571BC83F2A0091C8F7 /* _NSNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 078F42D90FACC075006E670B /* _NSNumberExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C37EA6581BC83F2A0091C8F7 /* _CPTConstraintsRelative.h in Headers */ = {isa = PBXBuildFile; fileRef = C3CCA03B13E8D85800CE6DB1 /* _CPTConstraintsRelative.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C37EA6571BC83F2A0091C8F7 /* _NSNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 078F42D90FACC075006E670B /* _NSNumberExtensions.h */; }; + C37EA6581BC83F2A0091C8F7 /* _CPTConstraintsRelative.h in Headers */ = {isa = PBXBuildFile; fileRef = C3CCA03B13E8D85800CE6DB1 /* _CPTConstraintsRelative.h */; }; C37EA6591BC83F2A0091C8F7 /* CPTAnimationOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C9CB0C165DB4D500739006 /* CPTAnimationOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C37EA65A1BC83F2A0091C8F7 /* _CPTDarkGradientTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = 0772C92D0FE2F89000EC4C16 /* _CPTDarkGradientTheme.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C37EA65A1BC83F2A0091C8F7 /* _CPTDarkGradientTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = 0772C92D0FE2F89000EC4C16 /* _CPTDarkGradientTheme.h */; }; C37EA65B1BC83F2A0091C8F7 /* CPTRangePlot.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C0477C12D6560900DA8047 /* CPTRangePlot.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA65C1BC83F2A0091C8F7 /* _CPTAnimationCGSizePeriod.h in Headers */ = {isa = PBXBuildFile; fileRef = A92C0563E082D1C1E249FA6F /* _CPTAnimationCGSizePeriod.h */; }; - C37EA65D1BC83F2A0091C8F7 /* _CPTPlotGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F31DE81045EB470058520A /* _CPTPlotGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C37EA65D1BC83F2A0091C8F7 /* _CPTPlotGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F31DE81045EB470058520A /* _CPTPlotGroup.h */; }; C37EA65E1BC83F2A0091C8F7 /* CPTLegend.h in Headers */ = {isa = PBXBuildFile; fileRef = C3920AC21395B6500045F3BB /* CPTLegend.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C37EA65F1BC83F2A0091C8F7 /* _CPTFillImage.h in Headers */ = {isa = PBXBuildFile; fileRef = C34260180FAE096C00072842 /* _CPTFillImage.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C37EA65F1BC83F2A0091C8F7 /* _CPTFillImage.h in Headers */ = {isa = PBXBuildFile; fileRef = C34260180FAE096C00072842 /* _CPTFillImage.h */; }; C37EA6601BC83F2A0091C8F7 /* _CPTAnimationCGRectPeriod.h in Headers */ = {isa = PBXBuildFile; fileRef = A92C0E876AE37EB30019586B /* _CPTAnimationCGRectPeriod.h */; }; C37EA6611BC83F2A0091C8F7 /* CPTPlotSpaceAnnotation.h in Headers */ = {isa = PBXBuildFile; fileRef = 07E10BAF11D1016B000B8DAB /* CPTPlotSpaceAnnotation.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6621BC83F2A0091C8F7 /* CPTConstraints.h in Headers */ = {isa = PBXBuildFile; fileRef = 070064E7111F2BAA003DE087 /* CPTConstraints.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C37EA6631BC83F2A0091C8F7 /* _NSCoderExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = C3978E0413CE653B00A420D9 /* _NSCoderExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C37EA6631BC83F2A0091C8F7 /* _NSCoderExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = C3978E0413CE653B00A420D9 /* _NSCoderExtensions.h */; }; C37EA6641BC83F2A0091C8F7 /* CPTNumericData+TypeConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C97EEF7104D80C400B554F9 /* CPTNumericData+TypeConversion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C37EA6651BC83F2A0091C8F7 /* _CPTFillColor.h in Headers */ = {isa = PBXBuildFile; fileRef = C342601B0FAE096C00072842 /* _CPTFillColor.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C37EA6661BC83F2A0091C8F7 /* _CPTXYTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = C3DA34CB107AD7710051DA02 /* _CPTXYTheme.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C37EA6651BC83F2A0091C8F7 /* _CPTFillColor.h in Headers */ = {isa = PBXBuildFile; fileRef = C342601B0FAE096C00072842 /* _CPTFillColor.h */; }; + C37EA6661BC83F2A0091C8F7 /* _CPTXYTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = C3DA34CB107AD7710051DA02 /* _CPTXYTheme.h */; }; C37EA6671BC83F2A0091C8F7 /* CPTLayerAnnotation.h in Headers */ = {isa = PBXBuildFile; fileRef = 07E10BB911D10183000B8DAB /* CPTLayerAnnotation.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6681BC83F2A0091C8F7 /* _CPTAnimationCGFloatPeriod.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C9CB15165DB52C00739006 /* _CPTAnimationCGFloatPeriod.h */; }; C37EA6691BC83F2A0091C8F7 /* CPTAxisTitle.h in Headers */ = {isa = PBXBuildFile; fileRef = BCFC7C3510921FDB00DAECAA /* CPTAxisTitle.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C37EA66A1BC83F2A0091C8F7 /* _CPTSlateTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = 07FCF2C4115B54AE00E46606 /* _CPTSlateTheme.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C37EA66A1BC83F2A0091C8F7 /* _CPTSlateTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = 07FCF2C4115B54AE00E46606 /* _CPTSlateTheme.h */; }; C37EA66B1BC83F2A0091C8F7 /* CPTMutableNumericData.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C97EF10104D819100B554F9 /* CPTMutableNumericData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C37EA66C1BC83F2A0091C8F7 /* _CPTGridLineGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C38DD49111A04B7A002A68E7 /* _CPTGridLineGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C37EA66C1BC83F2A0091C8F7 /* _CPTGridLineGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C38DD49111A04B7A002A68E7 /* _CPTGridLineGroup.h */; }; C37EA66D1BC83F2A0091C8F7 /* CorePlot.h in Headers */ = {isa = PBXBuildFile; fileRef = 070CF7AE0F3CA7AB0001FFF4 /* CorePlot.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA66E1BC83F2A0091C8F7 /* CPTMutableLineStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B69B1512B62ABB00F4C16C /* CPTMutableLineStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA66F1BC83F2A0091C8F7 /* CPTAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C2846F16584EB9006BA43C /* CPTAnimation.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -390,7 +390,7 @@ C37EA67E1BC83F2A0091C8F7 /* CPTFunctionDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F97F1C17A9E07B00A52FF2 /* CPTFunctionDataSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA67F1BC83F2A0091C8F7 /* CPTGradient.h in Headers */ = {isa = PBXBuildFile; fileRef = 07CA112D0FAC8F85000861CE /* CPTGradient.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6801BC83F2A0091C8F7 /* _CPTAnimationCGPointPeriod.h in Headers */ = {isa = PBXBuildFile; fileRef = A92C0E154E8598EDE2EDEF2F /* _CPTAnimationCGPointPeriod.h */; }; - C37EA6811BC83F2A0091C8F7 /* _NSDecimalNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CD7E7EE0F4B4FA700F9BCBB /* _NSDecimalNumberExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C37EA6811BC83F2A0091C8F7 /* _NSDecimalNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CD7E7EE0F4B4FA700F9BCBB /* _NSDecimalNumberExtensions.h */; }; C37EA6821BC83F2A0091C8F7 /* CPTAxis.h in Headers */ = {isa = PBXBuildFile; fileRef = 07975C470F3B818800DE45DC /* CPTAxis.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6831BC83F2A0091C8F7 /* CPTPlatformSpecificFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = C38A0B1C1A46264500D45436 /* CPTPlatformSpecificFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA6841BC83F2A0091C8F7 /* CPTAnnotationHostLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 072161E911D1F6BD009CC871 /* CPTAnnotationHostLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -402,7 +402,7 @@ C37EA68A1BC83F2A0091C8F7 /* CPTPlatformSpecificDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = C38A0B1A1A46264500D45436 /* CPTPlatformSpecificDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA68B1BC83F2A0091C8F7 /* CPTBarPlot.h in Headers */ = {isa = PBXBuildFile; fileRef = 0799E0930F2BB5F300790525 /* CPTBarPlot.h */; settings = {ATTRIBUTES = (Public, ); }; }; C37EA68C1BC83F2A0091C8F7 /* CPTUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 07321BC40F37382D00F423D8 /* CPTUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C37EA68D1BC83F2A0091C8F7 /* _CPTConstraintsFixed.h in Headers */ = {isa = PBXBuildFile; fileRef = C3CCA03913E8D85800CE6DB1 /* _CPTConstraintsFixed.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C37EA68D1BC83F2A0091C8F7 /* _CPTConstraintsFixed.h in Headers */ = {isa = PBXBuildFile; fileRef = C3CCA03913E8D85800CE6DB1 /* _CPTConstraintsFixed.h */; }; C37EA6981BC83F2D0091C8F7 /* CPTMutableNumericDataTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3CADDC611B167AD00D36017 /* CPTMutableNumericDataTests.m */; }; C37EA6991BC83F2D0091C8F7 /* CPTColorSpaceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979AE13D2337E00145DFF /* CPTColorSpaceTests.m */; }; C37EA69A1BC83F2D0091C8F7 /* CPTFillTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979BA13D2347300145DFF /* CPTFillTests.m */; }; @@ -495,9 +495,9 @@ C38A0A3C1A461EDF00D45436 /* CPTAnnotationHostLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 072161EA11D1F6BD009CC871 /* CPTAnnotationHostLayer.m */; }; C38A0A3E1A461EE600D45436 /* CPTConstraints.h in Headers */ = {isa = PBXBuildFile; fileRef = 070064E7111F2BAA003DE087 /* CPTConstraints.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0A3F1A461EEB00D45436 /* CPTConstraints.m in Sources */ = {isa = PBXBuildFile; fileRef = 070064E8111F2BAA003DE087 /* CPTConstraints.m */; }; - C38A0A411A461EEE00D45436 /* _CPTConstraintsFixed.h in Headers */ = {isa = PBXBuildFile; fileRef = C3CCA03913E8D85800CE6DB1 /* _CPTConstraintsFixed.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C38A0A411A461EEE00D45436 /* _CPTConstraintsFixed.h in Headers */ = {isa = PBXBuildFile; fileRef = C3CCA03913E8D85800CE6DB1 /* _CPTConstraintsFixed.h */; }; C38A0A421A461EF500D45436 /* _CPTConstraintsFixed.m in Sources */ = {isa = PBXBuildFile; fileRef = C3CCA03A13E8D85800CE6DB1 /* _CPTConstraintsFixed.m */; }; - C38A0A441A461EFA00D45436 /* _CPTConstraintsRelative.h in Headers */ = {isa = PBXBuildFile; fileRef = C3CCA03B13E8D85800CE6DB1 /* _CPTConstraintsRelative.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C38A0A441A461EFA00D45436 /* _CPTConstraintsRelative.h in Headers */ = {isa = PBXBuildFile; fileRef = C3CCA03B13E8D85800CE6DB1 /* _CPTConstraintsRelative.h */; }; C38A0A451A461F0100D45436 /* _CPTConstraintsRelative.m in Sources */ = {isa = PBXBuildFile; fileRef = C3CCA03C13E8D85800CE6DB1 /* _CPTConstraintsRelative.m */; }; C38A0A471A461F0C00D45436 /* CPTTextLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CD7E7E50F4B4F8200F9BCBB /* CPTTextLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0A481A461F1100D45436 /* CPTTextLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7E7E60F4B4F8200F9BCBB /* CPTTextLayer.m */; }; @@ -530,9 +530,9 @@ C38A0A6E1A4620E200D45436 /* CPTShadow.m in Sources */ = {isa = PBXBuildFile; fileRef = C32EE1B513EC4AA800038266 /* CPTShadow.m */; }; C38A0A6F1A4620E200D45436 /* CPTMutableShadow.m in Sources */ = {isa = PBXBuildFile; fileRef = C32EE1C013EC4BE700038266 /* CPTMutableShadow.m */; }; C38A0A7A1A4620E800D45436 /* CPTFill.h in Headers */ = {isa = PBXBuildFile; fileRef = C342601F0FAE096C00072842 /* CPTFill.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C38A0A7B1A4620EF00D45436 /* _CPTFillColor.h in Headers */ = {isa = PBXBuildFile; fileRef = C342601B0FAE096C00072842 /* _CPTFillColor.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C38A0A7C1A4620EF00D45436 /* _CPTFillGradient.h in Headers */ = {isa = PBXBuildFile; fileRef = C342601E0FAE096C00072842 /* _CPTFillGradient.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C38A0A7D1A4620EF00D45436 /* _CPTFillImage.h in Headers */ = {isa = PBXBuildFile; fileRef = C34260180FAE096C00072842 /* _CPTFillImage.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C38A0A7B1A4620EF00D45436 /* _CPTFillColor.h in Headers */ = {isa = PBXBuildFile; fileRef = C342601B0FAE096C00072842 /* _CPTFillColor.h */; }; + C38A0A7C1A4620EF00D45436 /* _CPTFillGradient.h in Headers */ = {isa = PBXBuildFile; fileRef = C342601E0FAE096C00072842 /* _CPTFillGradient.h */; }; + C38A0A7D1A4620EF00D45436 /* _CPTFillImage.h in Headers */ = {isa = PBXBuildFile; fileRef = C34260180FAE096C00072842 /* _CPTFillImage.h */; }; C38A0A7E1A4620F700D45436 /* CPTFill.m in Sources */ = {isa = PBXBuildFile; fileRef = C342601A0FAE096C00072842 /* CPTFill.m */; }; C38A0A7F1A4620F700D45436 /* _CPTFillColor.m in Sources */ = {isa = PBXBuildFile; fileRef = C342601C0FAE096C00072842 /* _CPTFillColor.m */; }; C38A0A801A4620F700D45436 /* _CPTFillGradient.m in Sources */ = {isa = PBXBuildFile; fileRef = C34260190FAE096C00072842 /* _CPTFillGradient.m */; }; @@ -548,9 +548,9 @@ C38A0A971A46219100D45436 /* CPTCalendarFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = C349DCB3151AAFBF00BFD6A7 /* CPTCalendarFormatter.m */; }; C38A0A981A46219100D45436 /* CPTTimeFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 07A2E6FB102DF47900809BC5 /* CPTTimeFormatter.m */; }; C38A0A9B1A46219600D45436 /* CPTTimeFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979A813D2328000145DFF /* CPTTimeFormatterTests.m */; }; - C38A0A9D1A4621A500D45436 /* _NSCoderExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = C3978E0413CE653B00A420D9 /* _NSCoderExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C38A0A9E1A4621A500D45436 /* _NSDecimalNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CD7E7EE0F4B4FA700F9BCBB /* _NSDecimalNumberExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C38A0A9F1A4621A500D45436 /* _NSNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 078F42D90FACC075006E670B /* _NSNumberExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C38A0A9D1A4621A500D45436 /* _NSCoderExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = C3978E0413CE653B00A420D9 /* _NSCoderExtensions.h */; }; + C38A0A9E1A4621A500D45436 /* _NSDecimalNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CD7E7EE0F4B4FA700F9BCBB /* _NSDecimalNumberExtensions.h */; }; + C38A0A9F1A4621A500D45436 /* _NSNumberExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 078F42D90FACC075006E670B /* _NSNumberExtensions.h */; }; C38A0AA01A4621AC00D45436 /* _NSCoderExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = C3978E0513CE653B00A420D9 /* _NSCoderExtensions.m */; }; C38A0AA11A4621AC00D45436 /* _NSDecimalNumberExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7E7EF0F4B4FA700F9BCBB /* _NSDecimalNumberExtensions.m */; }; C38A0AA21A4621AC00D45436 /* _NSNumberExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 078F42DA0FACC075006E670B /* _NSNumberExtensions.m */; }; @@ -570,7 +570,7 @@ C38A0AB91A46250500D45436 /* CPTXYPlotSpace.m in Sources */ = {isa = PBXBuildFile; fileRef = 90AF4FB90F36D39700753D26 /* CPTXYPlotSpace.m */; }; C38A0ABC1A46250B00D45436 /* CPTPlotSpaceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979A313D2136600145DFF /* CPTPlotSpaceTests.m */; }; C38A0ABD1A46250B00D45436 /* CPTXYPlotSpaceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C422A630FB1FCD5000CAA43 /* CPTXYPlotSpaceTests.m */; }; - C38A0AC01A46254E00D45436 /* _CPTPlotGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F31DE81045EB470058520A /* _CPTPlotGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C38A0AC01A46254E00D45436 /* _CPTPlotGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F31DE81045EB470058520A /* _CPTPlotGroup.h */; }; C38A0AC11A46255C00D45436 /* CPTPlot.h in Headers */ = {isa = PBXBuildFile; fileRef = 07BF0D7E0F2B72F6002FCEA7 /* CPTPlot.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0AC21A46255C00D45436 /* CPTBarPlot.h in Headers */ = {isa = PBXBuildFile; fileRef = 0799E0930F2BB5F300790525 /* CPTBarPlot.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0AC31A46255C00D45436 /* CPTPieChart.h in Headers */ = {isa = PBXBuildFile; fileRef = BC74A32E10FC402600E7E90D /* CPTPieChart.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -587,9 +587,9 @@ C38A0AD51A46256B00D45436 /* CPTPlotSymbol.h in Headers */ = {isa = PBXBuildFile; fileRef = C34AFE6911021D010041675A /* CPTPlotSymbol.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0AD61A46257100D45436 /* CPTPlotSymbol.m in Sources */ = {isa = PBXBuildFile; fileRef = C34AFE6A11021D010041675A /* CPTPlotSymbol.m */; }; C38A0AD81A46257600D45436 /* CPTScatterPlotTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 07FEBD61110B7E8B00E44D37 /* CPTScatterPlotTests.m */; }; - C38A0ADA1A4625B100D45436 /* _CPTGridLines.h in Headers */ = {isa = PBXBuildFile; fileRef = C32B391610AA4C78000470D4 /* _CPTGridLines.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C38A0ADB1A4625B100D45436 /* _CPTGridLineGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C38DD49111A04B7A002A68E7 /* _CPTGridLineGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C38A0ADC1A4625C100D45436 /* _CPTAxisLabelGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C032C710B8DEDC003A11B6 /* _CPTAxisLabelGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C38A0ADA1A4625B100D45436 /* _CPTGridLines.h in Headers */ = {isa = PBXBuildFile; fileRef = C32B391610AA4C78000470D4 /* _CPTGridLines.h */; }; + C38A0ADB1A4625B100D45436 /* _CPTGridLineGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C38DD49111A04B7A002A68E7 /* _CPTGridLineGroup.h */; }; + C38A0ADC1A4625C100D45436 /* _CPTAxisLabelGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C032C710B8DEDC003A11B6 /* _CPTAxisLabelGroup.h */; }; C38A0ADD1A4625C900D45436 /* CPTAxisLabelTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD23FFB0FFBE78400ADD2E2 /* CPTAxisLabelTests.m */; }; C38A0ADF1A4625D400D45436 /* CPTAxis.m in Sources */ = {isa = PBXBuildFile; fileRef = 07975C480F3B818800DE45DC /* CPTAxis.m */; }; C38A0AE01A4625D400D45436 /* CPTAxisSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 07BF0D830F2B7340002FCEA7 /* CPTAxisSet.m */; }; @@ -611,12 +611,12 @@ C38A0AF91A4625FA00D45436 /* CPTLegend.m in Sources */ = {isa = PBXBuildFile; fileRef = C3920AC31395B6500045F3BB /* CPTLegend.m */; }; C38A0AFA1A4625FA00D45436 /* CPTLegendEntry.m in Sources */ = {isa = PBXBuildFile; fileRef = C30550EC1399BE5400E0151F /* CPTLegendEntry.m */; }; C38A0AFD1A46260300D45436 /* CPTTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = 0772C9250FE2F71600EC4C16 /* CPTTheme.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C38A0AFE1A46260B00D45436 /* _CPTXYTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = C3DA34CB107AD7710051DA02 /* _CPTXYTheme.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C38A0AFF1A46260B00D45436 /* _CPTDarkGradientTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = 0772C92D0FE2F89000EC4C16 /* _CPTDarkGradientTheme.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C38A0B001A46260B00D45436 /* _CPTPlainBlackTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = BC55022C10059F22005DF982 /* _CPTPlainBlackTheme.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C38A0B011A46260B00D45436 /* _CPTPlainWhiteTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = BC55022E10059F22005DF982 /* _CPTPlainWhiteTheme.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C38A0B021A46260B00D45436 /* _CPTSlateTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = 07FCF2C4115B54AE00E46606 /* _CPTSlateTheme.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C38A0B031A46260B00D45436 /* _CPTStocksTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = BC55023010059F22005DF982 /* _CPTStocksTheme.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C38A0AFE1A46260B00D45436 /* _CPTXYTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = C3DA34CB107AD7710051DA02 /* _CPTXYTheme.h */; }; + C38A0AFF1A46260B00D45436 /* _CPTDarkGradientTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = 0772C92D0FE2F89000EC4C16 /* _CPTDarkGradientTheme.h */; }; + C38A0B001A46260B00D45436 /* _CPTPlainBlackTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = BC55022C10059F22005DF982 /* _CPTPlainBlackTheme.h */; }; + C38A0B011A46260B00D45436 /* _CPTPlainWhiteTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = BC55022E10059F22005DF982 /* _CPTPlainWhiteTheme.h */; }; + C38A0B021A46260B00D45436 /* _CPTSlateTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = 07FCF2C4115B54AE00E46606 /* _CPTSlateTheme.h */; }; + C38A0B031A46260B00D45436 /* _CPTStocksTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = BC55023010059F22005DF982 /* _CPTStocksTheme.h */; }; C38A0B041A46261700D45436 /* CPTTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = 0772C9260FE2F71600EC4C16 /* CPTTheme.m */; }; C38A0B051A46261700D45436 /* _CPTXYTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = C3DA34CA107AD7710051DA02 /* _CPTXYTheme.m */; }; C38A0B061A46261700D45436 /* _CPTDarkGradientTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = 0772C92E0FE2F89000EC4C16 /* _CPTDarkGradientTheme.m */; }; @@ -635,11 +635,11 @@ C38A0B251A46264500D45436 /* CPTPlatformSpecificFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = C38A0B1D1A46264500D45436 /* CPTPlatformSpecificFunctions.m */; }; C38A0B291A46265300D45436 /* CPTGraphHostingView.h in Headers */ = {isa = PBXBuildFile; fileRef = C38A0B271A46265300D45436 /* CPTGraphHostingView.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38A0B2A1A46265300D45436 /* CPTGraphHostingView.m in Sources */ = {isa = PBXBuildFile; fileRef = C38A0B281A46265300D45436 /* CPTGraphHostingView.m */; }; - C38DD49311A04B7A002A68E7 /* _CPTGridLineGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C38DD49111A04B7A002A68E7 /* _CPTGridLineGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C38DD49311A04B7A002A68E7 /* _CPTGridLineGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C38DD49111A04B7A002A68E7 /* _CPTGridLineGroup.h */; }; C38DD49411A04B7A002A68E7 /* _CPTGridLineGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C38DD49211A04B7A002A68E7 /* _CPTGridLineGroup.m */; }; C3920AC41395B6500045F3BB /* CPTLegend.h in Headers */ = {isa = PBXBuildFile; fileRef = C3920AC21395B6500045F3BB /* CPTLegend.h */; settings = {ATTRIBUTES = (Public, ); }; }; C3920AC51395B6500045F3BB /* CPTLegend.m in Sources */ = {isa = PBXBuildFile; fileRef = C3920AC31395B6500045F3BB /* CPTLegend.m */; }; - C3978E0613CE653C00A420D9 /* _NSCoderExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = C3978E0413CE653B00A420D9 /* _NSCoderExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C3978E0613CE653C00A420D9 /* _NSCoderExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = C3978E0413CE653B00A420D9 /* _NSCoderExtensions.h */; }; C3978E0713CE653C00A420D9 /* _NSCoderExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = C3978E0513CE653B00A420D9 /* _NSCoderExtensions.m */; }; C3A695E5146A19BC00AF5653 /* CPTMutablePlotRange.h in Headers */ = {isa = PBXBuildFile; fileRef = C3A695E3146A19BC00AF5653 /* CPTMutablePlotRange.h */; settings = {ATTRIBUTES = (Public, ); }; }; C3A695E6146A19BC00AF5653 /* CPTMutablePlotRange.m in Sources */ = {isa = PBXBuildFile; fileRef = C3A695E4146A19BC00AF5653 /* CPTMutablePlotRange.m */; }; @@ -664,9 +664,9 @@ C3CAFB261229E41F00F5C989 /* CPTMutableNumericData+TypeConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = C3CAFB241229E41F00F5C989 /* CPTMutableNumericData+TypeConversion.h */; settings = {ATTRIBUTES = (Public, ); }; }; C3CAFB6B1229F5FB00F5C989 /* CPTMutableNumericData+TypeConversion.m in Sources */ = {isa = PBXBuildFile; fileRef = C3CAFB251229E41F00F5C989 /* CPTMutableNumericData+TypeConversion.m */; }; C3CB561C122A9E9F00FBFB61 /* CPTMutableNumericDataTypeConversionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3CB561B122A9E9F00FBFB61 /* CPTMutableNumericDataTypeConversionTests.m */; }; - C3CCA03D13E8D85900CE6DB1 /* _CPTConstraintsFixed.h in Headers */ = {isa = PBXBuildFile; fileRef = C3CCA03913E8D85800CE6DB1 /* _CPTConstraintsFixed.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C3CCA03D13E8D85900CE6DB1 /* _CPTConstraintsFixed.h in Headers */ = {isa = PBXBuildFile; fileRef = C3CCA03913E8D85800CE6DB1 /* _CPTConstraintsFixed.h */; }; C3CCA03E13E8D85900CE6DB1 /* _CPTConstraintsFixed.m in Sources */ = {isa = PBXBuildFile; fileRef = C3CCA03A13E8D85800CE6DB1 /* _CPTConstraintsFixed.m */; }; - C3CCA03F13E8D85900CE6DB1 /* _CPTConstraintsRelative.h in Headers */ = {isa = PBXBuildFile; fileRef = C3CCA03B13E8D85800CE6DB1 /* _CPTConstraintsRelative.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C3CCA03F13E8D85900CE6DB1 /* _CPTConstraintsRelative.h in Headers */ = {isa = PBXBuildFile; fileRef = C3CCA03B13E8D85800CE6DB1 /* _CPTConstraintsRelative.h */; }; C3CCA04013E8D85900CE6DB1 /* _CPTConstraintsRelative.m in Sources */ = {isa = PBXBuildFile; fileRef = C3CCA03C13E8D85800CE6DB1 /* _CPTConstraintsRelative.m */; }; C3D375ED1659474C003CC156 /* CPTAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C2846F16584EB9006BA43C /* CPTAnimation.h */; settings = {ATTRIBUTES = (Public, ); }; }; C3D375EF1659474F003CC156 /* CPTAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C2847016584EB9006BA43C /* CPTAnimation.m */; }; @@ -696,16 +696,13 @@ C3D979B813D2344100145DFF /* CPTLineStyleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979B713D2344000145DFF /* CPTLineStyleTests.m */; }; C3D979BB13D2347400145DFF /* CPTFillTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D979BA13D2347300145DFF /* CPTFillTests.m */; }; C3DA34CC107AD7710051DA02 /* _CPTXYTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = C3DA34CA107AD7710051DA02 /* _CPTXYTheme.m */; }; - C3DA34CD107AD7710051DA02 /* _CPTXYTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = C3DA34CB107AD7710051DA02 /* _CPTXYTheme.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C3E31A9929EF7E4A00310131 /* _CorePlot_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E31A9829EF7E4A00310131 /* _CorePlot_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C3E31A9A29EF7E4A00310131 /* _CorePlot_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E31A9829EF7E4A00310131 /* _CorePlot_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C3E31A9B29EF7E4A00310131 /* _CorePlot_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E31A9829EF7E4A00310131 /* _CorePlot_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C3DA34CD107AD7710051DA02 /* _CPTXYTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = C3DA34CB107AD7710051DA02 /* _CPTXYTheme.h */; }; C3EE4E6E1A6C15890098F4E6 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07BF0D630F2B70B8002FCEA7 /* QuartzCore.framework */; }; C3EE4E981A6C1E890098F4E6 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3EE4E971A6C1E890098F4E6 /* Cocoa.framework */; }; C3EE4E9A1A6C1F770098F4E6 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07BF0D630F2B70B8002FCEA7 /* QuartzCore.framework */; }; C3EE4E9B1A6C1F8A0098F4E6 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3EE4E971A6C1E890098F4E6 /* Cocoa.framework */; }; C3F31DE91045EB470058520A /* _CPTPlotGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F31DE71045EB470058520A /* _CPTPlotGroup.m */; }; - C3F31DEA1045EB470058520A /* _CPTPlotGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F31DE81045EB470058520A /* _CPTPlotGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C3F31DEA1045EB470058520A /* _CPTPlotGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F31DE81045EB470058520A /* _CPTPlotGroup.h */; }; C3F97F1E17A9E07C00A52FF2 /* CPTFunctionDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F97F1C17A9E07B00A52FF2 /* CPTFunctionDataSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; C3F97F1F17A9E07C00A52FF2 /* CPTFunctionDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F97F1D17A9E07B00A52FF2 /* CPTFunctionDataSource.m */; }; D0C0477D12D6560900DA8047 /* CPTRangePlot.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C0477B12D6560900DA8047 /* CPTRangePlot.m */; }; @@ -956,8 +953,6 @@ C37A406520E02BA100C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/CorePlot-CocoaTouchTests-Info.plist"; sourceTree = ""; }; C37A406720E02BA500C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/CorePlot-iOSTests-Info.plist"; sourceTree = ""; }; C37A406920E02BE900C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/CorePlotTests-Info.plist"; sourceTree = ""; }; - C37A9AB429C69796003B4338 /* _CorePlot_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _CorePlot_Private.h; sourceTree = ""; }; - C37A9AB829C698A7003B4338 /* module.private.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.private.modulemap; sourceTree = ""; }; C37A9AB929C698A7003B4338 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = ""; }; C37EA6921BC83F2A0091C8F7 /* CorePlot.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CorePlot.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C37EA6B71BC83F2D0091C8F7 /* UnitTests tvOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "UnitTests tvOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -989,7 +984,6 @@ C3B0E7B329CA7B3200FC94B5 /* CorePlotReleaseModule.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotReleaseModule.xcconfig; path = xcconfig/CorePlotReleaseModule.xcconfig; sourceTree = ""; }; C3B0E7B429CA7B6000FC94B5 /* CorePlotModule.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotModule.xcconfig; path = xcconfig/CorePlotModule.xcconfig; sourceTree = ""; }; C3B235631009931400970270 /* doxygen-cocoa-tags.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = "doxygen-cocoa-tags.xml"; path = "../documentation/doxygen/doxygen-cocoa-tags.xml"; sourceTree = ""; }; - C3B25EDF1AC23A7D0063CCD8 /* CorePlot.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CorePlot.h; sourceTree = ""; }; C3BB3C8C1C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTAnimationNSNumberPeriod.h; sourceTree = ""; }; C3BB3C8D1C1661BE00B8742D /* _CPTAnimationNSNumberPeriod.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = _CPTAnimationNSNumberPeriod.m; sourceTree = ""; }; C3BB93181B729BD200004527 /* _CPTDebugQuickLook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTDebugQuickLook.h; sourceTree = ""; }; @@ -1046,9 +1040,7 @@ C3D979BA13D2347300145DFF /* CPTFillTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTFillTests.m; sourceTree = ""; }; C3DA34CA107AD7710051DA02 /* _CPTXYTheme.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTXYTheme.m; sourceTree = ""; }; C3DA34CB107AD7710051DA02 /* _CPTXYTheme.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTXYTheme.h; sourceTree = ""; }; - C3E31A9829EF7E4A00310131 /* _CorePlot_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CorePlot_Private.h; sourceTree = ""; }; C3EE4E971A6C1E890098F4E6 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; - C3F244BF28DBCABB008DB9A1 /* CorePlot.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CorePlot.h; sourceTree = ""; }; C3F31DE71045EB470058520A /* _CPTPlotGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTPlotGroup.m; sourceTree = ""; }; C3F31DE81045EB470058520A /* _CPTPlotGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTPlotGroup.h; sourceTree = ""; }; C3F97F1C17A9E07B00A52FF2 /* CPTFunctionDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTFunctionDataSource.h; sourceTree = ""; }; @@ -1419,8 +1411,6 @@ C38A0AA61A4621BC00D45436 /* Platform Specific */, 9021E4920FC5C6DD00443472 /* Documentation */, C3D0F67429C604EF00190D2C /* Scripts */, - C3B25EDE1AC23A7D0063CCD8 /* CocoaPods */, - C3F244BE28DBCABB008DB9A1 /* SPM Umbrella Header */, C37A9AB729C698A7003B4338 /* Module */, 32C88DFF0371C24200C91783 /* Other Sources */, 089C1665FE841158C02AAC07 /* Resources */, @@ -1468,7 +1458,6 @@ children = ( 32DBCF5E0370ADEE00C91783 /* CorePlot_Prefix.pch */, 070CF7AE0F3CA7AB0001FFF4 /* CorePlot.h */, - C3E31A9829EF7E4A00310131 /* _CorePlot_Private.h */, C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */, C3B0E7B229CA7B3200FC94B5 /* CorePlotDebugModule.xcconfig */, C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */, @@ -1646,7 +1635,6 @@ C37A9AB729C698A7003B4338 /* Module */ = { isa = PBXGroup; children = ( - C37A9AB829C698A7003B4338 /* module.private.modulemap */, C37A9AB929C698A7003B4338 /* module.modulemap */, ); path = Module; @@ -1706,14 +1694,6 @@ name = iOS; sourceTree = ""; }; - C3B25EDE1AC23A7D0063CCD8 /* CocoaPods */ = { - isa = PBXGroup; - children = ( - C3B25EDF1AC23A7D0063CCD8 /* CorePlot.h */, - ); - path = CocoaPods; - sourceTree = ""; - }; C3C032C510B8DE87003A11B6 /* Labels */ = { isa = PBXGroup; children = ( @@ -1809,15 +1789,6 @@ name = Tests; sourceTree = ""; }; - C3F244BE28DBCABB008DB9A1 /* SPM Umbrella Header */ = { - isa = PBXGroup; - children = ( - C3F244BF28DBCABB008DB9A1 /* CorePlot.h */, - C37A9AB429C69796003B4338 /* _CorePlot_Private.h */, - ); - path = "SPM Umbrella Header"; - sourceTree = ""; - }; E1620CBB100F034700A84E77 /* Tests */ = { isa = PBXGroup; children = ( @@ -1838,7 +1809,6 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - C3E31A9929EF7E4A00310131 /* _CorePlot_Private.h in Headers */, 070CF7B00F3CA7AB0001FFF4 /* CorePlot.h in Headers */, 07BF0D720F2B718F002FCEA7 /* CPTGraph.h in Headers */, 07BF0D780F2B723A002FCEA7 /* CPTPlotAreaFrame.h in Headers */, @@ -2002,7 +1972,6 @@ C37EA6661BC83F2A0091C8F7 /* _CPTXYTheme.h in Headers */, C37EA6671BC83F2A0091C8F7 /* CPTLayerAnnotation.h in Headers */, C37EA6681BC83F2A0091C8F7 /* _CPTAnimationCGFloatPeriod.h in Headers */, - C3E31A9B29EF7E4A00310131 /* _CorePlot_Private.h in Headers */, C37EA6691BC83F2A0091C8F7 /* CPTAxisTitle.h in Headers */, C37EA66A1BC83F2A0091C8F7 /* _CPTSlateTheme.h in Headers */, C37EA66B1BC83F2A0091C8F7 /* CPTMutableNumericData.h in Headers */, @@ -2106,7 +2075,6 @@ C38A0AFE1A46260B00D45436 /* _CPTXYTheme.h in Headers */, C38A0A381A461ED000D45436 /* CPTLayerAnnotation.h in Headers */, C38A0A1D1A461E6E00D45436 /* _CPTAnimationCGFloatPeriod.h in Headers */, - C3E31A9A29EF7E4A00310131 /* _CorePlot_Private.h in Headers */, C38A0AF41A4625E800D45436 /* CPTAxisTitle.h in Headers */, C38A0B021A46260B00D45436 /* _CPTSlateTheme.h in Headers */, C3D414781A7D829100B6F5D6 /* CPTMutableNumericData.h in Headers */, diff --git a/framework/Module/module.private.modulemap b/framework/Module/module.private.modulemap deleted file mode 100644 index 106ad515d..000000000 --- a/framework/Module/module.private.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module CorePlot_Private { - umbrella header "_CorePlot_Private.h" - - export * - module * { export * } -} diff --git a/framework/SPM Umbrella Header/CorePlot.h b/framework/SPM Umbrella Header/CorePlot.h deleted file mode 100644 index 4be4415a4..000000000 --- a/framework/SPM Umbrella Header/CorePlot.h +++ /dev/null @@ -1,80 +0,0 @@ -#import - -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST - -#import -#import - -#else - -#import - -#import "CPTDecimalNumberValueTransformer.h" - -#endif - -#import "CPTAnimation.h" -#import "CPTAnimationOperation.h" -#import "CPTAnimationPeriod.h" -#import "CPTAnnotation.h" -#import "CPTAnnotationHostLayer.h" -#import "CPTAxis.h" -#import "CPTAxisLabel.h" -#import "CPTAxisSet.h" -#import "CPTAxisTitle.h" -#import "CPTBarPlot.h" -#import "CPTBorderedLayer.h" -#import "CPTCalendarFormatter.h" -#import "CPTColor.h" -#import "CPTColorSpace.h" -#import "CPTConstraints.h" -#import "CPTDefinitions.h" -#import "CPTExceptions.h" -#import "CPTFill.h" -#import "CPTFunctionDataSource.h" -#import "CPTGradient.h" -#import "CPTGraph.h" -#import "CPTGraphHostingView.h" -#import "CPTImage.h" -#import "CPTLayer.h" -#import "CPTLayerAnnotation.h" -#import "CPTLegend.h" -#import "CPTLegendEntry.h" -#import "CPTLimitBand.h" -#import "CPTLineCap.h" -#import "CPTLineStyle.h" -#import "CPTMutableLineStyle.h" -#import "CPTMutableNumericData+TypeConversion.h" -#import "CPTMutableNumericData.h" -#import "CPTMutablePlotRange.h" -#import "CPTMutableShadow.h" -#import "CPTMutableTextStyle.h" -#import "CPTNumericData+TypeConversion.h" -#import "CPTNumericData.h" -#import "CPTNumericDataType.h" -#import "CPTPathExtensions.h" -#import "CPTPieChart.h" -#import "CPTPlatformSpecificCategories.h" -#import "CPTPlatformSpecificDefines.h" -#import "CPTPlatformSpecificFunctions.h" -#import "CPTPlot.h" -#import "CPTPlotArea.h" -#import "CPTPlotAreaFrame.h" -#import "CPTPlotRange.h" -#import "CPTPlotSpace.h" -#import "CPTPlotSpaceAnnotation.h" -#import "CPTPlotSymbol.h" -#import "CPTRangePlot.h" -#import "CPTResponder.h" -#import "CPTScatterPlot.h" -#import "CPTShadow.h" -#import "CPTTextLayer.h" -#import "CPTTextStyle.h" -#import "CPTTheme.h" -#import "CPTTimeFormatter.h" -#import "CPTTradingRangePlot.h" -#import "CPTUtilities.h" -#import "CPTXYAxis.h" -#import "CPTXYAxisSet.h" -#import "CPTXYGraph.h" -#import "CPTXYPlotSpace.h" diff --git a/framework/SPM Umbrella Header/_CorePlot_Private.h b/framework/SPM Umbrella Header/_CorePlot_Private.h deleted file mode 100644 index 022f4cfda..000000000 --- a/framework/SPM Umbrella Header/_CorePlot_Private.h +++ /dev/null @@ -1,21 +0,0 @@ -#import - -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST - -#import -#import - -#else - -#import - -#endif - -#import "_CPTAxisLabelGroup.h" -#import "_CPTGridLineGroup.h" -#import "_CPTGridLines.h" -#import "_CPTPlotGroup.h" - -#import "_NSCoderExtensions.h" -#import "_NSDecimalNumberExtensions.h" -#import "_NSNumberExtensions.h" diff --git a/framework/_CorePlot_Private.h b/framework/_CorePlot_Private.h deleted file mode 100644 index 5e15597e0..000000000 --- a/framework/_CorePlot_Private.h +++ /dev/null @@ -1,36 +0,0 @@ -#define CPT_IS_FRAMEWORK - -#import - -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST - -#import -#import - -#else - -#import - -#endif - -#import -#import -#import -#import - -#import -#import - -#import -#import -#import - -#import -#import -#import -#import -#import - -#import -#import -#import diff --git a/framework/xcconfig/CorePlotModule.xcconfig b/framework/xcconfig/CorePlotModule.xcconfig index 11b158c3c..b71ea8e6a 100644 --- a/framework/xcconfig/CorePlotModule.xcconfig +++ b/framework/xcconfig/CorePlotModule.xcconfig @@ -4,5 +4,4 @@ ENABLE_MODULE_VERIFIER = YES MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = c99 MODULE_VERIFIER_SUPPORTED_LANGUAGES = objective-c MODULEMAP_FILE = $(SOURCE_ROOT)/Module/module.modulemap -MODULEMAP_PRIVATE_FILE = $(SOURCE_ROOT)/Module/module.private.modulemap PRODUCT_MODULE_NAME = $(PRODUCT_NAME:rfc1034identifier) diff --git a/scripts/generate_spm_sources_layout.sh b/scripts/generate_spm_sources_layout.sh index 4ba8b0652..8b731317e 100755 --- a/scripts/generate_spm_sources_layout.sh +++ b/scripts/generate_spm_sources_layout.sh @@ -25,8 +25,6 @@ function generate_spm_public_headers() { -type f \ -name "*.[h]" \ -not -path "*/build/*" \ - -not -path "framework/CorePlot.h" \ - -not -path "framework/CocoaPods/CorePlot.h" \ -not -name "*Test*.[hm]" \ -not -name "_*.[hm]" \ -not -name "mainpage.h" \ @@ -59,7 +57,6 @@ function generate_spm_private_sources() { -type f \ -name "_*.[mh]" \ -not -path "*/build/*" \ - -not -path "framework/_CorePlot_Private.h" \ | sed "s| \([^/]\)|:\1|g" ) @@ -90,8 +87,6 @@ function generate_spm_public_sources() { -type f \ -name "*.[m]" \ -not -path "*/build/*" \ - -not -path "framework/CorePlot.h" \ - -not -path "framework/CocoaPods/CorePlot.h" \ -not -name "*Test*.[hm]" \ -not -name "_*.[hm]" \ | sed "s| \([^/]\)|:\1|g" diff --git a/spm/Sources/core-plot/_CorePlot_Private.h b/spm/Sources/core-plot/_CorePlot_Private.h deleted file mode 120000 index 5cfab1d11..000000000 --- a/spm/Sources/core-plot/_CorePlot_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../framework/SPM Umbrella Header/_CorePlot_Private.h \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CorePlot.h b/spm/Sources/core-plot/include/CorePlot.h index d9d423c2a..effe6a666 120000 --- a/spm/Sources/core-plot/include/CorePlot.h +++ b/spm/Sources/core-plot/include/CorePlot.h @@ -1 +1 @@ -../../../../framework/SPM Umbrella Header/CorePlot.h \ No newline at end of file +../../../../framework/CorePlot.h \ No newline at end of file From e5f3a69749842eda01b53bd65575a0851ae4c7e4 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Fri, 7 Jul 2023 19:57:59 -0400 Subject: [PATCH 200/245] Consolidated various settings into .xcconfig files and updated all projects for Xcode 15 beta 3. --- .../CPTTestApp-iPad.xcodeproj/project.pbxproj | 6 +-- .../project.pbxproj | 6 +-- .../CPTTestApp.xcodeproj/project.pbxproj | 6 +-- .../Plot_Gallery.xcodeproj/project.pbxproj | 28 +++++----- .../xcschemes/Plot Gallery-Mac.xcscheme | 8 +-- .../DatePlot.xcodeproj/project.pbxproj | 6 +-- .../DropPlot.xcodeproj/project.pbxproj | 6 +-- .../project.pbxproj | 6 +-- .../RangePlot.xcodeproj/project.pbxproj | 6 +-- framework/CorePlot.xcodeproj/project.pbxproj | 52 ++++--------------- .../xcschemes/CorePlot Mac.xcscheme | 2 +- .../xcconfig/CorePlotDebugModule.xcconfig | 2 +- .../xcconfig/CorePlotDocumentation.xcconfig | 3 ++ framework/xcconfig/CorePlotModule.xcconfig | 2 + .../xcconfig/CorePlotReleaseModule.xcconfig | 2 +- framework/xcconfig/CorePlotWarnings.xcconfig | 2 + 16 files changed, 51 insertions(+), 92 deletions(-) create mode 100644 framework/xcconfig/CorePlotDocumentation.xcconfig diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj index 14c7e562f..4e20ea3f5 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 53; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -249,7 +249,7 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = YES; - LastUpgradeCheck = 1430; + LastUpgradeCheck = 1500; TargetAttributes = { 1D6058900D05DD3D006BFB54 = { ProvisioningStyle = Manual; @@ -411,7 +411,6 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_NAME = "CPTTestApp-iPad"; }; name = Debug; }; @@ -426,7 +425,6 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_NAME = "CPTTestApp-iPad"; }; name = Release; }; diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj index 260e2dad2..6eb7b8209 100644 --- a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 53; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -261,7 +261,7 @@ attributes = { BuildIndependentTargetsInParallel = YES; LastSwiftUpdateCheck = 0700; - LastUpgradeCheck = 1430; + LastUpgradeCheck = 1500; TargetAttributes = { 1D6058900D05DD3D006BFB54 = { LastSwiftMigration = 1020; @@ -445,7 +445,6 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_NAME = "CPTTestApp-iPhone"; }; name = Debug; }; @@ -460,7 +459,6 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_NAME = "CPTTestApp-iPhone"; }; name = Release; }; diff --git a/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj b/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj index d6a580e23..0ecd6f6ca 100644 --- a/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 53; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -279,7 +279,7 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = YES; - LastUpgradeCheck = 1430; + LastUpgradeCheck = 1500; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "CPTTestApp" */; compatibilityVersion = "Xcode 6.3"; @@ -461,7 +461,6 @@ "@loader_path/../Frameworks", "@executable_path/../Frameworks", ); - PRODUCT_NAME = CPTTestApp; }; name = Debug; }; @@ -478,7 +477,6 @@ "@loader_path/../Frameworks", "@executable_path/../Frameworks", ); - PRODUCT_NAME = CPTTestApp; }; name = Release; }; diff --git a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj index 7573bb1b5..f8301dc6e 100644 --- a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj +++ b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 53; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -255,7 +255,7 @@ C309C23323B3E12500DEDE9D /* PlotViewItem.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = PlotViewItem.xib; path = "Plot Gallery-Mac/PlotViewItem.xib"; sourceTree = ""; }; C309C23523B3E21500DEDE9D /* PlotViewItem.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = PlotViewItem.m; path = src/mac/PlotViewItem.m; sourceTree = ""; }; C309C23723B3E29F00DEDE9D /* PlotViewItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PlotViewItem.h; path = src/mac/PlotViewItem.h; sourceTree = ""; }; - C30D8AF61BCAF99D0003BB70 /* Plot Gallery-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Plot Gallery-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + C30D8AF61BCAF99D0003BB70 /* Plot Gallery.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Plot Gallery.app"; sourceTree = BUILT_PRODUCTS_DIR; }; C30D8AF91BCAF99D0003BB70 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = main.m; path = src/tvOS/main.m; sourceTree = ""; }; C30D8AFB1BCAF99D0003BB70 /* AppDelegateTV.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppDelegateTV.h; path = src/tvOS/AppDelegateTV.h; sourceTree = ""; }; C30D8AFC1BCAF99D0003BB70 /* AppDelegateTV.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = AppDelegateTV.m; path = src/tvOS/AppDelegateTV.m; sourceTree = ""; }; @@ -272,7 +272,7 @@ C3490DD920E025760089F309 /* Base */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = Base; path = Base.lproj/Icon.icns; sourceTree = ""; }; C3490DDB20E025B60089F309 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/Plot_Gallery_iOS-Info.plist"; sourceTree = ""; }; C3490DDF20E026410089F309 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/Plot_Gallery_tvOS-Info.plist"; sourceTree = ""; }; - C34CB52E1BC9A76A009270A0 /* Plot Gallery-iOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Plot Gallery-iOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + C34CB52E1BC9A76A009270A0 /* Plot Gallery.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Plot Gallery.app"; sourceTree = BUILT_PRODUCTS_DIR; }; C34CB5451BC9A83C009270A0 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = "Plot Gallery-iOS/Images.xcassets"; sourceTree = ""; }; C34CB5471BC9A889009270A0 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = src/ios/AppDelegate.h; sourceTree = ""; }; C34CB5481BC9A889009270A0 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = src/ios/AppDelegate.m; sourceTree = ""; }; @@ -392,8 +392,8 @@ isa = PBXGroup; children = ( 8D1107320486CEB800E47090 /* Plot Gallery.app */, - C34CB52E1BC9A76A009270A0 /* Plot Gallery-iOS.app */, - C30D8AF61BCAF99D0003BB70 /* Plot Gallery-tvOS.app */, + C34CB52E1BC9A76A009270A0 /* Plot Gallery.app */, + C30D8AF61BCAF99D0003BB70 /* Plot Gallery.app */, ); name = Products; sourceTree = ""; @@ -524,7 +524,7 @@ isa = PBXGroup; children = ( 4F4892891290FFCD00EDB93F /* CorePlot.framework */, - 4F48928B1290FFCD00EDB93F /* UnitTests.xctest */, + 4F48928B1290FFCD00EDB93F /* UnitTests Mac.xctest */, C3D4146F1A7D824700B6F5D6 /* CorePlot.framework */, C3D414711A7D824700B6F5D6 /* UnitTests iOS.xctest */, C30D8B181BCAF99D0003BB70 /* CorePlot.framework */, @@ -649,7 +649,7 @@ ); name = "Plot Gallery-tvOS"; productName = "Plot Gallery tvOS"; - productReference = C30D8AF61BCAF99D0003BB70 /* Plot Gallery-tvOS.app */; + productReference = C30D8AF61BCAF99D0003BB70 /* Plot Gallery.app */; productType = "com.apple.product-type.application"; }; C34CB52D1BC9A76A009270A0 /* Plot Gallery-iOS */ = { @@ -668,7 +668,7 @@ ); name = "Plot Gallery-iOS"; productName = "Plot Gallery-iOS"; - productReference = C34CB52E1BC9A76A009270A0 /* Plot Gallery-iOS.app */; + productReference = C34CB52E1BC9A76A009270A0 /* Plot Gallery.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ @@ -726,10 +726,10 @@ remoteRef = 4F4892881290FFCD00EDB93F /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 4F48928B1290FFCD00EDB93F /* UnitTests.xctest */ = { + 4F48928B1290FFCD00EDB93F /* UnitTests Mac.xctest */ = { isa = PBXReferenceProxy; fileType = wrapper.cfbundle; - path = UnitTests.xctest; + path = "UnitTests Mac.xctest"; remoteRef = 4F48928A1290FFCD00EDB93F /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -1071,7 +1071,7 @@ "@executable_path/Frameworks", ); MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = "Plot Gallery-tvOS"; + PRODUCT_NAME = "Plot Gallery"; SDKROOT = appletvos; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 12.0; @@ -1095,7 +1095,7 @@ "@executable_path/Frameworks", ); MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = "Plot Gallery-tvOS"; + PRODUCT_NAME = "Plot Gallery"; SDKROOT = appletvos; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 12.0; @@ -1114,7 +1114,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_NAME = "$(TARGET_NAME)"; + PRODUCT_NAME = "Plot Gallery"; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2,6"; }; @@ -1131,7 +1131,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_NAME = "$(TARGET_NAME)"; + PRODUCT_NAME = "Plot Gallery"; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2,6"; }; diff --git a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/xcshareddata/xcschemes/Plot Gallery-Mac.xcscheme b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/xcshareddata/xcschemes/Plot Gallery-Mac.xcscheme index 83d49a2d8..d568f2815 100644 --- a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/xcshareddata/xcschemes/Plot Gallery-Mac.xcscheme +++ b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/xcshareddata/xcschemes/Plot Gallery-Mac.xcscheme @@ -15,7 +15,7 @@ @@ -32,7 +32,7 @@ @@ -55,7 +55,7 @@ @@ -72,7 +72,7 @@ diff --git a/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj b/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj index 5654724f8..66cf0fbd3 100644 --- a/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj +++ b/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 53; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -282,7 +282,7 @@ 07E0DF80109C4E9500F108D2 /* UnitTests.xctest */ = { isa = PBXReferenceProxy; fileType = wrapper.cfbundle; - path = UnitTests.xctest; + path = "UnitTests Mac.xctest"; remoteRef = 07E0DF7F109C4E9500F108D2 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -381,7 +381,6 @@ "$(inherited)", "@loader_path/../Frameworks", ); - PRODUCT_NAME = DatePlot; }; name = Debug; }; @@ -397,7 +396,6 @@ "$(inherited)", "@loader_path/../Frameworks", ); - PRODUCT_NAME = DatePlot; }; name = Release; }; diff --git a/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj b/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj index ba6117266..7307620bc 100644 --- a/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj +++ b/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 53; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -259,7 +259,7 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = YES; - LastUpgradeCheck = 1430; + LastUpgradeCheck = 1500; }; buildConfigurationList = C05733CB08A9546B00998B17 /* Build configuration list for PBXProject "DropPlot" */; compatibilityVersion = "Xcode 6.3"; @@ -424,7 +424,6 @@ "$(inherited)", "@loader_path/../Frameworks", ); - PRODUCT_NAME = DropPlot; }; name = Debug; }; @@ -440,7 +439,6 @@ "$(inherited)", "@loader_path/../Frameworks", ); - PRODUCT_NAME = DropPlot; }; name = Release; }; diff --git a/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj b/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj index 24297944c..36cb95f07 100644 --- a/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj +++ b/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 53; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -252,7 +252,7 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = YES; - LastUpgradeCheck = 1430; + LastUpgradeCheck = 1500; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "minorTickFormatter" */; compatibilityVersion = "Xcode 6.3"; @@ -398,7 +398,6 @@ "$(inherited)", "@loader_path/../Frameworks", ); - PRODUCT_NAME = minorTickFormatter; }; name = Debug; }; @@ -414,7 +413,6 @@ "$(inherited)", "@loader_path/../Frameworks", ); - PRODUCT_NAME = minorTickFormatter; }; name = Release; }; diff --git a/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj b/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj index 4c6eae8b7..7a18e55be 100644 --- a/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj +++ b/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 53; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -252,7 +252,7 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = YES; - LastUpgradeCheck = 1430; + LastUpgradeCheck = 1500; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "RangePlot" */; compatibilityVersion = "Xcode 6.3"; @@ -398,7 +398,6 @@ "$(inherited)", "@loader_path/../Frameworks", ); - PRODUCT_NAME = RangePlot; }; name = Debug; }; @@ -414,7 +413,6 @@ "$(inherited)", "@loader_path/../Frameworks", ); - PRODUCT_NAME = RangePlot; }; name = Release; }; diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 3088534e9..1d2a29157 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -778,7 +778,7 @@ 071F3CB810FBAB5900D0A7B6 /* License.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = License.txt; path = ../License.txt; sourceTree = SOURCE_ROOT; }; 072161E911D1F6BD009CC871 /* CPTAnnotationHostLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTAnnotationHostLayer.h; sourceTree = ""; }; 072161EA11D1F6BD009CC871 /* CPTAnnotationHostLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAnnotationHostLayer.m; sourceTree = ""; }; - 0730F600109492D800E95162 /* UnitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 0730F600109492D800E95162 /* UnitTests Mac.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "UnitTests Mac.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 0730F64C109494D100E95162 /* CPTTestCase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTTestCase.h; sourceTree = ""; }; 0730F64D109494D100E95162 /* CPTTestCase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTTestCase.m; sourceTree = ""; }; 07321BBF0F37370D00F423D8 /* CPTExceptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTExceptions.h; sourceTree = ""; }; @@ -978,6 +978,7 @@ C3A259E12A329D1D00D2BDA7 /* doxygen-common-tags.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = "doxygen-common-tags.xml"; path = "../documentation/doxygen/doxygen-common-tags.xml"; sourceTree = ""; }; C3A695E3146A19BC00AF5653 /* CPTMutablePlotRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTMutablePlotRange.h; sourceTree = ""; }; C3A695E4146A19BC00AF5653 /* CPTMutablePlotRange.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTMutablePlotRange.m; sourceTree = ""; }; + C3AE08292A58CB0300C1022A /* CorePlotDocumentation.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotDocumentation.xcconfig; path = xcconfig/CorePlotDocumentation.xcconfig; sourceTree = ""; }; C3AFC9CF0FB62969005DFFDC /* CPTImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTImage.h; sourceTree = ""; }; C3AFC9D00FB62969005DFFDC /* CPTImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTImage.m; sourceTree = ""; }; C3B0E7B229CA7B3200FC94B5 /* CorePlotDebugModule.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotDebugModule.xcconfig; path = xcconfig/CorePlotDebugModule.xcconfig; sourceTree = ""; }; @@ -1121,7 +1122,7 @@ isa = PBXGroup; children = ( 8DC2EF5B0486A6940098B216 /* CorePlot.framework */, - 0730F600109492D800E95162 /* UnitTests.xctest */, + 0730F600109492D800E95162 /* UnitTests Mac.xctest */, C38A09781A46185200D45436 /* CorePlot.framework */, C38A09821A46185300D45436 /* UnitTests iOS.xctest */, C37EA6921BC83F2A0091C8F7 /* CorePlot.framework */, @@ -1465,6 +1466,7 @@ C3B0E7B429CA7B6000FC94B5 /* CorePlotModule.xcconfig */, C31908A41998168C00B61898 /* CorePlot.xcconfig */, C34F570D19D8CE5500446248 /* CorePlotWarnings.xcconfig */, + C3AE08292A58CB0300C1022A /* CorePlotDocumentation.xcconfig */, ); name = "Other Sources"; sourceTree = ""; @@ -2133,7 +2135,7 @@ ); name = "UnitTests Mac"; productName = UnitTests; - productReference = 0730F600109492D800E95162 /* UnitTests.xctest */; + productReference = 0730F600109492D800E95162 /* UnitTests Mac.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; 8DC2EF4F0486A6940098B216 /* CorePlot Mac */ = { @@ -2909,7 +2911,6 @@ buildSettings = { INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlotTests-Info.plist"; INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles"; - PRODUCT_NAME = UnitTests; SDKROOT = macosx; USER_HEADER_SEARCH_PATHS = ( "$(SRCROOT)/Source", @@ -2925,7 +2926,6 @@ buildSettings = { INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlotTests-Info.plist"; INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles"; - PRODUCT_NAME = UnitTests; SDKROOT = macosx; USER_HEADER_SEARCH_PATHS = ( "$(SRCROOT)/Source", @@ -2944,7 +2944,6 @@ FRAMEWORK_VERSION = A; INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-Info.plist"; INSTALL_PATH = "@rpath"; - PRODUCT_NAME = CorePlot; SDKROOT = macosx; USER_HEADER_SEARCH_PATHS = ( "$(SRCROOT)/Source", @@ -2964,7 +2963,6 @@ FRAMEWORK_VERSION = A; INFOPLIST_FILE = "$(SRCROOT)/Info/Base.lproj/CorePlot-Info.plist"; INSTALL_PATH = "@rpath"; - PRODUCT_NAME = CorePlot; SDKROOT = macosx; USER_HEADER_SEARCH_PATHS = ( "$(SRCROOT)/Source", @@ -2993,21 +2991,15 @@ }; 9021E49F0FC5C9DD00443472 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C34F570D19D8CE5500446248 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C3AE08292A58CB0300C1022A /* CorePlotDocumentation.xcconfig */; buildSettings = { - DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; - PRODUCT_NAME = Documentation; }; name = Debug; }; 9021E4A00FC5C9DD00443472 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C34F570D19D8CE5500446248 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C3AE08292A58CB0300C1022A /* CorePlotDocumentation.xcconfig */; buildSettings = { - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; - PRODUCT_NAME = Documentation; - ZERO_LINK = NO; }; name = Release; }; @@ -3015,7 +3007,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = C34F570D19D8CE5500446248 /* CorePlotWarnings.xcconfig */; buildSettings = { - PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; @@ -3023,7 +3014,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = C34F570D19D8CE5500446248 /* CorePlotWarnings.xcconfig */; buildSettings = { - PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; @@ -3042,7 +3032,6 @@ "@loader_path/Frameworks", ); MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = CorePlot; SDKROOT = appletvos; USER_HEADER_SEARCH_PATHS = ( "$(SRCROOT)/Source", @@ -3066,7 +3055,6 @@ "@loader_path/Frameworks", ); MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = CorePlot; SDKROOT = appletvos; USER_HEADER_SEARCH_PATHS = ( "$(SRCROOT)/Source", @@ -3086,7 +3074,6 @@ "@loader_path/Frameworks", ); MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; USER_HEADER_SEARCH_PATHS = ( "$(SRCROOT)/Source", @@ -3106,7 +3093,6 @@ "@loader_path/Frameworks", ); MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; USER_HEADER_SEARCH_PATHS = ( "$(SRCROOT)/Source", @@ -3130,7 +3116,6 @@ "@loader_path/Frameworks", ); MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = CorePlot; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; USER_HEADER_SEARCH_PATHS = ( @@ -3155,7 +3140,6 @@ "@loader_path/Frameworks", ); MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = CorePlot; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; USER_HEADER_SEARCH_PATHS = ( @@ -3176,7 +3160,6 @@ "@loader_path/Frameworks", ); MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; USER_HEADER_SEARCH_PATHS = ( @@ -3197,7 +3180,6 @@ "@loader_path/Frameworks", ); MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; USER_HEADER_SEARCH_PATHS = ( @@ -3209,21 +3191,15 @@ }; C38A09941A4618B600D45436 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C34F570D19D8CE5500446248 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C3AE08292A58CB0300C1022A /* CorePlotDocumentation.xcconfig */; buildSettings = { - DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; - PRODUCT_NAME = "Documentation-Mac copy"; }; name = Debug; }; C38A09951A4618B600D45436 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C34F570D19D8CE5500446248 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C3AE08292A58CB0300C1022A /* CorePlotDocumentation.xcconfig */; buildSettings = { - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; - PRODUCT_NAME = "Documentation-Mac copy"; - ZERO_LINK = NO; }; name = Release; }; @@ -3231,10 +3207,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = C34F570D19D8CE5500446248 /* CorePlotWarnings.xcconfig */; buildSettings = { - DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; }; name = Debug; }; @@ -3242,12 +3214,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = C34F570D19D8CE5500446248 /* CorePlotWarnings.xcconfig */; buildSettings = { - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - ZERO_LINK = NO; }; name = Release; }; diff --git a/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/CorePlot Mac.xcscheme b/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/CorePlot Mac.xcscheme index fe79c0054..a85f3df92 100644 --- a/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/CorePlot Mac.xcscheme +++ b/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/CorePlot Mac.xcscheme @@ -33,7 +33,7 @@ diff --git a/framework/xcconfig/CorePlotDebugModule.xcconfig b/framework/xcconfig/CorePlotDebugModule.xcconfig index 9bf0beb7d..131087a19 100644 --- a/framework/xcconfig/CorePlotDebugModule.xcconfig +++ b/framework/xcconfig/CorePlotDebugModule.xcconfig @@ -1,4 +1,4 @@ -#include "CorePlotModule.xcconfig" #include "CorePlotDebug.xcconfig" +#include "CorePlotModule.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = DEBUG=1 CPT_IS_FRAMEWORK $(inherited) diff --git a/framework/xcconfig/CorePlotDocumentation.xcconfig b/framework/xcconfig/CorePlotDocumentation.xcconfig new file mode 100644 index 000000000..65deffcff --- /dev/null +++ b/framework/xcconfig/CorePlotDocumentation.xcconfig @@ -0,0 +1,3 @@ +PRODUCT_NAME = $(TARGET_NAME) + +DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; diff --git a/framework/xcconfig/CorePlotModule.xcconfig b/framework/xcconfig/CorePlotModule.xcconfig index b71ea8e6a..ce9e60233 100644 --- a/framework/xcconfig/CorePlotModule.xcconfig +++ b/framework/xcconfig/CorePlotModule.xcconfig @@ -4,4 +4,6 @@ ENABLE_MODULE_VERIFIER = YES MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = c99 MODULE_VERIFIER_SUPPORTED_LANGUAGES = objective-c MODULEMAP_FILE = $(SOURCE_ROOT)/Module/module.modulemap + +PRODUCT_NAME = CorePlot PRODUCT_MODULE_NAME = $(PRODUCT_NAME:rfc1034identifier) diff --git a/framework/xcconfig/CorePlotReleaseModule.xcconfig b/framework/xcconfig/CorePlotReleaseModule.xcconfig index d4b462c84..fda176240 100644 --- a/framework/xcconfig/CorePlotReleaseModule.xcconfig +++ b/framework/xcconfig/CorePlotReleaseModule.xcconfig @@ -1,4 +1,4 @@ -#include "CorePlotModule.xcconfig" #include "CorePlotRelease.xcconfig" +#include "CorePlotModule.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = CPT_IS_FRAMEWORK $(inherited) diff --git a/framework/xcconfig/CorePlotWarnings.xcconfig b/framework/xcconfig/CorePlotWarnings.xcconfig index f4d52efe3..3c13584f9 100644 --- a/framework/xcconfig/CorePlotWarnings.xcconfig +++ b/framework/xcconfig/CorePlotWarnings.xcconfig @@ -1,3 +1,5 @@ +PRODUCT_NAME = $(TARGET_NAME) + ASSETCATALOG_WARNINGS = YES CLANG_ANALYZER_DEADCODE_DEADSTORES = YES From 2da2bb70ccc1b1d03e4e177515be1188265109c7 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Fri, 7 Jul 2023 21:37:45 -0400 Subject: [PATCH 201/245] Moved the Universal XCFramework build script out of the project file into a separate script file. --- framework/CorePlot.xcodeproj/project.pbxproj | 4 +- scripts/generate_universal_xcframework.sh | 78 ++++++++++++++++++++ 2 files changed, 81 insertions(+), 1 deletion(-) create mode 100755 scripts/generate_universal_xcframework.sh diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 1d2a29157..49318884b 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -996,6 +996,7 @@ C3C2847016584EB9006BA43C /* CPTAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAnimation.m; sourceTree = ""; }; C3C2847316585085006BA43C /* _CPTAnimationTimingFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTAnimationTimingFunctions.h; sourceTree = ""; }; C3C2847416585085006BA43C /* _CPTAnimationTimingFunctions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = _CPTAnimationTimingFunctions.m; sourceTree = ""; }; + C3C3B88E2A58F3EE00352BBE /* generate_universal_xcframework.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = generate_universal_xcframework.sh; sourceTree = ""; }; C3C9CB0C165DB4D500739006 /* CPTAnimationOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTAnimationOperation.h; sourceTree = ""; }; C3C9CB0D165DB4D500739006 /* CPTAnimationOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAnimationOperation.m; sourceTree = ""; }; C3C9CB11165DB50300739006 /* CPTAnimationPeriod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTAnimationPeriod.h; sourceTree = ""; }; @@ -1754,6 +1755,7 @@ C3D0F67829C6055700190D2C /* prefixer.py */, C34C19D72A2803060009BDDA /* generate_core_plot_docs.sh */, C3D0F67529C6053E00190D2C /* generate_spm_sources_layout.sh */, + C3C3B88E2A58F3EE00352BBE /* generate_universal_xcframework.sh */, C3D0F67629C6053E00190D2C /* format_core_plot.sh */, C3D0F67929C6087100190D2C /* uncrustify.cfg */, ); @@ -2390,7 +2392,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "UFW_MAC_TARGET=\"CorePlot Mac\"\nUFW_IOS_TARGET=\"CorePlot iOS\"\nUFW_TVOS_TARGET=\"CorePlot tvOS\"\n\nUFW_BUILD_DIR=\"${PROJECT_DIR}/../build\"\n\n# Mac SDK\n# Use the latest macOS SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"[^.]macosx.*$\")\nwhile read -r line; do\nUFW_MAC_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_MAC_SDK_VERSION=$(echo \"${UFW_MAC_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\n# iOS SDK\n# Use the latest iOS SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"iphoneos.*$\")\nwhile read -r line; do\nUFW_IOS_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_IOS_SDK_VERSION=$(echo \"${UFW_IOS_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\n# tvOS SDK\n# Use the latest tvOS SDK available\nUFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"appletvos.*$\")\nwhile read -r line; do\nUFW_TVOS_SDK_VERSION=\"${line}\"\ndone <<< \"${UFW_GREP_RESULT}\"\nUFW_TVOS_SDK_VERSION=$(echo \"${UFW_TVOS_SDK_VERSION}\" | grep -o \"[0-9].*$\")\n\nFRAMEWORK_NAME=\"${PROJECT_NAME}\"\n\nUFW_MAC_PATH=\"${UFW_BUILD_DIR}/Release/${FRAMEWORK_NAME}.framework\"\nUFW_CATALYST_PATH=\"${UFW_BUILD_DIR}/Release-maccatalyst/${FRAMEWORK_NAME}.framework\"\nUFW_IOS_PATH=\"${UFW_BUILD_DIR}/Release-iphoneos/${FRAMEWORK_NAME}.framework\"\nUFW_IOS_SIMULATOR_PATH=\"${UFW_BUILD_DIR}/Release-iphonesimulator/${FRAMEWORK_NAME}.framework\"\nUFW_TVOS_PATH=\"${UFW_BUILD_DIR}/Release-appletvos/${FRAMEWORK_NAME}.framework\"\nUFW_TVOS_SIMULATOR_PATH=\"${UFW_BUILD_DIR}/Release-appletvsimulator/${FRAMEWORK_NAME}.framework\"\n\nUFW_UNIVERSAL_DIR=\"${UFW_BUILD_DIR}/Release-universal\"\nUFW_FRAMEWORK=\"${UFW_UNIVERSAL_DIR}/${FRAMEWORK_NAME}.xcframework\"\n\n# Build Framework\n\nrm -rf \"${UFW_UNIVERSAL_DIR}\"\n\n# macOS\nxcodebuild -scheme \"${UFW_MAC_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk macosx${UFW_MAC_SDK_VERSION} clean build SYMROOT=\"${UFW_BUILD_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n# Mac Catalyst\nxcodebuild -scheme \"${UFW_IOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphoneos${UFW_IOS_SDK_VERSION} -destination \"platform=macOS,variant=Mac Catalyst\" build SYMROOT=\"${UFW_BUILD_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n# iOS\nxcodebuild -scheme \"${UFW_IOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphoneos${UFW_IOS_SDK_VERSION} build SYMROOT=\"${UFW_BUILD_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -scheme \"${UFW_IOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk iphonesimulator${UFW_IOS_SDK_VERSION} build SYMROOT=\"${UFW_BUILD_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n#tvOS\nxcodebuild -scheme \"${UFW_TVOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk appletvos${UFW_TVOS_SDK_VERSION} build SYMROOT=\"${UFW_BUILD_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -scheme \"${UFW_TVOS_TARGET}\" -project CorePlot.xcodeproj -configuration Release -sdk appletvsimulator${UFW_TVOS_SDK_VERSION} build SYMROOT=\"${UFW_BUILD_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n\nmkdir -p \"${UFW_UNIVERSAL_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\nxcodebuild -create-xcframework -output \"${UFW_FRAMEWORK}\" \\\n -framework \"${UFW_MAC_PATH}\" \\\n -framework \"${UFW_CATALYST_PATH}\" \\\n -framework \"${UFW_IOS_PATH}\" \\\n -framework \"${UFW_IOS_SIMULATOR_PATH}\" \\\n -framework \"${UFW_TVOS_PATH}\" \\\n -framework \"${UFW_TVOS_SIMULATOR_PATH}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: create XCFramework failed\"; exit 1; fi\n\n"; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${SOURCE_ROOT}/../scripts/generate_universal_xcframework.sh\" CorePlotDocs\n"; }; /* End PBXShellScriptBuildPhase section */ diff --git a/scripts/generate_universal_xcframework.sh b/scripts/generate_universal_xcframework.sh new file mode 100755 index 000000000..258ba4d15 --- /dev/null +++ b/scripts/generate_universal_xcframework.sh @@ -0,0 +1,78 @@ +#!/bin/sh + +UFW_MAC_TARGET="CorePlot Mac" +UFW_IOS_TARGET="CorePlot iOS" +UFW_TVOS_TARGET="CorePlot tvOS" + +UFW_BUILD_DIR="${PROJECT_DIR}/../build" + +# Mac SDK +# Use the latest macOS SDK available +UFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o "[^.]macosx.*$") +while read -r line; do +UFW_MAC_SDK_VERSION="${line}" +done <<< "${UFW_GREP_RESULT}" +UFW_MAC_SDK_VERSION=$(echo "${UFW_MAC_SDK_VERSION}" | grep -o "[0-9].*$") + +# iOS SDK +# Use the latest iOS SDK available +UFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o "iphoneos.*$") +while read -r line; do +UFW_IOS_SDK_VERSION="${line}" +done <<< "${UFW_GREP_RESULT}" +UFW_IOS_SDK_VERSION=$(echo "${UFW_IOS_SDK_VERSION}" | grep -o "[0-9].*$") + +# tvOS SDK +# Use the latest tvOS SDK available +UFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o "appletvos.*$") +while read -r line; do +UFW_TVOS_SDK_VERSION="${line}" +done <<< "${UFW_GREP_RESULT}" +UFW_TVOS_SDK_VERSION=$(echo "${UFW_TVOS_SDK_VERSION}" | grep -o "[0-9].*$") + +FRAMEWORK_NAME="${PROJECT_NAME}" + +UFW_MAC_PATH="${UFW_BUILD_DIR}/Release/${FRAMEWORK_NAME}.framework" +UFW_CATALYST_PATH="${UFW_BUILD_DIR}/Release-maccatalyst/${FRAMEWORK_NAME}.framework" +UFW_IOS_PATH="${UFW_BUILD_DIR}/Release-iphoneos/${FRAMEWORK_NAME}.framework" +UFW_IOS_SIMULATOR_PATH="${UFW_BUILD_DIR}/Release-iphonesimulator/${FRAMEWORK_NAME}.framework" +UFW_TVOS_PATH="${UFW_BUILD_DIR}/Release-appletvos/${FRAMEWORK_NAME}.framework" +UFW_TVOS_SIMULATOR_PATH="${UFW_BUILD_DIR}/Release-appletvsimulator/${FRAMEWORK_NAME}.framework" + +UFW_UNIVERSAL_DIR="${UFW_BUILD_DIR}/Release-universal" +UFW_FRAMEWORK="${UFW_UNIVERSAL_DIR}/${FRAMEWORK_NAME}.xcframework" + +# Build Framework + +rm -rf "${UFW_UNIVERSAL_DIR}" + +# macOS +xcodebuild -scheme "${UFW_MAC_TARGET}" -project CorePlot.xcodeproj -configuration Release -sdk macosx${UFW_MAC_SDK_VERSION} clean build SYMROOT="${UFW_BUILD_DIR}" +if [ "$?" != "0" ]; then echo >&2 "Error: xcodebuild failed"; exit 1; fi +# Mac Catalyst +xcodebuild -scheme "${UFW_IOS_TARGET}" -project CorePlot.xcodeproj -configuration Release -sdk iphoneos${UFW_IOS_SDK_VERSION} -destination "platform=macOS,variant=Mac Catalyst" build SYMROOT="${UFW_BUILD_DIR}" +if [ "$?" != "0" ]; then echo >&2 "Error: xcodebuild failed"; exit 1; fi +# iOS +xcodebuild -scheme "${UFW_IOS_TARGET}" -project CorePlot.xcodeproj -configuration Release -sdk iphoneos${UFW_IOS_SDK_VERSION} build SYMROOT="${UFW_BUILD_DIR}" +if [ "$?" != "0" ]; then echo >&2 "Error: xcodebuild failed"; exit 1; fi +xcodebuild -scheme "${UFW_IOS_TARGET}" -project CorePlot.xcodeproj -configuration Release -sdk iphonesimulator${UFW_IOS_SDK_VERSION} build SYMROOT="${UFW_BUILD_DIR}" +if [ "$?" != "0" ]; then echo >&2 "Error: xcodebuild failed"; exit 1; fi +#tvOS +xcodebuild -scheme "${UFW_TVOS_TARGET}" -project CorePlot.xcodeproj -configuration Release -sdk appletvos${UFW_TVOS_SDK_VERSION} build SYMROOT="${UFW_BUILD_DIR}" +if [ "$?" != "0" ]; then echo >&2 "Error: xcodebuild failed"; exit 1; fi +xcodebuild -scheme "${UFW_TVOS_TARGET}" -project CorePlot.xcodeproj -configuration Release -sdk appletvsimulator${UFW_TVOS_SDK_VERSION} build SYMROOT="${UFW_BUILD_DIR}" +if [ "$?" != "0" ]; then echo >&2 "Error: xcodebuild failed"; exit 1; fi + +mkdir -p "${UFW_UNIVERSAL_DIR}" +if [ "$?" != "0" ]; then echo >&2 "Error: mkdir failed"; exit 1; fi + +xcodebuild -create-xcframework -output "${UFW_FRAMEWORK}" \ + -framework "${UFW_MAC_PATH}" \ + -framework "${UFW_CATALYST_PATH}" \ + -framework "${UFW_IOS_PATH}" \ + -framework "${UFW_IOS_SIMULATOR_PATH}" \ + -framework "${UFW_TVOS_PATH}" \ + -framework "${UFW_TVOS_SIMULATOR_PATH}" +if [ "$?" != "0" ]; then echo >&2 "Error: create XCFramework failed"; exit 1; fi + +exit 0 From 7aced12a2a48efbb9adfc84d75e722482139c11c Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Fri, 7 Jul 2023 21:40:25 -0400 Subject: [PATCH 202/245] Restored the Swift Package Manager umbrella header file because the common framework header was not working for SPM builds. --- framework/CorePlot.xcodeproj/project.pbxproj | 10 +++ framework/SPM Umbrella Header/CorePlot.h | 84 ++++++++++++++++++++ scripts/generate_spm_sources_layout.sh | 2 + spm/Sources/core-plot/include/CorePlot.h | 2 +- 4 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 framework/SPM Umbrella Header/CorePlot.h diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 49318884b..41481fdc9 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -996,6 +996,7 @@ C3C2847016584EB9006BA43C /* CPTAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAnimation.m; sourceTree = ""; }; C3C2847316585085006BA43C /* _CPTAnimationTimingFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CPTAnimationTimingFunctions.h; sourceTree = ""; }; C3C2847416585085006BA43C /* _CPTAnimationTimingFunctions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = _CPTAnimationTimingFunctions.m; sourceTree = ""; }; + C3C3B8892A58EB9700352BBE /* CorePlot.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CorePlot.h; sourceTree = ""; }; C3C3B88E2A58F3EE00352BBE /* generate_universal_xcframework.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = generate_universal_xcframework.sh; sourceTree = ""; }; C3C9CB0C165DB4D500739006 /* CPTAnimationOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTAnimationOperation.h; sourceTree = ""; }; C3C9CB0D165DB4D500739006 /* CPTAnimationOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAnimationOperation.m; sourceTree = ""; }; @@ -1414,6 +1415,7 @@ 9021E4920FC5C6DD00443472 /* Documentation */, C3D0F67429C604EF00190D2C /* Scripts */, C37A9AB729C698A7003B4338 /* Module */, + C3C3B8882A58EB9700352BBE /* SPM Umbrella Header */, 32C88DFF0371C24200C91783 /* Other Sources */, 089C1665FE841158C02AAC07 /* Resources */, 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */, @@ -1748,6 +1750,14 @@ name = Animation; sourceTree = ""; }; + C3C3B8882A58EB9700352BBE /* SPM Umbrella Header */ = { + isa = PBXGroup; + children = ( + C3C3B8892A58EB9700352BBE /* CorePlot.h */, + ); + path = "SPM Umbrella Header"; + sourceTree = ""; + }; C3D0F67429C604EF00190D2C /* Scripts */ = { isa = PBXGroup; children = ( diff --git a/framework/SPM Umbrella Header/CorePlot.h b/framework/SPM Umbrella Header/CorePlot.h new file mode 100644 index 000000000..3392124a1 --- /dev/null +++ b/framework/SPM Umbrella Header/CorePlot.h @@ -0,0 +1,84 @@ +#import + +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST + +#import +#import + +#else + +#import + +#endif + +#import "CPTAnimation.h" +#import "CPTAnimationOperation.h" +#import "CPTAnimationPeriod.h" +#import "CPTAnnotation.h" +#import "CPTAnnotationHostLayer.h" +#import "CPTAxis.h" +#import "CPTAxisLabel.h" +#import "CPTAxisSet.h" +#import "CPTAxisTitle.h" +#import "CPTBarPlot.h" +#import "CPTBorderedLayer.h" +#import "CPTCalendarFormatter.h" +#import "CPTColor.h" +#import "CPTColorSpace.h" +#import "CPTConstraints.h" +#import "CPTDefinitions.h" +#import "CPTExceptions.h" +#import "CPTFill.h" +#import "CPTFunctionDataSource.h" +#import "CPTGradient.h" +#import "CPTGraph.h" +#import "CPTGraphHostingView.h" +#import "CPTImage.h" +#import "CPTLayer.h" +#import "CPTLayerAnnotation.h" +#import "CPTLegend.h" +#import "CPTLegendEntry.h" +#import "CPTLimitBand.h" +#import "CPTLineCap.h" +#import "CPTLineStyle.h" +#import "CPTMutableLineStyle.h" +#import "CPTMutableNumericData+TypeConversion.h" +#import "CPTMutableNumericData.h" +#import "CPTMutablePlotRange.h" +#import "CPTMutableShadow.h" +#import "CPTMutableTextStyle.h" +#import "CPTNumericData+TypeConversion.h" +#import "CPTNumericData.h" +#import "CPTNumericDataType.h" +#import "CPTPathExtensions.h" +#import "CPTPieChart.h" +#import "CPTPlatformSpecificCategories.h" +#import "CPTPlatformSpecificDefines.h" +#import "CPTPlatformSpecificFunctions.h" +#import "CPTPlot.h" +#import "CPTPlotArea.h" +#import "CPTPlotAreaFrame.h" +#import "CPTPlotRange.h" +#import "CPTPlotSpace.h" +#import "CPTPlotSpaceAnnotation.h" +#import "CPTPlotSymbol.h" +#import "CPTRangePlot.h" +#import "CPTResponder.h" +#import "CPTScatterPlot.h" +#import "CPTShadow.h" +#import "CPTTextLayer.h" +#import "CPTTextStyle.h" +#import "CPTTheme.h" +#import "CPTTimeFormatter.h" +#import "CPTTradingRangePlot.h" +#import "CPTUtilities.h" +#import "CPTXYAxis.h" +#import "CPTXYAxisSet.h" +#import "CPTXYGraph.h" +#import "CPTXYPlotSpace.h" + +#if TARGET_OS_OSX || TARGET_OS_MACCATALYST + +#import "CPTDecimalNumberValueTransformer.h" + +#endif diff --git a/scripts/generate_spm_sources_layout.sh b/scripts/generate_spm_sources_layout.sh index 8b731317e..a7a370690 100755 --- a/scripts/generate_spm_sources_layout.sh +++ b/scripts/generate_spm_sources_layout.sh @@ -25,6 +25,7 @@ function generate_spm_public_headers() { -type f \ -name "*.[h]" \ -not -path "*/build/*" \ + -not -path "framework/CorePlot.h" \ -not -name "*Test*.[hm]" \ -not -name "_*.[hm]" \ -not -name "mainpage.h" \ @@ -87,6 +88,7 @@ function generate_spm_public_sources() { -type f \ -name "*.[m]" \ -not -path "*/build/*" \ + -not -path "framework/CorePlot.h" \ -not -name "*Test*.[hm]" \ -not -name "_*.[hm]" \ | sed "s| \([^/]\)|:\1|g" diff --git a/spm/Sources/core-plot/include/CorePlot.h b/spm/Sources/core-plot/include/CorePlot.h index effe6a666..d9d423c2a 120000 --- a/spm/Sources/core-plot/include/CorePlot.h +++ b/spm/Sources/core-plot/include/CorePlot.h @@ -1 +1 @@ -../../../../framework/CorePlot.h \ No newline at end of file +../../../../framework/SPM Umbrella Header/CorePlot.h \ No newline at end of file From 1f0b991da88a0a28cb63c4f3c39c2837cc1a21bd Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Fri, 7 Jul 2023 21:42:48 -0400 Subject: [PATCH 203/245] Moved the DOXYGEN_PATH environment variable definition into the GCC_PREPROCESSOR_DEFINITIONS setting. --- framework/xcconfig/CorePlotDocumentation.xcconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/xcconfig/CorePlotDocumentation.xcconfig b/framework/xcconfig/CorePlotDocumentation.xcconfig index 65deffcff..23852aebb 100644 --- a/framework/xcconfig/CorePlotDocumentation.xcconfig +++ b/framework/xcconfig/CorePlotDocumentation.xcconfig @@ -1,3 +1,3 @@ PRODUCT_NAME = $(TARGET_NAME) -DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen; +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) DOXYGEN_PATH=/Applications/Doxygen.app/Contents/Resources/doxygen; From 4dd878b986702a5b0419c3640ed4f190c0b2eca2 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Fri, 7 Jul 2023 22:08:04 -0400 Subject: [PATCH 204/245] Use the PROJECT_NAME instead of a hard-coded PRODUCT_NAME. --- framework/xcconfig/CorePlotModule.xcconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/xcconfig/CorePlotModule.xcconfig b/framework/xcconfig/CorePlotModule.xcconfig index ce9e60233..8af686cef 100644 --- a/framework/xcconfig/CorePlotModule.xcconfig +++ b/framework/xcconfig/CorePlotModule.xcconfig @@ -5,5 +5,5 @@ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = c99 MODULE_VERIFIER_SUPPORTED_LANGUAGES = objective-c MODULEMAP_FILE = $(SOURCE_ROOT)/Module/module.modulemap -PRODUCT_NAME = CorePlot +PRODUCT_NAME = $(PROJECT_NAME) PRODUCT_MODULE_NAME = $(PRODUCT_NAME:rfc1034identifier) From 95d1216fb436801bf759635907fb62c95c1d07f2 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Fri, 7 Jul 2023 22:13:40 -0400 Subject: [PATCH 205/245] Various xcscheme and project version updates. --- .../xcshareddata/xcschemes/Plot Gallery-Mac.xcscheme | 8 ++++---- .../xcshareddata/xcschemes/Plot Gallery-iOS.xcscheme | 8 ++++---- .../xcshareddata/xcschemes/Plot Gallery-tvOS.xcscheme | 8 ++++---- examples/DatePlot/DatePlot.xcodeproj/project.pbxproj | 6 ++---- 4 files changed, 14 insertions(+), 16 deletions(-) diff --git a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/xcshareddata/xcschemes/Plot Gallery-Mac.xcscheme b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/xcshareddata/xcschemes/Plot Gallery-Mac.xcscheme index d568f2815..83d49a2d8 100644 --- a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/xcshareddata/xcschemes/Plot Gallery-Mac.xcscheme +++ b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/xcshareddata/xcschemes/Plot Gallery-Mac.xcscheme @@ -15,7 +15,7 @@ @@ -32,7 +32,7 @@ @@ -55,7 +55,7 @@ @@ -72,7 +72,7 @@ diff --git a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/xcshareddata/xcschemes/Plot Gallery-iOS.xcscheme b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/xcshareddata/xcschemes/Plot Gallery-iOS.xcscheme index bc85ee9d9..03572a21c 100644 --- a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/xcshareddata/xcschemes/Plot Gallery-iOS.xcscheme +++ b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/xcshareddata/xcschemes/Plot Gallery-iOS.xcscheme @@ -15,7 +15,7 @@ @@ -32,7 +32,7 @@ @@ -55,7 +55,7 @@ @@ -72,7 +72,7 @@ diff --git a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/xcshareddata/xcschemes/Plot Gallery-tvOS.xcscheme b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/xcshareddata/xcschemes/Plot Gallery-tvOS.xcscheme index 134ec3d7e..30af5789b 100644 --- a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/xcshareddata/xcschemes/Plot Gallery-tvOS.xcscheme +++ b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/xcshareddata/xcschemes/Plot Gallery-tvOS.xcscheme @@ -15,7 +15,7 @@ @@ -32,7 +32,7 @@ @@ -55,7 +55,7 @@ @@ -72,7 +72,7 @@ diff --git a/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj b/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj index 66cf0fbd3..fbd0d45f7 100644 --- a/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj +++ b/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj @@ -103,7 +103,7 @@ isa = PBXGroup; children = ( 076184C10F3CAD5900A89A76 /* CorePlot.framework */, - 07E0DF80109C4E9500F108D2 /* UnitTests.xctest */, + 07E0DF80109C4E9500F108D2 /* UnitTests Mac.xctest */, C3F04DB81B44CCFD0002322A /* CorePlot.framework */, C3F04DBA1B44CCFD0002322A /* UnitTests iOS.xctest */, C310CE5C1C0A3DB500C4FCB4 /* CorePlot.framework */, @@ -279,7 +279,7 @@ remoteRef = 076184C00F3CAD5900A89A76 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 07E0DF80109C4E9500F108D2 /* UnitTests.xctest */ = { + 07E0DF80109C4E9500F108D2 /* UnitTests Mac.xctest */ = { isa = PBXReferenceProxy; fileType = wrapper.cfbundle; path = "UnitTests Mac.xctest"; @@ -374,7 +374,6 @@ baseConfigurationReference = C39B4BFD2962169F00ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - COPY_PHASE_STRIP = NO; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = ( @@ -389,7 +388,6 @@ baseConfigurationReference = C39B4BFE2962169F00ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - COPY_PHASE_STRIP = NO; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LD_RUNPATH_SEARCH_PATHS = ( From acaa290552fbe066682cd25c2cdb1a426e2ab829 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Fri, 7 Jul 2023 22:15:03 -0400 Subject: [PATCH 206/245] Made CPTDecimalNumberValueTransformer available during Mac Catalyst builds. --- framework/CorePlot.h | 18 +++++++++++------- framework/CorePlot.xcodeproj/project.pbxproj | 2 -- .../MacOnly/CPTDecimalNumberValueTransformer.h | 2 +- .../MacOnly/CPTDecimalNumberValueTransformer.m | 2 +- framework/xcconfig/CorePlot.xcconfig | 1 - 5 files changed, 13 insertions(+), 12 deletions(-) diff --git a/framework/CorePlot.h b/framework/CorePlot.h index 0fa428638..8015a82cf 100644 --- a/framework/CorePlot.h +++ b/framework/CorePlot.h @@ -1,4 +1,4 @@ -#if defined __has_include +#ifdef __has_include #if __has_include() #define CPT_IS_FRAMEWORK #endif @@ -15,12 +15,6 @@ #import -#ifdef CPT_IS_FRAMEWORK -#import -#else -#import "CPTDecimalNumberValueTransformer.h" -#endif - #endif #ifdef CPT_IS_FRAMEWORK @@ -160,3 +154,13 @@ #import "CPTXYPlotSpace.h" #endif + +#if TARGET_OS_OSX || TARGET_OS_MACCATALYST + +#ifdef CPT_IS_FRAMEWORK +#import +#else +#import "CPTDecimalNumberValueTransformer.h" +#endif + +#endif diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 41481fdc9..86c5ac85c 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -2987,7 +2987,6 @@ }; 1DEB91B208733DA50010E9CD /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; buildSettings = { CURRENT_PROJECT_VERSION = 2.3; }; @@ -2995,7 +2994,6 @@ }; 1DEB91B308733DA50010E9CD /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; buildSettings = { CURRENT_PROJECT_VERSION = 2.3; }; diff --git a/framework/MacOnly/CPTDecimalNumberValueTransformer.h b/framework/MacOnly/CPTDecimalNumberValueTransformer.h index c6a91e3f6..afa563b42 100644 --- a/framework/MacOnly/CPTDecimalNumberValueTransformer.h +++ b/framework/MacOnly/CPTDecimalNumberValueTransformer.h @@ -1,6 +1,6 @@ #import -#if TARGET_OS_OSX +#if TARGET_OS_OSX || TARGET_OS_MACCATALYST #import diff --git a/framework/MacOnly/CPTDecimalNumberValueTransformer.m b/framework/MacOnly/CPTDecimalNumberValueTransformer.m index 82ec3df2d..307dfb4cd 100644 --- a/framework/MacOnly/CPTDecimalNumberValueTransformer.m +++ b/framework/MacOnly/CPTDecimalNumberValueTransformer.m @@ -1,6 +1,6 @@ #import "CPTDecimalNumberValueTransformer.h" -#if TARGET_OS_OSX +#if TARGET_OS_OSX || TARGET_OS_MACCATALYST #import "_NSNumberExtensions.h" diff --git a/framework/xcconfig/CorePlot.xcconfig b/framework/xcconfig/CorePlot.xcconfig index bf809b75c..e0bc7bb89 100644 --- a/framework/xcconfig/CorePlot.xcconfig +++ b/framework/xcconfig/CorePlot.xcconfig @@ -87,6 +87,5 @@ OTHER_LDFLAGS = -ObjC RUN_CLANG_STATIC_ANALYZER = YES SKIP_INSTALL = YES -SUPPORTS_MACCATALYST = YES USE_HEADERMAP = YES FUSE_BUILD_SCRIPT_PHASES = YES From 3799c2efc178e0f2de35ec3a6066373e1e5e666f Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Fri, 7 Jul 2023 22:28:22 -0400 Subject: [PATCH 207/245] Made CPTDecimalNumberValueTransformer available during Mac Catalyst builds. --- framework/CorePlot.h | 12 ++---------- framework/CorePlot.xcodeproj/project.pbxproj | 8 ++++++++ framework/SPM Umbrella Header/CorePlot.h | 7 +------ 3 files changed, 11 insertions(+), 16 deletions(-) diff --git a/framework/CorePlot.h b/framework/CorePlot.h index 8015a82cf..14ce9a19e 100644 --- a/framework/CorePlot.h +++ b/framework/CorePlot.h @@ -34,6 +34,7 @@ #import #import #import +#import #import #import #import @@ -102,6 +103,7 @@ #import "CPTColor.h" #import "CPTColorSpace.h" #import "CPTConstraints.h" +#import "CPTDecimalNumberValueTransformer.h" #import "CPTDefinitions.h" #import "CPTExceptions.h" #import "CPTFill.h" @@ -154,13 +156,3 @@ #import "CPTXYPlotSpace.h" #endif - -#if TARGET_OS_OSX || TARGET_OS_MACCATALYST - -#ifdef CPT_IS_FRAMEWORK -#import -#else -#import "CPTDecimalNumberValueTransformer.h" -#endif - -#endif diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 86c5ac85c..0cd7de848 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -655,6 +655,10 @@ C3BB931A1B729BD200004527 /* _CPTDebugQuickLook.h in Headers */ = {isa = PBXBuildFile; fileRef = C3BB93181B729BD200004527 /* _CPTDebugQuickLook.h */; }; C3BFFD1112274CB500DE22AC /* CPTNumericDataTypeConversionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C97EF08104D80D400B554F9 /* CPTNumericDataTypeConversionTests.m */; }; C3C1C0801790D3B400E8B1B7 /* CPTLayerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C1C07F1790D3B400E8B1B7 /* CPTLayerTests.m */; }; + C3C58E532A58FECA00E295B0 /* CPTDecimalNumberValueTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = 070A73DA0F5D8C910014FA84 /* CPTDecimalNumberValueTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C3C58E542A58FF8500E295B0 /* CPTDecimalNumberValueTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = 070A73DA0F5D8C910014FA84 /* CPTDecimalNumberValueTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C3C58E552A58FFB700E295B0 /* CPTDecimalNumberValueTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 070A73DB0F5D8C910014FA84 /* CPTDecimalNumberValueTransformer.m */; }; + C3C58E562A58FFB800E295B0 /* CPTDecimalNumberValueTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 070A73DB0F5D8C910014FA84 /* CPTDecimalNumberValueTransformer.m */; }; C3C9CB0E165DB4D500739006 /* CPTAnimationOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C9CB0C165DB4D500739006 /* CPTAnimationOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; C3C9CB0F165DB4D500739006 /* CPTAnimationOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C9CB0D165DB4D500739006 /* CPTAnimationOperation.m */; }; C3C9CB13165DB50300739006 /* CPTAnimationPeriod.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C9CB11165DB50300739006 /* CPTAnimationPeriod.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -2009,6 +2013,7 @@ C37EA67D1BC83F2A0091C8F7 /* _CPTAnimationPlotRangePeriod.h in Headers */, C37EA67E1BC83F2A0091C8F7 /* CPTFunctionDataSource.h in Headers */, C37EA67F1BC83F2A0091C8F7 /* CPTGradient.h in Headers */, + C3C58E542A58FF8500E295B0 /* CPTDecimalNumberValueTransformer.h in Headers */, C37EA6801BC83F2A0091C8F7 /* _CPTAnimationCGPointPeriod.h in Headers */, C37EA6811BC83F2A0091C8F7 /* _NSDecimalNumberExtensions.h in Headers */, C37EA6821BC83F2A0091C8F7 /* CPTAxis.h in Headers */, @@ -2112,6 +2117,7 @@ C38A0A2C1A461EAA00D45436 /* _CPTAnimationPlotRangePeriod.h in Headers */, C38A09FE1A461D1800D45436 /* CPTFunctionDataSource.h in Headers */, C38A0A5E1A4620D400D45436 /* CPTGradient.h in Headers */, + C3C58E532A58FECA00E295B0 /* CPTDecimalNumberValueTransformer.h in Headers */, C38A0A201A461E8800D45436 /* _CPTAnimationCGPointPeriod.h in Headers */, C38A0A9E1A4621A500D45436 /* _NSDecimalNumberExtensions.h in Headers */, C38A0AF11A4625E800D45436 /* CPTAxis.h in Headers */, @@ -2553,6 +2559,7 @@ C37EA5D01BC83F2A0091C8F7 /* _NSCoderExtensions.m in Sources */, C37EA5D11BC83F2A0091C8F7 /* CPTMutableNumericData.m in Sources */, C37EA5D21BC83F2A0091C8F7 /* CPTNumericData+TypeConversion.m in Sources */, + C3C58E562A58FFB800E295B0 /* CPTDecimalNumberValueTransformer.m in Sources */, C37EA5D31BC83F2A0091C8F7 /* CPTTheme.m in Sources */, C37EA5D41BC83F2A0091C8F7 /* CPTDefinitions.m in Sources */, C37EA5D51BC83F2A0091C8F7 /* _CPTFillImage.m in Sources */, @@ -2686,6 +2693,7 @@ C38A0AA01A4621AC00D45436 /* _NSCoderExtensions.m in Sources */, C38A09DD1A461C8100D45436 /* CPTMutableNumericData.m in Sources */, C38A09DF1A461C8500D45436 /* CPTNumericData+TypeConversion.m in Sources */, + C3C58E552A58FFB700E295B0 /* CPTDecimalNumberValueTransformer.m in Sources */, C38A0B041A46261700D45436 /* CPTTheme.m in Sources */, C38A09F01A461CD900D45436 /* CPTDefinitions.m in Sources */, C38A0A811A4620F700D45436 /* _CPTFillImage.m in Sources */, diff --git a/framework/SPM Umbrella Header/CorePlot.h b/framework/SPM Umbrella Header/CorePlot.h index 3392124a1..e04c0e8fd 100644 --- a/framework/SPM Umbrella Header/CorePlot.h +++ b/framework/SPM Umbrella Header/CorePlot.h @@ -26,6 +26,7 @@ #import "CPTColor.h" #import "CPTColorSpace.h" #import "CPTConstraints.h" +#import "CPTDecimalNumberValueTransformer.h" #import "CPTDefinitions.h" #import "CPTExceptions.h" #import "CPTFill.h" @@ -76,9 +77,3 @@ #import "CPTXYAxisSet.h" #import "CPTXYGraph.h" #import "CPTXYPlotSpace.h" - -#if TARGET_OS_OSX || TARGET_OS_MACCATALYST - -#import "CPTDecimalNumberValueTransformer.h" - -#endif From 92e655ab6907b14786eb46d23d9d8ee8b58ff510 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 8 Jul 2023 10:11:22 -0400 Subject: [PATCH 208/245] Merged the /MacOnly files into /Source because they are also required for Mac Catalyst (using iOS frameworks) builds. --- CorePlot.podspec | 1 - documentation/doxygen/doxygen.config | 3 +-- framework/CorePlot.xcodeproj/project.pbxproj | 4 ---- .../{MacOnly => Source}/CPTDecimalNumberValueTransformer.h | 0 .../{MacOnly => Source}/CPTDecimalNumberValueTransformer.m | 0 5 files changed, 1 insertion(+), 7 deletions(-) rename framework/{MacOnly => Source}/CPTDecimalNumberValueTransformer.h (100%) rename framework/{MacOnly => Source}/CPTDecimalNumberValueTransformer.m (100%) diff --git a/CorePlot.podspec b/CorePlot.podspec index 2e810f987..7244c2940 100644 --- a/CorePlot.podspec +++ b/CorePlot.podspec @@ -28,7 +28,6 @@ Pod::Spec.new do |s| s.source_files = 'framework/*CorePlot*.h', 'framework/Source/*.{h,m}', 'framework/PlatformSpecific/*.{h,m}' s.exclude_files = '**/*{TestCase,Tests}.{h,m}', '**/mainpage.h' - s.osx.source_files = 'framework/MacOnly/*.{h,m}' s.project_header_files = '**/_*.h' s.requires_arc = true diff --git a/documentation/doxygen/doxygen.config b/documentation/doxygen/doxygen.config index 7060652c0..7eb593cc5 100644 --- a/documentation/doxygen/doxygen.config +++ b/documentation/doxygen/doxygen.config @@ -953,8 +953,7 @@ WARN_LOGFILE = # Note: If this tag is empty the current directory is searched. INPUT = "$(SOURCE_ROOT)/Source" \ - "$(SOURCE_ROOT)/PlatformSpecific" \ - "$(SOURCE_ROOT)/MacOnly" + "$(SOURCE_ROOT)/PlatformSpecific" # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 0cd7de848..a960f37e5 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -2934,7 +2934,6 @@ SDKROOT = macosx; USER_HEADER_SEARCH_PATHS = ( "$(SRCROOT)/Source", - "$(SRCROOT)/MacOnly", "$(SRCROOT)/PlatformSpecific", ); }; @@ -2949,7 +2948,6 @@ SDKROOT = macosx; USER_HEADER_SEARCH_PATHS = ( "$(SRCROOT)/Source", - "$(SRCROOT)/MacOnly", "$(SRCROOT)/PlatformSpecific", ); }; @@ -2967,7 +2965,6 @@ SDKROOT = macosx; USER_HEADER_SEARCH_PATHS = ( "$(SRCROOT)/Source", - "$(SRCROOT)/MacOnly", "$(SRCROOT)/PlatformSpecific", ); WRAPPER_EXTENSION = framework; @@ -2986,7 +2983,6 @@ SDKROOT = macosx; USER_HEADER_SEARCH_PATHS = ( "$(SRCROOT)/Source", - "$(SRCROOT)/MacOnly", "$(SRCROOT)/PlatformSpecific", ); WRAPPER_EXTENSION = framework; diff --git a/framework/MacOnly/CPTDecimalNumberValueTransformer.h b/framework/Source/CPTDecimalNumberValueTransformer.h similarity index 100% rename from framework/MacOnly/CPTDecimalNumberValueTransformer.h rename to framework/Source/CPTDecimalNumberValueTransformer.h diff --git a/framework/MacOnly/CPTDecimalNumberValueTransformer.m b/framework/Source/CPTDecimalNumberValueTransformer.m similarity index 100% rename from framework/MacOnly/CPTDecimalNumberValueTransformer.m rename to framework/Source/CPTDecimalNumberValueTransformer.m From 6df03579b8884e23b9d5f983138f9d76745a8513 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 8 Jul 2023 10:40:53 -0400 Subject: [PATCH 209/245] Fixed file references in the Core Plot project for CPTDecimalNumberValueTransformer. --- framework/CorePlot.xcodeproj/project.pbxproj | 4 ++-- spm/Sources/core-plot/CPTDecimalNumberValueTransformer.m | 2 +- .../core-plot/include/CPTDecimalNumberValueTransformer.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index a960f37e5..60ed90a8d 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -776,8 +776,8 @@ 070622310FDF1B250066A6C4 /* CPTPathExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTPathExtensions.m; sourceTree = ""; }; 0706223A0FDF215C0066A6C4 /* CPTBorderedLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTBorderedLayer.h; sourceTree = ""; }; 0706223B0FDF215C0066A6C4 /* CPTBorderedLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTBorderedLayer.m; sourceTree = ""; }; - 070A73DA0F5D8C910014FA84 /* CPTDecimalNumberValueTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPTDecimalNumberValueTransformer.h; path = ../MacOnly/CPTDecimalNumberValueTransformer.h; sourceTree = ""; }; - 070A73DB0F5D8C910014FA84 /* CPTDecimalNumberValueTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CPTDecimalNumberValueTransformer.m; path = ../MacOnly/CPTDecimalNumberValueTransformer.m; sourceTree = ""; }; + 070A73DA0F5D8C910014FA84 /* CPTDecimalNumberValueTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTDecimalNumberValueTransformer.h; sourceTree = ""; }; + 070A73DB0F5D8C910014FA84 /* CPTDecimalNumberValueTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTDecimalNumberValueTransformer.m; sourceTree = ""; }; 070CF7AE0F3CA7AB0001FFF4 /* CorePlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CorePlot.h; sourceTree = ""; }; 071F3CB810FBAB5900D0A7B6 /* License.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = License.txt; path = ../License.txt; sourceTree = SOURCE_ROOT; }; 072161E911D1F6BD009CC871 /* CPTAnnotationHostLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTAnnotationHostLayer.h; sourceTree = ""; }; diff --git a/spm/Sources/core-plot/CPTDecimalNumberValueTransformer.m b/spm/Sources/core-plot/CPTDecimalNumberValueTransformer.m index 1bc4ccfa1..a56dd9e6f 120000 --- a/spm/Sources/core-plot/CPTDecimalNumberValueTransformer.m +++ b/spm/Sources/core-plot/CPTDecimalNumberValueTransformer.m @@ -1 +1 @@ -../../../framework/MacOnly/CPTDecimalNumberValueTransformer.m \ No newline at end of file +../../../framework/Source/CPTDecimalNumberValueTransformer.m \ No newline at end of file diff --git a/spm/Sources/core-plot/include/CPTDecimalNumberValueTransformer.h b/spm/Sources/core-plot/include/CPTDecimalNumberValueTransformer.h index ff51efdf8..eae4be6d7 120000 --- a/spm/Sources/core-plot/include/CPTDecimalNumberValueTransformer.h +++ b/spm/Sources/core-plot/include/CPTDecimalNumberValueTransformer.h @@ -1 +1 @@ -../../../../framework/MacOnly/CPTDecimalNumberValueTransformer.h \ No newline at end of file +../../../../framework/Source/CPTDecimalNumberValueTransformer.h \ No newline at end of file From c352c0cd550a4e7bec2ca8b5b4bea808c62f552f Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 8 Jul 2023 11:06:07 -0400 Subject: [PATCH 210/245] Moved the Current Project Version setting into a .xcconfig file. --- framework/CorePlot.xcodeproj/project.pbxproj | 2 -- framework/xcconfig/CorePlotModule.xcconfig | 2 ++ scripts/README Creating a release package.md | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 60ed90a8d..0c4aecd36 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -2992,14 +2992,12 @@ 1DEB91B208733DA50010E9CD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - CURRENT_PROJECT_VERSION = 2.3; }; name = Debug; }; 1DEB91B308733DA50010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CURRENT_PROJECT_VERSION = 2.3; }; name = Release; }; diff --git a/framework/xcconfig/CorePlotModule.xcconfig b/framework/xcconfig/CorePlotModule.xcconfig index 8af686cef..2efe495e5 100644 --- a/framework/xcconfig/CorePlotModule.xcconfig +++ b/framework/xcconfig/CorePlotModule.xcconfig @@ -5,5 +5,7 @@ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = c99 MODULE_VERIFIER_SUPPORTED_LANGUAGES = objective-c MODULEMAP_FILE = $(SOURCE_ROOT)/Module/module.modulemap +CURRENT_PROJECT_VERSION = 2.4 + PRODUCT_NAME = $(PROJECT_NAME) PRODUCT_MODULE_NAME = $(PRODUCT_NAME:rfc1034identifier) diff --git a/scripts/README Creating a release package.md b/scripts/README Creating a release package.md index 0ec63d29b..def8c612e 100644 --- a/scripts/README Creating a release package.md +++ b/scripts/README Creating a release package.md @@ -5,8 +5,8 @@ Follow these steps to create a Core Plot release and post it to GitHub: 1. Ensure the following tools are installed on your development machine:
      -
    • Xcode 11
    • -
    • [Doxygen](http://www.stack.nl/~dimitri/doxygen/download.html#latestsrc), version 1.8.12 or later, installed in /Applications
    • +
    • Xcode 14 or later
    • +
    • [Doxygen](http://www.stack.nl/~dimitri/doxygen/download.html#latestsrc), version 1.9.7 or later, installed in /Applications
    • [Graphviz](http://www.graphviz.org/Download_macos.php), version 2.36.0 or later
    @@ -18,7 +18,7 @@ Follow these steps to create a Core Plot release and post it to GitHub: `s.source = { :git => 'https://github.com/core-plot/core-plot.git' }` -5. In the "Core Plot" project build settings, set the "Current Project Version" to the release version. Commit the change in Git. +5. In the **CorePlotModule.xcconfig** configuration file, set the `CURRENT_PROJECT_VERSION` to the release version. Commit the change in Git. 6. Using Git, ensure your local Core Plot source directory is in sync with the public repository on GitHub. From b2eb9858ada77bf152e6265fbdc56edc5f215a18 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 8 Jul 2023 20:44:09 -0400 Subject: [PATCH 211/245] Fixed documentation typo. --- framework/Source/CPTColor.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/Source/CPTColor.m b/framework/Source/CPTColor.m index 89ae73fce..03f314ea8 100644 --- a/framework/Source/CPTColor.m +++ b/framework/Source/CPTColor.m @@ -451,7 +451,7 @@ +(nonnull instancetype)colorWithUIColor:(nonnull UIColor *)newUIColor /** @brief Creates and returns a new CPTColor instance initialized with the provided platform-native color. * - * The color can be a dynamic system color or catalog color. This adds support for Dark Mode in iOS13. + * The color can be a dynamic system color or catalog color. This adds support for Dark Mode in iOS 13. * * @param newColor The color to wrap. * @return A new CPTColor instance initialized with the provided platform-native color. From c074ee15626b2eabe46a60d1ef29fee8ee42383d Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 8 Jul 2023 20:56:18 -0400 Subject: [PATCH 212/245] Updated the macOS deployment target in the podspec and .xcconfig file to match the package definition. Updated the changelog to match. --- CorePlot.podspec | 2 +- documentation/changelog.markdown | 4 ++-- framework/xcconfig/CorePlot.xcconfig | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CorePlot.podspec b/CorePlot.podspec index 7244c2940..bb6a7cc2e 100644 --- a/CorePlot.podspec +++ b/CorePlot.podspec @@ -19,7 +19,7 @@ Pod::Spec.new do |s| 'Core Data, and Cocoa Bindings.' s.ios.deployment_target = '12.0' - s.osx.deployment_target = '10.14.6' + s.osx.deployment_target = '10.13' s.tvos.deployment_target = '12.0' s.ios.header_dir = 'ios' diff --git a/documentation/changelog.markdown b/documentation/changelog.markdown index 08ebe9eac..2d12ee19d 100644 --- a/documentation/changelog.markdown +++ b/documentation/changelog.markdown @@ -4,7 +4,7 @@ This release updates Core Plot to be compatible with Xcode 14, Mac Catalyst, and the Swift Package Manager. It adds support for the Swift Package Manager and Mac Catalyst. -The Mac deployment target is now macOS 10.14.6. The iOS deployment target has changed to iOS 12.0. The tvOS deployment target has changed to tvOS 12.0. The iOS static library is obsolete and has been removed. +The Mac deployment target is now macOS 10.13. The iOS deployment target has changed to iOS 12.0. The tvOS deployment target has changed to tvOS 12.0. The iOS static library is obsolete and has been removed. The iOS and tvOS framework targets have been removed because lipo cannot combine device and simulator builds for Apple Silicon in the same output file (both use arm64). Use the Universal XCFramework that contains all platforms and architectures instead. @@ -13,7 +13,7 @@ The iOS and tvOS framework targets have been removed because lipo cannot combine - **New**: Mac Catalyst support - **New**: Swift Package Manager support -- **Changed**: Updated the deployment targets for all supported operating systems for the minimums required by Xcode 14. The Mac deployment target is now macOS 10.14.6. The iOS deployment target is now iOS 12.0. The tvOS deployment target is now tvOS 12.0. +- **Changed**: Updated the deployment targets for all supported operating systems for the minimums required by Xcode 14. The Mac deployment target is now macOS 10.13. The iOS deployment target is now iOS 12.0. The tvOS deployment target is now tvOS 12.0. - **Changed**: Miscellaneous bug fixes and cleanup. - **Removed**: Removed the iOS static library. - **Removed**: Removed the iOS and tvOS framework targets. diff --git a/framework/xcconfig/CorePlot.xcconfig b/framework/xcconfig/CorePlot.xcconfig index e0bc7bb89..f5f7bd0b8 100644 --- a/framework/xcconfig/CorePlot.xcconfig +++ b/framework/xcconfig/CorePlot.xcconfig @@ -3,7 +3,7 @@ ARCHS = $(ARCHS_STANDARD) IPHONEOS_DEPLOYMENT_TARGET = 12.0 -MACOSX_DEPLOYMENT_TARGET = 10.14.6 +MACOSX_DEPLOYMENT_TARGET = 10.13 TVOS_DEPLOYMENT_TARGET = 12.0 SWIFT_VERSION = 5.0 From 276a06894d5fed33af0d562f964cc09980c69940 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 9 Jul 2023 09:19:27 -0400 Subject: [PATCH 213/245] Mute a superfluous warning in the Mac Plot Gallery example app. --- examples/CorePlotGallery/src/mac/PlotGalleryController.m | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/CorePlotGallery/src/mac/PlotGalleryController.m b/examples/CorePlotGallery/src/mac/PlotGalleryController.m index 444979e7d..99f6636ab 100644 --- a/examples/CorePlotGallery/src/mac/PlotGalleryController.m +++ b/examples/CorePlotGallery/src/mac/PlotGalleryController.m @@ -304,6 +304,7 @@ -(nonnull NSView *) collectionView:(nonnull NSCollectionView *)collectionView titleTextField.selectable = NO; #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunguarded-availability-new" +#pragma clang diagnostic ignored "-Wdeprecated-declarations" if ( [NSColor instancesRespondToSelector:@selector(controlAccentColor)] ) { titleTextField.backgroundColor = [NSColor controlAccentColor]; } From a7cd305065b2118961a520519bc01566bd43bb35 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 9 Jul 2023 14:27:16 -0400 Subject: [PATCH 214/245] Moved the ENABLE_USER_SCRIPT_SANDBOXING build setting to make it available to every target in the Core Plot project. --- framework/xcconfig/CorePlot.xcconfig | 2 -- framework/xcconfig/CorePlotDocumentation.xcconfig | 1 + framework/xcconfig/CorePlotWarnings.xcconfig | 1 + 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/xcconfig/CorePlot.xcconfig b/framework/xcconfig/CorePlot.xcconfig index f5f7bd0b8..ec0399567 100644 --- a/framework/xcconfig/CorePlot.xcconfig +++ b/framework/xcconfig/CorePlot.xcconfig @@ -16,8 +16,6 @@ CODE_SIGN_INJECT_BASE_ENTITLEMENTS = YES CODE_SIGN_STYLE = Automatic DEVELOPMENT_TEAM = -ENABLE_USER_SCRIPT_SANDBOXING = NO - ALWAYS_SEARCH_USER_PATHS = NO BUILD_LIBRARY_FOR_DISTRIBUTION = YES diff --git a/framework/xcconfig/CorePlotDocumentation.xcconfig b/framework/xcconfig/CorePlotDocumentation.xcconfig index 23852aebb..12508daf3 100644 --- a/framework/xcconfig/CorePlotDocumentation.xcconfig +++ b/framework/xcconfig/CorePlotDocumentation.xcconfig @@ -1,3 +1,4 @@ PRODUCT_NAME = $(TARGET_NAME) +ENABLE_USER_SCRIPT_SANDBOXING = NO GCC_PREPROCESSOR_DEFINITIONS = $(inherited) DOXYGEN_PATH=/Applications/Doxygen.app/Contents/Resources/doxygen; diff --git a/framework/xcconfig/CorePlotWarnings.xcconfig b/framework/xcconfig/CorePlotWarnings.xcconfig index 3c13584f9..ee676364b 100644 --- a/framework/xcconfig/CorePlotWarnings.xcconfig +++ b/framework/xcconfig/CorePlotWarnings.xcconfig @@ -1,4 +1,5 @@ PRODUCT_NAME = $(TARGET_NAME) +ENABLE_USER_SCRIPT_SANDBOXING = NO ASSETCATALOG_WARNINGS = YES From 43d54fbe703b8dce5a310d8d9f9d4aaf51d29415 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 9 Jul 2023 14:28:27 -0400 Subject: [PATCH 215/245] Fixed the DOXYGEN_PATH setting in the documentation .xcconfig file. --- framework/xcconfig/CorePlotDocumentation.xcconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/xcconfig/CorePlotDocumentation.xcconfig b/framework/xcconfig/CorePlotDocumentation.xcconfig index 12508daf3..9409d7ed2 100644 --- a/framework/xcconfig/CorePlotDocumentation.xcconfig +++ b/framework/xcconfig/CorePlotDocumentation.xcconfig @@ -1,4 +1,4 @@ PRODUCT_NAME = $(TARGET_NAME) ENABLE_USER_SCRIPT_SANDBOXING = NO -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) DOXYGEN_PATH=/Applications/Doxygen.app/Contents/Resources/doxygen; +DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen From c65efc53604a450cb5a68acb7e66c6336ec064bb Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 9 Jul 2023 14:29:01 -0400 Subject: [PATCH 216/245] Removed some unneeded build settings in the Plot Gallery project. --- .../CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj | 4 ---- 1 file changed, 4 deletions(-) diff --git a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj index f8301dc6e..da10ff30d 100644 --- a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj +++ b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj @@ -1061,10 +1061,6 @@ CLANG_ENABLE_OBJC_ARC = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Plot_Gallery_tvOS-Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", From 17ef9fde3a1fea0ffa5539ac9412039c4ef800c8 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 9 Jul 2023 14:31:44 -0400 Subject: [PATCH 217/245] Removed the iOS and tvOS frameworks from the createrelease.py script since those build targets have been removed from the project. --- scripts/createrelease.py | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/scripts/createrelease.py b/scripts/createrelease.py index 1d7db457a..a5873c6c5 100644 --- a/scripts/createrelease.py +++ b/scripts/createrelease.py @@ -16,7 +16,7 @@ def RunXcode(project, target): # Get version from args import sys if len(sys.argv) <= 1: - print Usage() + print(Usage()) exit(1) version = sys.argv[1] @@ -30,6 +30,7 @@ def RunXcode(project, target): rmtree(join(frameworkDir, 'CorePlotTouchDocs.docset'), True) # Remove old build directories +rmtree(join(projectRoot, 'build'), True) rmtree(join(frameworkDir, 'build'), True) examples = listdir('examples') for ex in examples: @@ -57,33 +58,17 @@ def RunXcode(project, target): # Binaries binariesDir = join(releaseRootDir, 'Binaries') macosDir = join(binariesDir, 'MacOS') -iosDir = join(binariesDir, 'iOS') -tvosDir = join(binariesDir, 'tvOS') universalDir = join(binariesDir, 'All') makedirs(macosDir) -mkdir(iosDir) -mkdir(tvosDir) mkdir(universalDir) # Build Mac Framework chdir('framework') RunXcode('CorePlot.xcodeproj', 'CorePlot Mac') -macProductsDir = join(projectRoot, 'build/Release') +macProductsDir = join(frameworkDir, 'build/Release') macFramework = join(macProductsDir, 'CorePlot.framework') copytree(macFramework, join(macosDir, 'CorePlot.framework'), symlinks=True) -# Build iOS Framework -RunXcode('CorePlot.xcodeproj', 'Universal iOS Framework') -iOSProductsDir = join(projectRoot, 'build/Release-iphoneuniversal') -iOSFramework = join(iOSProductsDir, 'CorePlot.framework') -copytree(iOSFramework, join(iosDir, 'CorePlot.framework'), symlinks=True) - -# Build tvOS Framework -RunXcode('CorePlot.xcodeproj', 'Universal tvOS Framework') -tvOSProductsDir = join(projectRoot, 'build/Release-appletvuniversal') -tvOSFramework = join(tvOSProductsDir, 'CorePlot.framework') -copytree(tvOSFramework, join(tvosDir, 'CorePlot.framework'), symlinks=True) - # Build Universal Framework RunXcode('CorePlot.xcodeproj', 'Universal XCFramework') universalProductsDir = join(projectRoot, 'build/Release-universal') From d0a893ad7a38f963662e6122d4fa56c83c59c619 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 9 Jul 2023 14:32:31 -0400 Subject: [PATCH 218/245] Updated the comments in the documentation script. --- scripts/generate_core_plot_docs.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/generate_core_plot_docs.sh b/scripts/generate_core_plot_docs.sh index e5a8a1877..f68562868 100755 --- a/scripts/generate_core_plot_docs.sh +++ b/scripts/generate_core_plot_docs.sh @@ -1,6 +1,6 @@ #!/bin/sh -# Build the doxygen documentation for the project +# Build the Doxygen documentation for the project # Required script parameters: # $1: Doxygen .config filename @@ -22,12 +22,12 @@ DOXYGEN_FOLDER="${SOURCE_ROOT}/../documentation/doxygen" if ! [ -f "${DOXYGEN_FOLDER}/$1.config" ] then - echo doxygen config file does not exist + echo Doxygen config file does not exist ${DOXYGEN_PATH} -g "${DOXYGEN_FOLDER}/$1.config" fi -# Run doxygen on the updated config file. -# Note: doxygen creates a Makefile that does most of the heavy lifting. +# Run Doxygen on the updated config file. +# Note: Doxygen creates a Makefile that does most of the heavy lifting. ${DOXYGEN_PATH} "${DOXYGEN_FOLDER}/$1.config" # make a copy of the html docs From 06992107faa901a2255b9239ea4cdcedb4c7cf0f Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 9 Jul 2023 14:33:39 -0400 Subject: [PATCH 219/245] Updated the release instructions to use Python 3 to run the release script. --- scripts/README Creating a release package.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/README Creating a release package.md b/scripts/README Creating a release package.md index def8c612e..a343b0155 100644 --- a/scripts/README Creating a release package.md +++ b/scripts/README Creating a release package.md @@ -8,6 +8,7 @@ Follow these steps to create a Core Plot release and post it to GitHub:
  • Xcode 14 or later
  • [Doxygen](http://www.stack.nl/~dimitri/doxygen/download.html#latestsrc), version 1.9.7 or later, installed in /Applications
  • [Graphviz](http://www.graphviz.org/Download_macos.php), version 2.36.0 or later
  • +
  • [Python 3](https://www.python.org/downloads/)
  • 2. Ensure the [change log](https://github.com/core-plot/core-plot/blob/master/documentation/changelog.markdown) and [podspec](https://github.com/core-plot/core-plot/blob/master/CorePlot.podspec) are up-to-date and committed to the Git repository. @@ -36,7 +37,7 @@ Follow these steps to create a Core Plot release and post it to GitHub: 10. Run the createrelease script: - `$ python createrelease.py ` + `$ python3 createrelease.py ` 11. Review the messages printed in the Terminal window and verify that all build steps succeeded. From 3dd30f8d4fc07d22c854182b60699fc5fc250358 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 16 Jul 2023 15:47:35 -0400 Subject: [PATCH 220/245] Changed to the Mac CPTTestApp example app to use module references to test that build process. --- examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj | 4 +++- examples/CPTTestApp/Source/AxisDemoController.h | 4 ++-- examples/CPTTestApp/Source/CPTPlotSymbolTestController.h | 4 ++-- examples/CPTTestApp/Source/Controller.h | 4 ++-- examples/CPTTestApp/Source/RotationView.h | 4 ++-- examples/CPTTestApp/Source/SelectionDemoController.h | 4 ++-- 6 files changed, 13 insertions(+), 11 deletions(-) diff --git a/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj b/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj index 0ecd6f6ca..3e542546c 100644 --- a/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj @@ -318,7 +318,7 @@ 07032B6C11ABB9E000463D20 /* UnitTests.xctest */ = { isa = PBXReferenceProxy; fileType = wrapper.cfbundle; - path = UnitTests.xctest; + path = "UnitTests Mac.xctest"; remoteRef = 07032B6B11ABB9E000463D20 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -453,6 +453,7 @@ baseConfigurationReference = C39B4BEE2962136300ABA414 /* CorePlotDebug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; COPY_PHASE_STRIP = NO; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; @@ -469,6 +470,7 @@ baseConfigurationReference = C39B4BFB2962136300ABA414 /* CorePlotRelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; COPY_PHASE_STRIP = NO; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; diff --git a/examples/CPTTestApp/Source/AxisDemoController.h b/examples/CPTTestApp/Source/AxisDemoController.h index b84abd928..8406174e7 100644 --- a/examples/CPTTestApp/Source/AxisDemoController.h +++ b/examples/CPTTestApp/Source/AxisDemoController.h @@ -1,5 +1,5 @@ -#import -#import +@import Cocoa; +@import CorePlot; @interface AxisDemoController : NSObject diff --git a/examples/CPTTestApp/Source/CPTPlotSymbolTestController.h b/examples/CPTTestApp/Source/CPTPlotSymbolTestController.h index 0fcd24309..bee169529 100644 --- a/examples/CPTTestApp/Source/CPTPlotSymbolTestController.h +++ b/examples/CPTTestApp/Source/CPTPlotSymbolTestController.h @@ -1,5 +1,5 @@ -#import -#import +@import Cocoa; +@import CorePlot; @interface CPTPlotSymbolTestController : NSObject diff --git a/examples/CPTTestApp/Source/Controller.h b/examples/CPTTestApp/Source/Controller.h index d6fee2276..3d1d8572c 100644 --- a/examples/CPTTestApp/Source/Controller.h +++ b/examples/CPTTestApp/Source/Controller.h @@ -1,6 +1,6 @@ #import "RotationView.h" -#import -#import +@import Cocoa; +@import CorePlot; @interface Controller : NSArrayController diff --git a/examples/CPTTestApp/Source/RotationView.h b/examples/CPTTestApp/Source/RotationView.h index 0ec33c63c..bfd75ba23 100644 --- a/examples/CPTTestApp/Source/RotationView.h +++ b/examples/CPTTestApp/Source/RotationView.h @@ -3,8 +3,8 @@ // CPTTestApp // -#import -#import +@import Cocoa; +@import QuartzCore; @protocol CPTRotationDelegate; diff --git a/examples/CPTTestApp/Source/SelectionDemoController.h b/examples/CPTTestApp/Source/SelectionDemoController.h index a94d0e322..d03ffa224 100644 --- a/examples/CPTTestApp/Source/SelectionDemoController.h +++ b/examples/CPTTestApp/Source/SelectionDemoController.h @@ -1,5 +1,5 @@ -#import -#import +@import Cocoa; +@import CorePlot; @interface SelectionDemoController : NSObject Date: Sun, 24 Sep 2023 15:57:52 -0400 Subject: [PATCH 221/245] Updated the documentation config files for Doxygen 1.9.8. --- documentation/doxygen/doxygen touch.config | 91 ++++++++++++++++------ documentation/doxygen/doxygen.config | 91 ++++++++++++++++------ 2 files changed, 138 insertions(+), 44 deletions(-) diff --git a/documentation/doxygen/doxygen touch.config b/documentation/doxygen/doxygen touch.config index 73b5fb7e1..bff2b82e9 100644 --- a/documentation/doxygen/doxygen touch.config +++ b/documentation/doxygen/doxygen touch.config @@ -1,4 +1,4 @@ -# Doxyfile 1.9.7 +# Doxyfile 1.9.8 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -375,9 +375,9 @@ TOC_INCLUDE_HEADINGS = 0 # The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to # generate identifiers for the Markdown headings. Note: Every identifier is # unique. -# Possible values are: DOXYGEN Use a fixed 'autotoc_md' string followed by a -# sequence number starting at 0. and GITHUB Use the lower case version of title -# with any whitespace replaced by '-' and punctations characters removed.. +# Possible values are: DOXYGEN use a fixed 'autotoc_md' string followed by a +# sequence number starting at 0 and GITHUB use the lower case version of title +# with any whitespace replaced by '-' and punctuation characters removed. # The default value is: DOXYGEN. # This tag requires that the tag MARKDOWN_SUPPORT is set to YES. @@ -986,12 +986,12 @@ INPUT_FILE_ENCODING = # Note the list of default checked file patterns might differ from the list of # default file extension mappings. # -# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, -# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, -# *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, -# *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C -# comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, -# *.vhdl, *.ucf, *.qsf and *.ice. +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cxxm, +# *.cpp, *.cppm, *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, +# *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.ixx, *.l, *.cs, *.d, *.php, +# *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be +# provided as doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f18, *.f, *.for, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice. FILE_PATTERNS = @@ -1438,6 +1438,13 @@ HTML_DYNAMIC_MENUS = YES HTML_DYNAMIC_SECTIONS = YES +# If the HTML_CODE_FOLDING tag is set to YES then classes and functions can be +# dynamically folded and expanded in the generated HTML source code. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_CODE_FOLDING = YES + # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand # and collapse entries dynamically later on. Doxygen will expand the tree to @@ -2066,7 +2073,7 @@ PDF_HYPERLINKS = YES USE_PDFLATEX = YES -# The LATEX_BATCHMODE tag ignals the behavior of LaTeX in case of an error. +# The LATEX_BATCHMODE tag signals the behavior of LaTeX in case of an error. # Possible values are: NO same as ERROR_STOP, YES same as BATCH, BATCH In batch # mode nothing is printed on the terminal, errors are scrolled as if is # hit at every error; missing files that TeX tries to input or request from @@ -2268,6 +2275,32 @@ DOCBOOK_OUTPUT = docbook GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# Configuration options related to Sqlite3 output +#--------------------------------------------------------------------------- + +# If the GENERATE_SQLITE3 tag is set to YES doxygen will generate a Sqlite3 +# database with symbols found by doxygen stored in tables. +# The default value is: NO. + +GENERATE_SQLITE3 = NO + +# The SQLITE3_OUTPUT tag is used to specify where the Sqlite3 database will be +# put. If a relative path is entered the value of OUTPUT_DIRECTORY will be put +# in front of it. +# The default directory is: sqlite3. +# This tag requires that the tag GENERATE_SQLITE3 is set to YES. + +SQLITE3_OUTPUT = sqlite3 + +# The SQLITE3_OVERWRITE_DB tag is set to YES, the existing doxygen_sqlite3.db +# database file will be recreated with each doxygen run. If set to NO, doxygen +# will warn if an a database file is already found and not modify it. +# The default value is: YES. +# This tag requires that the tag GENERATE_SQLITE3 is set to YES. + +SQLITE3_RECREATE_DB = YES + #--------------------------------------------------------------------------- # Configuration options related to the Perl module output #--------------------------------------------------------------------------- @@ -2435,17 +2468,17 @@ TAGFILES = "$(SOURCE_ROOT)/../documentation/doxygen/doxygen-common # tag file that is based on the input files it reads. See section "Linking to # external documentation" for more information about the usage of tag files. -GENERATE_TAGFILE = "$(SOURCE_ROOT)/../documentation/doxygen/core-plot-touch-tags.xml" +GENERATE_TAGFILE = $(SOURCE_ROOT)/../documentation/doxygen/core-plot-touch-tags.xml -# If the ALLEXTERNALS tag is set to YES, all external class will be listed in -# the class index. If set to NO, only the inherited external classes will be -# listed. +# If the ALLEXTERNALS tag is set to YES, all external classes and namespaces +# will be listed in the class and namespace index. If set to NO, only the +# inherited external classes will be listed. # The default value is: NO. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will be +# in the topic index. If set to NO, only the current project's groups will be # listed. # The default value is: YES. @@ -2539,15 +2572,21 @@ CLASS_GRAPH = YES # If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a # graph for each documented class showing the direct and indirect implementation # dependencies (inheritance, containment, and class references variables) of the -# class with other documented classes. +# class with other documented classes. Explicit enabling a collaboration graph, +# when COLLABORATION_GRAPH is set to NO, can be accomplished by means of the +# command \collaborationgraph. Disabling a collaboration graph can be +# accomplished by means of the command \hidecollaborationgraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for -# groups, showing the direct groups dependencies. See also the chapter Grouping -# in the manual. +# groups, showing the direct groups dependencies. Explicit enabling a group +# dependency graph, when GROUP_GRAPHS is set to NO, can be accomplished by means +# of the command \groupgraph. Disabling a directory graph can be accomplished by +# means of the command \hidegroupgraph. See also the chapter Grouping in the +# manual. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2607,7 +2646,9 @@ TEMPLATE_RELATIONS = NO # If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to # YES then doxygen will generate a graph for each documented file showing the # direct and indirect include dependencies of the file with other documented -# files. +# files. Explicit enabling an include graph, when INCLUDE_GRAPH is is set to NO, +# can be accomplished by means of the command \includegraph. Disabling an +# include graph can be accomplished by means of the command \hideincludegraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2616,7 +2657,10 @@ INCLUDE_GRAPH = YES # If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are # set to YES then doxygen will generate a graph for each documented file showing # the direct and indirect include dependencies of the file with other documented -# files. +# files. Explicit enabling an included by graph, when INCLUDED_BY_GRAPH is set +# to NO, can be accomplished by means of the command \includedbygraph. Disabling +# an included by graph can be accomplished by means of the command +# \hideincludedbygraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2656,7 +2700,10 @@ GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the # dependencies a directory has on other directories in a graphical way. The # dependency relations are determined by the #include relations between the -# files in the directories. +# files in the directories. Explicit enabling a directory graph, when +# DIRECTORY_GRAPH is set to NO, can be accomplished by means of the command +# \directorygraph. Disabling a directory graph can be accomplished by means of +# the command \hidedirectorygraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. diff --git a/documentation/doxygen/doxygen.config b/documentation/doxygen/doxygen.config index 7eb593cc5..0bc6779ac 100644 --- a/documentation/doxygen/doxygen.config +++ b/documentation/doxygen/doxygen.config @@ -1,4 +1,4 @@ -# Doxyfile 1.9.7 +# Doxyfile 1.9.8 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -375,9 +375,9 @@ TOC_INCLUDE_HEADINGS = 0 # The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to # generate identifiers for the Markdown headings. Note: Every identifier is # unique. -# Possible values are: DOXYGEN Use a fixed 'autotoc_md' string followed by a -# sequence number starting at 0. and GITHUB Use the lower case version of title -# with any whitespace replaced by '-' and punctations characters removed.. +# Possible values are: DOXYGEN use a fixed 'autotoc_md' string followed by a +# sequence number starting at 0 and GITHUB use the lower case version of title +# with any whitespace replaced by '-' and punctuation characters removed. # The default value is: DOXYGEN. # This tag requires that the tag MARKDOWN_SUPPORT is set to YES. @@ -986,12 +986,12 @@ INPUT_FILE_ENCODING = # Note the list of default checked file patterns might differ from the list of # default file extension mappings. # -# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, -# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, -# *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, -# *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C -# comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, -# *.vhdl, *.ucf, *.qsf and *.ice. +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cxxm, +# *.cpp, *.cppm, *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, +# *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.ixx, *.l, *.cs, *.d, *.php, +# *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be +# provided as doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f18, *.f, *.for, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice. FILE_PATTERNS = @@ -1438,6 +1438,13 @@ HTML_DYNAMIC_MENUS = YES HTML_DYNAMIC_SECTIONS = YES +# If the HTML_CODE_FOLDING tag is set to YES then classes and functions can be +# dynamically folded and expanded in the generated HTML source code. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_CODE_FOLDING = YES + # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand # and collapse entries dynamically later on. Doxygen will expand the tree to @@ -2066,7 +2073,7 @@ PDF_HYPERLINKS = YES USE_PDFLATEX = YES -# The LATEX_BATCHMODE tag ignals the behavior of LaTeX in case of an error. +# The LATEX_BATCHMODE tag signals the behavior of LaTeX in case of an error. # Possible values are: NO same as ERROR_STOP, YES same as BATCH, BATCH In batch # mode nothing is printed on the terminal, errors are scrolled as if is # hit at every error; missing files that TeX tries to input or request from @@ -2268,6 +2275,32 @@ DOCBOOK_OUTPUT = docbook GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# Configuration options related to Sqlite3 output +#--------------------------------------------------------------------------- + +# If the GENERATE_SQLITE3 tag is set to YES doxygen will generate a Sqlite3 +# database with symbols found by doxygen stored in tables. +# The default value is: NO. + +GENERATE_SQLITE3 = NO + +# The SQLITE3_OUTPUT tag is used to specify where the Sqlite3 database will be +# put. If a relative path is entered the value of OUTPUT_DIRECTORY will be put +# in front of it. +# The default directory is: sqlite3. +# This tag requires that the tag GENERATE_SQLITE3 is set to YES. + +SQLITE3_OUTPUT = sqlite3 + +# The SQLITE3_OVERWRITE_DB tag is set to YES, the existing doxygen_sqlite3.db +# database file will be recreated with each doxygen run. If set to NO, doxygen +# will warn if an a database file is already found and not modify it. +# The default value is: YES. +# This tag requires that the tag GENERATE_SQLITE3 is set to YES. + +SQLITE3_RECREATE_DB = YES + #--------------------------------------------------------------------------- # Configuration options related to the Perl module output #--------------------------------------------------------------------------- @@ -2434,17 +2467,17 @@ TAGFILES = "$(SOURCE_ROOT)/../documentation/doxygen/doxygen-common # tag file that is based on the input files it reads. See section "Linking to # external documentation" for more information about the usage of tag files. -GENERATE_TAGFILE = "$(SOURCE_ROOT)/../documentation/doxygen/core-plot-tags.xml" +GENERATE_TAGFILE = $(SOURCE_ROOT)/../documentation/doxygen/core-plot-tags.xml -# If the ALLEXTERNALS tag is set to YES, all external class will be listed in -# the class index. If set to NO, only the inherited external classes will be -# listed. +# If the ALLEXTERNALS tag is set to YES, all external classes and namespaces +# will be listed in the class and namespace index. If set to NO, only the +# inherited external classes will be listed. # The default value is: NO. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will be +# in the topic index. If set to NO, only the current project's groups will be # listed. # The default value is: YES. @@ -2538,15 +2571,21 @@ CLASS_GRAPH = YES # If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a # graph for each documented class showing the direct and indirect implementation # dependencies (inheritance, containment, and class references variables) of the -# class with other documented classes. +# class with other documented classes. Explicit enabling a collaboration graph, +# when COLLABORATION_GRAPH is set to NO, can be accomplished by means of the +# command \collaborationgraph. Disabling a collaboration graph can be +# accomplished by means of the command \hidecollaborationgraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for -# groups, showing the direct groups dependencies. See also the chapter Grouping -# in the manual. +# groups, showing the direct groups dependencies. Explicit enabling a group +# dependency graph, when GROUP_GRAPHS is set to NO, can be accomplished by means +# of the command \groupgraph. Disabling a directory graph can be accomplished by +# means of the command \hidegroupgraph. See also the chapter Grouping in the +# manual. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2606,7 +2645,9 @@ TEMPLATE_RELATIONS = NO # If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to # YES then doxygen will generate a graph for each documented file showing the # direct and indirect include dependencies of the file with other documented -# files. +# files. Explicit enabling an include graph, when INCLUDE_GRAPH is is set to NO, +# can be accomplished by means of the command \includegraph. Disabling an +# include graph can be accomplished by means of the command \hideincludegraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2615,7 +2656,10 @@ INCLUDE_GRAPH = YES # If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are # set to YES then doxygen will generate a graph for each documented file showing # the direct and indirect include dependencies of the file with other documented -# files. +# files. Explicit enabling an included by graph, when INCLUDED_BY_GRAPH is set +# to NO, can be accomplished by means of the command \includedbygraph. Disabling +# an included by graph can be accomplished by means of the command +# \hideincludedbygraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2655,7 +2699,10 @@ GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the # dependencies a directory has on other directories in a graphical way. The # dependency relations are determined by the #include relations between the -# files in the directories. +# files in the directories. Explicit enabling a directory graph, when +# DIRECTORY_GRAPH is set to NO, can be accomplished by means of the command +# \directorygraph. Disabling a directory graph can be accomplished by means of +# the command \hidedirectorygraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. From d0ebd5583c8c2d9fd878015e6a14a3851fd5d6c7 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 4 Nov 2023 21:47:24 -0400 Subject: [PATCH 222/245] Fixed framework search paths in all of the example apps so the compiler can find the CorePlot framework when building outside of the examples workspace. --- .../CPTTestApp-iPad.xcodeproj/project.pbxproj | 30 +++++++++--------- .../xcshareddata/IDEWorkspaceChecks.plist | 8 +++++ .../project.pbxproj | 26 +++++++--------- .../xcshareddata/IDEWorkspaceChecks.plist | 8 +++++ .../CPTTestApp.xcodeproj/project.pbxproj | 24 ++++++-------- .../xcshareddata/IDEWorkspaceChecks.plist | 8 +++++ .../Plot_Gallery.xcodeproj/project.pbxproj | 31 +++++++++---------- .../xcshareddata/IDEWorkspaceChecks.plist | 8 +++++ .../DatePlot.xcodeproj/project.pbxproj | 20 +++++------- .../xcshareddata/IDEWorkspaceChecks.plist | 8 +++++ .../DropPlot.xcodeproj/project.pbxproj | 26 +++++++--------- .../xcshareddata/IDEWorkspaceChecks.plist | 8 +++++ .../project.pbxproj | 30 +++++++++--------- .../xcshareddata/IDEWorkspaceChecks.plist | 8 +++++ .../RangePlot.xcodeproj/project.pbxproj | 30 +++++++++--------- .../xcshareddata/IDEWorkspaceChecks.plist | 8 +++++ framework/CorePlot.xcodeproj/project.pbxproj | 4 +++ .../xcconfig/CorePlotExamplesDebug.xcconfig | 3 ++ .../xcconfig/CorePlotExamplesRelease.xcconfig | 3 ++ 19 files changed, 173 insertions(+), 118 deletions(-) create mode 100644 examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 examples/CPTTestApp/CPTTestApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 examples/DatePlot/DatePlot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 examples/DropPlot/DropPlot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 examples/RangePlot/RangePlot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 framework/xcconfig/CorePlotExamplesDebug.xcconfig create mode 100644 framework/xcconfig/CorePlotExamplesRelease.xcconfig diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj index 4e20ea3f5..4fa095f18 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj @@ -16,6 +16,8 @@ BC65758F116549890008F594 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC65758E116549890008F594 /* QuartzCore.framework */; }; C314514C2586970F00A857B2 /* CorePlot.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3D414A61A7D843800B6F5D6 /* CorePlot.framework */; }; C314514D2586970F00A857B2 /* CorePlot.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C3D414A61A7D843800B6F5D6 /* CorePlot.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + C39504972AF72842000843D0 /* CorePlotExamplesRelease.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = C39504952AF72842000843D0 /* CorePlotExamplesRelease.xcconfig */; }; + C39504982AF72842000843D0 /* CorePlotExamplesDebug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = C39504962AF72842000843D0 /* CorePlotExamplesDebug.xcconfig */; }; C3D0A1F520E019BF00BA2921 /* CPTTestApp_iPadViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = C3D0A1F720E019BF00BA2921 /* CPTTestApp_iPadViewController.xib */; }; C3D0A20620E019CD00BA2921 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = C3D0A20820E019CD00BA2921 /* MainWindow.xib */; }; C3D0A20920E019D400BA2921 /* Launch Screen.xib in Resources */ = {isa = PBXBuildFile; fileRef = C3D0A20B20E019D400BA2921 /* Launch Screen.xib */; }; @@ -102,11 +104,9 @@ 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 32CA4F630368D1EE00C91783 /* CPTTestApp-iPad_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CPTTestApp-iPad_Prefix.pch"; sourceTree = ""; }; BC65758E116549890008F594 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; - C36E7CC519DE1C1F00EDEACB /* CorePlotWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotWarnings.xcconfig; path = ../../framework/xcconfig/CorePlotWarnings.xcconfig; sourceTree = ""; }; C37A40E120E0320500C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/CPTTestApp_iPad-Info.plist"; sourceTree = ""; }; - C39B4CEF29622F8700ABA414 /* CorePlot.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlot.xcconfig; path = ../../framework/xcconfig/CorePlot.xcconfig; sourceTree = ""; }; - C39B4CF029622F8700ABA414 /* CorePlotDebug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotDebug.xcconfig; path = ../../framework/xcconfig/CorePlotDebug.xcconfig; sourceTree = ""; }; - C39B4CF129622F8700ABA414 /* CorePlotRelease.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotRelease.xcconfig; path = ../../framework/xcconfig/CorePlotRelease.xcconfig; sourceTree = ""; }; + C39504952AF72842000843D0 /* CorePlotExamplesRelease.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = CorePlotExamplesRelease.xcconfig; path = ../../framework/xcconfig/CorePlotExamplesRelease.xcconfig; sourceTree = ""; }; + C39504962AF72842000843D0 /* CorePlotExamplesDebug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = CorePlotExamplesDebug.xcconfig; path = ../../framework/xcconfig/CorePlotExamplesDebug.xcconfig; sourceTree = ""; }; C3CD283817DE9C59008EED1E /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; C3D0A20520E019C900BA2921 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/CPTTestApp_iPadViewController.xib; sourceTree = ""; }; C3D0A20720E019CD00BA2921 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainWindow.xib; sourceTree = ""; }; @@ -173,10 +173,8 @@ children = ( 32CA4F630368D1EE00C91783 /* CPTTestApp-iPad_Prefix.pch */, 29B97316FDCFA39411CA2CEA /* main.m */, - C39B4CEF29622F8700ABA414 /* CorePlot.xcconfig */, - C39B4CF029622F8700ABA414 /* CorePlotDebug.xcconfig */, - C39B4CF129622F8700ABA414 /* CorePlotRelease.xcconfig */, - C36E7CC519DE1C1F00EDEACB /* CorePlotWarnings.xcconfig */, + C39504962AF72842000843D0 /* CorePlotExamplesDebug.xcconfig */, + C39504952AF72842000843D0 /* CorePlotExamplesRelease.xcconfig */, ); name = "Other Sources"; sourceTree = ""; @@ -211,7 +209,7 @@ isa = PBXGroup; children = ( C3D414A21A7D843800B6F5D6 /* CorePlot.framework */, - C3D414A41A7D843800B6F5D6 /* UnitTests.xctest */, + C3D414A41A7D843800B6F5D6 /* UnitTests Mac.xctest */, C3D414A61A7D843800B6F5D6 /* CorePlot.framework */, C3D414A81A7D843800B6F5D6 /* UnitTests iOS.xctest */, C31D01E11D10F4FF008C1EF2 /* CorePlot.framework */, @@ -304,10 +302,10 @@ remoteRef = C3D414A11A7D843800B6F5D6 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - C3D414A41A7D843800B6F5D6 /* UnitTests.xctest */ = { + C3D414A41A7D843800B6F5D6 /* UnitTests Mac.xctest */ = { isa = PBXReferenceProxy; fileType = wrapper.cfbundle; - path = UnitTests.xctest; + path = "UnitTests Mac.xctest"; remoteRef = C3D414A31A7D843800B6F5D6 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -335,7 +333,9 @@ C3D0A20620E019CD00BA2921 /* MainWindow.xib in Resources */, C3D0A1F520E019BF00BA2921 /* CPTTestApp_iPadViewController.xib in Resources */, C3F47B6E17BF99DE0075181F /* CorePlotIcon.png in Resources */, + C39504982AF72842000843D0 /* CorePlotExamplesDebug.xcconfig in Resources */, C3D3936019FD670400148319 /* Images.xcassets in Resources */, + C39504972AF72842000843D0 /* CorePlotExamplesRelease.xcconfig in Resources */, C3F47B6F17BF99DE0075181F /* CorePlotIcon@2x.png in Resources */, C3D0A20920E019D400BA2921 /* Launch Screen.xib in Resources */, ); @@ -402,7 +402,7 @@ /* Begin XCBuildConfiguration section */ 1D6058940D05DD3E006BFB54 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4CF029622F8700ABA414 /* CorePlotDebug.xcconfig */; + baseConfigurationReference = C39504962AF72842000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; @@ -416,7 +416,7 @@ }; 1D6058950D05DD3E006BFB54 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4CF129622F8700ABA414 /* CorePlotRelease.xcconfig */; + baseConfigurationReference = C39504952AF72842000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; @@ -430,7 +430,7 @@ }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4CF029622F8700ABA414 /* CorePlotDebug.xcconfig */; + baseConfigurationReference = C39504962AF72842000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "2,6"; @@ -439,7 +439,7 @@ }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4CF129622F8700ABA414 /* CorePlotRelease.xcconfig */; + baseConfigurationReference = C39504952AF72842000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "2,6"; diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj index 6eb7b8209..e3e51b71c 100644 --- a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj @@ -110,11 +110,9 @@ C359603619CE34FB005CDFB9 /* ScatterPlotController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScatterPlotController.swift; sourceTree = ""; }; C359603B19CE352A005CDFB9 /* CPTTestApp-iPhone-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = "CPTTestApp-iPhone-Bridging-Header.h"; sourceTree = ""; }; C37A40F020E0322D00C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = Base.lproj/Info.plist; sourceTree = ""; }; - C39B4D392962343B00ABA414 /* CorePlotDebug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotDebug.xcconfig; path = ../../framework/xcconfig/CorePlotDebug.xcconfig; sourceTree = ""; }; - C39B4D462962343B00ABA414 /* CorePlotRelease.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotRelease.xcconfig; path = ../../framework/xcconfig/CorePlotRelease.xcconfig; sourceTree = ""; }; - C39B4D472962343B00ABA414 /* CorePlot.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlot.xcconfig; path = ../../framework/xcconfig/CorePlot.xcconfig; sourceTree = ""; }; + C39504A22AF72860000843D0 /* CorePlotExamplesDebug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotExamplesDebug.xcconfig; path = ../../framework/xcconfig/CorePlotExamplesDebug.xcconfig; sourceTree = ""; }; + C39504A32AF72860000843D0 /* CorePlotExamplesRelease.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotExamplesRelease.xcconfig; path = ../../framework/xcconfig/CorePlotExamplesRelease.xcconfig; sourceTree = ""; }; C3B9F9D317503CDD001CCC50 /* BlueTexture.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = BlueTexture.png; sourceTree = ""; }; - C3C3CBDE19EA125D00A0296A /* CorePlotWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotWarnings.xcconfig; path = ../../framework/xcconfig/CorePlotWarnings.xcconfig; sourceTree = ""; }; C3CD283D17DE9C95008EED1E /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; C3D0A22820E01A0600BA2921 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/PieChart.xib; sourceTree = ""; }; C3D0A22920E01A0600BA2921 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/BarChart.xib; sourceTree = ""; }; @@ -180,10 +178,8 @@ isa = PBXGroup; children = ( C359603B19CE352A005CDFB9 /* CPTTestApp-iPhone-Bridging-Header.h */, - C39B4D472962343B00ABA414 /* CorePlot.xcconfig */, - C39B4D392962343B00ABA414 /* CorePlotDebug.xcconfig */, - C39B4D462962343B00ABA414 /* CorePlotRelease.xcconfig */, - C3C3CBDE19EA125D00A0296A /* CorePlotWarnings.xcconfig */, + C39504A22AF72860000843D0 /* CorePlotExamplesDebug.xcconfig */, + C39504A32AF72860000843D0 /* CorePlotExamplesRelease.xcconfig */, ); name = "Other Sources"; sourceTree = ""; @@ -222,7 +218,7 @@ isa = PBXGroup; children = ( C3D414BB1A7D846500B6F5D6 /* CorePlot.framework */, - C3D414BD1A7D846500B6F5D6 /* UnitTests.xctest */, + C3D414BD1A7D846500B6F5D6 /* UnitTests Mac.xctest */, C3D414BF1A7D846500B6F5D6 /* CorePlot.framework */, C3D414C11A7D846500B6F5D6 /* UnitTests iOS.xctest */, C31D01F21D10F506008C1EF2 /* CorePlot.framework */, @@ -317,10 +313,10 @@ remoteRef = C3D414BA1A7D846500B6F5D6 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - C3D414BD1A7D846500B6F5D6 /* UnitTests.xctest */ = { + C3D414BD1A7D846500B6F5D6 /* UnitTests Mac.xctest */ = { isa = PBXReferenceProxy; fileType = wrapper.cfbundle; - path = UnitTests.xctest; + path = "UnitTests Mac.xctest"; remoteRef = C3D414BC1A7D846500B6F5D6 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -436,7 +432,7 @@ /* Begin XCBuildConfiguration section */ 1D6058940D05DD3E006BFB54 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4D392962343B00ABA414 /* CorePlotDebug.xcconfig */; + baseConfigurationReference = C39504A22AF72860000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; @@ -450,7 +446,7 @@ }; 1D6058950D05DD3E006BFB54 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4D462962343B00ABA414 /* CorePlotRelease.xcconfig */; + baseConfigurationReference = C39504A32AF72860000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; @@ -464,7 +460,7 @@ }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4D392962343B00ABA414 /* CorePlotDebug.xcconfig */; + baseConfigurationReference = C39504A22AF72860000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; LD_RUNPATH_SEARCH_PATHS = ( @@ -478,7 +474,7 @@ }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4D462962343B00ABA414 /* CorePlotRelease.xcconfig */; + baseConfigurationReference = C39504A32AF72860000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; LD_RUNPATH_SEARCH_PATHS = ( diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj b/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj index 3e542546c..ceeb80752 100644 --- a/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj @@ -114,10 +114,8 @@ C37A40A620E030C000C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = Base.lproj/Info.plist; sourceTree = ""; }; C38017DF124132610052B00D /* SelectionDemoController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SelectionDemoController.h; path = Source/SelectionDemoController.h; sourceTree = ""; }; C38017E0124132610052B00D /* SelectionDemoController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SelectionDemoController.m; path = Source/SelectionDemoController.m; sourceTree = ""; }; - C3880C3919DCD6A000ED0618 /* CorePlotWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotWarnings.xcconfig; path = ../../framework/xcconfig/CorePlotWarnings.xcconfig; sourceTree = ""; }; - C39B4BEE2962136300ABA414 /* CorePlotDebug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotDebug.xcconfig; path = ../../framework/xcconfig/CorePlotDebug.xcconfig; sourceTree = ""; }; - C39B4BFB2962136300ABA414 /* CorePlotRelease.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotRelease.xcconfig; path = ../../framework/xcconfig/CorePlotRelease.xcconfig; sourceTree = ""; }; - C39B4BFC2962136300ABA414 /* CorePlot.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlot.xcconfig; path = ../../framework/xcconfig/CorePlot.xcconfig; sourceTree = ""; }; + C39504502AF72782000843D0 /* CorePlotExamplesRelease.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotExamplesRelease.xcconfig; path = ../../framework/xcconfig/CorePlotExamplesRelease.xcconfig; sourceTree = ""; }; + C395045A2AF72782000843D0 /* CorePlotExamplesDebug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotExamplesDebug.xcconfig; path = ../../framework/xcconfig/CorePlotExamplesDebug.xcconfig; sourceTree = ""; }; C3D0A1A320E017E400BA2921 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/AxisDemo.xib; sourceTree = ""; }; C3D0A1A420E017E400BA2921 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/CPTTestApp.xib; sourceTree = ""; }; C3D0A1A520E017E400BA2921 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/PlotSymbolDemo.xib; sourceTree = ""; }; @@ -143,7 +141,7 @@ isa = PBXGroup; children = ( 07032B6A11ABB9E000463D20 /* CorePlot.framework */, - 07032B6C11ABB9E000463D20 /* UnitTests.xctest */, + 07032B6C11ABB9E000463D20 /* UnitTests Mac.xctest */, C371E4D11BB714EC00AC18DB /* CorePlot.framework */, C371E4D31BB714EC00AC18DB /* UnitTests iOS.xctest */, C3CBFB6A1BE5874200519EE8 /* CorePlot.framework */, @@ -218,10 +216,8 @@ children = ( 32CA4F630368D1EE00C91783 /* CPTTestApp_Prefix.pch */, 29B97316FDCFA39411CA2CEA /* main.m */, - C39B4BFC2962136300ABA414 /* CorePlot.xcconfig */, - C39B4BEE2962136300ABA414 /* CorePlotDebug.xcconfig */, - C39B4BFB2962136300ABA414 /* CorePlotRelease.xcconfig */, - C3880C3919DCD6A000ED0618 /* CorePlotWarnings.xcconfig */, + C395045A2AF72782000843D0 /* CorePlotExamplesDebug.xcconfig */, + C39504502AF72782000843D0 /* CorePlotExamplesRelease.xcconfig */, ); name = "Other Sources"; sourceTree = ""; @@ -315,7 +311,7 @@ remoteRef = 07032B6911ABB9E000463D20 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 07032B6C11ABB9E000463D20 /* UnitTests.xctest */ = { + 07032B6C11ABB9E000463D20 /* UnitTests Mac.xctest */ = { isa = PBXReferenceProxy; fileType = wrapper.cfbundle; path = "UnitTests Mac.xctest"; @@ -450,7 +446,7 @@ /* Begin XCBuildConfiguration section */ C01FCF4B08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4BEE2962136300ABA414 /* CorePlotDebug.xcconfig */; + baseConfigurationReference = C395045A2AF72782000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; @@ -467,7 +463,7 @@ }; C01FCF4C08A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4BFB2962136300ABA414 /* CorePlotRelease.xcconfig */; + baseConfigurationReference = C39504502AF72782000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; @@ -484,7 +480,7 @@ }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4BEE2962136300ABA414 /* CorePlotDebug.xcconfig */; + baseConfigurationReference = C395045A2AF72782000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { SDKROOT = macosx; }; @@ -492,7 +488,7 @@ }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4BFB2962136300ABA414 /* CorePlotRelease.xcconfig */; + baseConfigurationReference = C39504502AF72782000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { SDKROOT = macosx; }; diff --git a/examples/CPTTestApp/CPTTestApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/CPTTestApp/CPTTestApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/examples/CPTTestApp/CPTTestApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj index da10ff30d..2d3feba85 100644 --- a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj +++ b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj @@ -298,6 +298,8 @@ C360E1DF13B18CAE007994B6 /* CandlestickPlot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CandlestickPlot.m; path = src/plots/CandlestickPlot.m; sourceTree = ""; }; C367249113E103910070F47A /* LineCapDemo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LineCapDemo.h; path = src/plots/LineCapDemo.h; sourceTree = ""; }; C367249213E103910070F47A /* LineCapDemo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LineCapDemo.m; path = src/plots/LineCapDemo.m; sourceTree = ""; }; + C39504412AF7242C000843D0 /* CorePlotExamplesDebug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotExamplesDebug.xcconfig; path = ../../framework/xcconfig/CorePlotExamplesDebug.xcconfig; sourceTree = ""; }; + C39504422AF7242C000843D0 /* CorePlotExamplesRelease.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotExamplesRelease.xcconfig; path = ../../framework/xcconfig/CorePlotExamplesRelease.xcconfig; sourceTree = ""; }; C39C4E3F13BFE1A900CD9194 /* LabelingPolicyDemo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LabelingPolicyDemo.h; path = src/plots/LabelingPolicyDemo.h; sourceTree = ""; }; C39C4E4013BFE1A900CD9194 /* LabelingPolicyDemo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = LabelingPolicyDemo.m; path = src/plots/LabelingPolicyDemo.m; sourceTree = ""; }; C39C4E4213BFE1B400CD9194 /* PlotSpaceDemo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PlotSpaceDemo.h; path = src/plots/PlotSpaceDemo.h; sourceTree = ""; }; @@ -312,16 +314,12 @@ C3B9C26C1BCB237000BD560B /* RootViewControllerTV.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RootViewControllerTV.m; path = src/tvOS/RootViewControllerTV.m; sourceTree = ""; }; C3B9C26D1BCB237000BD560B /* ThemeTableViewControllerTV.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ThemeTableViewControllerTV.h; path = src/tvOS/ThemeTableViewControllerTV.h; sourceTree = ""; }; C3B9C26E1BCB237000BD560B /* ThemeTableViewControllerTV.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ThemeTableViewControllerTV.m; path = src/tvOS/ThemeTableViewControllerTV.m; sourceTree = ""; }; - C3C0DF2719D86B5E00631CAD /* CorePlotWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotWarnings.xcconfig; path = ../../framework/xcconfig/CorePlotWarnings.xcconfig; sourceTree = ""; }; C3D0A1B820E0187600BA2921 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; C3D0A1C520E0188800BA2921 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = "Base.lproj/Launch Screen.xib"; sourceTree = ""; }; C3D0A1C920E018DE00BA2921 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; C3D2FE6219FF1D03002CD4D6 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = img/Images.xcassets; sourceTree = ""; }; C3D70BA4175EB29E00F27173 /* ImageDemo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ImageDemo.h; path = src/plots/ImageDemo.h; sourceTree = ""; }; C3D70BA5175EB29E00F27173 /* ImageDemo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = ImageDemo.m; path = src/plots/ImageDemo.m; sourceTree = ""; }; - C3E4280729626F81007C2758 /* CorePlotDebug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotDebug.xcconfig; path = ../../framework/xcconfig/CorePlotDebug.xcconfig; sourceTree = ""; }; - C3E4281229626F81007C2758 /* CorePlot.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlot.xcconfig; path = ../../framework/xcconfig/CorePlot.xcconfig; sourceTree = ""; }; - C3E4281329626F81007C2758 /* CorePlotRelease.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotRelease.xcconfig; path = ../../framework/xcconfig/CorePlotRelease.xcconfig; sourceTree = ""; }; C3EF42FC19FC75810060791A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = "Plot Gallery-Mac/Images.xcassets"; sourceTree = ""; }; C3F34F1312AB2598008FBDC3 /* DonutChart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DonutChart.h; path = src/plots/DonutChart.h; sourceTree = ""; }; C3F34F1412AB2598008FBDC3 /* DonutChart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = DonutChart.m; path = src/plots/DonutChart.m; sourceTree = ""; }; @@ -461,10 +459,8 @@ 4F22FFAC12342DB1006BF615 /* PlotGallery.m */, C3457A4B17AD7C5D000880F3 /* PiNumberFormatter.h */, C3457A4C17AD7C5D000880F3 /* PiNumberFormatter.m */, - C3E4281229626F81007C2758 /* CorePlot.xcconfig */, - C3E4280729626F81007C2758 /* CorePlotDebug.xcconfig */, - C3E4281329626F81007C2758 /* CorePlotRelease.xcconfig */, - C3C0DF2719D86B5E00631CAD /* CorePlotWarnings.xcconfig */, + C39504412AF7242C000843D0 /* CorePlotExamplesDebug.xcconfig */, + C39504422AF7242C000843D0 /* CorePlotExamplesRelease.xcconfig */, ); name = Shared; sourceTree = ""; @@ -678,7 +674,7 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = YES; - LastUpgradeCheck = 1430; + LastUpgradeCheck = 1510; TargetAttributes = { C30D8AF51BCAF99D0003BB70 = { CreatedOnToolsVersion = 7.1; @@ -1005,7 +1001,7 @@ /* Begin XCBuildConfiguration section */ C01FCF4B08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3E4280729626F81007C2758 /* CorePlotDebug.xcconfig */; + baseConfigurationReference = C39504412AF7242C000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; @@ -1015,6 +1011,7 @@ "$(inherited)", "@loader_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; PRODUCT_NAME = "Plot Gallery"; SDKROOT = macosx; }; @@ -1022,7 +1019,7 @@ }; C01FCF4C08A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3E4281329626F81007C2758 /* CorePlotRelease.xcconfig */; + baseConfigurationReference = C39504422AF7242C000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; @@ -1039,21 +1036,21 @@ }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3E4280729626F81007C2758 /* CorePlotDebug.xcconfig */; + baseConfigurationReference = C39504412AF7242C000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { }; name = Debug; }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3E4281329626F81007C2758 /* CorePlotRelease.xcconfig */; + baseConfigurationReference = C39504422AF7242C000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { }; name = Release; }; C30D8B0A1BCAF99D0003BB70 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3E4280729626F81007C2758 /* CorePlotDebug.xcconfig */; + baseConfigurationReference = C39504412AF7242C000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; @@ -1076,7 +1073,7 @@ }; C30D8B0B1BCAF99D0003BB70 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3E4281329626F81007C2758 /* CorePlotRelease.xcconfig */; + baseConfigurationReference = C39504422AF7242C000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; @@ -1101,7 +1098,7 @@ }; C34CB5431BC9A76A009270A0 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3E4280729626F81007C2758 /* CorePlotDebug.xcconfig */; + baseConfigurationReference = C39504412AF7242C000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; @@ -1118,7 +1115,7 @@ }; C34CB5441BC9A76A009270A0 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3E4281329626F81007C2758 /* CorePlotRelease.xcconfig */; + baseConfigurationReference = C39504422AF7242C000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; diff --git a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj b/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj index fbd0d45f7..cf75e373d 100644 --- a/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj +++ b/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj @@ -75,11 +75,9 @@ C33E19A7198330CA00182AF2 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = Source/AppDelegate.swift; sourceTree = ""; }; C37A409820E030B500C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = Base.lproj/Info.plist; sourceTree = ""; }; C385066522A9CC740086BAD5 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - C39B4BED296212A800ABA414 /* CorePlot.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlot.xcconfig; path = ../../framework/xcconfig/CorePlot.xcconfig; sourceTree = ""; }; - C39B4BFD2962169F00ABA414 /* CorePlotDebug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotDebug.xcconfig; path = ../../framework/xcconfig/CorePlotDebug.xcconfig; sourceTree = ""; }; - C39B4BFE2962169F00ABA414 /* CorePlotRelease.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotRelease.xcconfig; path = ../../framework/xcconfig/CorePlotRelease.xcconfig; sourceTree = ""; }; + C395045B2AF727AE000843D0 /* CorePlotExamplesRelease.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotExamplesRelease.xcconfig; path = ../../framework/xcconfig/CorePlotExamplesRelease.xcconfig; sourceTree = ""; }; + C39504662AF727AE000843D0 /* CorePlotExamplesDebug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotExamplesDebug.xcconfig; path = ../../framework/xcconfig/CorePlotExamplesDebug.xcconfig; sourceTree = ""; }; C3A1443F197DE35F0048F1FF /* DateController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DateController.swift; path = Source/DateController.swift; sourceTree = ""; }; - C3C3CBBF19EA07F600A0296A /* CorePlotWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotWarnings.xcconfig; path = ../../framework/xcconfig/CorePlotWarnings.xcconfig; sourceTree = ""; }; C3D0A1B620E0184100BA2921 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/DatePlot.xib; sourceTree = ""; }; C3D3937319FD6E3500148319 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = DatePlot/Images.xcassets; sourceTree = ""; }; C3F2449F28DBC025008DB9A1 /* Core Plot */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = "Core Plot"; path = ../..; sourceTree = ""; }; @@ -190,10 +188,8 @@ C33E19A219832EEA00182AF2 /* Other Sources */ = { isa = PBXGroup; children = ( - C39B4BED296212A800ABA414 /* CorePlot.xcconfig */, - C39B4BFD2962169F00ABA414 /* CorePlotDebug.xcconfig */, - C39B4BFE2962169F00ABA414 /* CorePlotRelease.xcconfig */, - C3C3CBBF19EA07F600A0296A /* CorePlotWarnings.xcconfig */, + C39504662AF727AE000843D0 /* CorePlotExamplesDebug.xcconfig */, + C395045B2AF727AE000843D0 /* CorePlotExamplesRelease.xcconfig */, ); name = "Other Sources"; sourceTree = ""; @@ -371,7 +367,7 @@ /* Begin XCBuildConfiguration section */ C01FCF4B08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4BFD2962169F00ABA414 /* CorePlotDebug.xcconfig */; + baseConfigurationReference = C39504662AF727AE000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; @@ -385,7 +381,7 @@ }; C01FCF4C08A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4BFE2962169F00ABA414 /* CorePlotRelease.xcconfig */; + baseConfigurationReference = C395045B2AF727AE000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; @@ -399,7 +395,7 @@ }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4BFD2962169F00ABA414 /* CorePlotDebug.xcconfig */; + baseConfigurationReference = C39504662AF727AE000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { SDKROOT = macosx; }; @@ -407,7 +403,7 @@ }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4BFE2962169F00ABA414 /* CorePlotRelease.xcconfig */; + baseConfigurationReference = C395045B2AF727AE000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { SDKROOT = macosx; }; diff --git a/examples/DatePlot/DatePlot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/DatePlot/DatePlot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/examples/DatePlot/DatePlot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj b/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj index 7307620bc..ea1643334 100644 --- a/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj +++ b/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj @@ -104,11 +104,9 @@ C3564D1722A2D115000A54C9 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = ""; }; C3564D1822A2D115000A54C9 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; C37A40A820E0314800C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = Base.lproj/Info.plist; sourceTree = ""; }; - C39B4CE629622B5D00ABA414 /* CorePlotDebug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotDebug.xcconfig; path = ../../framework/xcconfig/CorePlotDebug.xcconfig; sourceTree = ""; }; - C39B4CE729622B5D00ABA414 /* CorePlot.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlot.xcconfig; path = ../../framework/xcconfig/CorePlot.xcconfig; sourceTree = ""; }; - C39B4CE829622B5D00ABA414 /* CorePlotRelease.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotRelease.xcconfig; path = ../../framework/xcconfig/CorePlotRelease.xcconfig; sourceTree = ""; }; + C39504672AF727D1000843D0 /* CorePlotExamplesDebug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotExamplesDebug.xcconfig; path = ../../framework/xcconfig/CorePlotExamplesDebug.xcconfig; sourceTree = ""; }; + C39504712AF727D1000843D0 /* CorePlotExamplesRelease.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotExamplesRelease.xcconfig; path = ../../framework/xcconfig/CorePlotExamplesRelease.xcconfig; sourceTree = ""; }; C3D3937719FD705000148319 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = DropPlot/Images.xcassets; sourceTree = ""; }; - C3D6210E19DF72E000652CE7 /* CorePlotWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotWarnings.xcconfig; path = ../../framework/xcconfig/CorePlotWarnings.xcconfig; sourceTree = ""; }; C3DA082A20E00C3C00F73704 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/CPTPlotDocument.xib; sourceTree = ""; }; C3DA082B20E00C3C00F73704 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; /* End PBXFileReference section */ @@ -186,10 +184,8 @@ children = ( 32DBCF750370BD2300C91783 /* DropPlot_Prefix.pch */, 2A37F4B0FDCFA73011CA2CEA /* main.m */, - C39B4CE729622B5D00ABA414 /* CorePlot.xcconfig */, - C39B4CE629622B5D00ABA414 /* CorePlotDebug.xcconfig */, - C39B4CE829622B5D00ABA414 /* CorePlotRelease.xcconfig */, - C3D6210E19DF72E000652CE7 /* CorePlotWarnings.xcconfig */, + C39504672AF727D1000843D0 /* CorePlotExamplesDebug.xcconfig */, + C39504712AF727D1000843D0 /* CorePlotExamplesRelease.xcconfig */, ); name = "Other Sources"; sourceTree = ""; @@ -220,7 +216,7 @@ isa = PBXGroup; children = ( BC93AA970FDEFEAC00606226 /* CorePlot.framework */, - 07E0DFAC109C4EB500F108D2 /* UnitTests.xctest */, + 07E0DFAC109C4EB500F108D2 /* UnitTests Mac.xctest */, C3B345A81B46194500844218 /* CorePlot.framework */, C3B345AA1B46194500844218 /* UnitTests iOS.xctest */, C3CBFB7A1BE590A300519EE8 /* CorePlot.framework */, @@ -288,10 +284,10 @@ /* End PBXProject section */ /* Begin PBXReferenceProxy section */ - 07E0DFAC109C4EB500F108D2 /* UnitTests.xctest */ = { + 07E0DFAC109C4EB500F108D2 /* UnitTests Mac.xctest */ = { isa = PBXReferenceProxy; fileType = wrapper.cfbundle; - path = UnitTests.xctest; + path = "UnitTests Mac.xctest"; remoteRef = 07E0DFAB109C4EB500F108D2 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -414,7 +410,7 @@ /* Begin XCBuildConfiguration section */ C05733C808A9546B00998B17 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4CE629622B5D00ABA414 /* CorePlotDebug.xcconfig */; + baseConfigurationReference = C39504672AF727D1000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; @@ -429,7 +425,7 @@ }; C05733C908A9546B00998B17 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4CE829622B5D00ABA414 /* CorePlotRelease.xcconfig */; + baseConfigurationReference = C39504712AF727D1000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; @@ -444,7 +440,7 @@ }; C05733CC08A9546B00998B17 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4CE629622B5D00ABA414 /* CorePlotDebug.xcconfig */; + baseConfigurationReference = C39504672AF727D1000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { DEAD_CODE_STRIPPING = YES; SDKROOT = macosx; @@ -453,7 +449,7 @@ }; C05733CD08A9546B00998B17 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4CE829622B5D00ABA414 /* CorePlotRelease.xcconfig */; + baseConfigurationReference = C39504712AF727D1000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { DEAD_CODE_STRIPPING = YES; SDKROOT = macosx; diff --git a/examples/DropPlot/DropPlot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/DropPlot/DropPlot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/examples/DropPlot/DropPlot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj b/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj index 36cb95f07..09d2b89c4 100644 --- a/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj +++ b/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj @@ -14,6 +14,8 @@ 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; BC8E737D0FC0B3CF00DF8511 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC8E737C0FC0B3CF00DF8511 /* QuartzCore.framework */; }; + C395047D2AF72801000843D0 /* CorePlotExamplesRelease.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = C395047B2AF72801000843D0 /* CorePlotExamplesRelease.xcconfig */; }; + C395047E2AF72801000843D0 /* CorePlotExamplesDebug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = C395047C2AF72801000843D0 /* CorePlotExamplesDebug.xcconfig */; }; C3D0A1CB20E0195800BA2921 /* minorTickFormatter.xib in Resources */ = {isa = PBXBuildFile; fileRef = C3D0A1CD20E0195800BA2921 /* minorTickFormatter.xib */; }; C3D3937C19FD732200148319 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C3D3937B19FD732200148319 /* Images.xcassets */; }; /* End PBXBuildFile section */ @@ -100,10 +102,8 @@ BC8E737C0FC0B3CF00DF8511 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; C3564CFD22A2D107000A54C9 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; C37A40B620E0316900C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = Base.lproj/Info.plist; sourceTree = ""; }; - C37FFB5D19E1ECF0003F34C5 /* CorePlotWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotWarnings.xcconfig; path = ../../framework/xcconfig/CorePlotWarnings.xcconfig; sourceTree = ""; }; - C39B4CE929622DED00ABA414 /* CorePlotRelease.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotRelease.xcconfig; path = ../../framework/xcconfig/CorePlotRelease.xcconfig; sourceTree = ""; }; - C39B4CEA29622DEE00ABA414 /* CorePlot.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlot.xcconfig; path = ../../framework/xcconfig/CorePlot.xcconfig; sourceTree = ""; }; - C39B4CEB29622DEE00ABA414 /* CorePlotDebug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotDebug.xcconfig; path = ../../framework/xcconfig/CorePlotDebug.xcconfig; sourceTree = ""; }; + C395047B2AF72801000843D0 /* CorePlotExamplesRelease.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = CorePlotExamplesRelease.xcconfig; path = ../../framework/xcconfig/CorePlotExamplesRelease.xcconfig; sourceTree = ""; }; + C395047C2AF72801000843D0 /* CorePlotExamplesDebug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = CorePlotExamplesDebug.xcconfig; path = ../../framework/xcconfig/CorePlotExamplesDebug.xcconfig; sourceTree = ""; }; C3D0A1DA20E0195F00BA2921 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/minorTickFormatter.xib; sourceTree = ""; }; C3D3937B19FD732200148319 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = minorTickFormatter/Images.xcassets; sourceTree = ""; }; /* End PBXFileReference section */ @@ -126,7 +126,7 @@ isa = PBXGroup; children = ( 076184C10F3CAD5900A89A76 /* CorePlot.framework */, - 07E0DF80109C4E9500F108D2 /* UnitTests.xctest */, + 07E0DF80109C4E9500F108D2 /* UnitTests Mac.xctest */, C3B345B81B46195100844218 /* CorePlot.framework */, C3B345BA1B46195100844218 /* UnitTests iOS.xctest */, C310CE781C0A3DF000C4FCB4 /* CorePlot.framework */, @@ -194,10 +194,8 @@ children = ( 32CA4F630368D1EE00C91783 /* minorTickFormatter_Prefix.pch */, 29B97316FDCFA39411CA2CEA /* main.m */, - C39B4CEA29622DEE00ABA414 /* CorePlot.xcconfig */, - C39B4CEB29622DEE00ABA414 /* CorePlotDebug.xcconfig */, - C39B4CE929622DED00ABA414 /* CorePlotRelease.xcconfig */, - C37FFB5D19E1ECF0003F34C5 /* CorePlotWarnings.xcconfig */, + C395047C2AF72801000843D0 /* CorePlotExamplesDebug.xcconfig */, + C395047B2AF72801000843D0 /* CorePlotExamplesRelease.xcconfig */, ); name = "Other Sources"; sourceTree = ""; @@ -288,10 +286,10 @@ remoteRef = 076184C00F3CAD5900A89A76 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 07E0DF80109C4E9500F108D2 /* UnitTests.xctest */ = { + 07E0DF80109C4E9500F108D2 /* UnitTests Mac.xctest */ = { isa = PBXReferenceProxy; fileType = wrapper.cfbundle; - path = UnitTests.xctest; + path = "UnitTests Mac.xctest"; remoteRef = 07E0DF7F109C4E9500F108D2 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -331,7 +329,9 @@ buildActionMask = 2147483647; files = ( 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */, + C395047E2AF72801000843D0 /* CorePlotExamplesDebug.xcconfig in Resources */, C3D3937C19FD732200148319 /* Images.xcassets in Resources */, + C395047D2AF72801000843D0 /* CorePlotExamplesRelease.xcconfig in Resources */, C3D0A1CB20E0195800BA2921 /* minorTickFormatter.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -388,7 +388,7 @@ /* Begin XCBuildConfiguration section */ C01FCF4B08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4CEB29622DEE00ABA414 /* CorePlotDebug.xcconfig */; + baseConfigurationReference = C395047C2AF72801000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; @@ -403,7 +403,7 @@ }; C01FCF4C08A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4CE929622DED00ABA414 /* CorePlotRelease.xcconfig */; + baseConfigurationReference = C395047B2AF72801000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; @@ -418,7 +418,7 @@ }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4CEB29622DEE00ABA414 /* CorePlotDebug.xcconfig */; + baseConfigurationReference = C395047C2AF72801000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { SDKROOT = macosx; }; @@ -426,7 +426,7 @@ }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4CE929622DED00ABA414 /* CorePlotRelease.xcconfig */; + baseConfigurationReference = C395047B2AF72801000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { SDKROOT = macosx; }; diff --git a/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj b/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj index 7a18e55be..16a9e3435 100644 --- a/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj +++ b/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj @@ -14,6 +14,8 @@ 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; BC8E737D0FC0B3CF00DF8511 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC8E737C0FC0B3CF00DF8511 /* QuartzCore.framework */; }; + C395048A2AF72821000843D0 /* CorePlotExamplesDebug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = C39504882AF72820000843D0 /* CorePlotExamplesDebug.xcconfig */; }; + C395048B2AF72821000843D0 /* CorePlotExamplesRelease.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = C39504892AF72820000843D0 /* CorePlotExamplesRelease.xcconfig */; }; C3D0A17B20E0179100BA2921 /* RangePlot.xib in Resources */ = {isa = PBXBuildFile; fileRef = C3D0A17D20E0179100BA2921 /* RangePlot.xib */; }; C3D3938219FD786F00148319 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C3D3938119FD786F00148319 /* Images.xcassets */; }; /* End PBXBuildFile section */ @@ -100,10 +102,8 @@ BC8E737C0FC0B3CF00DF8511 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; C3564CBC22A2D0E1000A54C9 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; C37A40C420E0318900C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = Base.lproj/Info.plist; sourceTree = ""; }; - C37FFB6019E1EEB6003F34C5 /* CorePlotWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotWarnings.xcconfig; path = ../../framework/xcconfig/CorePlotWarnings.xcconfig; sourceTree = ""; }; - C39B4CEC29622ECC00ABA414 /* CorePlot.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlot.xcconfig; path = ../../framework/xcconfig/CorePlot.xcconfig; sourceTree = ""; }; - C39B4CED29622ECC00ABA414 /* CorePlotRelease.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotRelease.xcconfig; path = ../../framework/xcconfig/CorePlotRelease.xcconfig; sourceTree = ""; }; - C39B4CEE29622ECC00ABA414 /* CorePlotDebug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotDebug.xcconfig; path = ../../framework/xcconfig/CorePlotDebug.xcconfig; sourceTree = ""; }; + C39504882AF72820000843D0 /* CorePlotExamplesDebug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = CorePlotExamplesDebug.xcconfig; path = ../../framework/xcconfig/CorePlotExamplesDebug.xcconfig; sourceTree = ""; }; + C39504892AF72820000843D0 /* CorePlotExamplesRelease.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = CorePlotExamplesRelease.xcconfig; path = ../../framework/xcconfig/CorePlotExamplesRelease.xcconfig; sourceTree = ""; }; C3D0A18A20E0179F00BA2921 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/RangePlot.xib; sourceTree = ""; }; C3D3938119FD786F00148319 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = RangePlot/Images.xcassets; sourceTree = ""; }; /* End PBXFileReference section */ @@ -126,7 +126,7 @@ isa = PBXGroup; children = ( 076184C10F3CAD5900A89A76 /* CorePlot.framework */, - 07E0DF80109C4E9500F108D2 /* UnitTests.xctest */, + 07E0DF80109C4E9500F108D2 /* UnitTests Mac.xctest */, C3B345C81B46195900844218 /* CorePlot.framework */, C3B345CA1B46195900844218 /* UnitTests iOS.xctest */, C310CE881C0A3DF700C4FCB4 /* CorePlot.framework */, @@ -194,10 +194,8 @@ children = ( 32CA4F630368D1EE00C91783 /* RangePlot_Prefix.pch */, 29B97316FDCFA39411CA2CEA /* main.m */, - C39B4CEC29622ECC00ABA414 /* CorePlot.xcconfig */, - C39B4CEE29622ECC00ABA414 /* CorePlotDebug.xcconfig */, - C39B4CED29622ECC00ABA414 /* CorePlotRelease.xcconfig */, - C37FFB6019E1EEB6003F34C5 /* CorePlotWarnings.xcconfig */, + C39504882AF72820000843D0 /* CorePlotExamplesDebug.xcconfig */, + C39504892AF72820000843D0 /* CorePlotExamplesRelease.xcconfig */, ); name = "Other Sources"; sourceTree = ""; @@ -288,10 +286,10 @@ remoteRef = 076184C00F3CAD5900A89A76 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 07E0DF80109C4E9500F108D2 /* UnitTests.xctest */ = { + 07E0DF80109C4E9500F108D2 /* UnitTests Mac.xctest */ = { isa = PBXReferenceProxy; fileType = wrapper.cfbundle; - path = UnitTests.xctest; + path = "UnitTests Mac.xctest"; remoteRef = 07E0DF7F109C4E9500F108D2 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -333,6 +331,8 @@ 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */, C3D3938219FD786F00148319 /* Images.xcassets in Resources */, C3D0A17B20E0179100BA2921 /* RangePlot.xib in Resources */, + C395048A2AF72821000843D0 /* CorePlotExamplesDebug.xcconfig in Resources */, + C395048B2AF72821000843D0 /* CorePlotExamplesRelease.xcconfig in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -388,7 +388,7 @@ /* Begin XCBuildConfiguration section */ C01FCF4B08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4CEE29622ECC00ABA414 /* CorePlotDebug.xcconfig */; + baseConfigurationReference = C39504882AF72820000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; @@ -403,7 +403,7 @@ }; C01FCF4C08A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4CED29622ECC00ABA414 /* CorePlotRelease.xcconfig */; + baseConfigurationReference = C39504892AF72820000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; @@ -418,7 +418,7 @@ }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4CEE29622ECC00ABA414 /* CorePlotDebug.xcconfig */; + baseConfigurationReference = C39504882AF72820000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { SDKROOT = macosx; }; @@ -426,7 +426,7 @@ }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C39B4CED29622ECC00ABA414 /* CorePlotRelease.xcconfig */; + baseConfigurationReference = C39504892AF72820000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { SDKROOT = macosx; }; diff --git a/examples/RangePlot/RangePlot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/RangePlot/RangePlot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/examples/RangePlot/RangePlot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 0c4aecd36..9886b949c 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -977,6 +977,8 @@ C38DD49211A04B7A002A68E7 /* _CPTGridLineGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTGridLineGroup.m; sourceTree = ""; }; C3920AC21395B6500045F3BB /* CPTLegend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTLegend.h; sourceTree = ""; }; C3920AC31395B6500045F3BB /* CPTLegend.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTLegend.m; sourceTree = ""; }; + C395043F2AF723E3000843D0 /* CorePlotExamplesDebug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotExamplesDebug.xcconfig; path = xcconfig/CorePlotExamplesDebug.xcconfig; sourceTree = ""; }; + C39504402AF723E3000843D0 /* CorePlotExamplesRelease.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotExamplesRelease.xcconfig; path = xcconfig/CorePlotExamplesRelease.xcconfig; sourceTree = ""; }; C3978E0413CE653B00A420D9 /* _NSCoderExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _NSCoderExtensions.h; sourceTree = ""; }; C3978E0513CE653B00A420D9 /* _NSCoderExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = _NSCoderExtensions.m; sourceTree = ""; }; C3A259E12A329D1D00D2BDA7 /* doxygen-common-tags.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = "doxygen-common-tags.xml"; path = "../documentation/doxygen/doxygen-common-tags.xml"; sourceTree = ""; }; @@ -1468,6 +1470,8 @@ 070CF7AE0F3CA7AB0001FFF4 /* CorePlot.h */, C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */, C3B0E7B229CA7B3200FC94B5 /* CorePlotDebugModule.xcconfig */, + C395043F2AF723E3000843D0 /* CorePlotExamplesDebug.xcconfig */, + C39504402AF723E3000843D0 /* CorePlotExamplesRelease.xcconfig */, C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */, C3B0E7B329CA7B3200FC94B5 /* CorePlotReleaseModule.xcconfig */, C3B0E7B429CA7B6000FC94B5 /* CorePlotModule.xcconfig */, diff --git a/framework/xcconfig/CorePlotExamplesDebug.xcconfig b/framework/xcconfig/CorePlotExamplesDebug.xcconfig new file mode 100644 index 000000000..12e640ab7 --- /dev/null +++ b/framework/xcconfig/CorePlotExamplesDebug.xcconfig @@ -0,0 +1,3 @@ +#include "CorePlotDebug.xcconfig" + +FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../../framework/build/**" diff --git a/framework/xcconfig/CorePlotExamplesRelease.xcconfig b/framework/xcconfig/CorePlotExamplesRelease.xcconfig new file mode 100644 index 000000000..25e9f8fc7 --- /dev/null +++ b/framework/xcconfig/CorePlotExamplesRelease.xcconfig @@ -0,0 +1,3 @@ +#include "CorePlotRelease.xcconfig" + +FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../../framework/build/**" From 58c75c0393304ba3e34760d016914fc320799938 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 5 Nov 2023 09:10:22 -0500 Subject: [PATCH 223/245] Refactored the example app .xcconfig files to eliminate repeated lines and fixed the search path to work even when the individual build folders don't exist. --- framework/CorePlot.xcodeproj/project.pbxproj | 2 ++ framework/xcconfig/CorePlotExamples.xcconfig | 1 + framework/xcconfig/CorePlotExamplesDebug.xcconfig | 3 +-- framework/xcconfig/CorePlotExamplesRelease.xcconfig | 3 +-- 4 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 framework/xcconfig/CorePlotExamples.xcconfig diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index 9886b949c..d682e2467 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -982,6 +982,7 @@ C3978E0413CE653B00A420D9 /* _NSCoderExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _NSCoderExtensions.h; sourceTree = ""; }; C3978E0513CE653B00A420D9 /* _NSCoderExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = _NSCoderExtensions.m; sourceTree = ""; }; C3A259E12A329D1D00D2BDA7 /* doxygen-common-tags.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = "doxygen-common-tags.xml"; path = "../documentation/doxygen/doxygen-common-tags.xml"; sourceTree = ""; }; + C3A305202AF7D8AF00BD5A61 /* CorePlotExamples.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotExamples.xcconfig; path = xcconfig/CorePlotExamples.xcconfig; sourceTree = ""; }; C3A695E3146A19BC00AF5653 /* CPTMutablePlotRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTMutablePlotRange.h; sourceTree = ""; }; C3A695E4146A19BC00AF5653 /* CPTMutablePlotRange.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTMutablePlotRange.m; sourceTree = ""; }; C3AE08292A58CB0300C1022A /* CorePlotDocumentation.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotDocumentation.xcconfig; path = xcconfig/CorePlotDocumentation.xcconfig; sourceTree = ""; }; @@ -1470,6 +1471,7 @@ 070CF7AE0F3CA7AB0001FFF4 /* CorePlot.h */, C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */, C3B0E7B229CA7B3200FC94B5 /* CorePlotDebugModule.xcconfig */, + C3A305202AF7D8AF00BD5A61 /* CorePlotExamples.xcconfig */, C395043F2AF723E3000843D0 /* CorePlotExamplesDebug.xcconfig */, C39504402AF723E3000843D0 /* CorePlotExamplesRelease.xcconfig */, C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */, diff --git a/framework/xcconfig/CorePlotExamples.xcconfig b/framework/xcconfig/CorePlotExamples.xcconfig new file mode 100644 index 000000000..612d80cbe --- /dev/null +++ b/framework/xcconfig/CorePlotExamples.xcconfig @@ -0,0 +1 @@ +FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../../framework/**" diff --git a/framework/xcconfig/CorePlotExamplesDebug.xcconfig b/framework/xcconfig/CorePlotExamplesDebug.xcconfig index 12e640ab7..48c5696ee 100644 --- a/framework/xcconfig/CorePlotExamplesDebug.xcconfig +++ b/framework/xcconfig/CorePlotExamplesDebug.xcconfig @@ -1,3 +1,2 @@ #include "CorePlotDebug.xcconfig" - -FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../../framework/build/**" +#include "CorePlotExamples.xcconfig" diff --git a/framework/xcconfig/CorePlotExamplesRelease.xcconfig b/framework/xcconfig/CorePlotExamplesRelease.xcconfig index 25e9f8fc7..ac9dd9f63 100644 --- a/framework/xcconfig/CorePlotExamplesRelease.xcconfig +++ b/framework/xcconfig/CorePlotExamplesRelease.xcconfig @@ -1,3 +1,2 @@ #include "CorePlotRelease.xcconfig" - -FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../../framework/build/**" +#include "CorePlotExamples.xcconfig" From a4e0887671f83436ad5377ccaffeb6d95c9c5710 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 5 Nov 2023 12:38:34 -0500 Subject: [PATCH 224/245] Fixed some issues with deprecated Apple APIs. --- .../PlatformSpecific/CPTGraphHostingView.m | 12 ++++++++++ .../CPTImagePlatformSpecific.m | 22 +++++++++++++++++ framework/Source/CPTGraph.m | 24 +++++++++++++++---- framework/Source/CPTLayer.m | 21 ++++++++++++---- 4 files changed, 70 insertions(+), 9 deletions(-) diff --git a/framework/PlatformSpecific/CPTGraphHostingView.m b/framework/PlatformSpecific/CPTGraphHostingView.m index 8b8ae8bcb..eefabb519 100644 --- a/framework/PlatformSpecific/CPTGraphHostingView.m +++ b/framework/PlatformSpecific/CPTGraphHostingView.m @@ -773,6 +773,15 @@ -(void)commonInit // This undoes the normal coordinate space inversion that UIViews apply to their layers self.layer.sublayerTransform = CATransform3DMakeScale(CPTFloat(1.0), CPTFloat(-1.0), CPTFloat(1.0)); + +#ifdef __IPHONE_17_0 + if ( @available(iOS 17, tvOS 17, *)) { + [self registerForTraitChanges:@[[UITraitCollection class]] + withHandler: ^(__unused id traitEnvironment, __unused UITraitCollection *previousCollection) { + [self.hostedGraph setNeedsDisplayAllLayers]; + }]; + } +#endif } -(nonnull instancetype)initWithFrame:(CGRect)frame @@ -1045,6 +1054,7 @@ -(void)graphNeedsRedraw:(nonnull NSNotification *__unused)notification [self setNeedsDisplay]; } +#if (__is_target_os(iphoneos) && (!defined(__IPHONE_17_0) || (__IPHONE_OS_VERSION_MIN_REQUIRED<__IPHONE_17_0))) || (__is_target_os(tvos) && (!defined(__TVOS_17_0) || (__TV_OS_VERSION_MIN_REQUIRED<__TVOS_17_0))) -(void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection { [super traitCollectionDidChange:previousTraitCollection]; @@ -1052,6 +1062,8 @@ -(void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection [self.hostedGraph setNeedsDisplayAllLayers]; } +#endif + /// @endcond #pragma mark - diff --git a/framework/PlatformSpecific/CPTImagePlatformSpecific.m b/framework/PlatformSpecific/CPTImagePlatformSpecific.m index 6c54cc9b2..028b2a1bf 100644 --- a/framework/PlatformSpecific/CPTImagePlatformSpecific.m +++ b/framework/PlatformSpecific/CPTImagePlatformSpecific.m @@ -127,9 +127,31 @@ -(nonnull instancetype)initForPNGFile:(nonnull NSString *)path CGDataProviderRef dataProvider = NULL; CGImageRef cgImage = NULL; +#ifdef __IPHONE_13_0 + if ( @available(iOS 13, tvOS 13, *)) { + for ( UISceneSession *session in UIApplication.sharedApplication.openSessions ) { + UIScene *scene = session.scene; + + if ( [scene isKindOfClass:[UIWindowScene class]] ) { + for ( UIWindow *window in ((UIWindowScene *)scene).windows ) { + imageScale = MAX(imageScale, window.contentScaleFactor); + } + } + } + } + else { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + for ( UIScreen *screen in [UIScreen screens] ) { + imageScale = MAX(imageScale, screen.scale); + } +#pragma clang diagnostic pop + } +#else for ( UIScreen *screen in [UIScreen screens] ) { imageScale = MAX(imageScale, screen.scale); } +#endif if ( imageScale > CPTFloat(1.0)) { NSMutableString *hiDpiPath = [path mutableCopy]; diff --git a/framework/Source/CPTGraph.m b/framework/Source/CPTGraph.m index 52957cba5..23f8ca9a7 100644 --- a/framework/Source/CPTGraph.m +++ b/framework/Source/CPTGraph.m @@ -386,11 +386,25 @@ -(void)layoutAndRenderInContext:(nonnull CGContextRef)context #if TARGET_OS_OSX // Workaround since @available macro is not there if ( [NSView instancesRespondToSelector:@selector(effectiveAppearance)] ) { - NSAppearance *oldAppearance = NSAppearance.currentAppearance; - NSView *view = (NSView *)self.hostingView; - NSAppearance.currentAppearance = view.effectiveAppearance; - [super layoutAndRenderInContext:context]; - NSAppearance.currentAppearance = oldAppearance; + NSView *view = (NSView *)self.hostingView; + + if ( [NSAppearance instancesRespondToSelector:@selector(performAsCurrentDrawingAppearance:)] ) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunguarded-availability-new" + [view.effectiveAppearance performAsCurrentDrawingAppearance: ^{ + [super layoutAndRenderInContext:context]; + }]; +#pragma clang diagnostic pop + } + else { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + NSAppearance *oldAppearance = NSAppearance.currentAppearance; + NSAppearance.currentAppearance = view.effectiveAppearance; + [super layoutAndRenderInContext:context]; + NSAppearance.currentAppearance = oldAppearance; +#pragma clang diagnostic pop + } } else { [super layoutAndRenderInContext:context]; diff --git a/framework/Source/CPTLayer.m b/framework/Source/CPTLayer.m index 30b85666b..aa6cd5bcb 100644 --- a/framework/Source/CPTLayer.m +++ b/framework/Source/CPTLayer.m @@ -330,10 +330,23 @@ -(void)display if ( [NSView instancesRespondToSelector:@selector(effectiveAppearance)] ) { CPTGraphHostingView *hostingView = [self findHostingView]; - NSAppearance *oldAppearance = NSAppearance.currentAppearance; - NSAppearance.currentAppearance = hostingView.effectiveAppearance; - [super display]; - NSAppearance.currentAppearance = oldAppearance; + if ( [NSAppearance instancesRespondToSelector:@selector(performAsCurrentDrawingAppearance:)] ) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunguarded-availability-new" + [hostingView.effectiveAppearance performAsCurrentDrawingAppearance: ^{ + [super display]; + }]; +#pragma clang diagnostic pop + } + else { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + NSAppearance *oldAppearance = NSAppearance.currentAppearance; + NSAppearance.currentAppearance = hostingView.effectiveAppearance; + [super display]; + NSAppearance.currentAppearance = oldAppearance; +#pragma clang diagnostic pop + } } else { [super display]; From 1b3852f2452fd8b51b6f9847253eeacf544a32ab Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Thu, 16 Nov 2023 19:25:13 -0500 Subject: [PATCH 225/245] Updated code formatting with Uncrustify 0.78. --- framework/Source/CPTDefinitions.h | 3 ++- framework/Source/CPTNumericDataType.h | 3 ++- framework/Source/CPTPieChart.h | 3 ++- framework/Source/CPTPlotRange.h | 3 ++- scripts/uncrustify.cfg | 21 +++++++++++++++++---- 5 files changed, 25 insertions(+), 8 deletions(-) diff --git a/framework/Source/CPTDefinitions.h b/framework/Source/CPTDefinitions.h index 63c4e11c5..ee2847099 100644 --- a/framework/Source/CPTDefinitions.h +++ b/framework/Source/CPTDefinitions.h @@ -209,7 +209,8 @@ CPTRGBAColor; /** * @brief Enumeration of label positioning offset directions **/ -typedef NS_CLOSED_ENUM(NSInteger, CPTSign) { +typedef NS_CLOSED_ENUM(NSInteger, CPTSign) +{ CPTSignNone = 0, ///< No offset CPTSignPositive = +1, ///< Positive offset CPTSignNegative = -1 ///< Negative offset diff --git a/framework/Source/CPTNumericDataType.h b/framework/Source/CPTNumericDataType.h index 060ff20af..04bc2a989 100644 --- a/framework/Source/CPTNumericDataType.h +++ b/framework/Source/CPTNumericDataType.h @@ -18,7 +18,8 @@ typedef NS_ENUM (NSInteger, CPTDataTypeFormat) { * @brief Enumeration of memory arrangements for multi-dimensional data arrays. * @see See Wikipedia for more information. **/ -typedef NS_CLOSED_ENUM(NSInteger, CPTDataOrder) { +typedef NS_CLOSED_ENUM(NSInteger, CPTDataOrder) +{ CPTDataOrderRowsFirst, ///< Numeric data is arranged in row-major order. CPTDataOrderColumnsFirst ///< Numeric data is arranged in column-major order. }; diff --git a/framework/Source/CPTPieChart.h b/framework/Source/CPTPieChart.h index d4deb780d..18b13472b 100644 --- a/framework/Source/CPTPieChart.h +++ b/framework/Source/CPTPieChart.h @@ -39,7 +39,8 @@ typedef NS_ENUM (NSInteger, CPTPieChartField) { /** * @brief Enumeration of pie slice drawing directions. **/ -typedef NS_CLOSED_ENUM(NSInteger, CPTPieDirection) { +typedef NS_CLOSED_ENUM(NSInteger, CPTPieDirection) +{ CPTPieDirectionClockwise, ///< Pie slices are drawn in a clockwise direction. CPTPieDirectionCounterClockwise ///< Pie slices are drawn in a counter-clockwise direction. }; diff --git a/framework/Source/CPTPlotRange.h b/framework/Source/CPTPlotRange.h index 1c531b623..6c83bd6c8 100644 --- a/framework/Source/CPTPlotRange.h +++ b/framework/Source/CPTPlotRange.h @@ -11,7 +11,8 @@ /** * @brief Enumeration of possible results of a plot range comparison. **/ -typedef NS_CLOSED_ENUM(NSInteger, CPTPlotRangeComparisonResult) { +typedef NS_CLOSED_ENUM(NSInteger, CPTPlotRangeComparisonResult) +{ CPTPlotRangeComparisonResultNumberBelowRange, ///< Number is below the range. CPTPlotRangeComparisonResultNumberInRange, ///< Number is in the range. CPTPlotRangeComparisonResultNumberAboveRange, ///< Number is above the range. diff --git a/scripts/uncrustify.cfg b/scripts/uncrustify.cfg index ef48dce96..a51013c1b 100644 --- a/scripts/uncrustify.cfg +++ b/scripts/uncrustify.cfg @@ -1,4 +1,4 @@ -# Uncrustify-0.77.0_f +# Uncrustify-0.78.0_f newlines = auto input_tab_size = 4 output_tab_size = 4 @@ -20,6 +20,7 @@ sp_assign = force sp_cpp_lambda_assign = ignore sp_cpp_lambda_square_paren = ignore sp_cpp_lambda_square_brace = ignore +sp_cpp_lambda_argument_list_empty = ignore sp_cpp_lambda_argument_list = ignore sp_cpp_lambda_paren_brace = ignore sp_cpp_lambda_fparen = ignore @@ -45,8 +46,13 @@ sp_paren_brace = force sp_brace_brace = force sp_before_ptr_star = force sp_before_unnamed_ptr_star = force +sp_before_qualifier_ptr_star = force +sp_before_operator_ptr_star = force +sp_before_scope_ptr_star = force +sp_before_global_scope_ptr_star = force sp_qualifier_unnamed_ptr_star = force sp_between_ptr_star = remove +sp_between_ptr_ref = remove sp_after_ptr_star = remove sp_after_ptr_block_caret = remove sp_after_ptr_star_qualifier = remove @@ -271,6 +277,8 @@ sp_annotation_paren = ignore sp_skip_vbrace_tokens = false sp_after_noexcept = ignore sp_vala_after_translation = ignore +sp_before_bit_colon = force +sp_after_bit_colon = force force_tab_after_define = false indent_columns = 4 indent_ignore_first_continue = false @@ -454,8 +462,8 @@ nl_brace_while = force nl_switch_brace = remove nl_synchronized_brace = remove nl_multi_line_cond = false -nl_multi_line_sparen_open = ignore -nl_multi_line_sparen_close = ignore +nl_multi_line_sparen_open = remove +nl_multi_line_sparen_close = remove nl_multi_line_define = false nl_before_case = true nl_after_case = true @@ -587,6 +595,8 @@ nl_after_func_class_proto = 0 nl_after_func_class_proto_group = 0 nl_class_leave_one_liner_groups = false nl_after_func_body = 2 +nl_min_after_func_body = 0 +nl_max_after_func_body = 0 nl_after_func_body_class = 0 nl_after_func_body_one_liner = 1 nl_typedef_blk_start = 0 @@ -691,6 +701,7 @@ align_right_cmt_mix = false align_right_cmt_same_level = false align_right_cmt_at_col = 1 align_func_proto_span = 2 +align_func_proto_span_ignore_cont_lines = false align_func_proto_star_style = 1 align_func_proto_amp_style = 1 align_func_proto_thresh = 0 @@ -702,6 +713,7 @@ align_single_line_brace = true align_single_line_brace_gap = 1 align_oc_msg_spec_span = 0 align_nl_cont = 1 +align_nl_cont_spaces = 1 align_pp_define_together = false align_pp_define_span = 2 align_pp_define_gap = 1 @@ -835,6 +847,7 @@ debug_timeout = 0 debug_truncate = 0 debug_sort_the_tracks = true debug_decode_the_flags = false +debug_use_the_exit_function_pop = true set_numbering_for_html_output = false -# option(s) with 'not default' value: 373 +# option(s) with 'not default' value: 381 # From 7a37bc48527bded2876d6be21e54e60b49cf0b39 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Tue, 21 Nov 2023 17:57:32 -0500 Subject: [PATCH 226/245] Updated code formatting with Uncrustify 0.78.1. --- scripts/uncrustify.cfg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/uncrustify.cfg b/scripts/uncrustify.cfg index a51013c1b..e090d9af1 100644 --- a/scripts/uncrustify.cfg +++ b/scripts/uncrustify.cfg @@ -1,4 +1,4 @@ -# Uncrustify-0.78.0_f +# Uncrustify-0.78.1_f newlines = auto input_tab_size = 4 output_tab_size = 4 @@ -849,5 +849,5 @@ debug_sort_the_tracks = true debug_decode_the_flags = false debug_use_the_exit_function_pop = true set_numbering_for_html_output = false -# option(s) with 'not default' value: 381 +# option(s) with 'not default' value: 382 # From 6b70be5294b5aa5961270189b4fded4e32b1b34f Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Wed, 22 Nov 2023 09:38:22 -0500 Subject: [PATCH 227/245] Added Core Plot logo and rearranged the badges in the readme file. --- README.md | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index c270055cc..b0b803087 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,12 @@ +Core Plot logo + # Core Plot *Cocoa plotting framework for macOS, iOS, and tvOS.* -[![core-plot CI](https://github.com/core-plot/core-plot/actions/workflows/ci.yml/badge.svg)](https://github.com/core-plot/core-plot/actions/workflows/ci.yml) -[![Cocoapods](https://img.shields.io/cocoapods/v/CorePlot)](https://cocoapods.org/pods/CorePlot) -[![GitHub license](https://img.shields.io/github/license/core-plot/core-plot?color=brightgreen)](https://opensource.org/licenses/BSD-3-Clause) -[![Cocoapods platforms](https://img.shields.io/cocoapods/p/CorePlot)](https://core-plot.github.io) -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-brightgreen?style=flat)](https://github.com/Carthage/Carthage) -[![Swift Package Manager compatible](https://img.shields.io/badge/SPM-compatible-brightgreen)](https://github.com/apple/swift-package-manager) - -[![GitHub top language](https://img.shields.io/github/languages/top/core-plot/core-plot)]() +[![Cocoapods platforms](https://img.shields.io/cocoapods/p/CorePlot?color=bright-green)](https://core-plot.github.io) [![core-plot CI](https://github.com/core-plot/core-plot/actions/workflows/ci.yml/badge.svg)](https://github.com/core-plot/core-plot/actions/workflows/ci.yml) +[![Cocoapods](https://img.shields.io/cocoapods/v/CorePlot?color=bright-green)](https://cocoapods.org/pods/CorePlot) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-brightgreen?style=flat)](https://github.com/Carthage/Carthage) [![Swift Package Manager compatible](https://img.shields.io/badge/SPM-compatible-brightgreen)](https://github.com/apple/swift-package-manager) +[![GitHub license](https://img.shields.io/github/license/core-plot/core-plot?color=bright-green)](https://opensource.org/licenses/BSD-3-Clause) # Introduction From ee0cb88028f699788e200dc276f0c2700bc89011 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 21 Apr 2024 13:47:16 -0400 Subject: [PATCH 228/245] Updated the documentation config files for Doxygen 1.10.0. --- documentation/doxygen/doxygen touch.config | 53 +++++++++++++++++----- documentation/doxygen/doxygen.config | 53 +++++++++++++++++----- 2 files changed, 84 insertions(+), 22 deletions(-) diff --git a/documentation/doxygen/doxygen touch.config b/documentation/doxygen/doxygen touch.config index bff2b82e9..a8970459e 100644 --- a/documentation/doxygen/doxygen touch.config +++ b/documentation/doxygen/doxygen touch.config @@ -1,4 +1,4 @@ -# Doxyfile 1.9.8 +# Doxyfile 1.10.0 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -63,6 +63,12 @@ PROJECT_BRIEF = "Cocoa plotting framework for macOS, iOS, and tvOS" PROJECT_LOGO = $(SOURCE_ROOT)/../documentation/core-plot-logo.png +# With the PROJECT_ICON tag one can specify an icon that is included in the tabs +# when the HTML document is shown. Doxygen will copy the logo to the output +# directory. + +PROJECT_ICON = + # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If @@ -987,10 +993,10 @@ INPUT_FILE_ENCODING = # default file extension mappings. # # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cxxm, -# *.cpp, *.cppm, *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, -# *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.ixx, *.l, *.cs, *.d, *.php, -# *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be -# provided as doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.cpp, *.cppm, *.ccm, *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, +# *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.ixx, *.l, *.cs, *.d, +# *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to +# be provided as doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, # *.f18, *.f, *.for, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice. FILE_PATTERNS = @@ -1149,7 +1155,8 @@ FORTRAN_COMMENT_AFTER = 72 SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body of functions, -# classes and enums directly into the documentation. +# multi-line macros, enums or list initialized variables directly into the +# documentation. # The default value is: NO. INLINE_SOURCES = NO @@ -1445,6 +1452,26 @@ HTML_DYNAMIC_SECTIONS = YES HTML_CODE_FOLDING = YES +# If the HTML_COPY_CLIPBOARD tag is set to YES then doxygen will show an icon in +# the top right corner of code and text fragments that allows the user to copy +# its content to the clipboard. Note this only works if supported by the browser +# and the web page is served via a secure context (see: +# https://www.w3.org/TR/secure-contexts/), i.e. using the https: or file: +# protocol. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COPY_CLIPBOARD = YES + +# Doxygen stores a couple of settings persistently in the browser (via e.g. +# cookies). By default these settings apply to all HTML pages generated by +# doxygen across all projects. The HTML_PROJECT_COOKIE tag can be used to store +# the settings under a project specific key, such that the user preferences will +# be stored separately. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_PROJECT_COOKIE = YES + # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand # and collapse entries dynamically later on. Doxygen will expand the tree to @@ -2293,9 +2320,9 @@ GENERATE_SQLITE3 = NO SQLITE3_OUTPUT = sqlite3 -# The SQLITE3_OVERWRITE_DB tag is set to YES, the existing doxygen_sqlite3.db +# The SQLITE3_RECREATE_DB tag is set to YES, the existing doxygen_sqlite3.db # database file will be recreated with each doxygen run. If set to NO, doxygen -# will warn if an a database file is already found and not modify it. +# will warn if a database file is already found and not modify it. # The default value is: YES. # This tag requires that the tag GENERATE_SQLITE3 is set to YES. @@ -2563,7 +2590,11 @@ DOT_FONTPATH = # the CLASS_GRAPH tag is set to YES and HAVE_DOT is disabled or if the # CLASS_GRAPH tag is set to BUILTIN, then the built-in generator will be used. # If the CLASS_GRAPH tag is set to TEXT the direct and indirect inheritance -# relations will be shown as texts / links. +# relations will be shown as texts / links. Explicit enabling an inheritance +# graph or choosing a different representation for an inheritance graph of a +# specific class, can be accomplished by means of the command \inheritancegraph. +# Disabling an inheritance graph can be accomplished by means of the command +# \hideinheritancegraph. # Possible values are: NO, YES, TEXT, GRAPH and BUILTIN. # The default value is: YES. @@ -2628,8 +2659,8 @@ DOT_UML_DETAILS = NO # The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters # to display on a single line. If the actual line length exceeds this threshold -# significantly it will wrapped across multiple lines. Some heuristics are apply -# to avoid ugly line breaks. +# significantly it will be wrapped across multiple lines. Some heuristics are +# applied to avoid ugly line breaks. # Minimum value: 0, maximum value: 1000, default value: 17. # This tag requires that the tag HAVE_DOT is set to YES. diff --git a/documentation/doxygen/doxygen.config b/documentation/doxygen/doxygen.config index 0bc6779ac..8feb89f4a 100644 --- a/documentation/doxygen/doxygen.config +++ b/documentation/doxygen/doxygen.config @@ -1,4 +1,4 @@ -# Doxyfile 1.9.8 +# Doxyfile 1.10.0 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -63,6 +63,12 @@ PROJECT_BRIEF = "Cocoa plotting framework for macOS, iOS, and tvOS" PROJECT_LOGO = $(SOURCE_ROOT)/../documentation/core-plot-logo.png +# With the PROJECT_ICON tag one can specify an icon that is included in the tabs +# when the HTML document is shown. Doxygen will copy the logo to the output +# directory. + +PROJECT_ICON = + # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If @@ -987,10 +993,10 @@ INPUT_FILE_ENCODING = # default file extension mappings. # # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cxxm, -# *.cpp, *.cppm, *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, -# *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.ixx, *.l, *.cs, *.d, *.php, -# *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be -# provided as doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.cpp, *.cppm, *.ccm, *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, +# *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.ixx, *.l, *.cs, *.d, +# *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to +# be provided as doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, # *.f18, *.f, *.for, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice. FILE_PATTERNS = @@ -1149,7 +1155,8 @@ FORTRAN_COMMENT_AFTER = 72 SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body of functions, -# classes and enums directly into the documentation. +# multi-line macros, enums or list initialized variables directly into the +# documentation. # The default value is: NO. INLINE_SOURCES = NO @@ -1445,6 +1452,26 @@ HTML_DYNAMIC_SECTIONS = YES HTML_CODE_FOLDING = YES +# If the HTML_COPY_CLIPBOARD tag is set to YES then doxygen will show an icon in +# the top right corner of code and text fragments that allows the user to copy +# its content to the clipboard. Note this only works if supported by the browser +# and the web page is served via a secure context (see: +# https://www.w3.org/TR/secure-contexts/), i.e. using the https: or file: +# protocol. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COPY_CLIPBOARD = YES + +# Doxygen stores a couple of settings persistently in the browser (via e.g. +# cookies). By default these settings apply to all HTML pages generated by +# doxygen across all projects. The HTML_PROJECT_COOKIE tag can be used to store +# the settings under a project specific key, such that the user preferences will +# be stored separately. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_PROJECT_COOKIE = YES + # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand # and collapse entries dynamically later on. Doxygen will expand the tree to @@ -2293,9 +2320,9 @@ GENERATE_SQLITE3 = NO SQLITE3_OUTPUT = sqlite3 -# The SQLITE3_OVERWRITE_DB tag is set to YES, the existing doxygen_sqlite3.db +# The SQLITE3_RECREATE_DB tag is set to YES, the existing doxygen_sqlite3.db # database file will be recreated with each doxygen run. If set to NO, doxygen -# will warn if an a database file is already found and not modify it. +# will warn if a database file is already found and not modify it. # The default value is: YES. # This tag requires that the tag GENERATE_SQLITE3 is set to YES. @@ -2562,7 +2589,11 @@ DOT_FONTPATH = # the CLASS_GRAPH tag is set to YES and HAVE_DOT is disabled or if the # CLASS_GRAPH tag is set to BUILTIN, then the built-in generator will be used. # If the CLASS_GRAPH tag is set to TEXT the direct and indirect inheritance -# relations will be shown as texts / links. +# relations will be shown as texts / links. Explicit enabling an inheritance +# graph or choosing a different representation for an inheritance graph of a +# specific class, can be accomplished by means of the command \inheritancegraph. +# Disabling an inheritance graph can be accomplished by means of the command +# \hideinheritancegraph. # Possible values are: NO, YES, TEXT, GRAPH and BUILTIN. # The default value is: YES. @@ -2627,8 +2658,8 @@ DOT_UML_DETAILS = NO # The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters # to display on a single line. If the actual line length exceeds this threshold -# significantly it will wrapped across multiple lines. Some heuristics are apply -# to avoid ugly line breaks. +# significantly it will be wrapped across multiple lines. Some heuristics are +# applied to avoid ugly line breaks. # Minimum value: 0, maximum value: 1000, default value: 17. # This tag requires that the tag HAVE_DOT is set to YES. From ad71ae9d54fd24e18956f3ddd2d5f361af0b4acb Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Thu, 16 May 2024 20:47:27 -0400 Subject: [PATCH 229/245] Updated code formatting with Uncrustify 0.79.0. --- scripts/uncrustify.cfg | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/scripts/uncrustify.cfg b/scripts/uncrustify.cfg index e090d9af1..78899a1ab 100644 --- a/scripts/uncrustify.cfg +++ b/scripts/uncrustify.cfg @@ -1,4 +1,4 @@ -# Uncrustify-0.78.1_f +# Uncrustify-0.79.0_f newlines = auto input_tab_size = 4 output_tab_size = 4 @@ -41,7 +41,6 @@ sp_compare = force sp_inside_paren = remove sp_paren_paren = remove sp_cparen_oparen = remove -sp_balance_nested_parens = false sp_paren_brace = force sp_brace_brace = force sp_before_ptr_star = force @@ -112,6 +111,7 @@ sp_before_square = remove sp_before_vardef_square = remove sp_before_square_asm_block = ignore sp_before_squares = remove +sp_cpp_before_struct_binding_after_byref = remove sp_cpp_before_struct_binding = remove sp_inside_square = remove sp_inside_square_empty = remove @@ -280,6 +280,7 @@ sp_vala_after_translation = ignore sp_before_bit_colon = force sp_after_bit_colon = force force_tab_after_define = false +sp_string_string = ignore indent_columns = 4 indent_ignore_first_continue = false indent_continue = 0 @@ -529,6 +530,7 @@ nl_template_end = false nl_oc_msg_args = false nl_oc_msg_args_min_params = 0 nl_oc_msg_args_max_code_width = 0 +nl_oc_msg_args_finish_multi_line = false nl_fdef_brace = force nl_fdef_brace_cond = force nl_cpp_ldef_brace = ignore @@ -830,7 +832,7 @@ pp_indent_case = true pp_indent_func_def = true pp_indent_extern = true pp_indent_brace = 1 -pp_warn_unbalanced_if = false +pp_unbalanced_if_action = 0 include_category_0 = "" include_category_1 = "" include_category_2 = "" @@ -848,6 +850,7 @@ debug_truncate = 0 debug_sort_the_tracks = true debug_decode_the_flags = false debug_use_the_exit_function_pop = true +debug_print_version = false set_numbering_for_html_output = false # option(s) with 'not default' value: 382 # From 7dffe08466162f1068f2a9158f26637465453d5e Mon Sep 17 00:00:00 2001 From: Drew McCormack Date: Thu, 19 Sep 2024 16:23:11 +0200 Subject: [PATCH 230/245] Fix for new errors in Xcode 16. It was giving errors about casting of function pointers. This has been silenced by first casting to void*. --- framework/Source/CPTAnimation.m | 6 +++--- framework/Source/_CPTAnimationNSNumberPeriod.m | 4 ++-- framework/Source/_CPTAnimationPlotRangePeriod.m | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/framework/Source/CPTAnimation.m b/framework/Source/CPTAnimation.m index 582b37a4b..b72af73e6 100644 --- a/framework/Source/CPTAnimation.m +++ b/framework/Source/CPTAnimation.m @@ -406,21 +406,21 @@ -(void)updateOnMainThreadWithParameters:(nonnull CPTDictionary *)parameters NSDecimal buffer = ((NSDecimalNumber *)tweenedValue).decimalValue; typedef void (*SetterType)(id, SEL, NSDecimal); - SetterType setterMethod = (SetterType)[boundObject methodForSelector:boundSetter]; + SetterType setterMethod = (SetterType)(void *)[boundObject methodForSelector:boundSetter]; setterMethod(boundObject, boundSetter, buffer); } else if ( valueClass && [tweenedValue isKindOfClass:[NSNumber class]] ) { NSNumber *value = (NSNumber *)tweenedValue; typedef void (*NumberSetterType)(id, SEL, NSNumber *); - NumberSetterType setterMethod = (NumberSetterType)[boundObject methodForSelector:boundSetter]; + NumberSetterType setterMethod = (NumberSetterType)(void *)[boundObject methodForSelector:boundSetter]; setterMethod(boundObject, boundSetter, value); } else if ( [tweenedValue isKindOfClass:[CPTPlotRange class]] ) { CPTPlotRange *range = (CPTPlotRange *)tweenedValue; typedef void (*RangeSetterType)(id, SEL, CPTPlotRange *); - RangeSetterType setterMethod = (RangeSetterType)[boundObject methodForSelector:boundSetter]; + RangeSetterType setterMethod = (RangeSetterType)(void *)[boundObject methodForSelector:boundSetter]; setterMethod(boundObject, boundSetter, range); } else { diff --git a/framework/Source/_CPTAnimationNSNumberPeriod.m b/framework/Source/_CPTAnimationNSNumberPeriod.m index e4692f041..086a74fb4 100644 --- a/framework/Source/_CPTAnimationNSNumberPeriod.m +++ b/framework/Source/_CPTAnimationNSNumberPeriod.m @@ -7,7 +7,7 @@ @implementation _CPTAnimationNSNumberPeriod -(void)setStartValueFromObject:(id)boundObject propertyGetter:(SEL)boundGetter { typedef NSNumber *(*GetterType)(id, SEL); - GetterType getterMethod = (GetterType)[boundObject methodForSelector:boundGetter]; + GetterType getterMethod = (GetterType)(void *)[boundObject methodForSelector:boundGetter]; self.startValue = getterMethod(boundObject, boundGetter); } @@ -19,7 +19,7 @@ -(BOOL)canStartWithValueFromObject:(id)boundObject propertyGetter:(SEL)boundGett } typedef NSNumber *(*GetterType)(id, SEL); - GetterType getterMethod = (GetterType)[boundObject methodForSelector:boundGetter]; + GetterType getterMethod = (GetterType)(void *)[boundObject methodForSelector:boundGetter]; NSNumber *current = getterMethod(boundObject, boundGetter); NSNumber *start = (NSNumber *)self.startValue; diff --git a/framework/Source/_CPTAnimationPlotRangePeriod.m b/framework/Source/_CPTAnimationPlotRangePeriod.m index 857d65506..cda89bac7 100644 --- a/framework/Source/_CPTAnimationPlotRangePeriod.m +++ b/framework/Source/_CPTAnimationPlotRangePeriod.m @@ -8,7 +8,7 @@ @implementation _CPTAnimationPlotRangePeriod -(void)setStartValueFromObject:(nonnull id)boundObject propertyGetter:(nonnull SEL)boundGetter { typedef NSValue *(*GetterType)(id, SEL); - GetterType getterMethod = (GetterType)[boundObject methodForSelector:boundGetter]; + GetterType getterMethod = (GetterType)(void *)[boundObject methodForSelector:boundGetter]; self.startValue = getterMethod(boundObject, boundGetter); } @@ -20,7 +20,7 @@ -(BOOL)canStartWithValueFromObject:(nonnull id)boundObject propertyGetter:(nonnu } typedef CPTPlotRange *(*GetterType)(id, SEL); - GetterType getterMethod = (GetterType)[boundObject methodForSelector:boundGetter]; + GetterType getterMethod = (GetterType)(void *)[boundObject methodForSelector:boundGetter]; CPTPlotRange *current = getterMethod(boundObject, boundGetter); CPTPlotRange *start = (CPTPlotRange *)self.startValue; From 0a513dba7414bcd0878e7fddee447b4d55918f38 Mon Sep 17 00:00:00 2001 From: jotai-coder Date: Sat, 5 Oct 2024 10:27:15 -0500 Subject: [PATCH 231/245] Fix CPTGraphHostingView retain cycle use weak self in handler --- framework/PlatformSpecific/CPTGraphHostingView.m | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/framework/PlatformSpecific/CPTGraphHostingView.m b/framework/PlatformSpecific/CPTGraphHostingView.m index eefabb519..b252c2293 100644 --- a/framework/PlatformSpecific/CPTGraphHostingView.m +++ b/framework/PlatformSpecific/CPTGraphHostingView.m @@ -776,10 +776,15 @@ -(void)commonInit #ifdef __IPHONE_17_0 if ( @available(iOS 17, tvOS 17, *)) { + __weak __typeof(self) weakSelf = self; [self registerForTraitChanges:@[[UITraitCollection class]] withHandler: ^(__unused id traitEnvironment, __unused UITraitCollection *previousCollection) { - [self.hostedGraph setNeedsDisplayAllLayers]; - }]; + __typeof(self) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + [strongSelf.hostedGraph setNeedsDisplayAllLayers]; + }]; } #endif } From bc6a582b54eb79da8e735bc2e6bc9d7d70765842 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Tue, 22 Oct 2024 20:50:34 -0400 Subject: [PATCH 232/245] Standardized code formatting. --- framework/PlatformSpecific/CPTGraphHostingView.m | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/framework/PlatformSpecific/CPTGraphHostingView.m b/framework/PlatformSpecific/CPTGraphHostingView.m index b252c2293..404e07aa1 100644 --- a/framework/PlatformSpecific/CPTGraphHostingView.m +++ b/framework/PlatformSpecific/CPTGraphHostingView.m @@ -779,12 +779,12 @@ -(void)commonInit __weak __typeof(self) weakSelf = self; [self registerForTraitChanges:@[[UITraitCollection class]] withHandler: ^(__unused id traitEnvironment, __unused UITraitCollection *previousCollection) { - __typeof(self) strongSelf = weakSelf; - if (!strongSelf) { - return; - } - [strongSelf.hostedGraph setNeedsDisplayAllLayers]; - }]; + __typeof(self) strongSelf = weakSelf; + if ( !strongSelf ) { + return; + } + [strongSelf.hostedGraph setNeedsDisplayAllLayers]; + }]; } #endif } From 285a868549c3202ba6c4c3706d780d40da989ad8 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Tue, 15 Apr 2025 11:14:14 -0400 Subject: [PATCH 233/245] Turned off extraneous compiler warnings that appeared in Xcode 16.3. Fixed issue #488. --- framework/xcconfig/CorePlotWarnings.xcconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/xcconfig/CorePlotWarnings.xcconfig b/framework/xcconfig/CorePlotWarnings.xcconfig index ee676364b..b6e78859a 100644 --- a/framework/xcconfig/CorePlotWarnings.xcconfig +++ b/framework/xcconfig/CorePlotWarnings.xcconfig @@ -125,4 +125,4 @@ IBC_ERRORS = YES IBC_NOTICES = YES IBC_WARNINGS = YES -WARNING_CFLAGS = -Weverything -Wno-switch-enum -Wno-float-equal -Wno-pedantic -Wno-documentation -Wno-documentation-unknown-command -Wno-objc-messaging-id -Wno-declaration-after-statement +WARNING_CFLAGS = -Weverything -Wno-switch-default -Wno-switch-enum -Wno-float-equal -Wno-pedantic -Wno-documentation -Wno-documentation-unknown-command -Wno-objc-messaging-id -Wno-declaration-after-statement -Wno-missing-include-dirs From eef7eae36c376334895943dbb1d204cef0dccdd1 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Tue, 15 Apr 2025 12:14:18 -0400 Subject: [PATCH 234/245] Updated the Xcode build schemes for Xcode 16.3. --- .../xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme | 2 +- .../xcshareddata/xcschemes/CPTTestApp-iPhone.xcscheme | 2 +- .../xcshareddata/xcschemes/CPTTestApp.xcscheme | 2 +- .../xcshareddata/xcschemes/Plot Gallery-Mac.xcscheme | 2 +- .../xcshareddata/xcschemes/Plot Gallery-iOS.xcscheme | 2 +- .../xcshareddata/xcschemes/Plot Gallery-tvOS.xcscheme | 2 +- .../DatePlot.xcodeproj/xcshareddata/xcschemes/DatePlot.xcscheme | 2 +- .../DropPlot.xcodeproj/xcshareddata/xcschemes/DropPlot.xcscheme | 2 +- .../xcshareddata/xcschemes/minorTickFormatter.xcscheme | 2 +- .../xcshareddata/xcschemes/RangePlot.xcscheme | 2 +- .../xcshareddata/xcschemes/CorePlot Mac.xcscheme | 2 +- .../xcshareddata/xcschemes/CorePlot iOS.xcscheme | 2 +- .../xcshareddata/xcschemes/CorePlot tvOS.xcscheme | 2 +- .../xcshareddata/xcschemes/Documentation-Mac.xcscheme | 2 +- .../xcshareddata/xcschemes/Documentation-iOS.xcscheme | 2 +- .../xcshareddata/xcschemes/Universal XCFramework.xcscheme | 2 +- .../xcshareddata/xcschemes/Update SPM Files.xcscheme | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme index 1c0f59e90..089244e06 100644 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme @@ -1,6 +1,6 @@ Date: Tue, 15 Apr 2025 12:17:26 -0400 Subject: [PATCH 235/245] Updated the macOS deployment target to 11.0. --- documentation/changelog.markdown | 4 ++-- framework/xcconfig/CorePlot.xcconfig | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/documentation/changelog.markdown b/documentation/changelog.markdown index 2d12ee19d..dc9614724 100644 --- a/documentation/changelog.markdown +++ b/documentation/changelog.markdown @@ -4,7 +4,7 @@ This release updates Core Plot to be compatible with Xcode 14, Mac Catalyst, and the Swift Package Manager. It adds support for the Swift Package Manager and Mac Catalyst. -The Mac deployment target is now macOS 10.13. The iOS deployment target has changed to iOS 12.0. The tvOS deployment target has changed to tvOS 12.0. The iOS static library is obsolete and has been removed. +The Mac deployment target is now macOS 11.0. The iOS deployment target has changed to iOS 12.0. The tvOS deployment target has changed to tvOS 12.0. The iOS static library is obsolete and has been removed. The iOS and tvOS framework targets have been removed because lipo cannot combine device and simulator builds for Apple Silicon in the same output file (both use arm64). Use the Universal XCFramework that contains all platforms and architectures instead. @@ -13,7 +13,7 @@ The iOS and tvOS framework targets have been removed because lipo cannot combine - **New**: Mac Catalyst support - **New**: Swift Package Manager support -- **Changed**: Updated the deployment targets for all supported operating systems for the minimums required by Xcode 14. The Mac deployment target is now macOS 10.13. The iOS deployment target is now iOS 12.0. The tvOS deployment target is now tvOS 12.0. +- **Changed**: Updated the deployment targets for all supported operating systems for the minimums required by Xcode 14. The Mac deployment target is now macOS 11.0. The iOS deployment target is now iOS 12.0. The tvOS deployment target is now tvOS 12.0. - **Changed**: Miscellaneous bug fixes and cleanup. - **Removed**: Removed the iOS static library. - **Removed**: Removed the iOS and tvOS framework targets. diff --git a/framework/xcconfig/CorePlot.xcconfig b/framework/xcconfig/CorePlot.xcconfig index ec0399567..31c7b143b 100644 --- a/framework/xcconfig/CorePlot.xcconfig +++ b/framework/xcconfig/CorePlot.xcconfig @@ -3,7 +3,7 @@ ARCHS = $(ARCHS_STANDARD) IPHONEOS_DEPLOYMENT_TARGET = 12.0 -MACOSX_DEPLOYMENT_TARGET = 10.13 +MACOSX_DEPLOYMENT_TARGET = 11.0 TVOS_DEPLOYMENT_TARGET = 12.0 SWIFT_VERSION = 5.0 From ca53d0498975b85325bbb7074f242409d125452e Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Tue, 15 Apr 2025 12:18:32 -0400 Subject: [PATCH 236/245] Removed redundant build settings that were masking the .xcconfig settings in the DropPlot example project. --- examples/DropPlot/DropPlot.xcodeproj/project.pbxproj | 2 -- 1 file changed, 2 deletions(-) diff --git a/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj b/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj index ea1643334..16247b075 100644 --- a/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj +++ b/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj @@ -442,7 +442,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = C39504672AF727D1000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { - DEAD_CODE_STRIPPING = YES; SDKROOT = macosx; }; name = Debug; @@ -451,7 +450,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = C39504712AF727D1000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { - DEAD_CODE_STRIPPING = YES; SDKROOT = macosx; }; name = Release; From c27de766cd68904299726af5e6b1b95765e8005d Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Tue, 15 Apr 2025 12:19:54 -0400 Subject: [PATCH 237/245] Added configuration files at the root of the Core Plot project to quiet various project-level configuration warnings. --- framework/CorePlot.xcodeproj/project.pbxproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/framework/CorePlot.xcodeproj/project.pbxproj b/framework/CorePlot.xcodeproj/project.pbxproj index d682e2467..acd819c0a 100644 --- a/framework/CorePlot.xcodeproj/project.pbxproj +++ b/framework/CorePlot.xcodeproj/project.pbxproj @@ -2997,12 +2997,14 @@ }; 1DEB91B208733DA50010E9CD /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; buildSettings = { }; name = Debug; }; 1DEB91B308733DA50010E9CD /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; buildSettings = { }; name = Release; From ed6e93a9a3d1b81c84ef1ae366ee9098b20a5adc Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 20 Apr 2025 19:56:03 -0400 Subject: [PATCH 238/245] Removed deprecated window texture from the CPTTestApp example app. --- .../Resources/Base.lproj/CPTTestApp.xib | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/examples/CPTTestApp/Resources/Base.lproj/CPTTestApp.xib b/examples/CPTTestApp/Resources/Base.lproj/CPTTestApp.xib index 4b7d3ae17..4d42cf0a1 100644 --- a/examples/CPTTestApp/Resources/Base.lproj/CPTTestApp.xib +++ b/examples/CPTTestApp/Resources/Base.lproj/CPTTestApp.xib @@ -1,8 +1,8 @@ - + - + @@ -562,10 +562,10 @@ - + - + @@ -600,12 +600,12 @@ - - + + - - + + @@ -613,7 +613,6 @@ - @@ -634,7 +633,6 @@ - @@ -746,6 +744,6 @@ - + From 33fc851d3e6b3f5974b17996c8dd65b6557a3ccf Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 20 Apr 2025 20:02:12 -0400 Subject: [PATCH 239/245] Updated the iOS deployment target to 13.0 and the Swift version to 6.0. Updated the Swift example apps to use Swift 6 syntax. --- documentation/changelog.markdown | 6 +-- .../Classes/PieChartController.swift | 5 ++- .../Classes/iPhoneAppDelegate.swift | 2 +- examples/DatePlot/Source/AppDelegate.swift | 2 +- examples/DatePlot/Source/DateController.swift | 43 ++++++++++++------- framework/xcconfig/CorePlot.xcconfig | 4 +- 6 files changed, 39 insertions(+), 23 deletions(-) diff --git a/documentation/changelog.markdown b/documentation/changelog.markdown index dc9614724..c8e6f7498 100644 --- a/documentation/changelog.markdown +++ b/documentation/changelog.markdown @@ -2,9 +2,9 @@ ## Release Notes -This release updates Core Plot to be compatible with Xcode 14, Mac Catalyst, and the Swift Package Manager. It adds support for the Swift Package Manager and Mac Catalyst. +This release updates Core Plot to be compatible with Xcode 16, Mac Catalyst, and the Swift Package Manager. It adds support for the Swift Package Manager and Mac Catalyst. -The Mac deployment target is now macOS 11.0. The iOS deployment target has changed to iOS 12.0. The tvOS deployment target has changed to tvOS 12.0. The iOS static library is obsolete and has been removed. +The Mac deployment target is now macOS 11.0. The iOS deployment target has changed to iOS 13.0. The tvOS deployment target has changed to tvOS 12.0. The iOS static library is obsolete and has been removed. The iOS and tvOS framework targets have been removed because lipo cannot combine device and simulator builds for Apple Silicon in the same output file (both use arm64). Use the Universal XCFramework that contains all platforms and architectures instead. @@ -13,7 +13,7 @@ The iOS and tvOS framework targets have been removed because lipo cannot combine - **New**: Mac Catalyst support - **New**: Swift Package Manager support -- **Changed**: Updated the deployment targets for all supported operating systems for the minimums required by Xcode 14. The Mac deployment target is now macOS 11.0. The iOS deployment target is now iOS 12.0. The tvOS deployment target is now tvOS 12.0. +- **Changed**: Updated the deployment targets for all supported operating systems for the minimums required by Xcode 14. The Mac deployment target is now macOS 11.0. The iOS deployment target is now iOS 13.0. The tvOS deployment target is now tvOS 12.0. - **Changed**: Miscellaneous bug fixes and cleanup. - **Removed**: Removed the iOS static library. - **Removed**: Removed the iOS and tvOS framework targets. diff --git a/examples/CPTTestApp-iPhone/Classes/PieChartController.swift b/examples/CPTTestApp-iPhone/Classes/PieChartController.swift index 4aa4f6170..ef076f33d 100644 --- a/examples/CPTTestApp-iPhone/Classes/PieChartController.swift +++ b/examples/CPTTestApp-iPhone/Classes/PieChartController.swift @@ -1,6 +1,7 @@ import UIKit @preconcurrency import CorePlot +@MainActor class PieChartController : UIViewController, CPTPieChartDataSource, CPTPieChartDelegate { private let pieGraph = CPTXYGraph(frame: .zero) @@ -96,6 +97,8 @@ class PieChartController : UIViewController, CPTPieChartDataSource, CPTPieChartD // MARK: - Delegate Methods nonisolated func pieChart(_ plot: CPTPieChart, sliceWasSelectedAtRecord idx: UInt) { - self.pieGraph.title = "Selected index: \(idx)" + MainActor.assumeIsolated { + self.pieGraph.title = "Selected index: \(idx)" + } } } diff --git a/examples/CPTTestApp-iPhone/Classes/iPhoneAppDelegate.swift b/examples/CPTTestApp-iPhone/Classes/iPhoneAppDelegate.swift index 42189f9ec..21e39340d 100644 --- a/examples/CPTTestApp-iPhone/Classes/iPhoneAppDelegate.swift +++ b/examples/CPTTestApp-iPhone/Classes/iPhoneAppDelegate.swift @@ -3,7 +3,7 @@ import UIKit // Toolbar icons in the application are courtesy of Joseph Wain / glyphish.com // See the license file in the GlyphishIcons directory for more information on these icons -@UIApplicationMain +@main class iPhoneAppDelegate : NSObject, UIApplicationDelegate, UITabBarControllerDelegate { diff --git a/examples/DatePlot/Source/AppDelegate.swift b/examples/DatePlot/Source/AppDelegate.swift index 32a1c9cba..5f4f0484f 100644 --- a/examples/DatePlot/Source/AppDelegate.swift +++ b/examples/DatePlot/Source/AppDelegate.swift @@ -1,6 +1,6 @@ import Cocoa -@NSApplicationMain +@main class AppDelegate: NSObject, NSApplicationDelegate { func applicationDidFinishLaunching(_ aNotification: Notification) { // Insert code here to initialize your application diff --git a/examples/DatePlot/Source/DateController.swift b/examples/DatePlot/Source/DateController.swift index dca590d32..5e6fb9fe1 100644 --- a/examples/DatePlot/Source/DateController.swift +++ b/examples/DatePlot/Source/DateController.swift @@ -2,6 +2,7 @@ import Foundation import Cocoa import CorePlot +@MainActor class DateController : NSObject, CPTPlotDataSource { private let oneDay : Double = 24 * 60 * 60 @@ -13,9 +14,11 @@ class DateController : NSObject, CPTPlotDataSource { // MARK: - Initialization - @MainActor override func awakeFromNib() + override func awakeFromNib() { - self.plotData = newPlotData() + MainActor.assumeIsolated { + self.plotData = newPlotData() + } // If you make sure your dates are calculated at noon, you shouldn't have to // worry about daylight savings. If you use midnight, you will have to adjust @@ -28,10 +31,6 @@ class DateController : NSObject, CPTPlotDataSource { let theme = CPTTheme(named: .darkGradientTheme) newGraph.apply(theme) - if let host = self.hostView { - host.hostedGraph = newGraph - } - // Setup scatter plot space let plotSpace = newGraph.defaultPlotSpace as! CPTXYPlotSpace @@ -72,10 +71,16 @@ class DateController : NSObject, CPTPlotDataSource { dataSourceLinePlot.dataSource = self newGraph.add(dataSourceLinePlot) - self.graph = newGraph + MainActor.assumeIsolated { + self.graph = newGraph + + if let host = self.hostView { + host.hostedGraph = newGraph + } + } } - func newPlotData() -> [Double] + nonisolated func newPlotData() -> [Double] { var newData = [Double]() @@ -88,22 +93,30 @@ class DateController : NSObject, CPTPlotDataSource { // MARK: - Plot Data Source Methods - func numberOfRecords(for plot: CPTPlot) -> UInt + nonisolated func numberOfRecords(for plot: CPTPlot) -> UInt { - return UInt(self.plotData.count) + MainActor.assumeIsolated { + return UInt(self.plotData.count) + } } - func number(for plot: CPTPlot, field: UInt, record: UInt) -> Any? + nonisolated func number(for plot: CPTPlot, field: UInt, record: UInt) -> Any? { + var result : NSNumber? + switch CPTScatterPlotField(rawValue: Int(field))! { case .X: - return (oneDay * Double(record)) as NSNumber - + result = (oneDay * Double(record)) as NSNumber + case .Y: - return self.plotData[Int(record)] as NSNumber + MainActor.assumeIsolated { + result = self.plotData[Int(record)] as NSNumber + } @unknown default: - return nil + result = nil } + + return result } } diff --git a/framework/xcconfig/CorePlot.xcconfig b/framework/xcconfig/CorePlot.xcconfig index 31c7b143b..14a991e37 100644 --- a/framework/xcconfig/CorePlot.xcconfig +++ b/framework/xcconfig/CorePlot.xcconfig @@ -2,11 +2,11 @@ ARCHS = $(ARCHS_STANDARD) -IPHONEOS_DEPLOYMENT_TARGET = 12.0 +IPHONEOS_DEPLOYMENT_TARGET = 13.0 MACOSX_DEPLOYMENT_TARGET = 11.0 TVOS_DEPLOYMENT_TARGET = 12.0 -SWIFT_VERSION = 5.0 +SWIFT_VERSION = 6.0 PRODUCT_BUNDLE_IDENTIFIER = com.CorePlot.$(PRODUCT_NAME:rfc1034identifier) From e26e4cffaf6d539a6c6e0b9c7e4a5250b0e3210e Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Fri, 20 Jun 2025 20:03:00 -0400 Subject: [PATCH 240/245] Updated code formatting with Uncrustify 0.81.0. --- framework/Source/CPTAnimationPeriod.m | 4 ++-- framework/Source/CPTScatterPlot.m | 12 ++++++------ scripts/uncrustify.cfg | 8 ++++++-- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/framework/Source/CPTAnimationPeriod.m b/framework/Source/CPTAnimationPeriod.m index 6617a6492..db26678b6 100644 --- a/framework/Source/CPTAnimationPeriod.m +++ b/framework/Source/CPTAnimationPeriod.m @@ -194,7 +194,7 @@ +(nonnull instancetype)periodWithStartRect:(CGRect)aStartRect endRect:(CGRect)an **/ +(nonnull instancetype)periodWithStartDecimal:(NSDecimal)aStartDecimal endDecimal:(NSDecimal)anEndDecimal duration:(CGFloat)aDuration withDelay:(CGFloat)aDelay { - NSDecimalNumber *start = NSDecimalIsNotANumber(&aStartDecimal) ? nil : [NSDecimalNumber decimalNumberWithDecimal : aStartDecimal]; + NSDecimalNumber *start = NSDecimalIsNotANumber(&aStartDecimal) ? nil : [NSDecimalNumber decimalNumberWithDecimal:aStartDecimal]; return [_CPTAnimationNSDecimalPeriod periodWithStartValue:start endValue:[NSDecimalNumber decimalNumberWithDecimal:anEndDecimal] @@ -385,7 +385,7 @@ -(nonnull instancetype)initWithStartRect:(CGRect)aStartRect endRect:(CGRect)anEn **/ -(nonnull instancetype)initWithStartDecimal:(NSDecimal)aStartDecimal endDecimal:(NSDecimal)anEndDecimal duration:(CGFloat)aDuration withDelay:(CGFloat)aDelay { - NSDecimalNumber *start = NSDecimalIsNotANumber(&aStartDecimal) ? nil : [NSDecimalNumber decimalNumberWithDecimal : aStartDecimal]; + NSDecimalNumber *start = NSDecimalIsNotANumber(&aStartDecimal) ? nil : [NSDecimalNumber decimalNumberWithDecimal:aStartDecimal]; self = [[_CPTAnimationNSDecimalPeriod alloc] initWithStartValue:start endValue:[NSDecimalNumber decimalNumberWithDecimal:anEndDecimal] diff --git a/framework/Source/CPTScatterPlot.m b/framework/Source/CPTScatterPlot.m index 77c06df9e..68f83575d 100644 --- a/framework/Source/CPTScatterPlot.m +++ b/framework/Source/CPTScatterPlot.m @@ -1964,9 +1964,9 @@ -(BOOL)pointingDeviceDownEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint) if ( self.dataLineStyle && (!symbolTouchUpHandled || self.allowSimultaneousSymbolAndPlotSelection) && ([theDelegate respondsToSelector:@selector(scatterPlotDataLineTouchDown:)] || - [theDelegate respondsToSelector:@selector(scatterPlot:dataLineTouchDownWithEvent:)] || - [theDelegate respondsToSelector:@selector(scatterPlotDataLineWasSelected:)] || - [theDelegate respondsToSelector:@selector(scatterPlot:dataLineWasSelectedWithEvent:)])) { + [theDelegate respondsToSelector:@selector(scatterPlot:dataLineTouchDownWithEvent:)] || + [theDelegate respondsToSelector:@selector(scatterPlotDataLineWasSelected:)] || + [theDelegate respondsToSelector:@selector(scatterPlot:dataLineWasSelectedWithEvent:)])) { plotSelected = [self plotWasLineHitByInteractionPoint:interactionPoint]; if ( plotSelected ) { // Let the delegate know that the plot was selected. @@ -2093,9 +2093,9 @@ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)in if ( self.dataLineStyle && (!symbolSelectHandled || self.allowSimultaneousSymbolAndPlotSelection) && ([theDelegate respondsToSelector:@selector(scatterPlotDataLineTouchUp:)] || - [theDelegate respondsToSelector:@selector(scatterPlot:dataLineTouchUpWithEvent:)] || - [theDelegate respondsToSelector:@selector(scatterPlotDataLineWasSelected:)] || - [theDelegate respondsToSelector:@selector(scatterPlot:dataLineWasSelectedWithEvent:)])) { + [theDelegate respondsToSelector:@selector(scatterPlot:dataLineTouchUpWithEvent:)] || + [theDelegate respondsToSelector:@selector(scatterPlotDataLineWasSelected:)] || + [theDelegate respondsToSelector:@selector(scatterPlot:dataLineWasSelectedWithEvent:)])) { plotSelected = [self plotWasLineHitByInteractionPoint:interactionPoint]; if ( plotSelected ) { diff --git a/scripts/uncrustify.cfg b/scripts/uncrustify.cfg index 78899a1ab..186048561 100644 --- a/scripts/uncrustify.cfg +++ b/scripts/uncrustify.cfg @@ -1,4 +1,4 @@ -# Uncrustify-0.79.0_f +# Uncrustify-0.81.0_f newlines = auto input_tab_size = 4 output_tab_size = 4 @@ -273,6 +273,7 @@ sp_before_emb_cmt = force sp_num_before_emb_cmt = 1 sp_after_emb_cmt = force sp_num_after_emb_cmt = 1 +sp_emb_cmt_priority = false sp_annotation_paren = ignore sp_skip_vbrace_tokens = false sp_after_noexcept = ignore @@ -281,6 +282,7 @@ sp_before_bit_colon = force sp_after_bit_colon = force force_tab_after_define = false sp_string_string = ignore +sp_struct_type = ignore indent_columns = 4 indent_ignore_first_continue = false indent_continue = 0 @@ -363,6 +365,7 @@ indent_comma_brace = 0 indent_comma_paren = 0 indent_bool_paren = 0 indent_ignore_bool = false +indent_bool_nested_all = true indent_ignore_arith = false indent_semicolon_for_paren = false indent_ignore_semicolon = false @@ -549,6 +552,7 @@ nl_after_vbrace_open_empty = false nl_after_brace_close = false nl_after_vbrace_close = false nl_brace_struct_var = force +nl_bool_expr_hierarchical = false nl_define_macro = false nl_squeeze_paren_close = false nl_squeeze_ifdef = true @@ -852,5 +856,5 @@ debug_decode_the_flags = false debug_use_the_exit_function_pop = true debug_print_version = false set_numbering_for_html_output = false -# option(s) with 'not default' value: 382 +# option(s) with 'not default' value: 383 # From 51aa4a006b4d44f46f821cbacd5a14f3c6a8a272 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Fri, 20 Jun 2025 21:14:16 -0400 Subject: [PATCH 241/245] Removed the underscore ("_") prefix from private symbols to eliminate reserved identifier errors. --- framework/Source/CPTAnimationPeriod.m | 140 +++++++++--------- framework/Source/CPTConstraints.m | 22 +-- framework/Source/CPTDarkGradientThemeTests.m | 4 +- framework/Source/CPTDefinitions.h | 4 +- framework/Source/CPTFill.m | 18 +-- framework/Source/CPTFillTests.m | 18 +-- framework/Source/CPTGradient.h | 4 +- framework/Source/CPTImage.m | 2 +- framework/Source/CPTNumericDataType.h | 2 +- framework/Source/CPTThemeTests.m | 10 +- framework/Source/_CPTAnimationCGFloatPeriod.h | 2 +- framework/Source/_CPTAnimationCGFloatPeriod.m | 4 +- framework/Source/_CPTAnimationCGPointPeriod.h | 2 +- framework/Source/_CPTAnimationCGPointPeriod.m | 4 +- framework/Source/_CPTAnimationCGRectPeriod.h | 2 +- framework/Source/_CPTAnimationCGRectPeriod.m | 4 +- framework/Source/_CPTAnimationCGSizePeriod.h | 2 +- framework/Source/_CPTAnimationCGSizePeriod.m | 4 +- .../Source/_CPTAnimationNSDecimalPeriod.h | 2 +- .../Source/_CPTAnimationNSDecimalPeriod.m | 4 +- .../Source/_CPTAnimationNSNumberPeriod.h | 2 +- .../Source/_CPTAnimationNSNumberPeriod.m | 2 +- .../Source/_CPTAnimationPlotRangePeriod.h | 2 +- .../Source/_CPTAnimationPlotRangePeriod.m | 2 +- framework/Source/_CPTConstraintsFixed.h | 2 +- framework/Source/_CPTConstraintsFixed.m | 18 +-- framework/Source/_CPTConstraintsRelative.h | 2 +- framework/Source/_CPTConstraintsRelative.m | 12 +- framework/Source/_CPTDarkGradientTheme.h | 2 +- framework/Source/_CPTDarkGradientTheme.m | 2 +- framework/Source/_CPTFillColor.h | 2 +- framework/Source/_CPTFillColor.m | 14 +- framework/Source/_CPTFillGradient.h | 2 +- framework/Source/_CPTFillGradient.m | 14 +- framework/Source/_CPTFillImage.h | 2 +- framework/Source/_CPTFillImage.m | 14 +- framework/Source/_CPTPlainBlackTheme.h | 2 +- framework/Source/_CPTPlainBlackTheme.m | 2 +- framework/Source/_CPTPlainWhiteTheme.h | 2 +- framework/Source/_CPTPlainWhiteTheme.m | 2 +- framework/Source/_CPTSlateTheme.h | 2 +- framework/Source/_CPTSlateTheme.m | 2 +- framework/Source/_CPTStocksTheme.h | 2 +- framework/Source/_CPTStocksTheme.m | 2 +- framework/Source/_CPTXYTheme.h | 2 +- framework/Source/_CPTXYTheme.m | 2 +- 46 files changed, 184 insertions(+), 184 deletions(-) diff --git a/framework/Source/CPTAnimationPeriod.m b/framework/Source/CPTAnimationPeriod.m index db26678b6..b38a09d6e 100644 --- a/framework/Source/CPTAnimationPeriod.m +++ b/framework/Source/CPTAnimationPeriod.m @@ -108,11 +108,11 @@ +(nonnull instancetype)periodWithStart:(CGFloat)aStart end:(CGFloat)anEnd durati { NSNumber *start = isnan(aStart) ? nil : @(aStart); - return [_CPTAnimationCGFloatPeriod periodWithStartValue:start - endValue:@(anEnd) - ofClass:Nil - duration:aDuration - withDelay:aDelay]; + return [CPTAnimationCGFloatPeriod periodWithStartValue:start + endValue:@(anEnd) + ofClass:Nil + duration:aDuration + withDelay:aDelay]; } /** @@ -131,11 +131,11 @@ +(nonnull instancetype)periodWithStartPoint:(CGPoint)aStartPoint endPoint:(CGPoi start = [NSValue valueWithBytes:&aStartPoint objCType:@encode(CGPoint)]; } - return [_CPTAnimationCGPointPeriod periodWithStartValue:start - endValue:[NSValue valueWithBytes:&anEndPoint objCType:@encode(CGPoint)] - ofClass:Nil - duration:aDuration - withDelay:aDelay]; + return [CPTAnimationCGPointPeriod periodWithStartValue:start + endValue:[NSValue valueWithBytes:&anEndPoint objCType:@encode(CGPoint)] + ofClass:Nil + duration:aDuration + withDelay:aDelay]; } /** @@ -154,11 +154,11 @@ +(nonnull instancetype)periodWithStartSize:(CGSize)aStartSize endSize:(CGSize)an start = [NSValue valueWithBytes:&aStartSize objCType:@encode(CGSize)]; } - return [_CPTAnimationCGSizePeriod periodWithStartValue:start - endValue:[NSValue valueWithBytes:&anEndSize objCType:@encode(CGSize)] - ofClass:Nil - duration:aDuration - withDelay:aDelay]; + return [CPTAnimationCGSizePeriod periodWithStartValue:start + endValue:[NSValue valueWithBytes:&anEndSize objCType:@encode(CGSize)] + ofClass:Nil + duration:aDuration + withDelay:aDelay]; } /** @@ -177,11 +177,11 @@ +(nonnull instancetype)periodWithStartRect:(CGRect)aStartRect endRect:(CGRect)an start = [NSValue valueWithBytes:&aStartRect objCType:@encode(CGRect)]; } - return [_CPTAnimationCGRectPeriod periodWithStartValue:start - endValue:[NSValue valueWithBytes:&anEndRect objCType:@encode(CGRect)] - ofClass:Nil - duration:aDuration - withDelay:aDelay]; + return [CPTAnimationCGRectPeriod periodWithStartValue:start + endValue:[NSValue valueWithBytes:&anEndRect objCType:@encode(CGRect)] + ofClass:Nil + duration:aDuration + withDelay:aDelay]; } /** @@ -196,11 +196,11 @@ +(nonnull instancetype)periodWithStartDecimal:(NSDecimal)aStartDecimal endDecima { NSDecimalNumber *start = NSDecimalIsNotANumber(&aStartDecimal) ? nil : [NSDecimalNumber decimalNumberWithDecimal:aStartDecimal]; - return [_CPTAnimationNSDecimalPeriod periodWithStartValue:start - endValue:[NSDecimalNumber decimalNumberWithDecimal:anEndDecimal] - ofClass:Nil - duration:aDuration - withDelay:aDelay]; + return [CPTAnimationNSDecimalPeriod periodWithStartValue:start + endValue:[NSDecimalNumber decimalNumberWithDecimal:anEndDecimal] + ofClass:Nil + duration:aDuration + withDelay:aDelay]; } /** @@ -213,11 +213,11 @@ +(nonnull instancetype)periodWithStartDecimal:(NSDecimal)aStartDecimal endDecima **/ +(nonnull instancetype)periodWithStartNumber:(nullable NSNumber *)aStartNumber endNumber:(nonnull NSNumber *)anEndNumber duration:(CGFloat)aDuration withDelay:(CGFloat)aDelay { - return [_CPTAnimationNSNumberPeriod periodWithStartValue:aStartNumber - endValue:anEndNumber - ofClass:[NSNumber class] - duration:aDuration - withDelay:aDelay]; + return [CPTAnimationNSNumberPeriod periodWithStartValue:aStartNumber + endValue:anEndNumber + ofClass:[NSNumber class] + duration:aDuration + withDelay:aDelay]; } /** @@ -236,11 +236,11 @@ +(nonnull instancetype)periodWithStartPlotRange:(nonnull CPTPlotRange *)aStartPl startRange = nil; } - return [_CPTAnimationPlotRangePeriod periodWithStartValue:(NSValue *)startRange - endValue:(NSValue *)anEndPlotRange - ofClass:[CPTPlotRange class] - duration:aDuration - withDelay:aDelay]; + return [CPTAnimationPlotRangePeriod periodWithStartValue:(NSValue *)startRange + endValue:(NSValue *)anEndPlotRange + ofClass:[CPTPlotRange class] + duration:aDuration + withDelay:aDelay]; } /// @cond @@ -291,11 +291,11 @@ -(nonnull instancetype)initWithStart:(CGFloat)aStart end:(CGFloat)anEnd duration { NSNumber *start = isnan(aStart) ? nil : @(aStart); - self = [[_CPTAnimationCGFloatPeriod alloc] initWithStartValue:start - endValue:@(anEnd) - ofClass:Nil - duration:aDuration - withDelay:aDelay]; + self = [[CPTAnimationCGFloatPeriod alloc] initWithStartValue:start + endValue:@(anEnd) + ofClass:Nil + duration:aDuration + withDelay:aDelay]; return self; } @@ -316,11 +316,11 @@ -(nonnull instancetype)initWithStartPoint:(CGPoint)aStartPoint endPoint:(CGPoint start = [NSValue valueWithBytes:&aStartPoint objCType:@encode(CGPoint)]; } - self = [[_CPTAnimationCGPointPeriod alloc] initWithStartValue:start - endValue:[NSValue valueWithBytes:&anEndPoint objCType:@encode(CGPoint)] - ofClass:Nil - duration:aDuration - withDelay:aDelay]; + self = [[CPTAnimationCGPointPeriod alloc] initWithStartValue:start + endValue:[NSValue valueWithBytes:&anEndPoint objCType:@encode(CGPoint)] + ofClass:Nil + duration:aDuration + withDelay:aDelay]; return self; } @@ -341,11 +341,11 @@ -(nonnull instancetype)initWithStartSize:(CGSize)aStartSize endSize:(CGSize)anEn start = [NSValue valueWithBytes:&aStartSize objCType:@encode(CGSize)]; } - self = [[_CPTAnimationCGSizePeriod alloc] initWithStartValue:start - endValue:[NSValue valueWithBytes:&anEndSize objCType:@encode(CGSize)] - ofClass:Nil - duration:aDuration - withDelay:aDelay]; + self = [[CPTAnimationCGSizePeriod alloc] initWithStartValue:start + endValue:[NSValue valueWithBytes:&anEndSize objCType:@encode(CGSize)] + ofClass:Nil + duration:aDuration + withDelay:aDelay]; return self; } @@ -366,11 +366,11 @@ -(nonnull instancetype)initWithStartRect:(CGRect)aStartRect endRect:(CGRect)anEn start = [NSValue valueWithBytes:&aStartRect objCType:@encode(CGRect)]; } - self = [[_CPTAnimationCGRectPeriod alloc] initWithStartValue:start - endValue:[NSValue valueWithBytes:&anEndRect objCType:@encode(CGRect)] - ofClass:Nil - duration:aDuration - withDelay:aDelay]; + self = [[CPTAnimationCGRectPeriod alloc] initWithStartValue:start + endValue:[NSValue valueWithBytes:&anEndRect objCType:@encode(CGRect)] + ofClass:Nil + duration:aDuration + withDelay:aDelay]; return self; } @@ -387,11 +387,11 @@ -(nonnull instancetype)initWithStartDecimal:(NSDecimal)aStartDecimal endDecimal: { NSDecimalNumber *start = NSDecimalIsNotANumber(&aStartDecimal) ? nil : [NSDecimalNumber decimalNumberWithDecimal:aStartDecimal]; - self = [[_CPTAnimationNSDecimalPeriod alloc] initWithStartValue:start - endValue:[NSDecimalNumber decimalNumberWithDecimal:anEndDecimal] - ofClass:Nil - duration:aDuration - withDelay:aDelay]; + self = [[CPTAnimationNSDecimalPeriod alloc] initWithStartValue:start + endValue:[NSDecimalNumber decimalNumberWithDecimal:anEndDecimal] + ofClass:Nil + duration:aDuration + withDelay:aDelay]; return self; } @@ -406,11 +406,11 @@ -(nonnull instancetype)initWithStartDecimal:(NSDecimal)aStartDecimal endDecimal: **/ -(nonnull instancetype)initWithStartNumber:(nullable NSNumber *)aStartNumber endNumber:(nonnull NSNumber *)anEndNumber duration:(CGFloat)aDuration withDelay:(CGFloat)aDelay { - self = [[_CPTAnimationNSNumberPeriod alloc] initWithStartValue:aStartNumber - endValue:anEndNumber - ofClass:[NSNumber class] - duration:aDuration - withDelay:aDelay]; + self = [[CPTAnimationNSNumberPeriod alloc] initWithStartValue:aStartNumber + endValue:anEndNumber + ofClass:[NSNumber class] + duration:aDuration + withDelay:aDelay]; return self; } @@ -431,11 +431,11 @@ -(nonnull instancetype)initWithStartPlotRange:(nonnull CPTPlotRange *)aStartPlot startRange = nil; } - self = [[_CPTAnimationPlotRangePeriod alloc] initWithStartValue:(NSValue *)startRange - endValue:(NSValue *)anEndPlotRange - ofClass:[CPTPlotRange class] - duration:aDuration - withDelay:aDelay]; + self = [[CPTAnimationPlotRangePeriod alloc] initWithStartValue:(NSValue *)startRange + endValue:(NSValue *)anEndPlotRange + ofClass:[CPTPlotRange class] + duration:aDuration + withDelay:aDelay]; return self; } diff --git a/framework/Source/CPTConstraints.m b/framework/Source/CPTConstraints.m index 7e695809f..2cd0bf076 100644 --- a/framework/Source/CPTConstraints.m +++ b/framework/Source/CPTConstraints.m @@ -22,7 +22,7 @@ @implementation CPTConstraints **/ +(nonnull instancetype)constraintWithLowerOffset:(CGFloat)newOffset { - return [[_CPTConstraintsFixed alloc] initWithLowerOffset:newOffset]; + return [[CPTConstraintsFixed alloc] initWithLowerOffset:newOffset]; } /** @brief Creates and returns a new CPTConstraints instance initialized with a fixed offset from the upper bound. @@ -31,7 +31,7 @@ +(nonnull instancetype)constraintWithLowerOffset:(CGFloat)newOffset **/ +(nonnull instancetype)constraintWithUpperOffset:(CGFloat)newOffset { - return [[_CPTConstraintsFixed alloc] initWithUpperOffset:newOffset]; + return [[CPTConstraintsFixed alloc] initWithUpperOffset:newOffset]; } /** @brief Creates and returns a new CPTConstraints instance initialized with a proportional offset relative to the bounds. @@ -44,7 +44,7 @@ +(nonnull instancetype)constraintWithUpperOffset:(CGFloat)newOffset **/ +(nonnull instancetype)constraintWithRelativeOffset:(CGFloat)newOffset { - return [[_CPTConstraintsRelative alloc] initWithRelativeOffset:newOffset]; + return [[CPTConstraintsRelative alloc] initWithRelativeOffset:newOffset]; } #pragma mark - @@ -56,7 +56,7 @@ +(nonnull instancetype)constraintWithRelativeOffset:(CGFloat)newOffset **/ -(nonnull instancetype)initWithLowerOffset:(CGFloat)newOffset { - self = [[_CPTConstraintsFixed alloc] initWithLowerOffset:newOffset]; + self = [[CPTConstraintsFixed alloc] initWithLowerOffset:newOffset]; return self; } @@ -67,7 +67,7 @@ -(nonnull instancetype)initWithLowerOffset:(CGFloat)newOffset **/ -(nonnull instancetype)initWithUpperOffset:(CGFloat)newOffset { - self = [[_CPTConstraintsFixed alloc] initWithUpperOffset:newOffset]; + self = [[CPTConstraintsFixed alloc] initWithUpperOffset:newOffset]; return self; } @@ -82,7 +82,7 @@ -(nonnull instancetype)initWithUpperOffset:(CGFloat)newOffset **/ -(nonnull instancetype)initWithRelativeOffset:(CGFloat)newOffset { - self = [[_CPTConstraintsRelative alloc] initWithRelativeOffset:newOffset]; + self = [[CPTConstraintsRelative alloc] initWithRelativeOffset:newOffset]; return self; } @@ -112,9 +112,9 @@ -(void)encodeWithCoder:(nonnull NSCoder *__unused)coder -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { - if ( [coder containsValueForKey:@"_CPTConstraintsFixed.offset"] ) { - CGFloat offset = [coder decodeCGFloatForKey:@"_CPTConstraintsFixed.offset"]; - BOOL isFixedToLower = [coder decodeBoolForKey:@"_CPTConstraintsFixed.isFixedToLower"]; + if ( [coder containsValueForKey:@"CPTConstraintsFixed.offset"] ) { + CGFloat offset = [coder decodeCGFloatForKey:@"CPTConstraintsFixed.offset"]; + BOOL isFixedToLower = [coder decodeBoolForKey:@"CPTConstraintsFixed.isFixedToLower"]; if ( isFixedToLower ) { return [self initWithLowerOffset:offset]; } @@ -122,8 +122,8 @@ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder return [self initWithUpperOffset:offset]; } } - else if ( [coder containsValueForKey:@"_CPTConstraintsRelative.offset"] ) { - CGFloat offset = [coder decodeCGFloatForKey:@"_CPTConstraintsRelative.offset"]; + else if ( [coder containsValueForKey:@"CPTConstraintsRelative.offset"] ) { + CGFloat offset = [coder decodeCGFloatForKey:@"CPTConstraintsRelative.offset"]; return [self initWithRelativeOffset:offset]; } diff --git a/framework/Source/CPTDarkGradientThemeTests.m b/framework/Source/CPTDarkGradientThemeTests.m index 84603fdae..bdede3230 100644 --- a/framework/Source/CPTDarkGradientThemeTests.m +++ b/framework/Source/CPTDarkGradientThemeTests.m @@ -8,7 +8,7 @@ @implementation CPTDarkGradientThemeTests -(void)testNewThemeShouldBeCPTXYGraph { // Arrange - _CPTDarkGradientTheme *theme = [[_CPTDarkGradientTheme alloc] init]; + CPTDarkGradientTheme *theme = [[CPTDarkGradientTheme alloc] init]; // Act CPTGraph *graph = [theme newGraph]; @@ -20,7 +20,7 @@ -(void)testNewThemeShouldBeCPTXYGraph -(void)testNewThemeSetGraphClassReturnedClassShouldBeOfCorrectType { // Arrange - _CPTDarkGradientTheme *theme = [[_CPTDarkGradientTheme alloc] init]; + CPTDarkGradientTheme *theme = [[CPTDarkGradientTheme alloc] init]; theme.graphClass = [CPTXYGraphTestCase class]; diff --git a/framework/Source/CPTDefinitions.h b/framework/Source/CPTDefinitions.h index ee2847099..e636deb76 100644 --- a/framework/Source/CPTDefinitions.h +++ b/framework/Source/CPTDefinitions.h @@ -198,7 +198,7 @@ typedef NS_ENUM (NSInteger, CPTCoordinate) { /** * @brief RGBA color for gradients **/ -typedef struct _CPTRGBAColor { +typedef struct CPTRGBAColor { CGFloat red; ///< The red component (0 ≤ @par{red} ≤ 1). CGFloat green; ///< The green component (0 ≤ @par{green} ≤ 1). CGFloat blue; ///< The blue component (0 ≤ @par{blue} ≤ 1). @@ -246,7 +246,7 @@ typedef NS_ENUM (NSInteger, CPTAlignment) { /** * @brief Edge inset distances for stretchable images. **/ -typedef struct _CPTEdgeInsets { +typedef struct CPTEdgeInsets { CGFloat top; ///< The top inset. CGFloat left; ///< The left inset. CGFloat bottom; ///< The bottom inset. diff --git a/framework/Source/CPTFill.m b/framework/Source/CPTFill.m index 58ffcb4c1..40831c610 100644 --- a/framework/Source/CPTFill.m +++ b/framework/Source/CPTFill.m @@ -28,7 +28,7 @@ @implementation CPTFill **/ +(nonnull instancetype)fillWithColor:(nonnull CPTColor *)aColor { - return [[_CPTFillColor alloc] initWithColor:aColor]; + return [[CPTFillColor alloc] initWithColor:aColor]; } /** @brief Creates and returns a new CPTFill instance initialized with a given gradient. @@ -37,7 +37,7 @@ +(nonnull instancetype)fillWithColor:(nonnull CPTColor *)aColor **/ +(nonnull instancetype)fillWithGradient:(nonnull CPTGradient *)aGradient { - return [[_CPTFillGradient alloc] initWithGradient:aGradient]; + return [[CPTFillGradient alloc] initWithGradient:aGradient]; } /** @brief Creates and returns a new CPTFill instance initialized with a given image. @@ -46,7 +46,7 @@ +(nonnull instancetype)fillWithGradient:(nonnull CPTGradient *)aGradient **/ +(nonnull instancetype)fillWithImage:(nonnull CPTImage *)anImage { - return [[_CPTFillImage alloc] initWithImage:anImage]; + return [[CPTFillImage alloc] initWithImage:anImage]; } /** @brief Initializes a newly allocated CPTFill object with the provided color. @@ -55,7 +55,7 @@ +(nonnull instancetype)fillWithImage:(nonnull CPTImage *)anImage **/ -(nonnull instancetype)initWithColor:(nonnull CPTColor *)aColor { - self = [[_CPTFillColor alloc] initWithColor:aColor]; + self = [[CPTFillColor alloc] initWithColor:aColor]; return self; } @@ -66,7 +66,7 @@ -(nonnull instancetype)initWithColor:(nonnull CPTColor *)aColor **/ -(nonnull instancetype)initWithGradient:(nonnull CPTGradient *)aGradient { - self = [[_CPTFillGradient alloc] initWithGradient:aGradient]; + self = [[CPTFillGradient alloc] initWithGradient:aGradient]; return self; } @@ -77,7 +77,7 @@ -(nonnull instancetype)initWithGradient:(nonnull CPTGradient *)aGradient **/ -(nonnull instancetype)initWithImage:(nonnull CPTImage *)anImage { - self = [[_CPTFillImage alloc] initWithImage:anImage]; + self = [[CPTFillImage alloc] initWithImage:anImage]; return self; } @@ -108,21 +108,21 @@ -(void)encodeWithCoder:(nonnull NSCoder *__unused)coder -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { id fill = [coder decodeObjectOfClass:[CPTColor class] - forKey:@"_CPTFillColor.fillColor"]; + forKey:@"CPTFillColor.fillColor"]; if ( fill ) { return [self initWithColor:fill]; } id gradient = [coder decodeObjectOfClass:[CPTGradient class] - forKey:@"_CPTFillGradient.fillGradient"]; + forKey:@"CPTFillGradient.fillGradient"]; if ( gradient ) { return [self initWithGradient:gradient]; } id image = [coder decodeObjectOfClass:[CPTImage class] - forKey:@"_CPTFillImage.fillImage"]; + forKey:@"CPTFillImage.fillImage"]; if ( image ) { return [self initWithImage:image]; diff --git a/framework/Source/CPTFillTests.m b/framework/Source/CPTFillTests.m index 921b54bb1..01fddd85e 100644 --- a/framework/Source/CPTFillTests.m +++ b/framework/Source/CPTFillTests.m @@ -8,7 +8,7 @@ #import "CPTGradient.h" #import "CPTImage.h" -@interface _CPTFillColor() +@interface CPTFillColor() @property (nonatomic, readwrite, copy, nonnull) CPTColor *fillColor; @@ -16,7 +16,7 @@ @interface _CPTFillColor() #pragma mark - -@interface _CPTFillGradient() +@interface CPTFillGradient() @property (nonatomic, readwrite, copy, nonnull) CPTGradient *fillGradient; @@ -24,7 +24,7 @@ @interface _CPTFillGradient() #pragma mark - -@interface _CPTFillImage() +@interface CPTFillImage() @property (nonatomic, readwrite, copy, nonnull) CPTImage *fillImage; @@ -39,18 +39,18 @@ @implementation CPTFillTests -(void)testKeyedArchivingRoundTripColor { - _CPTFillColor *fill = (_CPTFillColor *)[CPTFill fillWithColor:[CPTColor redColor]]; + CPTFillColor *fill = (CPTFillColor *)[CPTFill fillWithColor:[CPTColor redColor]]; - _CPTFillColor *newFill = [self archiveRoundTrip:fill toClass:[CPTFill class]]; + CPTFillColor *newFill = [self archiveRoundTrip:fill toClass:[CPTFill class]]; XCTAssertEqualObjects(fill.fillColor, newFill.fillColor, @"Fill with color not equal"); } -(void)testKeyedArchivingRoundTripGradient { - _CPTFillGradient *fill = (_CPTFillGradient *)[CPTFill fillWithGradient:[CPTGradient rainbowGradient]]; + CPTFillGradient *fill = (CPTFillGradient *)[CPTFill fillWithGradient:[CPTGradient rainbowGradient]]; - _CPTFillGradient *newFill = [self archiveRoundTrip:fill toClass:[CPTFill class]]; + CPTFillGradient *newFill = [self archiveRoundTrip:fill toClass:[CPTFill class]]; XCTAssertEqualObjects(fill.fillGradient, newFill.fillGradient, @"Fill with gradient not equal"); } @@ -79,9 +79,9 @@ -(void)testKeyedArchivingRoundTripImage CGImageRelease(cgImage); CGContextRelease(context); - _CPTFillImage *fill = (_CPTFillImage *)[CPTFill fillWithImage:image]; + CPTFillImage *fill = (CPTFillImage *)[CPTFill fillWithImage:image]; - _CPTFillImage *newFill = [self archiveRoundTrip:fill toClass:[CPTFill class]]; + CPTFillImage *newFill = [self archiveRoundTrip:fill toClass:[CPTFill class]]; XCTAssertEqualObjects(fill.fillImage, newFill.fillImage, @"Fill with image not equal"); } diff --git a/framework/Source/CPTGradient.h b/framework/Source/CPTGradient.h index 1b51fbb0d..9d085aeba 100644 --- a/framework/Source/CPTGradient.h +++ b/framework/Source/CPTGradient.h @@ -12,11 +12,11 @@ /** * @brief A structure representing one node in a linked list of RGBA colors. **/ -typedef struct _CPTGradientElement { +typedef struct CPTGradientElement { CPTRGBAColor color; ///< Color CGFloat position; ///< Gradient position (0 ≤ @par{position} ≤ 1) - struct _CPTGradientElement *__nullable nextElement; ///< Pointer to the next CPTGradientElement in the list (last element == @NULL) + struct CPTGradientElement *__nullable nextElement; ///< Pointer to the next CPTGradientElement in the list (last element == @NULL) } CPTGradientElement; diff --git a/framework/Source/CPTImage.m b/framework/Source/CPTImage.m index ff60ae7a4..b954ee9f4 100644 --- a/framework/Source/CPTImage.m +++ b/framework/Source/CPTImage.m @@ -18,7 +18,7 @@ typedef NS_ENUM (NSInteger, CPTSlice) { CPTSliceBottomRight ///< Bottom right corner }; -typedef struct _CPTImageSlices { +typedef struct CPTImageSlices { __nonnull CGImageRef slice[9]; ///< The image slices used to render a stretchable image. } CPTImageSlices; diff --git a/framework/Source/CPTNumericDataType.h b/framework/Source/CPTNumericDataType.h index 04bc2a989..01fa7ac08 100644 --- a/framework/Source/CPTNumericDataType.h +++ b/framework/Source/CPTNumericDataType.h @@ -27,7 +27,7 @@ typedef NS_CLOSED_ENUM(NSInteger, CPTDataOrder) /** * @brief Structure that describes the encoding of numeric data samples. **/ -typedef struct _CPTNumericDataType { +typedef struct CPTNumericDataType { CPTDataTypeFormat dataTypeFormat; ///< Data type format size_t sampleBytes; ///< Number of bytes in each sample CFByteOrder byteOrder; ///< Byte order diff --git a/framework/Source/CPTThemeTests.m b/framework/Source/CPTThemeTests.m index 0a61bbfad..d9ca89e2a 100644 --- a/framework/Source/CPTThemeTests.m +++ b/framework/Source/CPTThemeTests.m @@ -51,7 +51,7 @@ -(void)testThemeNamedDarkGradientShouldReturnCPTDarkGradientTheme { CPTTheme *theme = [CPTTheme themeNamed:kCPTDarkGradientTheme]; - XCTAssertTrue([theme isKindOfClass:[_CPTDarkGradientTheme class]], @"Should be _CPTDarkGradientTheme"); + XCTAssertTrue([theme isKindOfClass:[CPTDarkGradientTheme class]], @"Should be CPTDarkGradientTheme"); [self archiveRoundTrip:theme toClass:[CPTTheme class]]; } @@ -60,7 +60,7 @@ -(void)testThemeNamedPlainBlackShouldReturnCPTPlainBlackTheme { CPTTheme *theme = [CPTTheme themeNamed:kCPTPlainBlackTheme]; - XCTAssertTrue([theme isKindOfClass:[_CPTPlainBlackTheme class]], @"Should be _CPTPlainBlackTheme"); + XCTAssertTrue([theme isKindOfClass:[CPTPlainBlackTheme class]], @"Should be CPTPlainBlackTheme"); [self archiveRoundTrip:theme toClass:[CPTTheme class]]; } @@ -69,7 +69,7 @@ -(void)testThemeNamedPlainWhiteShouldReturnCPTPlainWhiteTheme { CPTTheme *theme = [CPTTheme themeNamed:kCPTPlainWhiteTheme]; - XCTAssertTrue([theme isKindOfClass:[_CPTPlainWhiteTheme class]], @"Should be _CPTPlainWhiteTheme"); + XCTAssertTrue([theme isKindOfClass:[CPTPlainWhiteTheme class]], @"Should be CPTPlainWhiteTheme"); [self archiveRoundTrip:theme toClass:[CPTTheme class]]; } @@ -78,7 +78,7 @@ -(void)testThemeNamedStocksShouldReturnCPTStocksTheme { CPTTheme *theme = [CPTTheme themeNamed:kCPTStocksTheme]; - XCTAssertTrue([theme isKindOfClass:[_CPTStocksTheme class]], @"Should be _CPTStocksTheme"); + XCTAssertTrue([theme isKindOfClass:[CPTStocksTheme class]], @"Should be CPTStocksTheme"); [self archiveRoundTrip:theme toClass:[CPTTheme class]]; } @@ -87,7 +87,7 @@ -(void)testThemeNamedSlateShouldReturnCPTSlateTheme { CPTTheme *theme = [CPTTheme themeNamed:kCPTSlateTheme]; - XCTAssertTrue([theme isKindOfClass:[_CPTSlateTheme class]], @"Should be _CPTSlateTheme"); + XCTAssertTrue([theme isKindOfClass:[CPTSlateTheme class]], @"Should be CPTSlateTheme"); [self archiveRoundTrip:theme toClass:[CPTTheme class]]; } diff --git a/framework/Source/_CPTAnimationCGFloatPeriod.h b/framework/Source/_CPTAnimationCGFloatPeriod.h index 42994267d..1a9e2f36a 100644 --- a/framework/Source/_CPTAnimationCGFloatPeriod.h +++ b/framework/Source/_CPTAnimationCGFloatPeriod.h @@ -1,5 +1,5 @@ #import "CPTAnimationPeriod.h" -@interface _CPTAnimationCGFloatPeriod : CPTAnimationPeriod +@interface CPTAnimationCGFloatPeriod : CPTAnimationPeriod @end diff --git a/framework/Source/_CPTAnimationCGFloatPeriod.m b/framework/Source/_CPTAnimationCGFloatPeriod.m index f9961bb9a..9e59a6dbc 100644 --- a/framework/Source/_CPTAnimationCGFloatPeriod.m +++ b/framework/Source/_CPTAnimationCGFloatPeriod.m @@ -3,7 +3,7 @@ #import "_NSNumberExtensions.h" /// @cond -@interface _CPTAnimationCGFloatPeriod() +@interface CPTAnimationCGFloatPeriod() CGFloat CPTCurrentFloatValue(id __nonnull boundObject, SEL __nonnull boundGetter); @@ -12,7 +12,7 @@ @interface _CPTAnimationCGFloatPeriod() #pragma mark - -@implementation _CPTAnimationCGFloatPeriod +@implementation CPTAnimationCGFloatPeriod CGFloat CPTCurrentFloatValue(id __nonnull boundObject, SEL __nonnull boundGetter) { diff --git a/framework/Source/_CPTAnimationCGPointPeriod.h b/framework/Source/_CPTAnimationCGPointPeriod.h index c6ac74c94..4a2cd73a1 100644 --- a/framework/Source/_CPTAnimationCGPointPeriod.h +++ b/framework/Source/_CPTAnimationCGPointPeriod.h @@ -1,5 +1,5 @@ #import "CPTAnimationPeriod.h" -@interface _CPTAnimationCGPointPeriod : CPTAnimationPeriod +@interface CPTAnimationCGPointPeriod : CPTAnimationPeriod @end diff --git a/framework/Source/_CPTAnimationCGPointPeriod.m b/framework/Source/_CPTAnimationCGPointPeriod.m index 31625f9cf..b22e16c8b 100644 --- a/framework/Source/_CPTAnimationCGPointPeriod.m +++ b/framework/Source/_CPTAnimationCGPointPeriod.m @@ -1,7 +1,7 @@ #import "_CPTAnimationCGPointPeriod.h" /// @cond -@interface _CPTAnimationCGPointPeriod() +@interface CPTAnimationCGPointPeriod() CGPoint CPTCurrentPointValue(id __nonnull boundObject, SEL __nonnull boundGetter); @@ -10,7 +10,7 @@ @interface _CPTAnimationCGPointPeriod() #pragma mark - -@implementation _CPTAnimationCGPointPeriod +@implementation CPTAnimationCGPointPeriod CGPoint CPTCurrentPointValue(id __nonnull boundObject, SEL __nonnull boundGetter) { diff --git a/framework/Source/_CPTAnimationCGRectPeriod.h b/framework/Source/_CPTAnimationCGRectPeriod.h index 0d97645d4..00aa7302d 100644 --- a/framework/Source/_CPTAnimationCGRectPeriod.h +++ b/framework/Source/_CPTAnimationCGRectPeriod.h @@ -1,5 +1,5 @@ #import "CPTAnimationPeriod.h" -@interface _CPTAnimationCGRectPeriod : CPTAnimationPeriod +@interface CPTAnimationCGRectPeriod : CPTAnimationPeriod @end diff --git a/framework/Source/_CPTAnimationCGRectPeriod.m b/framework/Source/_CPTAnimationCGRectPeriod.m index c3fa299ad..8a92eb30a 100644 --- a/framework/Source/_CPTAnimationCGRectPeriod.m +++ b/framework/Source/_CPTAnimationCGRectPeriod.m @@ -1,7 +1,7 @@ #import "_CPTAnimationCGRectPeriod.h" /// @cond -@interface _CPTAnimationCGRectPeriod() +@interface CPTAnimationCGRectPeriod() CGRect CPTCurrentRectValue(id __nonnull boundObject, SEL __nonnull boundGetter); @@ -10,7 +10,7 @@ @interface _CPTAnimationCGRectPeriod() #pragma mark - -@implementation _CPTAnimationCGRectPeriod +@implementation CPTAnimationCGRectPeriod CGRect CPTCurrentRectValue(id __nonnull boundObject, SEL __nonnull boundGetter) { diff --git a/framework/Source/_CPTAnimationCGSizePeriod.h b/framework/Source/_CPTAnimationCGSizePeriod.h index ac87a24e7..017208b39 100644 --- a/framework/Source/_CPTAnimationCGSizePeriod.h +++ b/framework/Source/_CPTAnimationCGSizePeriod.h @@ -1,5 +1,5 @@ #import "CPTAnimationPeriod.h" -@interface _CPTAnimationCGSizePeriod : CPTAnimationPeriod +@interface CPTAnimationCGSizePeriod : CPTAnimationPeriod @end diff --git a/framework/Source/_CPTAnimationCGSizePeriod.m b/framework/Source/_CPTAnimationCGSizePeriod.m index f0775a13a..05b1a6b8d 100644 --- a/framework/Source/_CPTAnimationCGSizePeriod.m +++ b/framework/Source/_CPTAnimationCGSizePeriod.m @@ -1,7 +1,7 @@ #import "_CPTAnimationCGSizePeriod.h" /// @cond -@interface _CPTAnimationCGSizePeriod() +@interface CPTAnimationCGSizePeriod() CGSize CPTCurrentSizeValue(id __nonnull boundObject, SEL __nonnull boundGetter); @@ -10,7 +10,7 @@ @interface _CPTAnimationCGSizePeriod() #pragma mark - -@implementation _CPTAnimationCGSizePeriod +@implementation CPTAnimationCGSizePeriod CGSize CPTCurrentSizeValue(id __nonnull boundObject, SEL __nonnull boundGetter) { diff --git a/framework/Source/_CPTAnimationNSDecimalPeriod.h b/framework/Source/_CPTAnimationNSDecimalPeriod.h index 5a44befbe..d5c428f1a 100644 --- a/framework/Source/_CPTAnimationNSDecimalPeriod.h +++ b/framework/Source/_CPTAnimationNSDecimalPeriod.h @@ -1,5 +1,5 @@ #import "CPTAnimationPeriod.h" -@interface _CPTAnimationNSDecimalPeriod : CPTAnimationPeriod +@interface CPTAnimationNSDecimalPeriod : CPTAnimationPeriod @end diff --git a/framework/Source/_CPTAnimationNSDecimalPeriod.m b/framework/Source/_CPTAnimationNSDecimalPeriod.m index b61e7644c..d9a430183 100644 --- a/framework/Source/_CPTAnimationNSDecimalPeriod.m +++ b/framework/Source/_CPTAnimationNSDecimalPeriod.m @@ -3,7 +3,7 @@ #import "CPTUtilities.h" /// @cond -@interface _CPTAnimationNSDecimalPeriod() +@interface CPTAnimationNSDecimalPeriod() NSDecimal CPTCurrentDecimalValue(id __nonnull boundObject, SEL __nonnull boundGetter); @@ -12,7 +12,7 @@ @interface _CPTAnimationNSDecimalPeriod() #pragma mark - -@implementation _CPTAnimationNSDecimalPeriod +@implementation CPTAnimationNSDecimalPeriod NSDecimal CPTCurrentDecimalValue(id __nonnull boundObject, SEL __nonnull boundGetter) { diff --git a/framework/Source/_CPTAnimationNSNumberPeriod.h b/framework/Source/_CPTAnimationNSNumberPeriod.h index dfe744ba3..b8e7b6823 100644 --- a/framework/Source/_CPTAnimationNSNumberPeriod.h +++ b/framework/Source/_CPTAnimationNSNumberPeriod.h @@ -1,5 +1,5 @@ #import "CPTAnimationPeriod.h" -@interface _CPTAnimationNSNumberPeriod : CPTAnimationPeriod +@interface CPTAnimationNSNumberPeriod : CPTAnimationPeriod @end diff --git a/framework/Source/_CPTAnimationNSNumberPeriod.m b/framework/Source/_CPTAnimationNSNumberPeriod.m index 086a74fb4..b23a28f7a 100644 --- a/framework/Source/_CPTAnimationNSNumberPeriod.m +++ b/framework/Source/_CPTAnimationNSNumberPeriod.m @@ -2,7 +2,7 @@ #import "CPTUtilities.h" -@implementation _CPTAnimationNSNumberPeriod +@implementation CPTAnimationNSNumberPeriod -(void)setStartValueFromObject:(id)boundObject propertyGetter:(SEL)boundGetter { diff --git a/framework/Source/_CPTAnimationPlotRangePeriod.h b/framework/Source/_CPTAnimationPlotRangePeriod.h index a15749d66..de14b7bae 100644 --- a/framework/Source/_CPTAnimationPlotRangePeriod.h +++ b/framework/Source/_CPTAnimationPlotRangePeriod.h @@ -1,5 +1,5 @@ #import "CPTAnimationPeriod.h" -@interface _CPTAnimationPlotRangePeriod : CPTAnimationPeriod +@interface CPTAnimationPlotRangePeriod : CPTAnimationPeriod @end diff --git a/framework/Source/_CPTAnimationPlotRangePeriod.m b/framework/Source/_CPTAnimationPlotRangePeriod.m index cda89bac7..25a12700e 100644 --- a/framework/Source/_CPTAnimationPlotRangePeriod.m +++ b/framework/Source/_CPTAnimationPlotRangePeriod.m @@ -3,7 +3,7 @@ #import "CPTPlotRange.h" #import "CPTUtilities.h" -@implementation _CPTAnimationPlotRangePeriod +@implementation CPTAnimationPlotRangePeriod -(void)setStartValueFromObject:(nonnull id)boundObject propertyGetter:(nonnull SEL)boundGetter { diff --git a/framework/Source/_CPTConstraintsFixed.h b/framework/Source/_CPTConstraintsFixed.h index a1bd10fd4..ef7b67672 100644 --- a/framework/Source/_CPTConstraintsFixed.h +++ b/framework/Source/_CPTConstraintsFixed.h @@ -6,7 +6,7 @@ #import "CPTConstraints.h" #endif -@interface _CPTConstraintsFixed : CPTConstraints +@interface CPTConstraintsFixed : CPTConstraints /// @name Initialization /// @{ diff --git a/framework/Source/_CPTConstraintsFixed.m b/framework/Source/_CPTConstraintsFixed.m index 1b8fb1486..516863c93 100644 --- a/framework/Source/_CPTConstraintsFixed.m +++ b/framework/Source/_CPTConstraintsFixed.m @@ -3,7 +3,7 @@ #import "_NSCoderExtensions.h" /// @cond -@interface _CPTConstraintsFixed() +@interface CPTConstraintsFixed() @property (nonatomic, readwrite) CGFloat offset; @property (nonatomic, readwrite) BOOL isFixedToLower; @@ -18,7 +18,7 @@ @interface _CPTConstraintsFixed() * * Supports fixed distance from either end of the range and a proportional fraction of the range. **/ -@implementation _CPTConstraintsFixed +@implementation CPTConstraintsFixed @synthesize offset; @synthesize isFixedToLower; @@ -62,8 +62,8 @@ -(BOOL)isEqualToConstraint:(nullable CPTConstraints *)otherConstraint if ( [self class] != [otherConstraint class] ) { return NO; } - return (self.offset == ((_CPTConstraintsFixed *)otherConstraint).offset) && - (self.isFixedToLower == ((_CPTConstraintsFixed *)otherConstraint).isFixedToLower); + return (self.offset == ((CPTConstraintsFixed *)otherConstraint).offset) && + (self.isFixedToLower == ((CPTConstraintsFixed *)otherConstraint).isFixedToLower); } #pragma mark - @@ -92,7 +92,7 @@ -(CGFloat)positionForLowerBound:(CGFloat)lowerBound upperBound:(CGFloat)upperBou -(nonnull id)copyWithZone:(nullable NSZone *)zone { - _CPTConstraintsFixed *copy = [[[self class] allocWithZone:zone] init]; + CPTConstraintsFixed *copy = [[[self class] allocWithZone:zone] init]; copy.offset = self.offset; copy.isFixedToLower = self.isFixedToLower; @@ -114,8 +114,8 @@ -(nonnull Class)classForCoder -(void)encodeWithCoder:(nonnull NSCoder *)coder { - [coder encodeCGFloat:self.offset forKey:@"_CPTConstraintsFixed.offset"]; - [coder encodeBool:self.isFixedToLower forKey:@"_CPTConstraintsFixed.isFixedToLower"]; + [coder encodeCGFloat:self.offset forKey:@"CPTConstraintsFixed.offset"]; + [coder encodeBool:self.isFixedToLower forKey:@"CPTConstraintsFixed.isFixedToLower"]; } /// @endcond @@ -127,8 +127,8 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { if ((self = [super init])) { - offset = [coder decodeCGFloatForKey:@"_CPTConstraintsFixed.offset"]; - isFixedToLower = [coder decodeBoolForKey:@"_CPTConstraintsFixed.isFixedToLower"]; + offset = [coder decodeCGFloatForKey:@"CPTConstraintsFixed.offset"]; + isFixedToLower = [coder decodeBoolForKey:@"CPTConstraintsFixed.isFixedToLower"]; } return self; } diff --git a/framework/Source/_CPTConstraintsRelative.h b/framework/Source/_CPTConstraintsRelative.h index 0908d60e0..560ea5992 100644 --- a/framework/Source/_CPTConstraintsRelative.h +++ b/framework/Source/_CPTConstraintsRelative.h @@ -6,7 +6,7 @@ #import "CPTConstraints.h" #endif -@interface _CPTConstraintsRelative : CPTConstraints +@interface CPTConstraintsRelative : CPTConstraints /// @name Initialization /// @{ diff --git a/framework/Source/_CPTConstraintsRelative.m b/framework/Source/_CPTConstraintsRelative.m index c4a61edd7..355f08067 100644 --- a/framework/Source/_CPTConstraintsRelative.m +++ b/framework/Source/_CPTConstraintsRelative.m @@ -4,7 +4,7 @@ #import /// @cond -@interface _CPTConstraintsRelative() +@interface CPTConstraintsRelative() @property (nonatomic, readwrite) CGFloat offset; @@ -18,7 +18,7 @@ @interface _CPTConstraintsRelative() * * Supports fixed distance from either end of the range and a proportional fraction of the range. **/ -@implementation _CPTConstraintsRelative +@implementation CPTConstraintsRelative @synthesize offset; @@ -50,7 +50,7 @@ -(BOOL)isEqualToConstraint:(nullable CPTConstraints *)otherConstraint if ( [self class] != [otherConstraint class] ) { return NO; } - return self.offset == ((_CPTConstraintsRelative *)otherConstraint).offset; + return self.offset == ((CPTConstraintsRelative *)otherConstraint).offset; } #pragma mark - @@ -72,7 +72,7 @@ -(CGFloat)positionForLowerBound:(CGFloat)lowerBound upperBound:(CGFloat)upperBou -(nonnull id)copyWithZone:(nullable NSZone *)zone { - _CPTConstraintsRelative *copy = [[[self class] allocWithZone:zone] init]; + CPTConstraintsRelative *copy = [[[self class] allocWithZone:zone] init]; copy.offset = self.offset; @@ -93,7 +93,7 @@ -(nonnull Class)classForCoder -(void)encodeWithCoder:(nonnull NSCoder *)coder { - [coder encodeCGFloat:self.offset forKey:@"_CPTConstraintsRelative.offset"]; + [coder encodeCGFloat:self.offset forKey:@"CPTConstraintsRelative.offset"]; } /// @endcond @@ -105,7 +105,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { if ((self = [super init])) { - offset = [coder decodeCGFloatForKey:@"_CPTConstraintsRelative.offset"]; + offset = [coder decodeCGFloatForKey:@"CPTConstraintsRelative.offset"]; } return self; } diff --git a/framework/Source/_CPTDarkGradientTheme.h b/framework/Source/_CPTDarkGradientTheme.h index fd92cb413..9037df6bb 100644 --- a/framework/Source/_CPTDarkGradientTheme.h +++ b/framework/Source/_CPTDarkGradientTheme.h @@ -6,6 +6,6 @@ #import "_CPTXYTheme.h" #endif -@interface _CPTDarkGradientTheme : _CPTXYTheme +@interface CPTDarkGradientTheme : CPTXYTheme @end diff --git a/framework/Source/_CPTDarkGradientTheme.m b/framework/Source/_CPTDarkGradientTheme.m index 2482c241b..3dcb4008d 100644 --- a/framework/Source/_CPTDarkGradientTheme.m +++ b/framework/Source/_CPTDarkGradientTheme.m @@ -19,7 +19,7 @@ /** * @brief Creates a CPTXYGraph instance formatted with dark gray gradient backgrounds and light gray lines. **/ -@implementation _CPTDarkGradientTheme +@implementation CPTDarkGradientTheme +(nonnull CPTThemeName)name { diff --git a/framework/Source/_CPTFillColor.h b/framework/Source/_CPTFillColor.h index 0a9aae160..2eb460224 100644 --- a/framework/Source/_CPTFillColor.h +++ b/framework/Source/_CPTFillColor.h @@ -6,7 +6,7 @@ #import "CPTFill.h" #endif -@interface _CPTFillColor : CPTFill +@interface CPTFillColor : CPTFill /// @name Initialization /// @{ diff --git a/framework/Source/_CPTFillColor.m b/framework/Source/_CPTFillColor.m index dda4a2979..9a06ddfe2 100644 --- a/framework/Source/_CPTFillColor.m +++ b/framework/Source/_CPTFillColor.m @@ -3,7 +3,7 @@ #import "CPTColor.h" /// @cond -@interface _CPTFillColor() +@interface CPTFillColor() @property (nonatomic, readwrite, copy, nonnull) CPTColor *fillColor; @@ -16,7 +16,7 @@ @interface _CPTFillColor() * Drawing methods are provided to fill rectangular areas and arbitrary drawing paths. **/ -@implementation _CPTFillColor +@implementation CPTFillColor /** @property nonnull CPTColor *fillColor * @brief The fill color. @@ -26,9 +26,9 @@ @implementation _CPTFillColor #pragma mark - #pragma mark Init/Dealloc -/** @brief Initializes a newly allocated _CPTFillColor object with the provided color. +/** @brief Initializes a newly allocated CPTFillColor object with the provided color. * @param aColor The color. - * @return The initialized _CPTFillColor object. + * @return The initialized CPTFillColor object. **/ -(nonnull instancetype)initWithColor:(nonnull CPTColor *)aColor { @@ -87,7 +87,7 @@ -(CGColorRef)cgColor -(nonnull id)copyWithZone:(nullable NSZone *)zone { - _CPTFillColor *copy = [[[self class] allocWithZone:zone] init]; + CPTFillColor *copy = [[[self class] allocWithZone:zone] init]; copy.fillColor = self.fillColor; @@ -108,7 +108,7 @@ -(nonnull Class)classForCoder -(void)encodeWithCoder:(nonnull NSCoder *)coder { - [coder encodeObject:self.fillColor forKey:@"_CPTFillColor.fillColor"]; + [coder encodeObject:self.fillColor forKey:@"CPTFillColor.fillColor"]; } /// @endcond @@ -121,7 +121,7 @@ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { if ((self = [super init])) { CPTColor *color = [coder decodeObjectOfClass:[CPTColor class] - forKey:@"_CPTFillColor.fillColor"]; + forKey:@"CPTFillColor.fillColor"]; if ( color ) { fillColor = color; diff --git a/framework/Source/_CPTFillGradient.h b/framework/Source/_CPTFillGradient.h index b0cefe2e1..b81935820 100644 --- a/framework/Source/_CPTFillGradient.h +++ b/framework/Source/_CPTFillGradient.h @@ -8,7 +8,7 @@ @class CPTGradient; -@interface _CPTFillGradient : CPTFill +@interface CPTFillGradient : CPTFill /// @name Initialization /// @{ diff --git a/framework/Source/_CPTFillGradient.m b/framework/Source/_CPTFillGradient.m index 90fddd583..32a2a4c04 100644 --- a/framework/Source/_CPTFillGradient.m +++ b/framework/Source/_CPTFillGradient.m @@ -3,7 +3,7 @@ #import "CPTGradient.h" /// @cond -@interface _CPTFillGradient() +@interface CPTFillGradient() @property (nonatomic, readwrite, copy, nonnull) CPTGradient *fillGradient; @@ -16,7 +16,7 @@ @interface _CPTFillGradient() * Drawing methods are provided to fill rectangular areas and arbitrary drawing paths. **/ -@implementation _CPTFillGradient +@implementation CPTFillGradient /** @property nonnull CPTGradient *fillGradient * @brief The fill gradient. @@ -26,9 +26,9 @@ @implementation _CPTFillGradient #pragma mark - #pragma mark Init/Dealloc -/** @brief Initializes a newly allocated _CPTFillGradient object with the provided gradient. +/** @brief Initializes a newly allocated CPTFillGradient object with the provided gradient. * @param aGradient The gradient. - * @return The initialized _CPTFillGradient object. + * @return The initialized CPTFillGradient object. **/ -(nonnull instancetype)initWithGradient:(nonnull CPTGradient *)aGradient { @@ -73,7 +73,7 @@ -(BOOL)isOpaque -(nonnull id)copyWithZone:(nullable NSZone *)zone { - _CPTFillGradient *copy = [[[self class] allocWithZone:zone] init]; + CPTFillGradient *copy = [[[self class] allocWithZone:zone] init]; copy.fillGradient = self.fillGradient; @@ -94,7 +94,7 @@ -(nonnull Class)classForCoder -(void)encodeWithCoder:(nonnull NSCoder *)coder { - [coder encodeObject:self.fillGradient forKey:@"_CPTFillGradient.fillGradient"]; + [coder encodeObject:self.fillGradient forKey:@"CPTFillGradient.fillGradient"]; } /// @endcond @@ -107,7 +107,7 @@ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { if ((self = [super init])) { CPTGradient *gradient = [coder decodeObjectOfClass:[CPTGradient class] - forKey:@"_CPTFillGradient.fillGradient"]; + forKey:@"CPTFillGradient.fillGradient"]; if ( gradient ) { fillGradient = gradient; diff --git a/framework/Source/_CPTFillImage.h b/framework/Source/_CPTFillImage.h index 2deaac191..705a8e58f 100644 --- a/framework/Source/_CPTFillImage.h +++ b/framework/Source/_CPTFillImage.h @@ -8,7 +8,7 @@ @class CPTImage; -@interface _CPTFillImage : CPTFill +@interface CPTFillImage : CPTFill /// @name Initialization /// @{ diff --git a/framework/Source/_CPTFillImage.m b/framework/Source/_CPTFillImage.m index 505977950..2489cb7bc 100644 --- a/framework/Source/_CPTFillImage.m +++ b/framework/Source/_CPTFillImage.m @@ -3,7 +3,7 @@ #import "CPTImage.h" /// @cond -@interface _CPTFillImage() +@interface CPTFillImage() @property (nonatomic, readwrite, copy, nonnull) CPTImage *fillImage; @@ -16,7 +16,7 @@ @interface _CPTFillImage() * Drawing methods are provided to fill rectangular areas and arbitrary drawing paths. **/ -@implementation _CPTFillImage +@implementation CPTFillImage /** @property nonnull CPTImage *fillImage * @brief The fill image. @@ -26,9 +26,9 @@ @implementation _CPTFillImage #pragma mark - #pragma mark Init/Dealloc -/** @brief Initializes a newly allocated _CPTFillImage object with the provided image. +/** @brief Initializes a newly allocated CPTFillImage object with the provided image. * @param anImage The image. - * @return The initialized _CPTFillImage object. + * @return The initialized CPTFillImage object. **/ -(nonnull instancetype)initWithImage:(nonnull CPTImage *)anImage { @@ -80,7 +80,7 @@ -(BOOL)isOpaque -(nonnull id)copyWithZone:(nullable NSZone *)zone { - _CPTFillImage *copy = [[[self class] allocWithZone:zone] init]; + CPTFillImage *copy = [[[self class] allocWithZone:zone] init]; copy.fillImage = self.fillImage; @@ -101,7 +101,7 @@ -(nonnull Class)classForCoder -(void)encodeWithCoder:(nonnull NSCoder *)coder { - [coder encodeObject:self.fillImage forKey:@"_CPTFillImage.fillImage"]; + [coder encodeObject:self.fillImage forKey:@"CPTFillImage.fillImage"]; } /// @endcond @@ -114,7 +114,7 @@ -(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { if ((self = [super init])) { CPTImage *image = [coder decodeObjectOfClass:[CPTImage class] - forKey:@"_CPTFillImage.fillImage"]; + forKey:@"CPTFillImage.fillImage"]; if ( image ) { fillImage = image; diff --git a/framework/Source/_CPTPlainBlackTheme.h b/framework/Source/_CPTPlainBlackTheme.h index 69787896f..cdf10450e 100644 --- a/framework/Source/_CPTPlainBlackTheme.h +++ b/framework/Source/_CPTPlainBlackTheme.h @@ -6,6 +6,6 @@ #import "_CPTXYTheme.h" #endif -@interface _CPTPlainBlackTheme : _CPTXYTheme +@interface CPTPlainBlackTheme : CPTXYTheme @end diff --git a/framework/Source/_CPTPlainBlackTheme.m b/framework/Source/_CPTPlainBlackTheme.m index 440499491..c4a2d8b3d 100644 --- a/framework/Source/_CPTPlainBlackTheme.m +++ b/framework/Source/_CPTPlainBlackTheme.m @@ -16,7 +16,7 @@ /** * @brief Creates a CPTXYGraph instance formatted with black backgrounds and white lines. **/ -@implementation _CPTPlainBlackTheme +@implementation CPTPlainBlackTheme +(nonnull CPTThemeName)name { diff --git a/framework/Source/_CPTPlainWhiteTheme.h b/framework/Source/_CPTPlainWhiteTheme.h index 6a1ebc96e..838b9b9cf 100644 --- a/framework/Source/_CPTPlainWhiteTheme.h +++ b/framework/Source/_CPTPlainWhiteTheme.h @@ -6,6 +6,6 @@ #import "_CPTXYTheme.h" #endif -@interface _CPTPlainWhiteTheme : _CPTXYTheme +@interface CPTPlainWhiteTheme : CPTXYTheme @end diff --git a/framework/Source/_CPTPlainWhiteTheme.m b/framework/Source/_CPTPlainWhiteTheme.m index 8e8e3f733..6b0e5b02e 100644 --- a/framework/Source/_CPTPlainWhiteTheme.m +++ b/framework/Source/_CPTPlainWhiteTheme.m @@ -16,7 +16,7 @@ /** * @brief Creates a CPTXYGraph instance formatted with white backgrounds and black lines. **/ -@implementation _CPTPlainWhiteTheme +@implementation CPTPlainWhiteTheme +(nonnull CPTThemeName)name { diff --git a/framework/Source/_CPTSlateTheme.h b/framework/Source/_CPTSlateTheme.h index 50e59cf77..ad703a62b 100644 --- a/framework/Source/_CPTSlateTheme.h +++ b/framework/Source/_CPTSlateTheme.h @@ -6,6 +6,6 @@ #import "_CPTXYTheme.h" #endif -@interface _CPTSlateTheme : _CPTXYTheme +@interface CPTSlateTheme : CPTXYTheme @end diff --git a/framework/Source/_CPTSlateTheme.m b/framework/Source/_CPTSlateTheme.m index 8943d4d80..eb8efed1a 100644 --- a/framework/Source/_CPTSlateTheme.m +++ b/framework/Source/_CPTSlateTheme.m @@ -19,7 +19,7 @@ /** * @brief Creates a CPTXYGraph instance with colors that match the default iPhone navigation bar, toolbar buttons, and table views. **/ -@implementation _CPTSlateTheme +@implementation CPTSlateTheme +(nonnull CPTThemeName)name { diff --git a/framework/Source/_CPTStocksTheme.h b/framework/Source/_CPTStocksTheme.h index f3ac96259..617359911 100644 --- a/framework/Source/_CPTStocksTheme.h +++ b/framework/Source/_CPTStocksTheme.h @@ -6,6 +6,6 @@ #import "_CPTXYTheme.h" #endif -@interface _CPTStocksTheme : _CPTXYTheme +@interface CPTStocksTheme : CPTXYTheme @end diff --git a/framework/Source/_CPTStocksTheme.m b/framework/Source/_CPTStocksTheme.m index e09b0d6e0..745648bcf 100644 --- a/framework/Source/_CPTStocksTheme.m +++ b/framework/Source/_CPTStocksTheme.m @@ -17,7 +17,7 @@ /** * @brief Creates a CPTXYGraph instance formatted with a gradient background and white lines. **/ -@implementation _CPTStocksTheme +@implementation CPTStocksTheme +(nonnull CPTThemeName)name { diff --git a/framework/Source/_CPTXYTheme.h b/framework/Source/_CPTXYTheme.h index c60b77fc7..72ca7737b 100644 --- a/framework/Source/_CPTXYTheme.h +++ b/framework/Source/_CPTXYTheme.h @@ -6,6 +6,6 @@ #import "CPTTheme.h" #endif -@interface _CPTXYTheme : CPTTheme +@interface CPTXYTheme : CPTTheme @end diff --git a/framework/Source/_CPTXYTheme.m b/framework/Source/_CPTXYTheme.m index 5c2276d71..b0d99402f 100644 --- a/framework/Source/_CPTXYTheme.m +++ b/framework/Source/_CPTXYTheme.m @@ -8,7 +8,7 @@ /** * @brief Creates a CPTXYGraph instance formatted with padding of 60 on each side and X and Y plot ranges of +/- 1. **/ -@implementation _CPTXYTheme +@implementation CPTXYTheme /// @name Initialization /// @{ From cd8741f638ab6e0567ceaa63b2a5d0d61880365d Mon Sep 17 00:00:00 2001 From: Vlad Borovtsov Date: Sun, 30 Nov 2025 23:33:08 +0100 Subject: [PATCH 242/245] Fix rendering without hosting view on macOS --- framework/Source/CPTLayer.m | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/framework/Source/CPTLayer.m b/framework/Source/CPTLayer.m index aa6cd5bcb..18324d89b 100644 --- a/framework/Source/CPTLayer.m +++ b/framework/Source/CPTLayer.m @@ -330,23 +330,29 @@ -(void)display if ( [NSView instancesRespondToSelector:@selector(effectiveAppearance)] ) { CPTGraphHostingView *hostingView = [self findHostingView]; - if ( [NSAppearance instancesRespondToSelector:@selector(performAsCurrentDrawingAppearance:)] ) { + NSAppearance *appearance = hostingView.effectiveAppearance; + + if ( appearance && [NSAppearance instancesRespondToSelector:@selector(performAsCurrentDrawingAppearance:)] ) { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunguarded-availability-new" - [hostingView.effectiveAppearance performAsCurrentDrawingAppearance: ^{ + [appearance performAsCurrentDrawingAppearance: ^{ [super display]; }]; #pragma clang diagnostic pop } - else { + else if ( appearance ) { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" NSAppearance *oldAppearance = NSAppearance.currentAppearance; - NSAppearance.currentAppearance = hostingView.effectiveAppearance; + NSAppearance.currentAppearance = appearance; [super display]; NSAppearance.currentAppearance = oldAppearance; #pragma clang diagnostic pop } + else { + // No hosting view; fall back to the default rendering path so the layer still draws. + [super display]; + } } else { [super display]; From c44fb2394579305883c0d6604aa4e22843b0ad47 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sat, 14 Feb 2026 16:15:30 -0500 Subject: [PATCH 243/245] Updated code formatting with Uncrustify 0.82.0. --- framework/Source/CPTDefinitions.h | 3 +-- framework/Source/CPTNumericDataType.h | 3 +-- framework/Source/CPTPieChart.h | 3 +-- framework/Source/CPTPlotRange.h | 3 +-- scripts/uncrustify.cfg | 11 ++++++++--- 5 files changed, 12 insertions(+), 11 deletions(-) diff --git a/framework/Source/CPTDefinitions.h b/framework/Source/CPTDefinitions.h index e636deb76..0ee560705 100644 --- a/framework/Source/CPTDefinitions.h +++ b/framework/Source/CPTDefinitions.h @@ -209,8 +209,7 @@ CPTRGBAColor; /** * @brief Enumeration of label positioning offset directions **/ -typedef NS_CLOSED_ENUM(NSInteger, CPTSign) -{ +typedef NS_CLOSED_ENUM (NSInteger, CPTSign) { CPTSignNone = 0, ///< No offset CPTSignPositive = +1, ///< Positive offset CPTSignNegative = -1 ///< Negative offset diff --git a/framework/Source/CPTNumericDataType.h b/framework/Source/CPTNumericDataType.h index 01fa7ac08..c49b4563a 100644 --- a/framework/Source/CPTNumericDataType.h +++ b/framework/Source/CPTNumericDataType.h @@ -18,8 +18,7 @@ typedef NS_ENUM (NSInteger, CPTDataTypeFormat) { * @brief Enumeration of memory arrangements for multi-dimensional data arrays. * @see See Wikipedia for more information. **/ -typedef NS_CLOSED_ENUM(NSInteger, CPTDataOrder) -{ +typedef NS_CLOSED_ENUM (NSInteger, CPTDataOrder) { CPTDataOrderRowsFirst, ///< Numeric data is arranged in row-major order. CPTDataOrderColumnsFirst ///< Numeric data is arranged in column-major order. }; diff --git a/framework/Source/CPTPieChart.h b/framework/Source/CPTPieChart.h index 18b13472b..ffa628346 100644 --- a/framework/Source/CPTPieChart.h +++ b/framework/Source/CPTPieChart.h @@ -39,8 +39,7 @@ typedef NS_ENUM (NSInteger, CPTPieChartField) { /** * @brief Enumeration of pie slice drawing directions. **/ -typedef NS_CLOSED_ENUM(NSInteger, CPTPieDirection) -{ +typedef NS_CLOSED_ENUM (NSInteger, CPTPieDirection) { CPTPieDirectionClockwise, ///< Pie slices are drawn in a clockwise direction. CPTPieDirectionCounterClockwise ///< Pie slices are drawn in a counter-clockwise direction. }; diff --git a/framework/Source/CPTPlotRange.h b/framework/Source/CPTPlotRange.h index 6c83bd6c8..b99b33206 100644 --- a/framework/Source/CPTPlotRange.h +++ b/framework/Source/CPTPlotRange.h @@ -11,8 +11,7 @@ /** * @brief Enumeration of possible results of a plot range comparison. **/ -typedef NS_CLOSED_ENUM(NSInteger, CPTPlotRangeComparisonResult) -{ +typedef NS_CLOSED_ENUM (NSInteger, CPTPlotRangeComparisonResult) { CPTPlotRangeComparisonResultNumberBelowRange, ///< Number is below the range. CPTPlotRangeComparisonResultNumberInRange, ///< Number is in the range. CPTPlotRangeComparisonResultNumberAboveRange, ///< Number is above the range. diff --git a/scripts/uncrustify.cfg b/scripts/uncrustify.cfg index 186048561..92116fb08 100644 --- a/scripts/uncrustify.cfg +++ b/scripts/uncrustify.cfg @@ -1,4 +1,4 @@ -# Uncrustify-0.81.0_f +# Uncrustify-0.82.0 newlines = auto input_tab_size = 4 output_tab_size = 4 @@ -7,8 +7,8 @@ string_escape_char2 = 0 string_replace_tab_chars = false tok_split_gte = false disable_processing_nl_cont = false -disable_processing_cmt = "" -enable_processing_cmt = "" +disable_processing_cmt = " *INDENT-OFF*" +enable_processing_cmt = " *INDENT-ON*" enable_digraphs = false processing_cmt_as_regex = false utf8_bom = remove @@ -589,6 +589,11 @@ nl_split_for_one_liner = false nl_split_while_one_liner = false donot_add_nl_before_cpp_comment = false nl_max = 2 +nl_collapse_if_one_liner = false +nl_collapse_for_one_liner = false +nl_collapse_while_one_liner = false +nl_collapse_do_one_liner = false +nl_collapse_switch_one_liner = false nl_max_blank_in_func = 0 nl_inside_empty_func = 0 nl_before_func_body_proto = 0 From bf8e7d33a850f13fc7864042c15a67a34bc4427e Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 22 Feb 2026 14:11:17 -0500 Subject: [PATCH 244/245] Updated iOS and tvOS versions in ci.yml to fix CI build errors. --- .github/workflows/ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a8736f30e..d97cfde7f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,10 +20,10 @@ jobs: destination: "platform=macOS" - target: iOS sdk: iphonesimulator - destination: "platform=iOS Simulator,name=iPhone 14 Pro" + destination: "platform=iOS Simulator,name=iPhone 17 Pro" - target: tvOS sdk: appletvsimulator - destination: "platform=tvOS Simulator,name=Apple TV 4K (2nd generation)" + destination: "platform=tvOS Simulator,name=Apple TV 4K (3rd generation)" steps: - name: Checkout uses: actions/checkout@v3 @@ -38,10 +38,10 @@ jobs: matrix: destination: [ - "platform=iOS Simulator,name=iPhone 14 Pro", + "platform=iOS Simulator,name=iPhone 17 Pro", "platform=macOS,variant=Mac Catalyst", "platform=macOS", - "platform=tvOS Simulator,name=Apple TV 4K (2nd generation)", + "platform=tvOS Simulator,name=Apple TV 4K (3rd generation)", ] scheme: ["CorePlot"] steps: From a2339a49fba7704a416d933b037aefb2aef7cd70 Mon Sep 17 00:00:00 2001 From: Eric Skroch Date: Sun, 22 Feb 2026 14:24:42 -0500 Subject: [PATCH 245/245] Standardized code formatting. --- framework/Source/CPTLayer.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/Source/CPTLayer.m b/framework/Source/CPTLayer.m index 18324d89b..5c72c5e89 100644 --- a/framework/Source/CPTLayer.m +++ b/framework/Source/CPTLayer.m @@ -330,7 +330,7 @@ -(void)display if ( [NSView instancesRespondToSelector:@selector(effectiveAppearance)] ) { CPTGraphHostingView *hostingView = [self findHostingView]; - NSAppearance *appearance = hostingView.effectiveAppearance; + NSAppearance *appearance = hostingView.effectiveAppearance; if ( appearance && [NSAppearance instancesRespondToSelector:@selector(performAsCurrentDrawingAppearance:)] ) { #pragma clang diagnostic push