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 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..a8736f30e --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,52 @@ +name: "core-plot CI" + +on: [push, pull_request] + +jobs: + UnitTests: + name: Unit Tests + runs-on: macOS-latest + strategy: + matrix: + target: + [ + Mac, + iOS, + tvOS, + ] + include: + - target: Mac + sdk: macosx + destination: "platform=macOS" + - target: iOS + sdk: iphonesimulator + destination: "platform=iOS Simulator,name=iPhone 14 Pro" + - target: tvOS + sdk: appletvsimulator + destination: "platform=tvOS Simulator,name=Apple TV 4K (2nd generation)" + steps: + - name: Checkout + 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 + + SPM: + name: Verify SPM build + runs-on: macOS-latest + strategy: + matrix: + destination: + [ + "platform=iOS Simulator,name=iPhone 14 Pro", + "platform=macOS,variant=Mac Catalyst", + "platform=macOS", + "platform=tvOS Simulator,name=Apple TV 4K (2nd generation)", + ] + scheme: ["CorePlot"] + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: spm's xcodebuild - ${{ matrix.destination }} + run: xcodebuild clean build -scheme "${{ matrix.scheme }}" -destination "${{ matrix.destination }}" -configuration Release 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/.travis.yml b/.travis.yml index 1df945ce3..c6a988f52 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,44 +1,36 @@ language: objective-c -osx_image: xcode11 - -ios_env: - SDK:iphonesimulator - SDK:iphoneos - -tvos_env: - TVSDK:appletvsimulator - TVSDK:appletvos - -# 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 - -# 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 - -# 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 - -# Quartz Composer plugin -script: xcodebuild -project QCPlugin/CorePlotQCPlugin.xcodeproj -target CorePlotQCPlugin -configuration Release +os: osx +osx_image: xcode13.4 + +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=iphonesimulator + - env: PROJECT=framework/CorePlot TARGET="UnitTests iOS" SDK=iphonesimulator + + # tvOS framework + - env: PROJECT=framework/CorePlot TARGET="CorePlot tvOS" SDK=appletvsimulator + - env: PROJECT=framework/CorePlot TARGET="UnitTests tvOS" SDK=appletvsimulator + + # 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 + + # iOS examples + - env: PROJECT=examples/CorePlotGallery/Plot_Gallery TARGET="Plot Gallery-iOS" SDK=iphonesimulator + - env: PROJECT=examples/CPTTestApp-iPad/CPTTestApp-iPad TARGET="CPTTestApp-iPad" SDK=iphonesimulator + - env: PROJECT=examples/CPTTestApp-iPhone/CPTTestApp-iPhone TARGET="CPTTestApp-iPhone" SDK=iphonesimulator + + # tvOS examples + - 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 diff --git a/CorePlot-latest.podspec b/CorePlot-latest.podspec deleted file mode 100644 index 3b958f7e4..000000000 --- a/CorePlot-latest.podspec +++ /dev/null @@ -1,45 +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 = 'http://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 = '8.0' - s.osx.deployment_target = '10.8' - s.tvos.deployment_target = '9.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' - 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.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 diff --git a/CorePlot.podspec b/CorePlot.podspec index d6906a089..bb6a7cc2e 100644 --- a/CorePlot.podspec +++ b/CorePlot.podspec @@ -1,45 +1,46 @@ 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' 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', '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', :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 = '8.0' - s.osx.deployment_target = '10.8' - s.tvos.deployment_target = '9.0' + s.ios.deployment_target = '12.0' + s.osx.deployment_target = '10.13' + 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' + s.source_files = 'framework/*CorePlot*.h', 'framework/Source/*.{h,m}', 'framework/PlatformSpecific/*.{h,m}' 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.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/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. diff --git a/Package.swift b/Package.swift new file mode 100644 index 000000000..fc9c080b2 --- /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: "CorePlot", + platforms: [ + .macOS(.v10_13), + .iOS(.v12), + .tvOS(.v12) + ], + products: [ + // Products define the executables and libraries a package produces, and make them visible to other packages. + .library( + name: "CorePlot", + targets: ["CorePlot"]), + ], + 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: "CorePlot", + dependencies: [], + path: "spm/Sources/core-plot", + publicHeadersPath: "include"), + ] +) 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 77d6fc9fc..000000000 --- a/QCPlugin/CPTBarPlotPlugin.m +++ /dev/null @@ -1,235 +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 99aeb2ede..000000000 --- a/QCPlugin/CPTPieChartPlugin.m +++ /dev/null @@ -1,285 +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 023a890db..000000000 --- a/QCPlugin/CPTScatterPlotPlugin.m +++ /dev/null @@ -1,259 +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 d3366575d..000000000 Binary files a/QCPlugin/Compositions/Bar Chart.qtz and /dev/null differ diff --git a/QCPlugin/Compositions/Layers.qtz b/QCPlugin/Compositions/Layers.qtz deleted file mode 100644 index 336285607..000000000 Binary files a/QCPlugin/Compositions/Layers.qtz and /dev/null differ diff --git a/QCPlugin/Compositions/Pie Chart.qtz b/QCPlugin/Compositions/Pie Chart.qtz deleted file mode 100644 index 93307ed1d..000000000 Binary files a/QCPlugin/Compositions/Pie Chart.qtz and /dev/null differ diff --git a/QCPlugin/Compositions/Scatter Plot.qtz b/QCPlugin/Compositions/Scatter Plot.qtz deleted file mode 100644 index 349c95950..000000000 Binary files a/QCPlugin/Compositions/Scatter Plot.qtz and /dev/null differ diff --git a/QCPlugin/CorePlotQCPlugin.h b/QCPlugin/CorePlotQCPlugin.h deleted file mode 100644 index 99354c2d5..000000000 --- a/QCPlugin/CorePlotQCPlugin.h +++ /dev/null @@ -1,54 +0,0 @@ -#import -#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 3aa3ef332..000000000 --- a/QCPlugin/CorePlotQCPlugin.m +++ /dev/null @@ -1,847 +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 312ac48ec..000000000 Binary files a/QCPlugin/CorePlotQCPlugin.xcodeproj/TemplateIcon.icns and /dev/null differ diff --git a/QCPlugin/CorePlotQCPlugin.xcodeproj/project.pbxproj b/QCPlugin/CorePlotQCPlugin.xcodeproj/project.pbxproj deleted file mode 100644 index e07788d06..000000000 --- a/QCPlugin/CorePlotQCPlugin.xcodeproj/project.pbxproj +++ /dev/null @@ -1,558 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 47; - objects = { - -/* Begin PBXAggregateTarget section */ - 233E2C640A83C768005A62DF /* Build & Copy */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 233E2D890A83C7AC005A62DF /* Build configuration list for PBXAggregateTarget "Build & Copy" */; - buildPhases = ( - 233E2C690A83C783005A62DF /* ShellScript */, - ); - dependencies = ( - 233E2C660A83C76D005A62DF /* PBXTargetDependency */, - ); - name = "Build & Copy"; - productName = "Build & Install"; - }; -/* End PBXAggregateTarget section */ - -/* Begin PBXBuildFile section */ - 16BA95420A7EB2EB001E4983 /* CorePlotQCPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 16BA95410A7EB2EB001E4983 /* CorePlotQCPlugin.m */; }; - 16BA96310A7EB9AC001E4983 /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 16BA96300A7EB9AC001E4983 /* Quartz.framework */; }; - 7238D5520DB6988600E9A42D /* Settings.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7238D5500DB6988600E9A42D /* Settings.xib */; }; - 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; }; - A819AA3E11FD450D006D1C2D /* CPTPieChartPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = A819AA0411FD3F23006D1C2D /* CPTPieChartPlugin.m */; }; - A8FC1816102CBADE00CF2266 /* CPTScatterPlotPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = A8FC1815102CBADE00CF2266 /* CPTScatterPlotPlugin.m */; }; - A8FC1819102CBAEA00CF2266 /* CPTBarPlotPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = A8FC1818102CBAEA00CF2266 /* CPTBarPlotPlugin.m */; }; - BC21A98B1035BEC100FED2A4 /* CorePlot.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC21A97F1035BEAF00FED2A4 /* CorePlot.framework */; }; - BC21A99A1035BF6F00FED2A4 /* CorePlot.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = BC21A97F1035BEAF00FED2A4 /* CorePlot.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 233E2C650A83C76D005A62DF /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 089C1669FE841209C02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8D5B49AC048680CD000E48DA; - remoteInfo = CorePlotQCPlugin; - }; - A8F18CF411FA634B00B2C42F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = A89BAB3B1027EFBD004B2FE1 /* CorePlot.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 0730F600109492D800E95162; - remoteInfo = UnitTests; - }; - BC21A97E1035BEAF00FED2A4 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = A89BAB3B1027EFBD004B2FE1 /* CorePlot.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 8DC2EF5B0486A6940098B216; - remoteInfo = CorePlot; - }; - BC21A99B1035BF8600FED2A4 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = A89BAB3B1027EFBD004B2FE1 /* CorePlot.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = 8DC2EF4F0486A6940098B216; - remoteInfo = CorePlot; - }; - C31D02421D10F531008C1EF2 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = A89BAB3B1027EFBD004B2FE1 /* CorePlot.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C37EA6921BC83F2A0091C8F7; - remoteInfo = "CorePlot tvOS"; - }; - C31D02441D10F531008C1EF2 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = A89BAB3B1027EFBD004B2FE1 /* CorePlot.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C37EA6B71BC83F2D0091C8F7; - remoteInfo = "UnitTests tvOS"; - }; - C3B925EA1ADF1CBE00C67086 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = A89BAB3B1027EFBD004B2FE1 /* CorePlot.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C38A09781A46185200D45436; - remoteInfo = CorePlot_iOS; - }; - C3B925EC1ADF1CBE00C67086 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = A89BAB3B1027EFBD004B2FE1 /* CorePlot.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C38A09821A46185300D45436; - remoteInfo = CorePlot_iOSTests; - }; - C3B925EE1ADF1CBE00C67086 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = A89BAB3B1027EFBD004B2FE1 /* CorePlot.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C38A09BA1A4619A900D45436; - remoteInfo = "CorePlot-CocoaTouch"; - }; - C3B925F01ADF1CBE00C67086 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = A89BAB3B1027EFBD004B2FE1 /* CorePlot.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C38A09C41A4619A900D45436; - remoteInfo = "CorePlot-CocoaTouchTests"; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - A89BAB751027F12B004B2FE1 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - BC21A99A1035BF6F00FED2A4 /* CorePlot.framework in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; - 16AA5C440A7EEE7300888E31 /* CorePlotQCPlugin_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CorePlotQCPlugin_Prefix.pch; sourceTree = ""; }; - 16BA95400A7EB2EB001E4983 /* CorePlotQCPlugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CorePlotQCPlugin.h; sourceTree = ""; }; - 16BA95410A7EB2EB001E4983 /* CorePlotQCPlugin.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CorePlotQCPlugin.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 16BA96300A7EB9AC001E4983 /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = /System/Library/Frameworks/Quartz.framework; sourceTree = ""; }; - 8D5B49B6048680CD000E48DA /* CorePlotQCPlugin.plugin */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CorePlotQCPlugin.plugin; sourceTree = BUILT_PRODUCTS_DIR; }; - A819AA0311FD3F23006D1C2D /* CPTPieChartPlugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTPieChartPlugin.h; sourceTree = ""; }; - A819AA0411FD3F23006D1C2D /* CPTPieChartPlugin.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTPieChartPlugin.m; sourceTree = ""; }; - A89BAB3B1027EFBD004B2FE1 /* CorePlot.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = CorePlot.xcodeproj; path = ../framework/CorePlot.xcodeproj; sourceTree = SOURCE_ROOT; }; - A8FC1814102CBADE00CF2266 /* CPTScatterPlotPlugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTScatterPlotPlugin.h; sourceTree = ""; }; - A8FC1815102CBADE00CF2266 /* CPTScatterPlotPlugin.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTScatterPlotPlugin.m; sourceTree = ""; }; - A8FC1817102CBAEA00CF2266 /* CPTBarPlotPlugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPTBarPlotPlugin.h; sourceTree = ""; }; - A8FC1818102CBAEA00CF2266 /* CPTBarPlotPlugin.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPTBarPlotPlugin.m; sourceTree = ""; }; - C37A410E20E0326C00C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = Base.lproj/Info.plist; sourceTree = ""; }; - C3C8CFF619E9504C007E0BCB /* CorePlotWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotWarnings.xcconfig; path = ../framework/xcconfig/CorePlotWarnings.xcconfig; sourceTree = ""; }; - C3DA083820E00C7700F73704 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/Settings.xib; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 8D5B49B3048680CD000E48DA /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - BC21A98B1035BEC100FED2A4 /* CorePlot.framework in Frameworks */, - 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */, - 16BA96310A7EB9AC001E4983 /* Quartz.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 089C166AFE841209C02AAC07 /* Quartz Composer Plug In */ = { - isa = PBXGroup; - children = ( - A89BAB3B1027EFBD004B2FE1 /* CorePlot.xcodeproj */, - 08FB77AFFE84173DC02AAC07 /* Classes */, - 32C88E010371C26100C91783 /* Other Sources */, - 089C167CFE841241C02AAC07 /* Resources */, - 089C1671FE841209C02AAC07 /* Frameworks */, - 19C28FB8FE9D52D311CA2CBB /* Products */, - ); - indentWidth = 4; - name = "Quartz Composer Plug In"; - sourceTree = ""; - tabWidth = 4; - usesTabs = 0; - }; - 089C1671FE841209C02AAC07 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 16BA96300A7EB9AC001E4983 /* Quartz.framework */, - 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 089C167CFE841241C02AAC07 /* Resources */ = { - isa = PBXGroup; - children = ( - 7238D5500DB6988600E9A42D /* Settings.xib */, - C37A410F20E0326C00C4FF48 /* Info.plist */, - ); - name = Resources; - sourceTree = ""; - }; - 08FB77AFFE84173DC02AAC07 /* Classes */ = { - isa = PBXGroup; - children = ( - 16BA95400A7EB2EB001E4983 /* CorePlotQCPlugin.h */, - 16BA95410A7EB2EB001E4983 /* CorePlotQCPlugin.m */, - A8FC1814102CBADE00CF2266 /* CPTScatterPlotPlugin.h */, - A8FC1815102CBADE00CF2266 /* CPTScatterPlotPlugin.m */, - A8FC1817102CBAEA00CF2266 /* CPTBarPlotPlugin.h */, - A8FC1818102CBAEA00CF2266 /* CPTBarPlotPlugin.m */, - A819AA0311FD3F23006D1C2D /* CPTPieChartPlugin.h */, - A819AA0411FD3F23006D1C2D /* CPTPieChartPlugin.m */, - ); - name = Classes; - sourceTree = ""; - }; - 19C28FB8FE9D52D311CA2CBB /* Products */ = { - isa = PBXGroup; - children = ( - 8D5B49B6048680CD000E48DA /* CorePlotQCPlugin.plugin */, - ); - name = Products; - sourceTree = ""; - }; - 32C88E010371C26100C91783 /* Other Sources */ = { - isa = PBXGroup; - children = ( - 16AA5C440A7EEE7300888E31 /* CorePlotQCPlugin_Prefix.pch */, - C3C8CFF619E9504C007E0BCB /* CorePlotWarnings.xcconfig */, - ); - name = "Other Sources"; - sourceTree = ""; - }; - BC21A9761035BEAF00FED2A4 /* Products */ = { - isa = PBXGroup; - children = ( - BC21A97F1035BEAF00FED2A4 /* CorePlot.framework */, - A8F18CF511FA634B00B2C42F /* UnitTests.xctest */, - C3B925EB1ADF1CBE00C67086 /* CorePlot.framework */, - C3B925ED1ADF1CBE00C67086 /* UnitTests iOS.xctest */, - C3B925EF1ADF1CBE00C67086 /* libCorePlot-CocoaTouch.a */, - C3B925F11ADF1CBE00C67086 /* CorePlot-CocoaTouchTests.xctest */, - C31D02431D10F531008C1EF2 /* CorePlot.framework */, - C31D02451D10F531008C1EF2 /* UnitTests tvOS.xctest */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 8D5B49AC048680CD000E48DA /* CorePlotQCPlugin */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1DEB913A08733D840010E9CD /* Build configuration list for PBXNativeTarget "CorePlotQCPlugin" */; - buildPhases = ( - 8D5B49AF048680CD000E48DA /* Resources */, - 8D5B49B3048680CD000E48DA /* Frameworks */, - 8D5B49B1048680CD000E48DA /* Sources */, - A89BAB751027F12B004B2FE1 /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - BC21A99C1035BF8600FED2A4 /* PBXTargetDependency */, - ); - name = CorePlotQCPlugin; - productInstallPath = "$(HOME)/Library/Bundles"; - productName = "Quartz Composer Plug In"; - productReference = 8D5B49B6048680CD000E48DA /* CorePlotQCPlugin.plugin */; - productType = "com.apple.product-type.bundle"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 089C1669FE841209C02AAC07 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0930; - }; - buildConfigurationList = 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "CorePlotQCPlugin" */; - compatibilityVersion = "Xcode 6.3"; - developmentRegion = en; - hasScannedForEncodings = 1; - knownRegions = ( - Base, - en, - ja, - fr, - de, - ); - mainGroup = 089C166AFE841209C02AAC07 /* Quartz Composer Plug In */; - projectDirPath = ""; - projectReferences = ( - { - ProductGroup = BC21A9761035BEAF00FED2A4 /* Products */; - ProjectRef = A89BAB3B1027EFBD004B2FE1 /* CorePlot.xcodeproj */; - }, - ); - projectRoot = ""; - targets = ( - 8D5B49AC048680CD000E48DA /* CorePlotQCPlugin */, - 233E2C640A83C768005A62DF /* Build & Copy */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXReferenceProxy section */ - A8F18CF511FA634B00B2C42F /* UnitTests.xctest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = UnitTests.xctest; - remoteRef = A8F18CF411FA634B00B2C42F /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - BC21A97F1035BEAF00FED2A4 /* CorePlot.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = CorePlot.framework; - remoteRef = BC21A97E1035BEAF00FED2A4 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C31D02431D10F531008C1EF2 /* CorePlot.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = CorePlot.framework; - remoteRef = C31D02421D10F531008C1EF2 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C31D02451D10F531008C1EF2 /* UnitTests tvOS.xctest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = "UnitTests tvOS.xctest"; - remoteRef = C31D02441D10F531008C1EF2 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C3B925EB1ADF1CBE00C67086 /* CorePlot.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = CorePlot.framework; - remoteRef = C3B925EA1ADF1CBE00C67086 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C3B925ED1ADF1CBE00C67086 /* UnitTests iOS.xctest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = "UnitTests iOS.xctest"; - remoteRef = C3B925EC1ADF1CBE00C67086 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C3B925EF1ADF1CBE00C67086 /* libCorePlot-CocoaTouch.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libCorePlot-CocoaTouch.a"; - remoteRef = C3B925EE1ADF1CBE00C67086 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C3B925F11ADF1CBE00C67086 /* CorePlot-CocoaTouchTests.xctest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = "CorePlot-CocoaTouchTests.xctest"; - remoteRef = C3B925F01ADF1CBE00C67086 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; -/* End PBXReferenceProxy section */ - -/* Begin PBXResourcesBuildPhase section */ - 8D5B49AF048680CD000E48DA /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 7238D5520DB6988600E9A42D /* Settings.xib in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 233E2C690A83C783005A62DF /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "# This shell script simply copies the built plug-in to \"~/Library/Graphics/Quartz Composer Plug-Ins\" and overrides any previous version at that location\n\nmkdir -p \"$USER_LIBRARY_DIR/Graphics/Quartz Composer Plug-Ins\"\nrm -rf \"$USER_LIBRARY_DIR/Graphics/Quartz Composer Plug-Ins/CorePlotQCPlugin.plugin\"\ncp -rf \"$BUILT_PRODUCTS_DIR/CorePlotQCPlugin.plugin\" \"$USER_LIBRARY_DIR/Graphics/Quartz Composer Plug-Ins/\"\n"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 8D5B49B1048680CD000E48DA /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 16BA95420A7EB2EB001E4983 /* CorePlotQCPlugin.m in Sources */, - A8FC1816102CBADE00CF2266 /* CPTScatterPlotPlugin.m in Sources */, - A8FC1819102CBAEA00CF2266 /* CPTBarPlotPlugin.m in Sources */, - A819AA3E11FD450D006D1C2D /* CPTPieChartPlugin.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 233E2C660A83C76D005A62DF /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 8D5B49AC048680CD000E48DA /* CorePlotQCPlugin */; - targetProxy = 233E2C650A83C76D005A62DF /* PBXContainerItemProxy */; - }; - BC21A99C1035BF8600FED2A4 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = CorePlot; - targetProxy = BC21A99B1035BF8600FED2A4 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 7238D5500DB6988600E9A42D /* Settings.xib */ = { - isa = PBXVariantGroup; - children = ( - C3DA083820E00C7700F73704 /* Base */, - ); - name = Settings.xib; - sourceTree = ""; - }; - C37A410F20E0326C00C4FF48 /* Info.plist */ = { - isa = PBXVariantGroup; - children = ( - C37A410E20E0326C00C4FF48 /* Base */, - ); - name = Info.plist; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 1DEB913B08733D840010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C3C8CFF619E9504C007E0BCB /* CorePlotWarnings.xcconfig */; - buildSettings = { - ADDITIONAL_SDKS = ""; - CLANG_ENABLE_OBJC_ARC = YES; - 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 = CorePlotQCPlugin_Prefix.pch; - INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; - INSTALL_PATH = "$(HOME)/Library/Graphics/Quartz Composer Plug-Ins"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; - OTHER_LDFLAGS = ""; - PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; - PRODUCT_NAME = CorePlotQCPlugin; - SDKROOT = macosx; - WRAPPER_EXTENSION = plugin; - ZERO_LINK = YES; - }; - name = Debug; - }; - 1DEB913C08733D840010E9CD /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C3C8CFF619E9504C007E0BCB /* CorePlotWarnings.xcconfig */; - buildSettings = { - ADDITIONAL_SDKS = ""; - CLANG_ENABLE_OBJC_ARC = YES; - COMBINE_HIDPI_IMAGES = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_MODEL_TUNING = G5; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = CorePlotQCPlugin_Prefix.pch; - INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; - INSTALL_PATH = "$(HOME)/Library/Graphics/Quartz Composer Plug-Ins"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks"; - OTHER_LDFLAGS = ""; - PRODUCT_BUNDLE_IDENTIFIER = "org.CorePlot.${PRODUCT_NAME:identifier}"; - PRODUCT_NAME = CorePlotQCPlugin; - SDKROOT = macosx; - WRAPPER_EXTENSION = plugin; - ZERO_LINK = YES; - }; - name = Release; - }; - 1DEB913F08733D840010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C3C8CFF619E9504C007E0BCB /* CorePlotWarnings.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; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.8; - ONLY_ACTIVE_ARCH = YES; - SYMROOT = "$(PROJECT_DIR)/../build"; - }; - name = Debug; - }; - 1DEB914008733D840010E9CD /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C3C8CFF619E9504C007E0BCB /* CorePlotWarnings.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; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.8; - OTHER_LDFLAGS = ""; - SYMROOT = "$(PROJECT_DIR)/../build"; - }; - name = Release; - }; - 233E2D8A0A83C7AC005A62DF /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = YES; - COMBINE_HIDPI_IMAGES = YES; - PRODUCT_NAME = "Build & Install"; - }; - name = Debug; - }; - 233E2D8B0A83C7AC005A62DF /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = YES; - COMBINE_HIDPI_IMAGES = YES; - PRODUCT_NAME = "Build & Install"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 1DEB913A08733D840010E9CD /* Build configuration list for PBXNativeTarget "CorePlotQCPlugin" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1DEB913B08733D840010E9CD /* Debug */, - 1DEB913C08733D840010E9CD /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "CorePlotQCPlugin" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1DEB913F08733D840010E9CD /* Debug */, - 1DEB914008733D840010E9CD /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 233E2D890A83C7AC005A62DF /* Build configuration list for PBXAggregateTarget "Build & Copy" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 233E2D8A0A83C7AC005A62DF /* Debug */, - 233E2D8B0A83C7AC005A62DF /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 089C1669FE841209C02AAC07 /* Project object */; -} diff --git a/QCPlugin/CorePlotQCPlugin.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/QCPlugin/CorePlotQCPlugin.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index a6ab08a0a..000000000 --- a/QCPlugin/CorePlotQCPlugin.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +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/README.md b/README.md index 5d144acc5..b0b803087 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,12 @@ +Core Plot logo + # Core Plot *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) +[![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 @@ -17,9 +21,9 @@ 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 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](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](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 @@ -27,8 +31,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 +44,12 @@ 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 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 diff --git a/documentation/changelog.markdown b/documentation/changelog.markdown index ed231ffeb..c8e6f7498 100644 --- a/documentation/changelog.markdown +++ b/documentation/changelog.markdown @@ -1,3 +1,23 @@ +# Release 2.4 (TBD) + +## Release Notes + +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 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. + + +## 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 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. + # Release 2.3 (January 10, 2020) ## Release Notes @@ -7,6 +27,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. @@ -19,8 +40,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 @@ -30,25 +49,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. @@ -57,12 +76,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 @@ -75,6 +92,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. @@ -89,8 +107,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 @@ -98,20 +114,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. @@ -122,8 +139,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 @@ -131,11 +146,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 @@ -145,6 +159,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. @@ -161,14 +176,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. @@ -177,6 +190,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. @@ -188,28 +202,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 @@ -218,14 +229,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 @@ -233,6 +243,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. @@ -255,8 +266,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 @@ -276,6 +285,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. @@ -293,8 +303,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 @@ -331,8 +339,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 @@ -341,7 +347,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 @@ -358,8 +364,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 @@ -386,8 +390,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 @@ -403,8 +405,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 @@ -422,8 +422,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 @@ -446,8 +444,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 diff --git a/documentation/doxygen/doxygen touch.config b/documentation/doxygen/doxygen touch.config index 01d4c0b2d..a8970459e 100644 --- a/documentation/doxygen/doxygen touch.config +++ b/documentation/doxygen/doxygen touch.config @@ -1,4 +1,4 @@ -# Doxyfile 1.8.14 +# Doxyfile 1.10.0 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -12,15 +12,25 @@ # 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 #--------------------------------------------------------------------------- -# 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. @@ -51,25 +61,43 @@ 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 + +# 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 # 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 +# 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. + +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,14 +109,14 @@ 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 @@ -179,6 +207,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 @@ -199,6 +237,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. @@ -222,17 +268,21 @@ 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. - -ALIASES = "YES=@ref YES" \ - "NO=@ref NO" \ - "nil=@ref nil" \ - "Nil=@ref Nil" \ +# "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" \ + "nil=@ref nil" \ + "Nil=@ref Nil" \ "NULL=NULL" \ "NAN=NaN" \ "super=super" \ @@ -250,12 +300,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 @@ -284,28 +328,40 @@ 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++, 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 +# 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. # # 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 = # 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,11 +373,22 @@ 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 +# 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 punctuation 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 @@ -433,6 +500,27 @@ 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 + +# 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 #--------------------------------------------------------------------------- @@ -453,6 +541,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. @@ -490,6 +584,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 @@ -501,14 +602,15 @@ 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 # 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 @@ -527,12 +629,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 -# and 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 @@ -550,6 +660,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. @@ -707,13 +823,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 @@ -753,23 +870,50 @@ 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. +# 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 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. +# 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. +# 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 @@ -780,13 +924,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 = @@ -800,19 +958,29 @@ 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" \ - "$(SOURCE_ROOT)/iPhoneOnly" +INPUT = "$(SOURCE_ROOT)/Source" \ + "$(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 # 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. @@ -821,11 +989,15 @@ INPUT_ENCODING = UTF-8 # need to set EXTENSION_MAPPING for the extension otherwise the files are not # read by doxygen. # -# 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. +# 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, *.cxxm, +# *.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 = @@ -860,6 +1032,7 @@ EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = *Tests.* \ *TestCase.* \ + CPT*Debug*.* \ CPT*Derived*.* \ _CPT*.* \ *.py @@ -868,10 +1041,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 -# -# 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 = @@ -899,7 +1069,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 @@ -916,6 +1086,11 @@ IMAGE_PATH = "$(SOURCE_ROOT)/../documentation/" # 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. @@ -957,6 +1132,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 #--------------------------------------------------------------------------- @@ -971,7 +1155,8 @@ USE_MDFILE_AS_MAINPAGE = 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 @@ -984,7 +1169,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 +1206,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 # @@ -1044,16 +1229,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. +# 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 @@ -1063,15 +1256,17 @@ 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. -# 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 @@ -1084,17 +1279,11 @@ CLANG_COMPILATION_DATABASE_PATH = 0 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 -# 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 \ @@ -1174,7 +1363,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 = @@ -1189,9 +1383,22 @@ 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. +# 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. + +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. @@ -1201,7 +1408,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. @@ -1219,20 +1426,11 @@ 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 +# 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. @@ -1247,6 +1445,33 @@ 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 + +# 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 @@ -1262,13 +1487,14 @@ 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 -# 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/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. @@ -1282,6 +1508,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. @@ -1307,8 +1540,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: http://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 @@ -1338,7 +1575,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. @@ -1365,6 +1602,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 @@ -1383,7 +1630,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: 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 +1639,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,28 +1648,30 @@ 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 = -# 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 = @@ -1463,16 +1714,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. # @@ -1497,6 +1760,24 @@ 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 or inkscape 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 @@ -1506,19 +1787,14 @@ EXT_LINKS_IN_WINDOW = NO 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. +# 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_TRANSPARENT = YES +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 @@ -1528,11 +1804,29 @@ FORMULA_TRANSPARENT = YES 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. @@ -1545,22 +1839,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://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.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. @@ -1588,7 +1889,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 @@ -1607,7 +1908,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. @@ -1620,8 +1922,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 = @@ -1672,21 +1975,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. @@ -1716,29 +2033,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 = @@ -1771,18 +2090,26 @@ 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. 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. +# 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 +# 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. @@ -1795,16 +2122,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. @@ -1813,13 +2130,13 @@ LATEX_SOURCE_CODE = 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. +# 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_TIMESTAMP = NO +LATEX_EMOJI_DIRECTORY = #--------------------------------------------------------------------------- # Configuration options related to the RTF output @@ -1860,9 +2177,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,22 +2188,12 @@ 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 = -# 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 #--------------------------------------------------------------------------- @@ -1958,6 +2265,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 #--------------------------------------------------------------------------- @@ -1976,27 +2290,44 @@ 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 #--------------------------------------------------------------------------- # 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. 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_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 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 #--------------------------------------------------------------------------- @@ -2071,7 +2402,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 = @@ -2092,18 +2424,33 @@ 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_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 \ + __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 \ + 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_requires_super= \ + 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 @@ -2141,23 +2488,24 @@ 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 -# 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. @@ -2170,41 +2518,10 @@ 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 +# Configuration options related to diagram generator tools #--------------------------------------------------------------------------- -# 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 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. -# 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. @@ -2213,7 +2530,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. @@ -2230,49 +2547,77 @@ 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 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. 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. -# This tag requires that the tag HAVE_DOT is set to YES. 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. +# 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. @@ -2295,10 +2640,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 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. + +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. @@ -2310,7 +2677,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. @@ -2319,7 +2688,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. @@ -2359,16 +2731,26 @@ 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. 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: -# 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). @@ -2396,7 +2778,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 @@ -2405,11 +2787,12 @@ DOT_PATH = /usr/local/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 @@ -2418,10 +2801,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 = @@ -2459,18 +2842,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 @@ -2483,14 +2854,34 @@ 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 + +# 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-cocoa-tags.xml b/documentation/doxygen/doxygen-cocoa-tags.xml index 1578dd526..a216168d6 100644 --- a/documentation/doxygen/doxygen-cocoa-tags.xml +++ b/documentation/doxygen/doxygen-cocoa-tags.xml @@ -1,1082 +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 - NSMutableCopying-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 - NSCoding-p - NSCopying-p - 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 1de3c13d3..750e79c31 100644 --- a/documentation/doxygen/doxygen-cocoa-touch-tags.xml +++ b/documentation/doxygen/doxygen-cocoa-touch-tags.xml @@ -1,1002 +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 - NSObject-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 - NSMutableCopying-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 - NSCoding-p - NSCopying-p - 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 46ed09de4..8feb89f4a 100644 --- a/documentation/doxygen/doxygen.config +++ b/documentation/doxygen/doxygen.config @@ -1,4 +1,4 @@ -# Doxyfile 1.8.14 +# Doxyfile 1.10.0 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -12,15 +12,25 @@ # 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 #--------------------------------------------------------------------------- -# 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. @@ -51,25 +61,43 @@ 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 + +# 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 # 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 +# 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. + +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,14 +109,14 @@ 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 @@ -179,6 +207,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 @@ -199,6 +237,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. @@ -222,17 +268,21 @@ 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. - -ALIASES = "YES=@ref YES" \ - "NO=@ref NO" \ - "nil=@ref nil" \ - "Nil=@ref Nil" \ +# "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" \ + "nil=@ref nil" \ + "Nil=@ref Nil" \ "NULL=NULL" \ "NAN=NaN" \ "super=super" \ @@ -250,12 +300,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 @@ -284,28 +328,40 @@ 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++, 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 +# 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. # # 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 = # 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,11 +373,22 @@ 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 +# 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 punctuation 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 @@ -433,6 +500,27 @@ 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 + +# 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 #--------------------------------------------------------------------------- @@ -453,6 +541,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. @@ -490,6 +584,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 @@ -501,14 +602,15 @@ 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 # 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 @@ -527,12 +629,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 -# and 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 @@ -550,6 +660,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. @@ -707,13 +823,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 @@ -753,23 +870,50 @@ 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. +# 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 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. +# 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. +# 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 @@ -780,13 +924,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 = @@ -800,19 +958,29 @@ 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" \ - "$(SOURCE_ROOT)/MacOnly" +INPUT = "$(SOURCE_ROOT)/Source" \ + "$(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 # 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. @@ -821,11 +989,15 @@ INPUT_ENCODING = UTF-8 # need to set EXTENSION_MAPPING for the extension otherwise the files are not # read by doxygen. # -# 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. +# 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, *.cxxm, +# *.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 = @@ -860,6 +1032,7 @@ EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = *Tests.* \ *TestCase.* \ + CPT*Debug*.* \ CPT*Derived*.* \ _CPT*.* \ *.py @@ -868,10 +1041,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 -# -# 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 = @@ -899,7 +1069,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 @@ -916,6 +1086,11 @@ IMAGE_PATH = "$(SOURCE_ROOT)/../documentation/" # 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. @@ -957,6 +1132,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 #--------------------------------------------------------------------------- @@ -971,7 +1155,8 @@ USE_MDFILE_AS_MAINPAGE = 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 @@ -984,7 +1169,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 +1206,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 # @@ -1044,16 +1229,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. +# 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 @@ -1063,15 +1256,17 @@ 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. -# 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 @@ -1084,17 +1279,11 @@ CLANG_COMPILATION_DATABASE_PATH = 0 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 -# 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 \ @@ -1174,7 +1363,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 = @@ -1189,9 +1383,22 @@ 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. +# 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. + +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. @@ -1201,7 +1408,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. @@ -1219,20 +1426,11 @@ 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 +# 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. @@ -1247,6 +1445,33 @@ 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 + +# 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 @@ -1262,13 +1487,14 @@ 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 -# 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/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. @@ -1282,6 +1508,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. @@ -1307,8 +1540,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: http://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 @@ -1338,7 +1575,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. @@ -1365,6 +1602,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 @@ -1383,7 +1630,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: 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 +1639,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,28 +1648,30 @@ 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 = -# 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 = @@ -1463,16 +1714,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. # @@ -1497,6 +1760,24 @@ 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 or inkscape 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 @@ -1506,19 +1787,14 @@ EXT_LINKS_IN_WINDOW = NO 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. +# 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_TRANSPARENT = YES +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 @@ -1528,11 +1804,29 @@ FORMULA_TRANSPARENT = YES 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. @@ -1545,22 +1839,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://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.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. @@ -1588,7 +1889,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 @@ -1607,7 +1908,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. @@ -1620,8 +1922,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 = @@ -1672,21 +1975,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. @@ -1716,29 +2033,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 = @@ -1771,18 +2090,26 @@ 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. 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. +# 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 +# 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. @@ -1795,16 +2122,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. @@ -1813,13 +2130,13 @@ LATEX_SOURCE_CODE = 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. +# 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_TIMESTAMP = NO +LATEX_EMOJI_DIRECTORY = #--------------------------------------------------------------------------- # Configuration options related to the RTF output @@ -1860,9 +2177,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,22 +2188,12 @@ 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 = -# 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 #--------------------------------------------------------------------------- @@ -1958,6 +2265,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 #--------------------------------------------------------------------------- @@ -1976,27 +2290,44 @@ 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 #--------------------------------------------------------------------------- # 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. 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_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 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 #--------------------------------------------------------------------------- @@ -2071,7 +2402,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 = @@ -2092,15 +2424,32 @@ 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 = 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 \ + 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 \ + 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_requires_super= \ + 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 @@ -2138,23 +2487,24 @@ 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 -# 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. @@ -2167,41 +2517,10 @@ 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 +# Configuration options related to diagram generator tools #--------------------------------------------------------------------------- -# 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 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. -# 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. @@ -2210,7 +2529,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. @@ -2227,49 +2546,77 @@ 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 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. 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. -# This tag requires that the tag HAVE_DOT is set to YES. 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. +# 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. @@ -2292,10 +2639,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 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. + +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. @@ -2307,7 +2676,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. @@ -2316,7 +2687,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. @@ -2356,16 +2730,26 @@ 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. 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: -# 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). @@ -2393,7 +2777,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 @@ -2402,11 +2786,12 @@ DOT_PATH = /usr/local/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 @@ -2415,10 +2800,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 = @@ -2456,18 +2841,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 @@ -2480,14 +2853,34 @@ 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 + +# 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/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 diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/project.pbxproj index afd032e09..4fa095f18 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 = 54; objects = { /* Begin PBXBuildFile section */ @@ -14,11 +14,14 @@ 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, ); }; }; + 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 */; }; 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 */ @@ -38,6 +41,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 */; @@ -66,22 +76,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 = ""; }; @@ -89,13 +99,14 @@ 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 = ""; }; + 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 = ""; }; + 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 = ""; }; @@ -114,8 +125,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; }; @@ -160,9 +171,10 @@ 29B97315FDCFA39411CA2CEA /* Other Sources */ = { isa = PBXGroup; children = ( - 32CA4F630368D1EE00C91783 /* CPTTestApp_iPad_Prefix.pch */, + 32CA4F630368D1EE00C91783 /* CPTTestApp-iPad_Prefix.pch */, 29B97316FDCFA39411CA2CEA /* main.m */, - C36E7CC519DE1C1F00EDEACB /* CorePlotWarnings.xcconfig */, + C39504962AF72842000843D0 /* CorePlotExamplesDebug.xcconfig */, + C39504952AF72842000843D0 /* CorePlotExamplesRelease.xcconfig */, ); name = "Other Sources"; sourceTree = ""; @@ -197,11 +209,9 @@ isa = PBXGroup; children = ( C3D414A21A7D843800B6F5D6 /* CorePlot.framework */, - C3D414A41A7D843800B6F5D6 /* UnitTests.xctest */, + C3D414A41A7D843800B6F5D6 /* UnitTests Mac.xctest */, C3D414A61A7D843800B6F5D6 /* CorePlot.framework */, C3D414A81A7D843800B6F5D6 /* UnitTests iOS.xctest */, - C3D414AA1A7D843800B6F5D6 /* libCorePlot-CocoaTouch.a */, - C3D414AC1A7D843800B6F5D6 /* CorePlot-CocoaTouchTests.xctest */, C31D01E11D10F4FF008C1EF2 /* CorePlot.framework */, C31D01E31D10F4FF008C1EF2 /* UnitTests tvOS.xctest */, ); @@ -218,10 +228,12 @@ 1D60588D0D05DD3D006BFB54 /* Resources */, 1D60588E0D05DD3D006BFB54 /* Sources */, 1D60588F0D05DD3D006BFB54 /* Frameworks */, + C314514E2586970F00A857B2 /* Embed Frameworks */, ); buildRules = ( ); dependencies = ( + C3268811258704DD0007B718 /* PBXTargetDependency */, ); name = "CPTTestApp-iPad"; productName = "CPTTestApp-iPad"; @@ -234,10 +246,11 @@ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0900; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1500; TargetAttributes = { 1D6058900D05DD3D006BFB54 = { - DevelopmentTeam = 28ZA45DE7D; + ProvisioningStyle = Manual; }; }; }; @@ -289,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; }; @@ -310,20 +323,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 */ @@ -334,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 */, ); @@ -355,6 +356,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; @@ -393,92 +402,47 @@ /* Begin XCBuildConfiguration section */ 1D6058940D05DD3E006BFB54 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C36E7CC519DE1C1F00EDEACB /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39504962AF72842000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CLANG_ENABLE_OBJC_ARC = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; - DEVELOPMENT_TEAM = 28ZA45DE7D; - 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"; - PRODUCT_BUNDLE_IDENTIFIER = org.CorePlot.CPTTestAppiPad; - PRODUCT_NAME = "CPTTestApp-iPad"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); }; name = Debug; }; 1D6058950D05DD3E006BFB54 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C36E7CC519DE1C1F00EDEACB /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39504952AF72842000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CLANG_ENABLE_OBJC_ARC = YES; - CODE_SIGN_IDENTITY = "iPhone Distribution"; - "CODE_SIGN_IDENTITY[sdk=*]" = "iPhone Distribution"; - COPY_PHASE_STRIP = YES; - DEVELOPMENT_TEAM = 28ZA45DE7D; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = CPTTestApp_iPad_Prefix.pch; - HEADER_SEARCH_PATHS = ""; + COPY_PHASE_STRIP = NO; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/CPTTestApp_iPad-Info.plist"; - PRODUCT_BUNDLE_IDENTIFIER = org.CorePlot.CPTTestAppiPad; - PRODUCT_NAME = "CPTTestApp-iPad"; - VALIDATE_PRODUCT = YES; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); }; name = Release; }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C36E7CC519DE1C1F00EDEACB /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39504962AF72842000843D0 /* CorePlotExamplesDebug.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; - HEADER_SEARCH_PATHS = ""; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - ONLY_ACTIVE_ARCH = YES; - OTHER_LDFLAGS = ( - "-ObjC", - "-all_load", - ); SDKROOT = iphoneos; - SYMROOT = "$(SRCROOT)/../../build"; - TARGETED_DEVICE_FAMILY = 2; - USER_HEADER_SEARCH_PATHS = "\"${PROJECT_DIR}/../../framework\" \"${PROJECT_DIR}/../../framework/Source\" \"${PROJECT_DIR}/../../framework/iPhoneOnly\""; + TARGETED_DEVICE_FAMILY = "2,6"; }; name = Debug; }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C36E7CC519DE1C1F00EDEACB /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39504952AF72842000843D0 /* CorePlotExamplesRelease.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; - HEADER_SEARCH_PATHS = ""; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; - OTHER_LDFLAGS = ( - "-ObjC", - "-all_load", - ); SDKROOT = iphoneos; - SYMROOT = "$(SRCROOT)/../../build"; - TARGETED_DEVICE_FAMILY = 2; - USER_HEADER_SEARCH_PATHS = "\"${PROJECT_DIR}/../../framework\" \"${PROJECT_DIR}/../../framework/Source\" \"${PROJECT_DIR}/../../framework/iPhoneOnly\""; + TARGETED_DEVICE_FAMILY = "2,6"; }; name = Release; }; 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-iPad/CPTTestApp-iPad.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme b/examples/CPTTestApp-iPad/CPTTestApp-iPad.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPad.xcscheme index 8ee44490d..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 @@ + + + + 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 ddf49ea5a..000000000 Binary files a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-72.png and /dev/null differ diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-72@2x.png b/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-72@2x.png deleted file mode 100644 index 9550ada82..000000000 Binary files a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-72@2x.png and /dev/null differ diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-76.png b/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-76.png deleted file mode 100644 index 74a3db7f5..000000000 Binary files a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-76.png and /dev/null differ 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 e8dded879..000000000 Binary files a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png and /dev/null differ 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 9c85f21e2..000000000 Binary files a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-Small-50.png and /dev/null differ diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png b/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png deleted file mode 100644 index 6f62eea5a..000000000 Binary files a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png and /dev/null differ diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-Small.png b/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-Small.png deleted file mode 100644 index 5104b1d94..000000000 Binary files a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-Small.png and /dev/null differ 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 7f872ef97..000000000 Binary files a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png and /dev/null differ diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png b/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png deleted file mode 100644 index 4592c0a2d..000000000 Binary files a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png and /dev/null differ 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 87672586c..000000000 Binary files a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png and /dev/null differ diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-iPadPro@2x.png b/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-iPadPro@2x.png deleted file mode 100644 index 594df78ef..000000000 Binary files a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/AppIcon.appiconset/Icon-iPadPro@2x.png and /dev/null differ diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/Contents.json b/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/Contents.json new file mode 100644 index 000000000..73c00596a --- /dev/null +++ b/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/LaunchImage.launchimage/Contents.json b/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/LaunchImage.launchimage/Contents.json deleted file mode 100644 index a80439b0e..000000000 --- a/examples/CPTTestApp-iPad/CPTTestApp-iPad/Images.xcassets/LaunchImage.launchimage/Contents.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "images" : [ - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "to-status-bar", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "to-status-bar", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "to-status-bar", - "scale" : "1x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "to-status-bar", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "minimum-system-version" : "7.0", - "extent" : "full-screen", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "minimum-system-version" : "7.0", - "extent" : "full-screen", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "minimum-system-version" : "7.0", - "extent" : "full-screen", - "scale" : "1x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "minimum-system-version" : "7.0", - "extent" : "full-screen", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file 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-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 *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-iPhone/CPTTestApp-iPhone-Bridging-Header.h b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone-Bridging-Header.h deleted file mode 100644 index c99c8cd1b..000000000 --- a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone-Bridging-Header.h +++ /dev/null @@ -1 +0,0 @@ -#import "CorePlot-CocoaTouch.h" diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/project.pbxproj index 672347980..e3e51b71c 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 = 47; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -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 */ @@ -43,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 */; @@ -71,22 +79,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; }; @@ -100,10 +108,11 @@ C359603419CE34FB005CDFB9 /* iPhoneAppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = iPhoneAppDelegate.swift; sourceTree = ""; }; C359603519CE34FB005CDFB9 /* PieChartController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PieChartController.swift; sourceTree = ""; }; 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 = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 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 = ""; }; + 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 = ""; }; @@ -122,8 +131,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; }; @@ -169,7 +178,8 @@ isa = PBXGroup; children = ( C359603B19CE352A005CDFB9 /* CPTTestApp-iPhone-Bridging-Header.h */, - C3C3CBDE19EA125D00A0296A /* CorePlotWarnings.xcconfig */, + C39504A22AF72860000843D0 /* CorePlotExamplesDebug.xcconfig */, + C39504A32AF72860000843D0 /* CorePlotExamplesRelease.xcconfig */, ); name = "Other Sources"; sourceTree = ""; @@ -208,11 +218,9 @@ isa = PBXGroup; children = ( C3D414BB1A7D846500B6F5D6 /* CorePlot.framework */, - C3D414BD1A7D846500B6F5D6 /* UnitTests.xctest */, + C3D414BD1A7D846500B6F5D6 /* UnitTests Mac.xctest */, C3D414BF1A7D846500B6F5D6 /* CorePlot.framework */, C3D414C11A7D846500B6F5D6 /* UnitTests iOS.xctest */, - C3D414C31A7D846500B6F5D6 /* libCorePlot-CocoaTouch.a */, - C3D414C51A7D846500B6F5D6 /* CorePlot-CocoaTouchTests.xctest */, C31D01F21D10F506008C1EF2 /* CorePlot.framework */, C31D01F41D10F506008C1EF2 /* UnitTests tvOS.xctest */, ); @@ -229,10 +237,12 @@ 1D60588D0D05DD3D006BFB54 /* Resources */, 1D60588E0D05DD3D006BFB54 /* Sources */, 1D60588F0D05DD3D006BFB54 /* Frameworks */, + C314515D2586971A00A857B2 /* Embed Frameworks */, ); buildRules = ( ); dependencies = ( + C326881F258704E80007B718 /* PBXTargetDependency */, ); name = "CPTTestApp-iPhone"; productName = "CPTTestApp-iPhone"; @@ -245,12 +255,13 @@ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { + BuildIndependentTargetsInParallel = YES; LastSwiftUpdateCheck = 0700; - LastUpgradeCheck = 0930; + LastUpgradeCheck = 1500; TargetAttributes = { 1D6058900D05DD3D006BFB54 = { - DevelopmentTeam = 28ZA45DE7D; LastSwiftMigration = 1020; + ProvisioningStyle = Manual; }; }; }; @@ -302,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; }; @@ -323,20 +334,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 */ @@ -373,6 +370,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; @@ -427,110 +432,57 @@ /* Begin XCBuildConfiguration section */ 1D6058940D05DD3E006BFB54 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C3CBDE19EA125D00A0296A /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39504A22AF72860000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_OBJC_ARC = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; - DEVELOPMENT_TEAM = 28ZA45DE7D; - 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"; - LIBRARY_SEARCH_PATHS = ""; - OTHER_LDFLAGS = ( - "-all_load", - "-ObjC", + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = org.CorePlot.CPTTestAppiPhone; - PRODUCT_NAME = "CPTTestApp-iPhone"; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; - SWIFT_OBJC_BRIDGING_HEADER = "CPTTestApp-iPhone-Bridging-Header.h"; - SWIFT_VERSION = 5.0; }; name = Debug; }; 1D6058950D05DD3E006BFB54 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C3CBDE19EA125D00A0296A /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39504A32AF72860000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_OBJC_ARC = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - COPY_PHASE_STRIP = YES; - DEVELOPMENT_TEAM = 28ZA45DE7D; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = CPTTestApp_iPhone_Prefix.pch; - HEADER_SEARCH_PATHS = ""; + COPY_PHASE_STRIP = NO; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Info.plist"; - LIBRARY_SEARCH_PATHS = ""; - OTHER_LDFLAGS = ( - "-all_load", - "-ObjC", + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = org.CorePlot.CPTTestAppiPhone; - PRODUCT_NAME = "CPTTestApp-iPhone"; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; - 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 = C39504A22AF72860000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - HEADER_SEARCH_PATHS = ""; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/Frameworks"; - ONLY_ACTIVE_ARCH = YES; - OTHER_LDFLAGS = "-ObjC"; - PROVISIONING_PROFILE = ""; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@loader_path/Frameworks", + ); SDKROOT = iphoneos; - SYMROOT = "$(SRCROOT)/../../build"; - TARGETED_DEVICE_FAMILY = 1; - USER_HEADER_SEARCH_PATHS = "\"${PROJECT_DIR}/../../framework\" \"${PROJECT_DIR}/../../framework/Source\" \"${PROJECT_DIR}/../../framework/iPhoneOnly\""; + TARGETED_DEVICE_FAMILY = "1,2,6"; }; name = Debug; }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C3CBDE19EA125D00A0296A /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39504A32AF72860000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CODE_SIGN_IDENTITY = "iPhone Distribution"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = s; - HEADER_SEARCH_PATHS = ""; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/Frameworks"; - ONLY_ACTIVE_ARCH = YES; - OTHER_LDFLAGS = "-ObjC"; - PROVISIONING_PROFILE = ""; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@loader_path/Frameworks", + ); SDKROOT = iphoneos; - SYMROOT = "$(SRCROOT)/../../build"; - TARGETED_DEVICE_FAMILY = 1; - USER_HEADER_SEARCH_PATHS = "\"${PROJECT_DIR}/../../framework\" \"${PROJECT_DIR}/../../framework/Source\" \"${PROJECT_DIR}/../../framework/iPhoneOnly\""; + TARGETED_DEVICE_FAMILY = "1,2,6"; }; name = Release; }; 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-iPhone/CPTTestApp-iPhone.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPhone.xcscheme b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPhone.xcscheme index 0977a0925..213141c22 100644 --- a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPhone.xcscheme +++ b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone.xcodeproj/xcshareddata/xcschemes/CPTTestApp-iPhone.xcscheme @@ -1,6 +1,6 @@ + + + + diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Contents.json b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Contents.json index 44518e8c3..4217bf80b 100644 --- a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Contents.json @@ -1,76 +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" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-Spotlight-40@2x.png", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "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" - }, - { - "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-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png deleted file mode 100644 index e48d5b2ba..000000000 Binary files a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png and /dev/null differ diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png deleted file mode 100644 index 0c4f8a4cc..000000000 Binary files a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png and /dev/null differ 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 5104b1d94..000000000 Binary files a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon-Small.png and /dev/null differ 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 7f872ef97..000000000 Binary files a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png and /dev/null differ diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png deleted file mode 100644 index 87672586c..000000000 Binary files a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png and /dev/null differ diff --git a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon.png b/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon.png deleted file mode 100644 index c40700a7a..000000000 Binary files a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon.png and /dev/null differ 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 2e49f1b07..000000000 Binary files a/examples/CPTTestApp-iPhone/CPTTestApp-iPhone/Images.xcassets/AppIcon.appiconset/Icon@2x.png and /dev/null differ 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/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..ef076f33d 100644 --- a/examples/CPTTestApp-iPhone/Classes/PieChartController.swift +++ b/examples/CPTTestApp-iPhone/Classes/PieChartController.swift @@ -1,9 +1,11 @@ import UIKit +@preconcurrency import CorePlot +@MainActor 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 +14,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 +45,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 +70,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 +83,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 +96,9 @@ 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) { + MainActor.assumeIsolated { + 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 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/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj b/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj index a844a7791..ceeb80752 100644 --- a/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj +++ b/examples/CPTTestApp/CPTTestApp.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 47; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -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 */; @@ -135,7 +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 = ""; }; + 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 = ""; }; @@ -161,11 +141,9 @@ isa = PBXGroup; children = ( 07032B6A11ABB9E000463D20 /* CorePlot.framework */, - 07032B6C11ABB9E000463D20 /* UnitTests.xctest */, + 07032B6C11ABB9E000463D20 /* UnitTests Mac.xctest */, C371E4D11BB714EC00AC18DB /* CorePlot.framework */, C371E4D31BB714EC00AC18DB /* UnitTests iOS.xctest */, - C371E4D51BB714EC00AC18DB /* libCorePlot-CocoaTouch.a */, - C371E4D71BB714EC00AC18DB /* CorePlot-CocoaTouchTests.xctest */, C3CBFB6A1BE5874200519EE8 /* CorePlot.framework */, C3CBFB6C1BE5874200519EE8 /* UnitTests tvOS.xctest */, ); @@ -238,7 +216,8 @@ children = ( 32CA4F630368D1EE00C91783 /* CPTTestApp_Prefix.pch */, 29B97316FDCFA39411CA2CEA /* main.m */, - C3880C3919DCD6A000ED0618 /* CorePlotWarnings.xcconfig */, + C395045A2AF72782000843D0 /* CorePlotExamplesDebug.xcconfig */, + C39504502AF72782000843D0 /* CorePlotExamplesRelease.xcconfig */, ); name = "Other Sources"; sourceTree = ""; @@ -281,8 +260,7 @@ buildRules = ( ); dependencies = ( - 07032B7411ABBA0E00463D20 /* PBXTargetDependency */, - C36912D51C0B48DF000A1D61 /* PBXTargetDependency */, + C326880F258704B30007B718 /* PBXTargetDependency */, ); name = CPTTestApp; productInstallPath = "$(HOME)/Applications"; @@ -296,8 +274,8 @@ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { - BuildIndependentTargetsInParallel = NO; - LastUpgradeCheck = 1100; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1500; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "CPTTestApp" */; compatibilityVersion = "Xcode 6.3"; @@ -333,10 +311,10 @@ remoteRef = 07032B6911ABB9E000463D20 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 07032B6C11ABB9E000463D20 /* UnitTests.xctest */ = { + 07032B6C11ABB9E000463D20 /* UnitTests Mac.xctest */ = { isa = PBXReferenceProxy; fileType = wrapper.cfbundle; - path = UnitTests.xctest; + path = "UnitTests Mac.xctest"; remoteRef = 07032B6B11ABB9E000463D20 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -354,20 +332,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; @@ -417,15 +381,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 */ @@ -487,81 +446,51 @@ /* Begin XCBuildConfiguration section */ C01FCF4B08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3880C3919DCD6A000ED0618 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C395045A2AF72782000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_OBJC_ARC = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; + CLANG_ENABLE_MODULES = 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; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@loader_path/../Frameworks", + "@executable_path/../Frameworks", + ); }; name = Debug; }; C01FCF4C08A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3880C3919DCD6A000ED0618 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39504502AF72782000843D0 /* CorePlotExamplesRelease.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 = ""; + CLANG_ENABLE_MODULES = YES; + COPY_PHASE_STRIP = NO; 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; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@loader_path/../Frameworks", + "@executable_path/../Frameworks", + ); }; name = Release; }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3880C3919DCD6A000ED0618 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C395045A2AF72782000843D0 /* CorePlotExamplesDebug.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; - GCC_PREPROCESSOR_DEFINITIONS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.8; - ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; - SYMROOT = "$(PROJECT_DIR)/../../build"; }; name = Debug; }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3880C3919DCD6A000ED0618 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39504502AF72782000843D0 /* CorePlotExamplesRelease.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; - GCC_PREPROCESSOR_DEFINITIONS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.8; SDKROOT = macosx; - SYMROOT = "$(PROJECT_DIR)/../../build"; }; name = Release; }; 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/CPTTestApp/CPTTestApp.xcodeproj/xcshareddata/xcschemes/CPTTestApp.xcscheme b/examples/CPTTestApp/CPTTestApp.xcodeproj/xcshareddata/xcschemes/CPTTestApp.xcscheme index a741352d0..b34601416 100644 --- a/examples/CPTTestApp/CPTTestApp.xcodeproj/xcshareddata/xcschemes/CPTTestApp.xcscheme +++ b/examples/CPTTestApp/CPTTestApp.xcodeproj/xcshareddata/xcschemes/CPTTestApp.xcscheme @@ -1,6 +1,6 @@ - + - + @@ -562,10 +562,10 @@ - + - + @@ -600,12 +600,12 @@ - - + + - - + + @@ -613,7 +613,6 @@ - @@ -634,7 +633,6 @@ - @@ -746,6 +744,6 @@ - + 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/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.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/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.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/Controller.m b/examples/CPTTestApp/Source/Controller.m index 9f1d5439a..facaa1f90 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; + + paragraphStyle.alignment = NSTextAlignmentCenter; [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,13 +178,16 @@ -(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; + + xParagraphStyle.alignment = NSTextAlignmentCenter; [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,10 +211,12 @@ -(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; + + yParagraphStyle.alignment = NSTextAlignmentCenter; [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]; @@ -566,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 @@ -610,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; @@ -626,11 +657,11 @@ -(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]; - NSData *pngData = [tiffRep representationUsingType:NSPNGFileType properties:@{}]; + NSData *pngData = [tiffRep representationUsingType:NSBitmapImageFileTypePNG properties:@{}]; NSURL *url = pngSavingDialog.URL; if ( url ) { @@ -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/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 - - - - 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 86b252df7..000000000 Binary files a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png and /dev/null differ diff --git a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png b/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png deleted file mode 100644 index 85d09cbd7..000000000 Binary files a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png and /dev/null differ 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 4b00fb7c6..000000000 Binary files a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-72.png and /dev/null differ 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 6356abb7c..000000000 Binary files a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-72@2x.png and /dev/null differ diff --git a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-76.png b/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-76.png deleted file mode 100644 index 2af8fe425..000000000 Binary files a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-76.png and /dev/null differ diff --git a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png b/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png deleted file mode 100644 index b1c9abe28..000000000 Binary files a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png and /dev/null differ diff --git a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Small-50.png b/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Small-50.png deleted file mode 100644 index 9977b4a96..000000000 Binary files a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Small-50.png and /dev/null differ diff --git a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png b/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png deleted file mode 100644 index 88ff8d797..000000000 Binary files a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png and /dev/null differ 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 026e5582f..000000000 Binary files a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Small.png and /dev/null differ diff --git a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png b/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png deleted file mode 100644 index bc2141703..000000000 Binary files a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png and /dev/null differ 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 f5aeede0d..000000000 Binary files a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png and /dev/null differ diff --git a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png b/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png deleted file mode 100644 index 6f8c9a070..000000000 Binary files a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png and /dev/null differ 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 315b88149..000000000 Binary files a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png and /dev/null differ 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 3e305f997..000000000 Binary files a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png and /dev/null differ 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 4f193923f..000000000 Binary files a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon-iPadPro@2x.png and /dev/null differ 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 d4f21ab13..000000000 Binary files a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon.png and /dev/null differ diff --git a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon@2x.png b/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon@2x.png deleted file mode 100644 index 2b11245cb..000000000 Binary files a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/AppIcon.appiconset/Icon@2x.png and /dev/null differ diff --git a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/Contents.json b/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/Contents.json index da4a164c9..73c00596a 100644 --- a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/Contents.json +++ b/examples/CorePlotGallery/Plot Gallery-iOS/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/LaunchImage.launchimage/Contents.json b/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/LaunchImage.launchimage/Contents.json deleted file mode 100644 index 6d2d4295e..000000000 --- a/examples/CorePlotGallery/Plot Gallery-iOS/Images.xcassets/LaunchImage.launchimage/Contents.json +++ /dev/null @@ -1,158 +0,0 @@ -{ - "images" : [ - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "minimum-system-version" : "11.0", - "subtype" : "2436h", - "scale" : "3x" - }, - { - "orientation" : "landscape", - "idiom" : "iphone", - "extent" : "full-screen", - "minimum-system-version" : "11.0", - "subtype" : "2436h", - "scale" : "3x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "minimum-system-version" : "8.0", - "subtype" : "736h", - "scale" : "3x" - }, - { - "orientation" : "landscape", - "idiom" : "iphone", - "extent" : "full-screen", - "minimum-system-version" : "8.0", - "subtype" : "736h", - "scale" : "3x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "minimum-system-version" : "8.0", - "subtype" : "667h", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "subtype" : "retina4", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "1x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "subtype" : "retina4", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "to-status-bar", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "full-screen", - "scale" : "1x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "to-status-bar", - "scale" : "1x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "full-screen", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "to-status-bar", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "full-screen", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "to-status-bar", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "full-screen", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file 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..0c67376eb --- /dev/null +++ b/examples/CorePlotGallery/Plot Gallery-iOS/Plot Gallery-iOS.entitlements @@ -0,0 +1,5 @@ + + + + + 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 d0ba363b2..000000000 Binary files a/examples/CorePlotGallery/Plot Gallery-tvOS/Assets.xcassets/LaunchImage.launchimage/LaunchImage.png and /dev/null differ diff --git a/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/project.pbxproj index 5fc2950c5..2d3feba85 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 = 47; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -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 */; @@ -197,20 +190,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 */ @@ -246,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 = ""; }; @@ -258,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 = ""; }; @@ -267,16 +246,16 @@ 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 = ""; }; 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 = ""; }; @@ -293,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 = ""; }; @@ -316,37 +295,38 @@ 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 = ""; }; + 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 = ""; 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 = ""; }; 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 = ""; 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 = ""; }; 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 */ @@ -410,8 +390,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 = ""; @@ -479,7 +459,8 @@ 4F22FFAC12342DB1006BF615 /* PlotGallery.m */, C3457A4B17AD7C5D000880F3 /* PiNumberFormatter.h */, C3457A4C17AD7C5D000880F3 /* PiNumberFormatter.m */, - C3C0DF2719D86B5E00631CAD /* CorePlotWarnings.xcconfig */, + C39504412AF7242C000843D0 /* CorePlotExamplesDebug.xcconfig */, + C39504422AF7242C000843D0 /* CorePlotExamplesRelease.xcconfig */, ); name = Shared; sourceTree = ""; @@ -539,11 +520,9 @@ isa = PBXGroup; children = ( 4F4892891290FFCD00EDB93F /* CorePlot.framework */, - 4F48928B1290FFCD00EDB93F /* UnitTests.xctest */, + 4F48928B1290FFCD00EDB93F /* UnitTests Mac.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 +630,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,9 +643,9 @@ dependencies = ( C30D8B1F1BCAFC080003BB70 /* PBXTargetDependency */, ); - name = "Plot Gallery tvOS"; + 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 */ = { @@ -682,11 +661,10 @@ ); dependencies = ( C34CB57A1BC9B0D4009270A0 /* PBXTargetDependency */, - C30B12461BCADD300084C567 /* PBXTargetDependency */, ); 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 */ @@ -695,15 +673,16 @@ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1100; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; TargetAttributes = { C30D8AF51BCAF99D0003BB70 = { CreatedOnToolsVersion = 7.1; - DevelopmentTeam = 28ZA45DE7D; + ProvisioningStyle = Manual; }; C34CB52D1BC9A76A009270A0 = { CreatedOnToolsVersion = 7.0.1; - DevelopmentTeam = 28ZA45DE7D; + ProvisioningStyle = Manual; }; }; }; @@ -730,7 +709,7 @@ targets = ( 8D1107260486CEB800E47090 /* Plot Gallery-Mac */, C34CB52D1BC9A76A009270A0 /* Plot Gallery-iOS */, - C30D8AF51BCAF99D0003BB70 /* Plot Gallery tvOS */, + C30D8AF51BCAF99D0003BB70 /* Plot Gallery-tvOS */, ); }; /* End PBXProject section */ @@ -743,10 +722,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; }; @@ -778,20 +757,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 */ @@ -950,11 +915,6 @@ name = CorePlot; targetProxy = 4F4892921290FFED00EDB93F /* PBXContainerItemProxy */; }; - C30B12461BCADD300084C567 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "CorePlot iOS"; - targetProxy = C30B12451BCADD300084C567 /* PBXContainerItemProxy */; - }; C30D8B1F1BCAFC080003BB70 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "CorePlot tvOS"; @@ -1041,200 +1001,132 @@ /* Begin XCBuildConfiguration section */ C01FCF4B08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C0DF2719D86B5E00631CAD /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39504412AF7242C000843D0 /* CorePlotExamplesDebug.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.11; - OTHER_LDFLAGS = ( - "-ObjC", - "-all_load", + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@loader_path/../Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.Plot-Gallery-Mac"; + MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; PRODUCT_NAME = "Plot Gallery"; - RUN_CLANG_STATIC_ANALYZER = YES; SDKROOT = macosx; - VALID_ARCHS = "i386 x86_64"; }; name = Debug; }; C01FCF4C08A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C0DF2719D86B5E00631CAD /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39504422AF7242C000843D0 /* CorePlotExamplesRelease.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; + COPY_PHASE_STRIP = NO; 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.11; - OTHER_LDFLAGS = ( - "-ObjC", - "-all_load", + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@loader_path/../Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = "com.CorePlot.Plot-Gallery-Mac"; PRODUCT_NAME = "Plot Gallery"; - RUN_CLANG_STATIC_ANALYZER = YES; SDKROOT = macosx; - VALID_ARCHS = "i386 x86_64"; }; name = Release; }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C0DF2719D86B5E00631CAD /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39504412AF7242C000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 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 = C39504422AF7242C000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 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 = C39504412AF7242C000843D0 /* CorePlotExamplesDebug.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; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", + INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Plot_Gallery_tvOS-Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", + "@executable_path/Frameworks", ); - 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 = "$(TARGET_NAME)"; + PRODUCT_NAME = "Plot Gallery"; SDKROOT = appletvos; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; + TVOS_DEPLOYMENT_TARGET = 12.0; }; name = Debug; }; C30D8B0B1BCAF99D0003BB70 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C0DF2719D86B5E00631CAD /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39504422AF7242C000843D0 /* CorePlotExamplesRelease.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; 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"; + 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"; SDKROOT = appletvos; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; + TVOS_DEPLOYMENT_TARGET = 12.0; VALIDATE_PRODUCT = YES; }; name = Release; }; C34CB5431BC9A76A009270A0 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C0DF2719D86B5E00631CAD /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39504412AF7242C000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", + INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Plot_Gallery_iOS-Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", + "@executable_path/Frameworks", ); - INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Plot_Gallery_iOS-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.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)"; + PRODUCT_NAME = "Plot Gallery"; SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; + TARGETED_DEVICE_FAMILY = "1,2,6"; }; name = Debug; }; C34CB5441BC9A76A009270A0 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C0DF2719D86B5E00631CAD /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39504422AF7242C000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - COPY_PHASE_STRIP = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - GCC_NO_COMMON_BLOCKS = YES; + COPY_PHASE_STRIP = NO; INFOPLIST_FILE = "$(SRCROOT)/Base.lproj/Plot_Gallery_iOS-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.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)"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_NAME = "Plot Gallery"; SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; + TARGETED_DEVICE_FAMILY = "1,2,6"; }; name = Release; }; @@ -1259,7 +1151,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/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/CorePlotGallery/Plot_Gallery.xcodeproj/xcshareddata/xcschemes/Plot Gallery-Mac.xcscheme b/examples/CorePlotGallery/Plot_Gallery.xcodeproj/xcshareddata/xcschemes/Plot Gallery-Mac.xcscheme index d03877413..d66f75062 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 @@ -1,6 +1,6 @@ @@ -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 d0f30ca9a..690dcef8c 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 @@ -1,6 +1,6 @@ @@ -32,8 +32,8 @@ @@ -55,8 +55,8 @@ @@ -72,8 +72,8 @@ diff --git a/examples/CorePlotGallery/src/ios/AppDelegate.m b/examples/CorePlotGallery/src/ios/AppDelegate.m index e3bafe91b..0a8329208 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; @@ -35,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/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..57ef00ef7 100644 --- a/examples/CorePlotGallery/src/ios/RootViewController.m +++ b/examples/CorePlotGallery/src/ios/RootViewController.m @@ -99,13 +99,14 @@ -(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; } 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..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]; } @@ -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..99f6636ab 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]; } @@ -176,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); @@ -189,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]; } @@ -295,16 +296,26 @@ -(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; - 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" +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + 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/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/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 961ddc972..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])) { @@ -97,7 +92,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/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 d5e6f20e9..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])) { @@ -62,7 +57,7 @@ -(void)generateData [generatedData addObject:@{ @"x": x, @"y": y - }]; + }]; } } self.plotData = generatedData; diff --git a/examples/CorePlotGallery/src/plots/CurvedScatterPlot.m b/examples/CorePlotGallery/src/plots/CurvedScatterPlot.m index 27e300d0f..148898a66 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])) { @@ -74,7 +69,7 @@ -(void)generateData self.plotData = contentArray; } - if ( self.plotData1 == nil ) { + if ( !self.plotData1 ) { NSMutableArray *> *contentArray = [NSMutableArray array]; NSArray *> *dataArray = self.plotData; @@ -101,7 +96,7 @@ -(void)generateData self.plotData1 = contentArray; } - if ( self.plotData2 == nil ) { + if ( !self.plotData2 ) { NSMutableArray *> *contentArray = [NSMutableArray array]; NSArray *> *dataArray = self.plotData1; @@ -378,6 +373,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 +388,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 +404,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/DatePlot.m b/examples/CorePlotGallery/src/plots/DatePlot.m index 3bc85e487..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])) { @@ -113,7 +108,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/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 839ca3d52..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 @@ -223,6 +218,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..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])) { @@ -235,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"; @@ -250,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/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 7761c4069..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])) { @@ -97,7 +92,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/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 779a94ee0..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])) { @@ -137,7 +132,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/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 76e5c79ac..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])) { @@ -118,6 +113,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 +133,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..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])) { @@ -230,6 +225,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 +241,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/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 2236f441f..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])) { @@ -249,6 +244,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 +252,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 +266,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/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/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 fc40ffe5a..e3a03cb14 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,12 +24,61 @@ @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 && 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 { @synchronized ( self ) { - if ( sharedPlotGallery == nil ) { + if ( !sharedPlotGallery ) { sharedPlotGallery = [[self alloc] init]; } } @@ -34,7 +88,7 @@ +(nonnull PlotGallery *)sharedPlotGallery +(id)allocWithZone:(NSZone *)zone { @synchronized ( self ) { - if ( sharedPlotGallery == nil ) { + if ( !sharedPlotGallery ) { return [super allocWithZone:zone]; } } @@ -46,11 +100,19 @@ -(nonnull instancetype)init Class thisClass = [self class]; @synchronized ( thisClass ) { - if ( sharedPlotGallery == nil ) { + if ( !sharedPlotGallery ) { if ((self = [super 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,9 +127,12 @@ -(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; + if ( sectionName ) { [self.plotSections addObject:sectionName]; } 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 08bc060b7..a96a8872d 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])) { @@ -84,6 +69,7 @@ -(void)killGraph // Remove the CPTLayerHostingView CPTGraphHostingView *hostingView = self.defaultLayerHostingView; + if ( hostingView ) { [hostingView removeFromSuperview]; @@ -124,7 +110,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; @@ -244,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]; @@ -289,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)]; @@ -314,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 0e114aef2..3a73f36ce 100644 --- a/examples/CorePlotGallery/src/tvOS/RootViewControllerTV.m +++ b/examples/CorePlotGallery/src/tvOS/RootViewControllerTV.m @@ -104,13 +104,14 @@ -(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; } 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..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]; } @@ -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/DatePlot/DatePlot.xcodeproj/project.pbxproj b/examples/DatePlot/DatePlot.xcodeproj/project.pbxproj index 21d005158..cf75e373d 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 = 54; 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 */; @@ -68,36 +60,8 @@ remoteGlobalIDString = C38A09821A46185300D45436; remoteInfo = CorePlot_iOSTests; }; - C3F04DBB1B44CCFD0002322A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 076184BC0F3CAD5900A89A76 /* CorePlot.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C38A09BA1A4619A900D45436; - remoteInfo = "CorePlot-CocoaTouch"; - }; - C3F04DBD1B44CCFD0002322A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 076184BC0F3CAD5900A89A76 /* CorePlot.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C38A09C41A4619A900D45436; - remoteInfo = "CorePlot-CocoaTouchTests"; - }; /* 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; }; @@ -111,10 +75,12 @@ 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 = ""; }; + 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 = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -122,9 +88,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; }; @@ -135,11 +101,9 @@ isa = PBXGroup; children = ( 076184C10F3CAD5900A89A76 /* CorePlot.framework */, - 07E0DF80109C4E9500F108D2 /* UnitTests.xctest */, + 07E0DF80109C4E9500F108D2 /* UnitTests Mac.xctest */, C3F04DB81B44CCFD0002322A /* CorePlot.framework */, C3F04DBA1B44CCFD0002322A /* UnitTests iOS.xctest */, - C3F04DBC1B44CCFD0002322A /* libCorePlot-CocoaTouch.a */, - C3F04DBE1B44CCFD0002322A /* CorePlot-CocoaTouchTests.xctest */, C310CE5C1C0A3DB500C4FCB4 /* CorePlot.framework */, C310CE5E1C0A3DB500C4FCB4 /* UnitTests tvOS.xctest */, ); @@ -188,6 +152,7 @@ isa = PBXGroup; children = ( 076184BC0F3CAD5900A89A76 /* CorePlot.xcodeproj */, + C3F2449E28DBC025008DB9A1 /* Packages */, 080E96DDFE201D6D7F000001 /* Classes */, C33E19A219832EEA00182AF2 /* Other Sources */, 29B97317FDCFA39411CA2CEA /* Resources */, @@ -223,11 +188,20 @@ C33E19A219832EEA00182AF2 /* Other Sources */ = { isa = PBXGroup; children = ( - C3C3CBBF19EA07F600A0296A /* CorePlotWarnings.xcconfig */, + C39504662AF727AE000843D0 /* CorePlotExamplesDebug.xcconfig */, + C395045B2AF727AE000843D0 /* CorePlotExamplesRelease.xcconfig */, ); name = "Other Sources"; sourceTree = ""; }; + C3F2449E28DBC025008DB9A1 /* Packages */ = { + isa = PBXGroup; + children = ( + C3F2449F28DBC025008DB9A1 /* Core Plot */, + ); + name = Packages; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -237,15 +211,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 */; @@ -257,9 +232,9 @@ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { - BuildIndependentTargetsInParallel = NO; + BuildIndependentTargetsInParallel = YES; LastSwiftUpdateCheck = 0700; - LastUpgradeCheck = 1100; + LastUpgradeCheck = 1430; TargetAttributes = { 8D1107260486CEB800E47090 = { LastSwiftMigration = 1020; @@ -300,10 +275,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; }; @@ -335,20 +310,6 @@ remoteRef = C3F04DB91B44CCFD0002322A /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - C3F04DBC1B44CCFD0002322A /* libCorePlot-CocoaTouch.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libCorePlot-CocoaTouch.a"; - remoteRef = C3F04DBB1B44CCFD0002322A /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C3F04DBE1B44CCFD0002322A /* CorePlot-CocoaTouchTests.xctest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = "CorePlot-CocoaTouchTests.xctest"; - remoteRef = C3F04DBD1B44CCFD0002322A /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; /* End PBXReferenceProxy section */ /* Begin PBXResourcesBuildPhase section */ @@ -376,14 +337,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; @@ -414,85 +367,45 @@ /* Begin XCBuildConfiguration section */ C01FCF4B08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C3CBBF19EA07F600A0296A /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39504662AF727AE000843D0 /* CorePlotExamplesDebug.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; - 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; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@loader_path/../Frameworks", + ); }; name = Debug; }; C01FCF4C08A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C3CBBF19EA07F600A0296A /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C395045B2AF727AE000843D0 /* CorePlotExamplesRelease.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; - 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_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@loader_path/../Frameworks", + ); }; name = Release; }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C3CBBF19EA07F600A0296A /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39504662AF727AE000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 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.9; - ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; - SYMROOT = "$(SRCROOT)/../../build"; }; name = Debug; }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C3CBBF19EA07F600A0296A /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C395045B2AF727AE000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = s; - GCC_PREPROCESSOR_DEFINITIONS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.9; SDKROOT = macosx; - SYMROOT = "$(SRCROOT)/../../build"; }; name = Release; }; @@ -518,6 +431,13 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCSwiftPackageProductDependency section */ + C3F244B328DBC2FC008DB9A1 /* CorePlot */ = { + isa = XCSwiftPackageProductDependency; + productName = CorePlot; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; } 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/DatePlot/DatePlot.xcodeproj/xcshareddata/xcschemes/DatePlot.xcscheme b/examples/DatePlot/DatePlot.xcodeproj/xcshareddata/xcschemes/DatePlot.xcscheme index 40f98e3d8..a9967f6fd 100644 --- a/examples/DatePlot/DatePlot.xcodeproj/xcshareddata/xcschemes/DatePlot.xcscheme +++ b/examples/DatePlot/DatePlot.xcodeproj/xcshareddata/xcschemes/DatePlot.xcscheme @@ -1,6 +1,6 @@ [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/examples/DropPlot/CPTPlotDocument.m b/examples/DropPlot/CPTPlotDocument.m index 537a8bdcb..a6121851c 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; @@ -136,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; @@ -220,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; @@ -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; } @@ -314,7 +321,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; @@ -330,11 +337,11 @@ -(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]; - NSData *pngData = [tiffRep representationUsingType:NSPNGFileType properties:@{}]; + NSData *pngData = [tiffRep representationUsingType:NSBitmapImageFileTypePNG properties:@{}]; NSURL *url = pngSavingDialog.URL; if ( url ) { diff --git a/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj b/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj index 43c984131..16247b075 100644 --- a/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj +++ b/examples/DropPlot/DropPlot.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 47; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -57,20 +57,6 @@ remoteGlobalIDString = C38A09821A46185300D45436; remoteInfo = CorePlot_iOSTests; }; - C3B345AB1B46194500844218 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BC93AA7C0FDEFEAC00606226 /* CorePlot.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C38A09BA1A4619A900D45436; - remoteInfo = "CorePlot-CocoaTouch"; - }; - C3B345AD1B46194500844218 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BC93AA7C0FDEFEAC00606226 /* CorePlot.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C38A09C41A4619A900D45436; - remoteInfo = "CorePlot-CocoaTouchTests"; - }; C3CBFB791BE590A300519EE8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BC93AA7C0FDEFEAC00606226 /* CorePlot.xcodeproj */; @@ -104,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 = ""; }; @@ -118,8 +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 = ""; }; + 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 */ @@ -197,7 +184,8 @@ children = ( 32DBCF750370BD2300C91783 /* DropPlot_Prefix.pch */, 2A37F4B0FDCFA73011CA2CEA /* main.m */, - C3D6210E19DF72E000652CE7 /* CorePlotWarnings.xcconfig */, + C39504672AF727D1000843D0 /* CorePlotExamplesDebug.xcconfig */, + C39504712AF727D1000843D0 /* CorePlotExamplesRelease.xcconfig */, ); name = "Other Sources"; sourceTree = ""; @@ -228,11 +216,9 @@ isa = PBXGroup; children = ( BC93AA970FDEFEAC00606226 /* CorePlot.framework */, - 07E0DFAC109C4EB500F108D2 /* UnitTests.xctest */, + 07E0DFAC109C4EB500F108D2 /* UnitTests Mac.xctest */, C3B345A81B46194500844218 /* CorePlot.framework */, C3B345AA1B46194500844218 /* UnitTests iOS.xctest */, - C3B345AC1B46194500844218 /* libCorePlot-CocoaTouch.a */, - C3B345AE1B46194500844218 /* CorePlot-CocoaTouchTests.xctest */, C3CBFB7A1BE590A300519EE8 /* CorePlot.framework */, C3CBFB7C1BE590A300519EE8 /* UnitTests tvOS.xctest */, ); @@ -268,7 +254,8 @@ 2A37F4A9FDCFA73011CA2CEA /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1100; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1500; }; buildConfigurationList = C05733CB08A9546B00998B17 /* Build configuration list for PBXProject "DropPlot" */; compatibilityVersion = "Xcode 6.3"; @@ -297,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; }; @@ -325,20 +312,6 @@ remoteRef = C3B345A91B46194500844218 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - C3B345AC1B46194500844218 /* libCorePlot-CocoaTouch.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libCorePlot-CocoaTouch.a"; - remoteRef = C3B345AB1B46194500844218 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C3B345AE1B46194500844218 /* CorePlot-CocoaTouchTests.xctest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = "CorePlot-CocoaTouchTests.xctest"; - remoteRef = C3B345AD1B46194500844218 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; C3CBFB7A1BE590A300519EE8 /* CorePlot.framework */ = { isa = PBXReferenceProxy; fileType = wrapper.framework; @@ -437,76 +410,47 @@ /* Begin XCBuildConfiguration section */ C05733C808A9546B00998B17 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3D6210E19DF72E000652CE7 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39504672AF727D1000843D0 /* CorePlotExamplesDebug.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 = 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; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@loader_path/../Frameworks", + ); }; name = Debug; }; C05733C908A9546B00998B17 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3D6210E19DF72E000652CE7 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39504712AF727D1000843D0 /* CorePlotExamplesRelease.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 = DropPlot_Prefix.pch; - HEADER_SEARCH_PATHS = ""; + COPY_PHASE_STRIP = NO; 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; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@loader_path/../Frameworks", + ); }; name = Release; }; C05733CC08A9546B00998B17 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3D6210E19DF72E000652CE7 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39504672AF727D1000843D0 /* CorePlotExamplesDebug.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; - MACOSX_DEPLOYMENT_TARGET = 10.8; - ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; - SYMROOT = "$(SRCROOT)/../../build"; }; name = Debug; }; C05733CD08A9546B00998B17 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3D6210E19DF72E000652CE7 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39504712AF727D1000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = s; - MACOSX_DEPLOYMENT_TARGET = 10.8; SDKROOT = macosx; - SYMROOT = "$(SRCROOT)/../../build"; }; name = Release; }; 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/DropPlot/DropPlot.xcodeproj/xcshareddata/xcschemes/DropPlot.xcscheme b/examples/DropPlot/DropPlot.xcodeproj/xcshareddata/xcschemes/DropPlot.xcscheme index e0844ecb4..1d414ea56 100644 --- a/examples/DropPlot/DropPlot.xcodeproj/xcshareddata/xcschemes/DropPlot.xcscheme +++ b/examples/DropPlot/DropPlot.xcodeproj/xcshareddata/xcschemes/DropPlot.xcscheme @@ -1,6 +1,6 @@ *newData = [NSMutableArray array]; + for ( NSUInteger i = 0; i < 7; i++ ) { NSTimeInterval xVal = oneDay * i * 0.5; diff --git a/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj b/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj index d0e672ef8..09d2b89c4 100644 --- a/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj +++ b/examples/MinorTickLabels/minorTickFormatter.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 47; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -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 */ @@ -68,20 +70,6 @@ remoteGlobalIDString = C38A09821A46185300D45436; remoteInfo = CorePlot_iOSTests; }; - C3B345BB1B46195100844218 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 076184BC0F3CAD5900A89A76 /* CorePlot.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C38A09BA1A4619A900D45436; - remoteInfo = "CorePlot-CocoaTouch"; - }; - C3B345BD1B46195100844218 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 076184BC0F3CAD5900A89A76 /* CorePlot.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C38A09C41A4619A900D45436; - remoteInfo = "CorePlot-CocoaTouchTests"; - }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -114,7 +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 = ""; }; + 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 */ @@ -137,11 +126,9 @@ isa = PBXGroup; children = ( 076184C10F3CAD5900A89A76 /* CorePlot.framework */, - 07E0DF80109C4E9500F108D2 /* UnitTests.xctest */, + 07E0DF80109C4E9500F108D2 /* UnitTests Mac.xctest */, C3B345B81B46195100844218 /* CorePlot.framework */, C3B345BA1B46195100844218 /* UnitTests iOS.xctest */, - C3B345BC1B46195100844218 /* libCorePlot-CocoaTouch.a */, - C3B345BE1B46195100844218 /* CorePlot-CocoaTouchTests.xctest */, C310CE781C0A3DF000C4FCB4 /* CorePlot.framework */, C310CE7A1C0A3DF000C4FCB4 /* UnitTests tvOS.xctest */, ); @@ -207,7 +194,8 @@ children = ( 32CA4F630368D1EE00C91783 /* minorTickFormatter_Prefix.pch */, 29B97316FDCFA39411CA2CEA /* main.m */, - C37FFB5D19E1ECF0003F34C5 /* CorePlotWarnings.xcconfig */, + C395047C2AF72801000843D0 /* CorePlotExamplesDebug.xcconfig */, + C395047B2AF72801000843D0 /* CorePlotExamplesRelease.xcconfig */, ); name = "Other Sources"; sourceTree = ""; @@ -261,8 +249,8 @@ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { - BuildIndependentTargetsInParallel = NO; - LastUpgradeCheck = 1100; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1500; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "minorTickFormatter" */; compatibilityVersion = "Xcode 6.3"; @@ -298,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,20 +321,6 @@ remoteRef = C3B345B91B46195100844218 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - C3B345BC1B46195100844218 /* libCorePlot-CocoaTouch.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libCorePlot-CocoaTouch.a"; - remoteRef = C3B345BB1B46195100844218 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C3B345BE1B46195100844218 /* CorePlot-CocoaTouchTests.xctest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = "CorePlot-CocoaTouchTests.xctest"; - remoteRef = C3B345BD1B46195100844218 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; /* End PBXReferenceProxy section */ /* Begin PBXResourcesBuildPhase section */ @@ -355,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; @@ -412,79 +388,47 @@ /* Begin XCBuildConfiguration section */ C01FCF4B08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C37FFB5D19E1ECF0003F34C5 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C395047C2AF72801000843D0 /* CorePlotExamplesDebug.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 = 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; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@loader_path/../Frameworks", + ); }; name = Debug; }; C01FCF4C08A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C37FFB5D19E1ECF0003F34C5 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C395047B2AF72801000843D0 /* CorePlotExamplesRelease.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 = minorTickFormatter_Prefix.pch; - GCC_PREPROCESSOR_DEFINITIONS = ""; + COPY_PHASE_STRIP = NO; 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; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@loader_path/../Frameworks", + ); }; name = Release; }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C37FFB5D19E1ECF0003F34C5 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C395047C2AF72801000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 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.8; - ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; - SYMROOT = "$(SRCROOT)/../../build"; }; name = Debug; }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C37FFB5D19E1ECF0003F34C5 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C395047B2AF72801000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = s; - GCC_PREPROCESSOR_DEFINITIONS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.8; SDKROOT = macosx; - SYMROOT = "$(SRCROOT)/../../build"; }; name = Release; }; 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/MinorTickLabels/minorTickFormatter.xcodeproj/xcshareddata/xcschemes/minorTickFormatter.xcscheme b/examples/MinorTickLabels/minorTickFormatter.xcodeproj/xcshareddata/xcschemes/minorTickFormatter.xcscheme index 417b6d1dc..a0baed0d1 100644 --- a/examples/MinorTickLabels/minorTickFormatter.xcodeproj/xcshareddata/xcschemes/minorTickFormatter.xcscheme +++ b/examples/MinorTickLabels/minorTickFormatter.xcodeproj/xcshareddata/xcschemes/minorTickFormatter.xcscheme @@ -1,6 +1,6 @@ *newData = [NSMutableArray array]; + for ( NSUInteger i = 0; i < 5; i++ ) { NSTimeInterval xVal = oneDay * (i + 1.0); diff --git a/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj b/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj index 53802d311..16a9e3435 100644 --- a/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj +++ b/examples/RangePlot/RangePlot.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 47; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -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 */ @@ -68,20 +70,6 @@ remoteGlobalIDString = C38A09821A46185300D45436; remoteInfo = CorePlot_iOSTests; }; - C3B345CB1B46195900844218 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 076184BC0F3CAD5900A89A76 /* CorePlot.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C38A09BA1A4619A900D45436; - remoteInfo = "CorePlot-CocoaTouch"; - }; - C3B345CD1B46195900844218 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 076184BC0F3CAD5900A89A76 /* CorePlot.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C38A09C41A4619A900D45436; - remoteInfo = "CorePlot-CocoaTouchTests"; - }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -114,7 +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 = ""; }; + 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 */ @@ -137,11 +126,9 @@ isa = PBXGroup; children = ( 076184C10F3CAD5900A89A76 /* CorePlot.framework */, - 07E0DF80109C4E9500F108D2 /* UnitTests.xctest */, + 07E0DF80109C4E9500F108D2 /* UnitTests Mac.xctest */, C3B345C81B46195900844218 /* CorePlot.framework */, C3B345CA1B46195900844218 /* UnitTests iOS.xctest */, - C3B345CC1B46195900844218 /* libCorePlot-CocoaTouch.a */, - C3B345CE1B46195900844218 /* CorePlot-CocoaTouchTests.xctest */, C310CE881C0A3DF700C4FCB4 /* CorePlot.framework */, C310CE8A1C0A3DF700C4FCB4 /* UnitTests tvOS.xctest */, ); @@ -207,7 +194,8 @@ children = ( 32CA4F630368D1EE00C91783 /* RangePlot_Prefix.pch */, 29B97316FDCFA39411CA2CEA /* main.m */, - C37FFB6019E1EEB6003F34C5 /* CorePlotWarnings.xcconfig */, + C39504882AF72820000843D0 /* CorePlotExamplesDebug.xcconfig */, + C39504892AF72820000843D0 /* CorePlotExamplesRelease.xcconfig */, ); name = "Other Sources"; sourceTree = ""; @@ -261,8 +249,8 @@ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { - BuildIndependentTargetsInParallel = NO; - LastUpgradeCheck = 1100; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1500; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "RangePlot" */; compatibilityVersion = "Xcode 6.3"; @@ -298,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,20 +321,6 @@ remoteRef = C3B345C91B46195900844218 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - C3B345CC1B46195900844218 /* libCorePlot-CocoaTouch.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libCorePlot-CocoaTouch.a"; - remoteRef = C3B345CB1B46195900844218 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C3B345CE1B46195900844218 /* CorePlot-CocoaTouchTests.xctest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = "CorePlot-CocoaTouchTests.xctest"; - remoteRef = C3B345CD1B46195900844218 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; /* End PBXReferenceProxy section */ /* Begin PBXResourcesBuildPhase section */ @@ -357,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; }; @@ -412,79 +388,47 @@ /* Begin XCBuildConfiguration section */ C01FCF4B08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C37FFB6019E1EEB6003F34C5 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39504882AF72820000843D0 /* CorePlotExamplesDebug.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 = 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; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@loader_path/../Frameworks", + ); }; name = Debug; }; C01FCF4C08A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C37FFB6019E1EEB6003F34C5 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39504892AF72820000843D0 /* CorePlotExamplesRelease.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 = RangePlot_Prefix.pch; - GCC_PREPROCESSOR_DEFINITIONS = ""; + COPY_PHASE_STRIP = NO; 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; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@loader_path/../Frameworks", + ); }; name = Release; }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C37FFB6019E1EEB6003F34C5 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39504882AF72820000843D0 /* CorePlotExamplesDebug.xcconfig */; buildSettings = { - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 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.8; - ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; - SYMROOT = "$(SRCROOT)/../../build"; }; name = Debug; }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C37FFB6019E1EEB6003F34C5 /* CorePlotWarnings.xcconfig */; + baseConfigurationReference = C39504892AF72820000843D0 /* CorePlotExamplesRelease.xcconfig */; buildSettings = { - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = s; - GCC_PREPROCESSOR_DEFINITIONS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.8; SDKROOT = macosx; - SYMROOT = "$(SRCROOT)/../../build"; }; name = Release; }; 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/examples/RangePlot/RangePlot.xcodeproj/xcshareddata/xcschemes/RangePlot.xcscheme b/examples/RangePlot/RangePlot.xcodeproj/xcshareddata/xcschemes/RangePlot.xcscheme index ecd1f2065..83ab4425a 100644 --- a/examples/RangePlot/RangePlot.xcodeproj/xcshareddata/xcschemes/RangePlot.xcscheme +++ b/examples/RangePlot/RangePlot.xcodeproj/xcshareddata/xcschemes/RangePlot.xcscheme @@ -1,6 +1,6 @@ -#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.h b/framework/CorePlot.h index fbf2740c2..14ce9a19e 100644 --- a/framework/CorePlot.h +++ b/framework/CorePlot.h @@ -1,6 +1,12 @@ -#import "TargetConditionals.h" +#ifdef __has_include +#if __has_include() +#define CPT_IS_FRAMEWORK +#endif +#endif + +#import -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST #import #import @@ -9,9 +15,10 @@ #import -#import #endif +#ifdef CPT_IS_FRAMEWORK + #import #import #import @@ -27,6 +34,7 @@ #import #import #import +#import #import #import #import @@ -77,3 +85,74 @@ #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 "CPTDecimalNumberValueTransformer.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 f6971f390..acd819c0a 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 */ @@ -18,16 +18,16 @@ name = "Documentation-Mac"; productName = Documentation; }; - C37EA5C41BC83E900091C8F7 /* Universal tvOS Framework */ = { + C36BE54226FF6857004287F2 /* Update SPM Files */ = { isa = PBXAggregateTarget; - buildConfigurationList = C37EA5C61BC83E900091C8F7 /* Build configuration list for PBXAggregateTarget "Universal tvOS Framework" */; + buildConfigurationList = C36BE54526FF6857004287F2 /* Build configuration list for PBXAggregateTarget "Update SPM Files" */; buildPhases = ( - C37EA5C51BC83E900091C8F7 /* ShellScript */, + C36BE54626FF6865004287F2 /* ShellScript */, ); dependencies = ( ); - name = "Universal tvOS Framework"; - productName = Documentation; + name = "Update SPM Files"; + productName = "Update SPM Files"; }; C38A09911A4618B600D45436 /* Documentation-iOS */ = { isa = PBXAggregateTarget; @@ -40,26 +40,15 @@ 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 */ = { + C3AC175B244B594800E7380C /* Universal XCFramework */ = { isa = PBXAggregateTarget; - buildConfigurationList = C3A546811BC1A817005C1BBC /* Build configuration list for PBXAggregateTarget "Universal iOS Framework" */; + buildConfigurationList = C3AC175D244B594800E7380C /* Build configuration list for PBXAggregateTarget "Universal XCFramework" */; buildPhases = ( - C3A546801BC1A817005C1BBC /* ShellScript */, + C3AC175C244B594800E7380C /* ShellScript */, ); dependencies = ( ); - name = "Universal iOS Framework"; + name = "Universal XCFramework"; productName = Documentation; }; /* End PBXAggregateTarget section */ @@ -89,18 +78,12 @@ 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 */; }; - 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 */; }; + 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 */; }; 07975C490F3B818800DE45DC /* CPTAxis.h in Headers */ = {isa = PBXBuildFile; fileRef = 07975C470F3B818800DE45DC /* CPTAxis.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -137,8 +120,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, ); }; }; @@ -147,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 */; }; @@ -162,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 */; }; + 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 */; }; @@ -178,25 +159,20 @@ 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 */; }; - 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, ); }; }; 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 */; }; @@ -211,23 +187,23 @@ 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 */; }; - 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 */; }; + 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 */; }; @@ -235,15 +211,13 @@ 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 */; }; - 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 */; }; 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 */; }; @@ -263,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 */; }; @@ -301,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 */; }; @@ -339,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, ); }; }; @@ -354,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, ); }; }; @@ -370,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, ); }; }; @@ -416,19 +390,19 @@ 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, ); }; }; 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, ); }; }; 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 */; }; @@ -442,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 */; }; @@ -455,134 +429,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, ); }; }; + C38A0A411A461EEE00D45436 /* _CPTConstraintsFixed.h in Headers */ = {isa = PBXBuildFile; fileRef = C3CCA03913E8D85800CE6DB1 /* _CPTConstraintsFixed.h */; }; 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, ); }; }; + C38A0A441A461EFA00D45436 /* _CPTConstraintsRelative.h in Headers */ = {isa = PBXBuildFile; fileRef = C3CCA03B13E8D85800CE6DB1 /* _CPTConstraintsRelative.h */; }; 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,131 +529,77 @@ 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, ); }; }; - 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 */; }; 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 */; }; + 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 */; }; 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, ); }; }; + 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, ); }; }; 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 */; }; 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, ); }; }; + 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 */; }; - 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 */; }; - 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 */; }; - 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,15 +610,13 @@ 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, ); }; }; - 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 */; }; @@ -754,37 +624,23 @@ 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 */; }; + 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 */; }; - 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 */; }; + 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, ); }; }; - C3978E0713CE653C00A420D9 /* NSCoderExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = C3978E0513CE653B00A420D9 /* NSCoderExtensions.m */; }; + 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 */; }; C3AFC9D10FB62969005DFFDC /* CPTImage.h in Headers */ = {isa = PBXBuildFile; fileRef = C3AFC9CF0FB62969005DFFDC /* CPTImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -794,12 +650,15 @@ 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 */; }; + 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 */; }; + 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, ); }; }; @@ -809,9 +668,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 */; }; @@ -830,7 +689,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 */; }; @@ -841,20 +700,28 @@ 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, ); }; }; - 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 */; }; + 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, ); }; }; + C3F31DE91045EB470058520A /* _CPTPlotGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F31DE71045EB470058520A /* _CPTPlotGroup.m */; }; + 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 */; }; 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 */ @@ -872,132 +739,126 @@ remoteGlobalIDString = C38A09771A46185200D45436; remoteInfo = "CorePlot-iOS"; }; - C38A09C61A4619A900D45436 /* PBXContainerItemProxy */ = { + C3B4D4951BC997F600450C37 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; proxyType = 1; - remoteGlobalIDString = C38A09B91A4619A900D45436; - remoteInfo = "CorePlot-CocoaTouch"; + remoteGlobalIDString = C37EA5C91BC83F2A0091C8F7; + remoteInfo = "CorePlot tvOS"; }; - C3B4D4951BC997F600450C37 /* PBXContainerItemProxy */ = { + C3F244C028DBCBA1008DB9A1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; proxyType = 1; - remoteGlobalIDString = C37EA5C91BC83F2A0091C8F7; - remoteInfo = "CorePlot tvOS"; + remoteGlobalIDString = C36BE54226FF6857004287F2; + remoteInfo = "Update SPM Files"; }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - C38A09B81A4619A900D45436 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "include/$(PRODUCT_NAME)"; - dstSubfolderSpec = 16; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; + C3F244C228DBCBAE008DB9A1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = C36BE54226FF6857004287F2; + remoteInfo = "Update SPM Files"; }; -/* End PBXCopyFilesBuildPhase section */ + C3F244C428DBCBB4008DB9A1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = C36BE54226FF6857004287F2; + remoteInfo = "Update SPM Files"; + }; +/* 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; }; - 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 = ""; }; + 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; 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 = ""; }; - 072161EA11D1F6BD009CC871 /* CPTAnnotationHostLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAnnotationHostLayer.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 0730F600109492D800E95162 /* UnitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 072161EA11D1F6BD009CC871 /* CPTAnnotationHostLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAnnotationHostLayer.m; sourceTree = ""; }; + 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 = ""; }; 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 = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 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; }; + 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 = ""; }; + 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 = ""; 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; }; + 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 = ""; }; 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; }; - 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; }; - 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; }; - 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; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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; }; + 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; }; - 07B69A5C12B6215000F4C16C /* CPTTextStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTTextStyle.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 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; }; - 07BF0D710F2B718F002FCEA7 /* CPTGraph.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTGraph.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 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; }; - 07BF0D7B0F2B72B0002FCEA7 /* CPTPlotSpace.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTPlotSpace.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 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; }; + 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 = ""; }; + 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; }; - 07BF0DF10F2B7BFB002FCEA7 /* CPTDefinitions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CPTDefinitions.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 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 = ""; }; 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; }; - 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 = ""; }; @@ -1005,32 +866,32 @@ 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 = ""; }; + 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; }; - 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; }; - A92C00B71DCB2085A92BE0A9 /* _CPTAnimationNSDecimalPeriod.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = _CPTAnimationNSDecimalPeriod.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 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 = ""; }; + 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 = ""; }; @@ -1041,53 +902,49 @@ 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; }; - 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; }; + 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; }; + 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 = ""; }; + 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 = ""; }; - 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; }; 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; }; - 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; }; + 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 = ""; }; + 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; }; - C349DCB3151AAFBF00BFD6A7 /* CPTCalendarFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTCalendarFormatter.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 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; }; + 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 = ""; }; + 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 = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 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 = ""; }; @@ -1096,56 +953,62 @@ 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 = ""; }; C37A406920E02BE900C4FF48 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = "Base.lproj/CorePlotTests-Info.plist"; 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; }; 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; }; - 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; }; - 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 = ""; }; + 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; }; + 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; }; + 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; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; - 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; }; + 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 = ""; }; + 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 = ""; }; - C3BB7D1416322F7E00BC9515 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; - 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; }; + 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 = ""; }; + 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; }; - C3C9CB12165DB50300739006 /* CPTAnimationPeriod.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTAnimationPeriod.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 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 = ""; }; + 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 = ""; }; C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = CorePlotDebug.xcconfig; path = xcconfig/CorePlotDebug.xcconfig; sourceTree = ""; }; @@ -1156,12 +1019,17 @@ 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 = ""; }; + 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 = ""; }; 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 = ""; }; @@ -1180,22 +1048,22 @@ 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; }; - 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; }; - C3F97F1D17A9E07B00A52FF2 /* CPTFunctionDataSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CPTFunctionDataSource.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 = ""; }; + 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 = ""; 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 = ""; }; 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 */ @@ -1256,27 +1124,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 */ @@ -1284,11 +1131,9 @@ isa = PBXGroup; children = ( 8DC2EF5B0486A6940098B216 /* CorePlot.framework */, - 0730F600109492D800E95162 /* UnitTests.xctest */, + 0730F600109492D800E95162 /* UnitTests Mac.xctest */, C38A09781A46185200D45436 /* CorePlot.framework */, C38A09821A46185300D45436 /* UnitTests iOS.xctest */, - C38A09BA1A4619A900D45436 /* libCorePlot-CocoaTouch.a */, - C38A09C41A4619A900D45436 /* CorePlot-CocoaTouchTests.xctest */, C37EA6921BC83F2A0091C8F7 /* CorePlot.framework */, C37EA6B71BC83F2D0091C8F7 /* UnitTests tvOS.xctest */, ); @@ -1345,8 +1190,7 @@ 07B69A5C12B6215000F4C16C /* CPTTextStyle.m */, 07C467990FE1A24C00299939 /* CPTMutableTextStyle.h */, 07C4679A0FE1A24C00299939 /* CPTMutableTextStyle.m */, - C3A959D210116FE100BF9739 /* Mac Specific */, - C38A0A521A461F5D00D45436 /* iOS Specific */, + C38A0A521A461F5D00D45436 /* Platform Specific */, 4CC9A36C0FD98AB200CFBE5E /* Tests */, ); name = Text; @@ -1399,12 +1243,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 = ""; @@ -1432,22 +1276,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 = ( @@ -1476,8 +1304,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 */, @@ -1528,10 +1356,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 */, @@ -1555,7 +1383,7 @@ C3A695E4146A19BC00AF5653 /* CPTMutablePlotRange.m */, C3F97F1C17A9E07B00A52FF2 /* CPTFunctionDataSource.h */, C3F97F1D17A9E07B00A52FF2 /* CPTFunctionDataSource.m */, - C3BB93181B729BD200004527 /* CPTDebugQuickLook.h */, + C3BB93181B729BD200004527 /* _CPTDebugQuickLook.h */, 076A775F0FBF0BFE003F6D97 /* Tests */, ); name = "Types and Functions"; @@ -1590,10 +1418,11 @@ children = ( 4C99408D0F45F71100DC824F /* Testing */, 07BF0D600F2B6FE1002FCEA7 /* Source */, - 07BF0D5F0F2B6FE1002FCEA7 /* Mac Specific */, - C38A0AA61A4621BC00D45436 /* iOS Specific */, + C38A0AA61A4621BC00D45436 /* Platform Specific */, 9021E4920FC5C6DD00443472 /* Documentation */, - C3B25EDE1AC23A7D0063CCD8 /* CocoaPods */, + C3D0F67429C604EF00190D2C /* Scripts */, + C37A9AB729C698A7003B4338 /* Module */, + C3C3B8882A58EB9700352BBE /* SPM Umbrella Header */, 32C88DFF0371C24200C91783 /* Other Sources */, 089C1665FE841158C02AAC07 /* Resources */, 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */, @@ -1619,7 +1448,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 */, @@ -1630,7 +1458,6 @@ 1058C7B0FEA5585E11CA2CBB /* Mac */ = { isa = PBXGroup; children = ( - C3BB7D1416322F7E00BC9515 /* Accelerate.framework */, C3EE4E971A6C1E890098F4E6 /* Cocoa.framework */, 07BF0D630F2B70B8002FCEA7 /* QuartzCore.framework */, ); @@ -1642,11 +1469,17 @@ children = ( 32DBCF5E0370ADEE00C91783 /* CorePlot_Prefix.pch */, 070CF7AE0F3CA7AB0001FFF4 /* CorePlot.h */, - C3226A471A69EE9200F77249 /* CorePlot-CocoaTouch.h */, C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */, + C3B0E7B229CA7B3200FC94B5 /* CorePlotDebugModule.xcconfig */, + C3A305202AF7D8AF00BD5A61 /* CorePlotExamples.xcconfig */, + C395043F2AF723E3000843D0 /* CorePlotExamplesDebug.xcconfig */, + C39504402AF723E3000843D0 /* CorePlotExamplesRelease.xcconfig */, C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */, + C3B0E7B329CA7B3200FC94B5 /* CorePlotReleaseModule.xcconfig */, + C3B0E7B429CA7B6000FC94B5 /* CorePlotModule.xcconfig */, C31908A41998168C00B61898 /* CorePlot.xcconfig */, C34F570D19D8CE5500446248 /* CorePlotWarnings.xcconfig */, + C3AE08292A58CB0300C1022A /* CorePlotDocumentation.xcconfig */, ); name = "Other Sources"; sourceTree = ""; @@ -1727,6 +1560,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; @@ -1756,8 +1590,7 @@ C32EE1BF13EC4BE700038266 /* CPTMutableShadow.h */, C32EE1C013EC4BE700038266 /* CPTMutableShadow.m */, 0704A2100FB56B9400A09979 /* Fills */, - C32DDEE2191C672700E0FE84 /* Mac Specific */, - C38A0A581A4620A700D45436 /* iOS Specific */, + C38A0A581A4620A700D45436 /* Platform Specific */, C3D979A613D215AD00145DFF /* Tests */, ); name = Drawing; @@ -1805,14 +1638,6 @@ name = Layout; sourceTree = ""; }; - C32DDEE2191C672700E0FE84 /* Mac Specific */ = { - isa = PBXGroup; - children = ( - C3791D07191D4C4C001EC514 /* CPTImagePlatformSpecific.m */, - ); - name = "Mac Specific"; - sourceTree = ""; - }; C34AFE5711021CE20041675A /* Plot Symbols */ = { isa = PBXGroup; children = ( @@ -1822,24 +1647,32 @@ name = "Plot Symbols"; sourceTree = ""; }; - C38A0A521A461F5D00D45436 /* iOS Specific */ = { + C37A9AB729C698A7003B4338 /* Module */ = { + isa = PBXGroup; + children = ( + C37A9AB929C698A7003B4338 /* module.modulemap */, + ); + path = Module; + sourceTree = SOURCE_ROOT; + }; + 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 */, @@ -1851,7 +1684,7 @@ C38A0B271A46265300D45436 /* CPTGraphHostingView.h */, C38A0B281A46265300D45436 /* CPTGraphHostingView.m */, ); - name = "iOS Specific"; + name = "Platform Specific"; path = Source; sourceTree = ""; }; @@ -1869,7 +1702,6 @@ C39588531A6B2F6B009F9297 /* iOS */ = { isa = PBXGroup; children = ( - C3226A551A69F6F000F77249 /* Accelerate.framework */, C3226A571A69F6FA00F77249 /* CoreGraphics.framework */, C3226A511A69F6DA00F77249 /* QuartzCore.framework */, C3226A531A69F6DF00F77249 /* UIKit.framework */, @@ -1877,23 +1709,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 = ( - C3B25EDF1AC23A7D0063CCD8 /* CorePlot.h */, - ); - path = CocoaPods; - sourceTree = ""; - }; C3C032C510B8DE87003A11B6 /* Labels */ = { isa = PBXGroup; children = ( @@ -1901,8 +1716,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 = ""; @@ -1945,6 +1760,29 @@ name = Animation; sourceTree = ""; }; + C3C3B8882A58EB9700352BBE /* SPM Umbrella Header */ = { + isa = PBXGroup; + children = ( + C3C3B8892A58EB9700352BBE /* CorePlot.h */, + ); + path = "SPM Umbrella Header"; + sourceTree = ""; + }; + C3D0F67429C604EF00190D2C /* Scripts */ = { + isa = PBXGroup; + children = ( + C3D0F67729C6053E00190D2C /* createrelease.py */, + 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 */, + ); + name = Scripts; + path = ../scripts; + sourceTree = ""; + }; C3D979A513D2159400145DFF /* Tests */ = { isa = PBXGroup; children = ( @@ -1982,8 +1820,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 = ""; @@ -2014,33 +1852,31 @@ 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 */, 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 */, + C3BB93191B729BD200004527 /* _CPTDebugQuickLook.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 */, @@ -2049,17 +1885,18 @@ 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 */, 0772B43A10E24D5C009CD04C /* CPTTradingRangePlot.h in Headers */, 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 */, @@ -2069,11 +1906,12 @@ 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 */, 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 */, @@ -2104,13 +1942,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 */, @@ -2140,19 +1978,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 */, @@ -2161,7 +1999,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 */, @@ -2181,13 +2019,14 @@ 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 */, + C37EA6811BC83F2A0091C8F7 /* _NSDecimalNumberExtensions.h in Headers */, C37EA6821BC83F2A0091C8F7 /* CPTAxis.h in Headers */, 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 */, @@ -2207,13 +2046,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 */, @@ -2243,19 +2082,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 */, @@ -2264,7 +2103,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 */, @@ -2284,13 +2123,14 @@ 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 */, + C38A0A9E1A4621A500D45436 /* _NSDecimalNumberExtensions.h in Headers */, C38A0AF11A4625E800D45436 /* CPTAxis.h in Headers */, 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 */, @@ -2319,7 +2159,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 */ = { @@ -2334,6 +2174,7 @@ buildRules = ( ); dependencies = ( + C3F244C128DBCBA1008DB9A1 /* PBXTargetDependency */, ); name = "CorePlot Mac"; productInstallPath = "$(HOME)/Library/Frameworks"; @@ -2353,6 +2194,7 @@ buildRules = ( ); dependencies = ( + C3F244C528DBCBB4008DB9A1 /* PBXTargetDependency */, ); name = "CorePlot tvOS"; productName = "CorePlot-iOS"; @@ -2389,6 +2231,7 @@ buildRules = ( ); dependencies = ( + C3F244C328DBCBAE008DB9A1 /* PBXTargetDependency */, ); name = "CorePlot iOS"; productName = "CorePlot-iOS"; @@ -2413,41 +2256,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 */ @@ -2455,10 +2263,12 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = YES; - LastUpgradeCheck = 1100; + LastUpgradeCheck = 1500; TargetAttributes = { - 8DC2EF4F0486A6940098B216 = { + C36BE54226FF6857004287F2 = { + CreatedOnToolsVersion = 13.0; DevelopmentTeam = 28ZA45DE7D; + ProvisioningStyle = Automatic; }; C38A09771A46185200D45436 = { CreatedOnToolsVersion = 6.1.1; @@ -2466,12 +2276,6 @@ C38A09811A46185300D45436 = { CreatedOnToolsVersion = 6.1.1; }; - C38A09B91A4619A900D45436 = { - CreatedOnToolsVersion = 6.1.1; - }; - C38A09C31A4619A900D45436 = { - CreatedOnToolsVersion = 6.1.1; - }; }; }; buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "CorePlot" */; @@ -2494,15 +2298,12 @@ 0730F5FF109492D800E95162 /* UnitTests Mac */, C38A09771A46185200D45436 /* CorePlot iOS */, C38A09811A46185300D45436 /* UnitTests iOS */, - C38A09B91A4619A900D45436 /* CorePlot-CocoaTouch */, - C38A09C31A4619A900D45436 /* CorePlot-CocoaTouchTests */, C37EA5C91BC83F2A0091C8F7 /* CorePlot tvOS */, C37EA6941BC83F2D0091C8F7 /* UnitTests tvOS */, + C36BE54226FF6857004287F2 /* Update SPM Files */, 9021E49E0FC5C9DC00443472 /* Documentation-Mac */, C38A09911A4618B600D45436 /* Documentation-iOS */, - C38A09961A46193F00D45436 /* Universal Library */, - C3A5467F1BC1A817005C1BBC /* Universal iOS Framework */, - C37EA5C41BC83E900091C8F7 /* Universal tvOS Framework */, + C3AC175B244B594800E7380C /* Universal XCFramework */, ); }; /* End PBXProject section */ @@ -2552,18 +2353,12 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - C38A09C21A4619A900D45436 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ 9021E49D0FC5C9DC00443472 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -2573,36 +2368,29 @@ ); 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 = "# 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"; }; - C37EA5C51BC83E900091C8F7 /* ShellScript */ = { + C36BE54626FF6865004287F2 /* 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\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"; - }; - C38A09921A4618B600D45436 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( + inputFileListPaths = ( ); inputPaths = ( ); + outputFileListPaths = ( + ); 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\nexit 0"; + 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"; }; - C38A09971A46193F00D45436 /* ShellScript */ = { + C38A09921A4618B600D45436 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -2612,10 +2400,11 @@ ); 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 = "# 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"; }; - C3A546801BC1A817005C1BBC /* ShellScript */ = { + C3AC175C244B594800E7380C /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -2625,7 +2414,7 @@ ); 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 = "# 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 */ @@ -2643,7 +2432,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 */, @@ -2683,28 +2472,24 @@ 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 */, 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 */, @@ -2714,21 +2499,22 @@ 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 */, + 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 */, + C34AFE5311021C100041675A /* _CPTGridLines.m in Sources */, C34AFE5511021C470041675A /* CPTPlotArea.m in Sources */, C34AFE6C11021D010041675A /* CPTPlotSymbol.m in Sources */, - C34AFE7111021D880041675A /* CPTAxisLabelGroup.m in Sources */, - C38DD49411A04B7A002A68E7 /* CPTGridLineGroup.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 */, @@ -2737,9 +2523,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 */, + 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 */, @@ -2773,9 +2562,10 @@ 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 */, + C3C58E562A58FFB800E295B0 /* CPTDecimalNumberValueTransformer.m in Sources */, C37EA5D31BC83F2A0091C8F7 /* CPTTheme.m in Sources */, C37EA5D41BC83F2A0091C8F7 /* CPTDefinitions.m in Sources */, C37EA5D51BC83F2A0091C8F7 /* _CPTFillImage.m in Sources */, @@ -2793,7 +2583,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 */, @@ -2801,7 +2591,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 */, @@ -2832,23 +2622,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 */, @@ -2882,7 +2672,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 */, @@ -2906,9 +2696,10 @@ 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 */, + C3C58E552A58FFB700E295B0 /* CPTDecimalNumberValueTransformer.m in Sources */, C38A0B041A46261700D45436 /* CPTTheme.m in Sources */, C38A09F01A461CD900D45436 /* CPTDefinitions.m in Sources */, C38A0A811A4620F700D45436 /* _CPTFillImage.m in Sources */, @@ -2926,7 +2717,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 */, @@ -2934,7 +2725,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 */, @@ -2965,23 +2756,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 */, @@ -3015,7 +2806,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 */, @@ -3030,139 +2821,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 */ @@ -3176,16 +2834,26 @@ 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 */; 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 */ @@ -3206,22 +2874,13 @@ path = Info; sourceTree = ""; }; - C3490DF420E028D30089F309 /* CorePlot-CocoaTouch-Info.plist */ = { - isa = PBXVariantGroup; - children = ( - C3490DF320E028D30089F309 /* Base */, - ); - name = "CorePlot-CocoaTouch-Info.plist"; - path = Info/Base.lproj; - sourceTree = ""; - }; C3490DF620E028D80089F309 /* CorePlot-iOS-Info.plist */ = { isa = PBXVariantGroup; children = ( C3490DF520E028D80089F309 /* Base */, ); name = "CorePlot-iOS-Info.plist"; - path = Info/Base.lproj; + path = Info; sourceTree = ""; }; C3490DF820E028DC0089F309 /* CorePlot-tvOS-Info.plist */ = { @@ -3230,8 +2889,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; @@ -3278,9 +2937,11 @@ 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 $(SRCROOT)/MacOnly"; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/Source", + "$(SRCROOT)/PlatformSpecific", + ); }; name = Debug; }; @@ -3290,44 +2951,46 @@ 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 $(SRCROOT)/MacOnly"; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/Source", + "$(SRCROOT)/PlatformSpecific", + ); }; name = Release; }; 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; 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 = "$(SRCROOT)/Source $(SRCROOT)/MacOnly"; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/Source", + "$(SRCROOT)/PlatformSpecific", + ); WRAPPER_EXTENSION = framework; }; name = Debug; }; 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; 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 = "$(SRCROOT)/Source $(SRCROOT)/MacOnly"; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/Source", + "$(SRCROOT)/PlatformSpecific", + ); WRAPPER_EXTENSION = framework; }; name = Release; @@ -3336,11 +2999,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; 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; }; @@ -3348,105 +3006,80 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; buildSettings = { - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CURRENT_PROJECT_VERSION = 2.3; - GCC_NO_COMMON_BLOCKS = YES; }; name = Release; }; 9021E49F0FC5C9DD00443472 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = C3AE08292A58CB0300C1022A /* CorePlotDocumentation.xcconfig */; 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 = Documentation; }; name = Debug; }; 9021E4A00FC5C9DD00443472 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = C3AE08292A58CB0300C1022A /* CorePlotDocumentation.xcconfig */; 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 = Documentation; - ZERO_LINK = NO; }; name = Release; }; - C37EA5C71BC83E900091C8F7 /* Debug */ = { + C36BE54326FF6857004287F2 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = C34F570D19D8CE5500446248 /* CorePlotWarnings.xcconfig */; 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 = appletvos; - SUPPORTED_PLATFORMS = "appletvsimulator appletvos"; }; name = Debug; }; - C37EA5C81BC83E900091C8F7 /* Release */ = { + C36BE54426FF6857004287F2 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = C34F570D19D8CE5500446248 /* CorePlotWarnings.xcconfig */; 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 = appletvos; - SUPPORTED_PLATFORMS = "appletvsimulator appletvos"; - ZERO_LINK = NO; }; name = Release; }; C37EA6901BC83F2A0091C8F7 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; + baseConfigurationReference = C3B0E7B229CA7B3200FC94B5 /* CorePlotDebugModule.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; 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)/iPhoneOnly"; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/Source", + "$(SRCROOT)/PlatformSpecific", + ); }; name = Debug; }; C37EA6911BC83F2A0091C8F7 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; + baseConfigurationReference = C3B0E7B329CA7B3200FC94B5 /* CorePlotReleaseModule.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; 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)/iPhoneOnly"; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/Source", + "$(SRCROOT)/PlatformSpecific", + ); }; name = Release; }; @@ -3454,14 +3087,18 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; 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)/iPhoneOnly"; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/Source", + "$(SRCROOT)/PlatformSpecific", + ); }; name = Debug; }; @@ -3469,58 +3106,66 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; 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)/iPhoneOnly"; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/Source", + "$(SRCROOT)/PlatformSpecific", + ); }; name = Release; }; C38A098B1A46185300D45436 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; + baseConfigurationReference = C3B0E7B229CA7B3200FC94B5 /* CorePlotDebugModule.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; 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)/iPhoneOnly"; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/Source", + "$(SRCROOT)/PlatformSpecific", + ); }; name = Debug; }; C38A098C1A46185300D45436 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; + baseConfigurationReference = C3B0E7B329CA7B3200FC94B5 /* CorePlotReleaseModule.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; 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)/iPhoneOnly"; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/Source", + "$(SRCROOT)/PlatformSpecific", + ); }; name = Release; }; @@ -3528,15 +3173,19 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08C1BB5A44800931F32 /* CorePlotDebug.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; 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)/iPhoneOnly"; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/Source", + "$(SRCROOT)/PlatformSpecific", + ); }; name = Debug; }; @@ -3544,160 +3193,47 @@ isa = XCBuildConfiguration; baseConfigurationReference = C3C9D08D1BB5A45B00931F32 /* CorePlotRelease.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; 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)/iPhoneOnly"; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/Source", + "$(SRCROOT)/PlatformSpecific", + ); }; name = Release; }; C38A09941A4618B600D45436 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = C3AE08292A58CB0300C1022A /* CorePlotDocumentation.xcconfig */; 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 = "Documentation-Mac copy"; }; name = Debug; }; C38A09951A4618B600D45436 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = C3AE08292A58CB0300C1022A /* CorePlotDocumentation.xcconfig */; 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 = "Documentation-Mac copy"; - ZERO_LINK = NO; }; name = Release; }; - C38A09991A46193F00D45436 /* Debug */ = { + C3AC175E244B594800E7380C /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = C34F570D19D8CE5500446248 /* CorePlotWarnings.xcconfig */; 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 = "Documentation-iOS copy"; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; }; name = Debug; }; - C38A099A1A46193F00D45436 /* Release */ = { + C3AC175F244B594800E7380C /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = C34F570D19D8CE5500446248 /* CorePlotWarnings.xcconfig */; 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 = "Documentation-iOS copy"; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - ZERO_LINK = NO; - }; - 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)/iPhoneOnly"; - }; - 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)/iPhoneOnly"; - }; - 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)/iPhoneOnly"; - }; - 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)/iPhoneOnly"; - }; - name = Release; - }; - C3A546821BC1A817005C1BBC /* 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; - }; - C3A546831BC1A817005C1BBC /* 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; }; @@ -3740,11 +3276,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C37EA5C61BC83E900091C8F7 /* Build configuration list for PBXAggregateTarget "Universal tvOS Framework" */ = { + C36BE54526FF6857004287F2 /* Build configuration list for PBXAggregateTarget "Update SPM Files" */ = { isa = XCConfigurationList; buildConfigurations = ( - C37EA5C71BC83E900091C8F7 /* Debug */, - C37EA5C81BC83E900091C8F7 /* Release */, + C36BE54326FF6857004287F2 /* Debug */, + C36BE54426FF6857004287F2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -3794,38 +3330,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C38A09981A46193F00D45436 /* Build configuration list for PBXAggregateTarget "Universal Library" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C38A09991A46193F00D45436 /* Debug */, - C38A099A1A46193F00D45436 /* Release */, - ); - 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" */ = { + C3AC175D244B594800E7380C /* Build configuration list for PBXAggregateTarget "Universal XCFramework" */ = { isa = XCConfigurationList; buildConfigurations = ( - C3A546821BC1A817005C1BBC /* Debug */, - C3A546831BC1A817005C1BBC /* Release */, + C3AC175E244B594800E7380C /* Debug */, + C3AC175F244B594800E7380C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/CorePlot Mac.xcscheme b/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/CorePlot Mac.xcscheme index 6567660c2..443165c6e 100644 --- a/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/CorePlot Mac.xcscheme +++ b/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/CorePlot Mac.xcscheme @@ -1,6 +1,6 @@ diff --git a/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/CorePlot iOS.xcscheme b/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/CorePlot iOS.xcscheme index c76f66453..42a71d5be 100644 --- a/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/CorePlot iOS.xcscheme +++ b/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/CorePlot iOS.xcscheme @@ -1,6 +1,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Documentation-Mac.xcscheme b/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Documentation-Mac.xcscheme index 659889d19..7f68a5a19 100644 --- a/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Documentation-Mac.xcscheme +++ b/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Documentation-Mac.xcscheme @@ -1,6 +1,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/QCPlugin/CorePlotQCPlugin.xcodeproj/xcshareddata/xcschemes/CorePlotQCPlugin.xcscheme b/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Universal XCFramework.xcscheme similarity index 78% rename from QCPlugin/CorePlotQCPlugin.xcodeproj/xcshareddata/xcschemes/CorePlotQCPlugin.xcscheme rename to framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Universal XCFramework.xcscheme index d1baaa5f3..684b81939 100644 --- a/QCPlugin/CorePlotQCPlugin.xcodeproj/xcshareddata/xcschemes/CorePlotQCPlugin.xcscheme +++ b/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Universal XCFramework.xcscheme @@ -1,6 +1,6 @@ + BlueprintIdentifier = "C3AC175B244B594800E7380C" + BuildableName = "Universal XCFramework" + BlueprintName = "Universal XCFramework" + ReferencedContainer = "container:CorePlot.xcodeproj"> @@ -40,15 +40,6 @@ debugDocumentVersioning = "YES" debugServiceExtension = "internal" allowLocationSimulation = "YES"> - - - - + + + + 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 12a6c18d2..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 c45a23509..000000000 --- a/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Universal tvOS Framework.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/QCPlugin/CorePlotQCPlugin.xcodeproj/xcshareddata/xcschemes/Build & Copy.xcscheme b/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Update SPM Files.xcscheme similarity index 79% rename from QCPlugin/CorePlotQCPlugin.xcodeproj/xcshareddata/xcschemes/Build & Copy.xcscheme rename to framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Update SPM Files.xcscheme index 7afa5ea4a..cd2c3e4f2 100644 --- a/QCPlugin/CorePlotQCPlugin.xcodeproj/xcshareddata/xcschemes/Build & Copy.xcscheme +++ b/framework/CorePlot.xcodeproj/xcshareddata/xcschemes/Update SPM Files.xcscheme @@ -1,6 +1,6 @@ + BlueprintIdentifier = "C36BE54226FF6857004287F2" + BuildableName = "Update SPM Files" + BlueprintName = "Update SPM Files" + ReferencedContainer = "container:CorePlot.xcodeproj"> @@ -40,15 +40,6 @@ debugDocumentVersioning = "YES" debugServiceExtension = "internal" allowLocationSimulation = "YES"> - - - - + + + + diff --git a/framework/CorePlot_Prefix.pch b/framework/CorePlot_Prefix.pch index 650702d34..281ef4a68 100644 --- a/framework/CorePlot_Prefix.pch +++ b/framework/CorePlot_Prefix.pch @@ -5,14 +5,44 @@ #ifdef __OBJC__ #import - #import - - #if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_TV + #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 @@ -24,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/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 - - diff --git a/framework/MacOnly/CPTDecimalNumberValueTransformer.h b/framework/MacOnly/CPTDecimalNumberValueTransformer.h deleted file mode 100644 index bcc2db032..000000000 --- a/framework/MacOnly/CPTDecimalNumberValueTransformer.h +++ /dev/null @@ -1,3 +0,0 @@ -@interface CPTDecimalNumberValueTransformer : NSValueTransformer - -@end 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/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 8b6229cc5..000000000 --- a/framework/MacOnly/CPTPlatformSpecificCategories.m +++ /dev/null @@ -1,116 +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/CPTTextStylePlatformSpecific.m b/framework/MacOnly/CPTTextStylePlatformSpecific.m deleted file mode 100644 index 21af2ac93..000000000 --- a/framework/MacOnly/CPTTextStylePlatformSpecific.m +++ /dev/null @@ -1,271 +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/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/PlatformSpecific/CPTGraphHostingView.h b/framework/PlatformSpecific/CPTGraphHostingView.h new file mode 100644 index 000000000..9d8695e28 --- /dev/null +++ b/framework/PlatformSpecific/CPTGraphHostingView.h @@ -0,0 +1,65 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#else +#import "CPTDefinitions.h" +#endif + +@class CPTGraph; + +#if TARGET_OS_OSX + +#pragma mark macOS +#pragma mark - + +@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 + +#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 + +#endif diff --git a/framework/MacOnly/CPTGraphHostingView.m b/framework/PlatformSpecific/CPTGraphHostingView.m similarity index 60% rename from framework/MacOnly/CPTGraphHostingView.m rename to framework/PlatformSpecific/CPTGraphHostingView.m index 531d6b06b..404e07aa1 100644 --- a/framework/MacOnly/CPTGraphHostingView.m +++ b/framework/PlatformSpecific/CPTGraphHostingView.m @@ -5,6 +5,11 @@ #import "CPTPlotAreaFrame.h" #import "CPTPlotSpace.h" +#if TARGET_OS_OSX + +#pragma mark macOS +#pragma mark - + /// @cond static void *CPTGraphHostingViewKVOContext = (void *)&CPTGraphHostingViewKVOContext; @@ -73,10 +78,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 +117,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]; } @@ -205,8 +220,8 @@ -(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 ) - CGContextRef context = graphicsContext.graphicsPort; + // (thanks to Brad for the tip: https://stackoverflow.com/a/2791305/132867 ) + CGContextRef context = graphicsContext.CGContext; [self.hostedGraph recursivelyRenderInContext:context]; [graphicsContext restoreGraphicsState]; @@ -334,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. { @@ -360,8 +377,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: { @@ -374,8 +391,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 ) { @@ -403,6 +420,7 @@ -(void)scrollWheel:(nonnull NSEvent *)theEvent default: break; } +#pragma clang diagnostic pop } if ( !handled ) { @@ -597,7 +615,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; @@ -673,3 +691,502 @@ -(void)setOpenHandCursor:(nullable NSCursor *)newCursor /// @endcond @end + +#else + +#pragma mark - iOS, tvOS, Mac Catalyst +#pragma mark - + +#import "_NSNumberExtensions.h" + +/// @cond +@interface CPTGraphHostingView() + +#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; +#endif + +-(void)graphNeedsRedraw:(nonnull NSNotification *)notification; + +@end + +/// @endcond + +#pragma mark - + +/** + * @brief A container view for displaying a CPTGraph. + **/ +@implementation CPTGraphHostingView + +/** @property nullable CPTGraph *hostedGraph + * @brief The CPTLayer hosted inside this view. + **/ +@synthesize hostedGraph; + +/** @property BOOL collapsesLayers + * @brief Whether view draws all graph layers into a single layer. + * Collapsing layers may improve performance in some cases. + **/ +@synthesize collapsesLayers; + +/** @property BOOL allowPinchScaling + * @brief Whether a pinch will trigger plot space scaling. + * Default is @YES. This causes gesture recognizers to be added to identify pinches. + **/ +@synthesize allowPinchScaling; + +/// @cond + +#if (TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST) && !TARGET_OS_TV + +/** @internal + * @property nullable UIPinchGestureRecognizer *pinchGestureRecognizer + * @brief The pinch gesture recognizer for this view. + * @since Not available on tvOS. + **/ +@synthesize pinchGestureRecognizer; +#endif + +/// @endcond + +#pragma mark - +#pragma mark init/dealloc + +/// @cond + ++(nonnull Class)layerClass +{ + return [CALayer class]; +} + +-(void)commonInit +{ + self.hostedGraph = nil; + self.collapsesLayers = NO; + + self.backgroundColor = [UIColor clearColor]; + + self.allowPinchScaling = YES; + + // 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, *)) { + __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]; + }]; + } +#endif +} + +-(nonnull instancetype)initWithFrame:(CGRect)frame +{ + if ((self = [super initWithFrame:frame])) { + [self commonInit]; + } + return self; +} + +-(void)awakeFromNib +{ + [super awakeFromNib]; + + [self commonInit]; +} + +-(void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +/// @endcond + +#pragma mark - +#pragma mark NSCoding methods + +/// @cond + +-(void)encodeWithCoder:(nonnull NSCoder *)coder +{ + [super encodeWithCoder:coder]; + + [coder encodeBool:self.collapsesLayers forKey:@"CPTGraphHostingView.collapsesLayers"]; + [coder encodeObject:self.hostedGraph forKey:@"CPTGraphHostingView.hostedGraph"]; + [coder encodeBool:self.allowPinchScaling forKey:@"CPTGraphHostingView.allowPinchScaling"]; + + // No need to archive these properties: + // pinchGestureRecognizer +} + +-(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder +{ + if ((self = [super initWithCoder:coder])) { + [self commonInit]; + + collapsesLayers = [coder decodeBoolForKey:@"CPTGraphHostingView.collapsesLayers"]; + self.hostedGraph = [coder decodeObjectOfClass:[CPTGraph class] + forKey:@"CPTGraphHostingView.hostedGraph"]; // setup layers + + if ( [coder containsValueForKey:@"CPTGraphHostingView.allowPinchScaling"] ) { + self.allowPinchScaling = [coder decodeBoolForKey:@"CPTGraphHostingView.allowPinchScaling"]; // set gesture recognizer if needed + } + } + return self; +} + +/// @endcond + +#pragma mark - +#pragma mark NSSecureCoding Methods + +/// @cond + ++(BOOL)supportsSecureCoding +{ + return YES; +} + +/// @endcond + +#pragma mark - +#pragma mark Touch handling + +/// @cond + +-(void)touchesBegan:(nonnull NSSet *)touches withEvent:(nullable UIEvent *)event +{ + BOOL handled = NO; + + // Ignore pinch or other multitouch gestures + if ( [event allTouches].count == 1 ) { + CPTGraph *theHostedGraph = self.hostedGraph; + UIEvent *theEvent = event; + + theHostedGraph.frame = self.bounds; + [theHostedGraph layoutIfNeeded]; + + CGPoint pointOfTouch = [[[theEvent touchesForView:self] anyObject] locationInView:self]; + + if ( self.collapsesLayers ) { + pointOfTouch.y = self.frame.size.height - pointOfTouch.y; + } + else { + pointOfTouch = [self.layer convertPoint:pointOfTouch toLayer:theHostedGraph]; + } + handled = [theHostedGraph pointingDeviceDownEvent:theEvent atPoint:pointOfTouch]; + } + + if ( !handled ) { + [super touchesBegan:touches withEvent:event]; + } +} + +-(void)touchesMoved:(nonnull NSSet *)touches withEvent:(nullable UIEvent *)event +{ + BOOL handled = NO; + + if ( event ) { + CPTGraph *theHostedGraph = self.hostedGraph; + UIEvent *theEvent = event; + + theHostedGraph.frame = self.bounds; + [theHostedGraph layoutIfNeeded]; + + CGPoint pointOfTouch = [[[theEvent touchesForView:self] anyObject] locationInView:self]; + + if ( self.collapsesLayers ) { + pointOfTouch.y = self.frame.size.height - pointOfTouch.y; + } + else { + pointOfTouch = [self.layer convertPoint:pointOfTouch toLayer:theHostedGraph]; + } + handled = [theHostedGraph pointingDeviceDraggedEvent:theEvent atPoint:pointOfTouch]; + } + if ( !handled ) { + [super touchesMoved:touches withEvent:event]; + } +} + +-(void)touchesEnded:(nonnull NSSet *)touches withEvent:(nullable UIEvent *)event +{ + BOOL handled = NO; + + if ( event ) { + CPTGraph *theHostedGraph = self.hostedGraph; + UIEvent *theEvent = event; + + theHostedGraph.frame = self.bounds; + [theHostedGraph layoutIfNeeded]; + + CGPoint pointOfTouch = [[[theEvent touchesForView:self] anyObject] locationInView:self]; + + if ( self.collapsesLayers ) { + pointOfTouch.y = self.frame.size.height - pointOfTouch.y; + } + else { + pointOfTouch = [self.layer convertPoint:pointOfTouch toLayer:theHostedGraph]; + } + handled = [theHostedGraph pointingDeviceUpEvent:theEvent atPoint:pointOfTouch]; + } + + if ( !handled ) { + [super touchesEnded:touches withEvent:event]; + } +} + +-(void)touchesCancelled:(nonnull NSSet *)touches withEvent:(nullable UIEvent *)event +{ + BOOL handled = NO; + + if ( event ) { + UIEvent *theEvent = event; + handled = [self.hostedGraph pointingDeviceCancelledEvent:theEvent]; + } + + if ( !handled ) { + [super touchesCancelled:touches withEvent:event]; + } +} + +/// @endcond + +#pragma mark - +#pragma mark Gestures + +/// @cond + +#if (TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST) && !TARGET_OS_TV +-(void)setAllowPinchScaling:(BOOL)allowScaling +{ + if ( allowPinchScaling != allowScaling ) { + allowPinchScaling = allowScaling; + if ( allowPinchScaling ) { + // Register for pinches + UIPinchGestureRecognizer *gestureRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinchGesture:)]; + [self addGestureRecognizer:gestureRecognizer]; + self.pinchGestureRecognizer = gestureRecognizer; + } + else { + UIPinchGestureRecognizer *pinchRecognizer = self.pinchGestureRecognizer; + if ( pinchRecognizer ) { + [self removeGestureRecognizer:pinchRecognizer]; + self.pinchGestureRecognizer = nil; + } + } + } +} + +-(void)handlePinchGesture:(nonnull UIPinchGestureRecognizer *)aPinchGestureRecognizer +{ + CGPoint interactionPoint = [aPinchGestureRecognizer locationInView:self]; + CPTGraph *theHostedGraph = self.hostedGraph; + + theHostedGraph.frame = self.bounds; + [theHostedGraph layoutIfNeeded]; + + if ( self.collapsesLayers ) { + interactionPoint.y = self.frame.size.height - interactionPoint.y; + } + else { + interactionPoint = [self.layer convertPoint:interactionPoint toLayer:theHostedGraph]; + } + + CGPoint pointInPlotArea = [theHostedGraph convertPoint:interactionPoint toLayer:theHostedGraph.plotAreaFrame.plotArea]; + + UIPinchGestureRecognizer *pinchRecognizer = self.pinchGestureRecognizer; + + CGFloat scale = pinchRecognizer.scale; + + for ( CPTPlotSpace *space in theHostedGraph.allPlotSpaces ) { + if ( space.allowsUserInteraction ) { + [space scaleBy:scale aboutPoint:pointInPlotArea]; + } + } + + pinchRecognizer.scale = 1.0; +} + +#endif + +/// @endcond + +#pragma mark - +#pragma mark TV Focus + +/// @cond + +#if TARGET_OS_TV + +-(BOOL)canBecomeFocused +{ + return YES; +} + +#endif + +/// @endcond + +#pragma mark - +#pragma mark Drawing + +/// @cond + +-(void)drawRect:(CGRect __unused)rect +{ + if ( self.collapsesLayers ) { + CGContextRef context = UIGraphicsGetCurrentContext(); + CGContextTranslateCTM(context, 0, self.bounds.size.height); + CGContextScaleCTM(context, 1, -1); + + CPTGraph *theHostedGraph = self.hostedGraph; + theHostedGraph.frame = self.bounds; + [theHostedGraph layoutAndRenderInContext:context]; + } +} + +-(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]; + + [self.hostedGraph setNeedsDisplayAllLayers]; +} + +#endif + +/// @endcond + +#pragma mark - +#pragma mark Accessors + +/// @cond + +-(void)setHostedGraph:(nullable CPTGraph *)newLayer +{ + NSParameterAssert(!newLayer || [newLayer isKindOfClass:[CPTGraph class]]); + + if ( newLayer == hostedGraph ) { + return; + } + + if ( hostedGraph ) { + [hostedGraph removeFromSuperlayer]; + hostedGraph.hostingView = nil; + [[NSNotificationCenter defaultCenter] removeObserver:self + name:CPTGraphNeedsRedrawNotification + object:hostedGraph]; + } + hostedGraph = newLayer; + + // Screen scaling + UIScreen *screen = self.window.screen; + + if ( !screen ) { + screen = [UIScreen mainScreen]; + } + + hostedGraph.contentsScale = screen.scale; + hostedGraph.hostingView = self; + + if ( self.collapsesLayers ) { + [self setNeedsDisplay]; + if ( hostedGraph ) { + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(graphNeedsRedraw:) + name:CPTGraphNeedsRedrawNotification + object:hostedGraph]; + } + } + else { + if ( newLayer ) { + CPTGraph *newGraph = newLayer; + + newGraph.frame = self.layer.bounds; + [self.layer addSublayer:newGraph]; + } + } +} + +-(void)setCollapsesLayers:(BOOL)collapse +{ + if ( collapse != collapsesLayers ) { + collapsesLayers = collapse; + + CPTGraph *theHostedGraph = self.hostedGraph; + + [self setNeedsDisplay]; + + if ( collapsesLayers ) { + [theHostedGraph removeFromSuperlayer]; + + if ( theHostedGraph ) { + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(graphNeedsRedraw:) + name:CPTGraphNeedsRedrawNotification + object:theHostedGraph]; + } + } + else { + if ( theHostedGraph ) { + [self.layer addSublayer:theHostedGraph]; + + [[NSNotificationCenter defaultCenter] removeObserver:self + name:CPTGraphNeedsRedrawNotification + object:theHostedGraph]; + } + } + } +} + +-(void)setFrame:(CGRect)newFrame +{ + super.frame = newFrame; + + CPTGraph *theHostedGraph = self.hostedGraph; + + [theHostedGraph setNeedsLayout]; + + if ( self.collapsesLayers ) { + [self setNeedsDisplay]; + } + else { + theHostedGraph.frame = self.bounds; + } +} + +-(void)setBounds:(CGRect)newBounds +{ + super.bounds = newBounds; + + CPTGraph *theHostedGraph = self.hostedGraph; + + [theHostedGraph setNeedsLayout]; + + if ( self.collapsesLayers ) { + [self setNeedsDisplay]; + } + else { + theHostedGraph.frame = newBounds; + } +} + +/// @endcond + +@end + +#endif diff --git a/framework/PlatformSpecific/CPTImagePlatformSpecific.m b/framework/PlatformSpecific/CPTImagePlatformSpecific.m new file mode 100644 index 000000000..028b2a1bf --- /dev/null +++ b/framework/PlatformSpecific/CPTImagePlatformSpecific.m @@ -0,0 +1,191 @@ +#import "CPTImage.h" +#import + +#if TARGET_OS_OSX + +#pragma mark macOS +#pragma mark - + +/** + * @brief Platform-specific extensions to CPTImage. + * + * @see CPTImage + **/ +@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 + +#pragma mark - iOS, tvOS, Mac Catalyst +#pragma mark - + +#import "CPTUtilities.h" + +/** + * @brief Platform-specific extensions to CPTImage. + * + * @see CPTImage + **/ +@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 initWithCGImage:NULL scale:anImage.scale])) { + self.nativeImage = anImage; + + UIEdgeInsets insets = anImage.capInsets; + self.edgeInsets = CPTEdgeInsetsMake(insets.top, insets.left, insets.bottom, insets.right); + } + + 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 + 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]; + 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 ) { + dataProvider = CGDataProviderCreateWithFilename([hiDpiPath cStringUsingEncoding:NSUTF8StringEncoding]); + } + if ( !dataProvider ) { + imageScale = CPTFloat(1.0); + } + } + + // if hi-dpi display or @2x image not available, load the 1x image at the original path + if ( !dataProvider ) { + dataProvider = CGDataProviderCreateWithFilename([path cStringUsingEncoding:NSUTF8StringEncoding]); + } + if ( dataProvider ) { + cgImage = CGImageCreateWithPNGDataProvider(dataProvider, NULL, YES, kCGRenderingIntentDefault); + } + + if ( cgImage ) { + self = [self initWithCGImage:cgImage scale:imageScale]; + } + else { + self = nil; + } + CGImageRelease(cgImage); + CGDataProviderRelease(dataProvider); + return self; +} + +@end + +#endif diff --git a/framework/iPhoneOnly/CPTPlatformSpecificCategories.h b/framework/PlatformSpecific/CPTPlatformSpecificCategories.h similarity index 52% rename from framework/iPhoneOnly/CPTPlatformSpecificCategories.h rename to framework/PlatformSpecific/CPTPlatformSpecificCategories.h index efa9ffffc..13bfbfc42 100644 --- a/framework/iPhoneOnly/CPTPlatformSpecificCategories.h +++ b/framework/PlatformSpecific/CPTPlatformSpecificCategories.h @@ -1,12 +1,55 @@ +/// @file + +#import + +#ifdef CPT_IS_FRAMEWORK +#import +#import +#import +#else #import "CPTColor.h" #import "CPTLayer.h" #import "CPTPlatformSpecificDefines.h" +#endif + +#if TARGET_OS_OSX + +#pragma mark macOS +#pragma mark - + +#pragma mark CPTLayer + +@interface CPTLayer(CPTPlatformSpecificLayerExtensions) + +/// @name Images +/// @{ +-(nonnull CPTNativeImage *)imageOfLayer; +/// @} + +@end + +#pragma mark - NSAttributedString + +@interface NSAttributedString(CPTPlatformSpecificAttributedStringExtensions) + +/// @name Drawing +/// @{ +-(void)drawInRect:(CGRect)rect inContext:(nonnull CGContextRef)context; +/// @} + +/// @name Measurement +/// @{ +-(CGSize)sizeAsDrawn; +/// @} + +@end + +#else + +#pragma mark - iOS, tvOS, Mac Catalyst #pragma mark - CPTLayer -/** @category CPTLayer(CPTPlatformSpecificLayerExtensions) - * @brief Platform-specific extensions to CPTLayer. - **/ @interface CPTLayer(CPTPlatformSpecificLayerExtensions) /// @name Images @@ -18,9 +61,6 @@ #pragma mark - NSNumber -/** @category NSNumber(CPTPlatformSpecificNumberExtensions) - * @brief Platform-specific extensions to NSNumber. - **/ @interface NSNumber(CPTPlatformSpecificNumberExtensions) -(BOOL)isLessThan:(nonnull NSNumber *)other; @@ -32,9 +72,6 @@ #pragma mark - NSAttributedString -/** @category NSAttributedString(CPTPlatformSpecificAttributedStringExtensions) - * @brief NSAttributedString extensions for drawing styled text. - **/ @interface NSAttributedString(CPTPlatformSpecificAttributedStringExtensions) /// @name Drawing @@ -48,3 +85,5 @@ /// @} @end + +#endif diff --git a/framework/PlatformSpecific/CPTPlatformSpecificCategories.m b/framework/PlatformSpecific/CPTPlatformSpecificCategories.m new file mode 100644 index 000000000..fff9c6b8e --- /dev/null +++ b/framework/PlatformSpecific/CPTPlatformSpecificCategories.m @@ -0,0 +1,272 @@ +#import "CPTPlatformSpecificCategories.h" +#import "CPTPlatformSpecificFunctions.h" + +#if TARGET_OS_OSX + +#pragma mark macOS +#pragma mark - + +#import "CPTGraph.h" +#import "CPTGraphHostingView.h" + +#pragma mark CPTLayer + +/** + * @brief Platform-specific extensions to CPTLayer. + * + * @see CPTLayer + **/ +@implementation CPTLayer(CPTPlatformSpecificLayerExtensions) + +/** @brief Gets an image of the layer contents. + * @return A platform-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:NSBitmapFormatAlphaFirst + 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 = bitmapContext.CGContext; + + 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 + +/** + * @brief NSAttributedString extensions for drawing styled text. + * + * @see 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 + +#pragma mark - iOS, tvOS, Mac Catalyst + +#import + +#pragma mark - CPTLayer + +/** + * @brief Platform-specific extensions to CPTLayer. + * + * @see CPTLayer + **/ +@implementation CPTLayer(CPTPlatformSpecificLayerExtensions) + +/** @brief Gets an image of the layer contents. + * @return A platform-native image representation of the layer content. + **/ +-(nullable CPTNativeImage *)imageOfLayer +{ + CGSize boundsSize = self.bounds.size; + + UIGraphicsBeginImageContextWithOptions(boundsSize, self.opaque, CPTFloat(0.0)); + + CGContextRef context = UIGraphicsGetCurrentContext(); + + CGContextSaveGState(context); + CGContextSetAllowsAntialiasing(context, true); + + CGContextTranslateCTM(context, CPTFloat(0.0), boundsSize.height); + CGContextScaleCTM(context, CPTFloat(1.0), CPTFloat(-1.0)); + + [self layoutAndRenderInContext:context]; + CPTNativeImage *layerImage = UIGraphicsGetImageFromCurrentImageContext(); + + CGContextSetAllowsAntialiasing(context, false); + + CGContextRestoreGState(context); + UIGraphicsEndImageContext(); + + return layerImage; +} + +@end + +#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. + * @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 +{ + return [self compare:other] == NSOrderedAscending; +} + +/** @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. + **/ +-(BOOL)isLessThanOrEqualTo:(nonnull NSNumber *)other +{ + return [self compare:other] == NSOrderedSame || [self compare:other] == NSOrderedAscending; +} + +/** @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. + **/ +-(BOOL)isGreaterThan:(nonnull NSNumber *)other +{ + return [self compare:other] == NSOrderedDescending; +} + +/** @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. + **/ +-(BOOL)isGreaterThanOrEqualTo:(nonnull NSNumber *)other +{ + return [self compare:other] == NSOrderedSame || [self compare:other] == NSOrderedDescending; +} + +@end + +#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. + * @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. + **/ +-(void)drawInRect:(CGRect)rect inContext:(nonnull CGContextRef)context +{ + if ( [self respondsToSelector:@selector(drawInRect:)] ) { + CPTPushCGContext(context); + + [self drawWithRect:rect + options:CPTStringDrawingOptions + context:nil]; + + 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 = [self boundingRectWithSize:CPTSizeMake(10000.0, 10000.0) + options:CPTStringDrawingOptions + context:nil]; + + CGSize textSize = rect.size; + + textSize.width = ceil(textSize.width); + textSize.height = ceil(textSize.height); + + return textSize; +} + +@end + +#endif diff --git a/framework/PlatformSpecific/CPTPlatformSpecificDefines.h b/framework/PlatformSpecific/CPTPlatformSpecificDefines.h new file mode 100644 index 000000000..bbe4e633c --- /dev/null +++ b/framework/PlatformSpecific/CPTPlatformSpecificDefines.h @@ -0,0 +1,29 @@ +/// @file + +#import + +#if TARGET_OS_OSX + +#pragma mark macOS +#pragma mark - + +#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 + +#pragma mark - iOS, tvOS, Mac Catalyst +#pragma mark - + +#import + +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/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/PlatformSpecific/CPTPlatformSpecificFunctions.h b/framework/PlatformSpecific/CPTPlatformSpecificFunctions.h new file mode 100644 index 000000000..f0b002cc3 --- /dev/null +++ b/framework/PlatformSpecific/CPTPlatformSpecificFunctions.h @@ -0,0 +1,80 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else +#import "CPTDefinitions.h" +#import "CPTPlatformSpecificDefines.h" +#endif + +#import + +#if TARGET_OS_OSX + +#pragma mark macOS +#pragma mark - + +#ifdef __cplusplus +#if __cplusplus +extern "C" { +#endif +#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); + +/// @} + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif + +#else + +#pragma mark - iOS, tvOS, Mac Catalyst +#pragma mark - + +#ifdef __cplusplus +#if __cplusplus +extern "C" { +#endif +#endif + +/// @name Graphics Context Save Stack +/// @{ +void CPTPushCGContext(__nonnull CGContextRef context); +void CPTPopCGContext(void); + +/// @} + +/// @name Debugging +/// @{ +CPTNativeImage *__nonnull CPTQuickLookImage(CGRect rect, __nonnull CPTQuickLookImageBlock renderBlock); + +/// @} + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif + +#endif diff --git a/framework/MacOnly/CPTPlatformSpecificFunctions.m b/framework/PlatformSpecific/CPTPlatformSpecificFunctions.m similarity index 74% rename from framework/MacOnly/CPTPlatformSpecificFunctions.m rename to framework/PlatformSpecific/CPTPlatformSpecificFunctions.m index 4e5668a58..d31ac4a8b 100644 --- a/framework/MacOnly/CPTPlatformSpecificFunctions.m +++ b/framework/PlatformSpecific/CPTPlatformSpecificFunctions.m @@ -1,5 +1,10 @@ #import "CPTPlatformSpecificFunctions.h" +#if TARGET_OS_OSX + +#pragma mark macOS +#pragma mark - + #pragma mark Graphics Context // linked list to store saved contexts @@ -32,7 +37,7 @@ void CPTPushCGContext(__nonnull CGContextRef newContext) } if ( newContext ) { - [NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithGraphicsPort:newContext flipped:NO]]; + [NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithCGContext:newContext flipped:NO]]; } }); } @@ -72,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) { @@ -88,16 +93,19 @@ __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) { 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; + rgbColor.red = red; rgbColor.green = green; rgbColor.blue = blue; @@ -125,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); @@ -134,7 +142,52 @@ CPTRGBAColor CPTRGBAColorFromNSColor(NSColor *__nonnull nsColor) CGContextFlush(context); NSImage *image = [[NSImage alloc] initWithSize:NSSizeFromCGSize(rect.size)]; + [image addRepresentation:layerImage]; return image; } + +#else + +#pragma mark - iOS, tvOS, Mac Catalyst + +#import "CPTExceptions.h" + +#pragma mark - +#pragma mark Context management + +void CPTPushCGContext(__nonnull CGContextRef newContext) +{ + UIGraphicsPushContext(newContext); +} + +void CPTPopCGContext(void) +{ + UIGraphicsPopContext(); +} + +#pragma mark - +#pragma mark Debugging + +CPTNativeImage *__nonnull CPTQuickLookImage(CGRect rect, __nonnull CPTQuickLookImageBlock renderBlock) +{ + UIGraphicsBeginImageContextWithOptions(rect.size, YES, 1.0); + CGContextRef context = UIGraphicsGetCurrentContext(); + + CGContextTranslateCTM(context, 0, rect.size.height); + CGContextScaleCTM(context, 1.0, -1.0); + + CGContextSetRGBFillColor(context, CPTFloat(0xf6 / 255.0), CPTFloat(0xf5 / 255.0), CPTFloat(0xf6 / 255.0), 1.0); + CGContextFillRect(context, rect); + + renderBlock(context, 1.0, rect); + + UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); + + UIGraphicsEndImageContext(); + + return image; +} + +#endif diff --git a/framework/MacOnly/CPTTextStylePlatformSpecific.h b/framework/PlatformSpecific/CPTTextStylePlatformSpecific.h similarity index 56% rename from framework/MacOnly/CPTTextStylePlatformSpecific.h rename to framework/PlatformSpecific/CPTTextStylePlatformSpecific.h index 3dbcb7fc9..4268f3f20 100644 --- a/framework/MacOnly/CPTTextStylePlatformSpecific.h +++ b/framework/PlatformSpecific/CPTTextStylePlatformSpecific.h @@ -1,9 +1,18 @@ /// @file +#import + +#if TARGET_OS_OSX + +#pragma mark macOS +#pragma mark - + +#import + /** * @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. @@ -20,3 +29,23 @@ typedef NS_ENUM (NSInteger, CPTTextAlignment) { CPTTextAlignmentNatural = NSNaturalTextAlignment ///< Natural alignment of the text's script. }; #endif + +#else + +#pragma mark - iOS, tvOS, Mac Catalyst +#pragma mark - + +#import + +/** + * @brief Enumeration of paragraph alignments. + **/ +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. +}; + +#endif diff --git a/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m b/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m new file mode 100644 index 000000000..cbee9fcc9 --- /dev/null +++ b/framework/PlatformSpecific/CPTTextStylePlatformSpecific.m @@ -0,0 +1,581 @@ +#import "CPTTextStylePlatformSpecific.h" + +#import "CPTMutableTextStyle.h" +#import "CPTPlatformSpecificCategories.h" +#import "CPTPlatformSpecificFunctions.h" + +#if TARGET_OS_OSX + +#pragma mark macOS +#pragma mark - + +/** + * @brief Platform-specific extensions to CPTTextStyle. + * + * @see CPTTextStyle + **/ +@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 initialized 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 && 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 - + +/** + * @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. + * + * 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 initialized 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 - + +/** + * @brief NSString extensions for drawing styled text. + * + * @see NSString + **/ +@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 ) { + return; + } + + CGColorRef textColor = style.color.cgColor; + + CGContextSetStrokeColorWithColor(context, textColor); + CGContextSetFillColorWithColor(context, textColor); + + CPTPushCGContext(context); + + NSFont *theFont = style.font; + NSString *fontName = style.fontName; + + if ( !theFont && 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 + +#pragma mark - iOS, tvOS, Mac Catalyst +#pragma mark - + +#import "CPTColor.h" +#import + +/** + * @brief Platform-specific extensions to CPTTextStyle. + * + * @see CPTTextStyle + **/ +@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 initialized 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 + UIFont *styleFont = attributes[NSFontAttributeName]; + + if ( styleFont ) { + newStyle.font = styleFont; + newStyle.fontName = styleFont.fontName; + newStyle.fontSize = styleFont.pointSize; + } + + // 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; + } + + return [newStyle copy]; +} + +#pragma mark - +#pragma mark Accessors + +/// @cond + +-(nonnull CPTDictionary *)attributes +{ + CPTMutableDictionary *myAttributes = [NSMutableDictionary dictionary]; + + // Font + UIFont *styleFont = self.font; + NSString *fontName = self.fontName; + + if ( !styleFont && fontName ) { + styleFont = [UIFont fontWithName:fontName size:self.fontSize]; + } + + if ( styleFont ) { + [myAttributes setValue:styleFont + forKey:NSFontAttributeName]; + } + + // Color + UIColor *styleColor = self.color.uiColor; + + 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 - + +/** + * @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. + * + * 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 initialized 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 + UIFont *styleFont = attributes[NSFontAttributeName]; + + if ( styleFont ) { + newStyle.font = styleFont; + newStyle.fontName = styleFont.fontName; + newStyle.fontSize = styleFont.pointSize; + } + + // 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; + } + + return newStyle; +} + +@end + +#pragma mark - + +/** + * @brief NSString extensions for drawing styled text. + * + * @see NSString + **/ + +@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 = [self boundingRectWithSize:CPTSizeMake(10000.0, 10000.0) + options:CPTStringDrawingOptions + attributes:style.attributes + context:nil]; + + 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 ) { + return; + } + + CGContextSaveGState(context); + CGColorRef textColor = style.color.cgColor; + + CGContextSetStrokeColorWithColor(context, textColor); + CGContextSetFillColorWithColor(context, textColor); + + CPTPushCGContext(context); + +#if TARGET_OS_SIMULATOR || TARGET_OS_TV + [self drawWithRect:rect + options:CPTStringDrawingOptions + attributes:style.attributes + context:nil]; +#else +#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 + options:CPTStringDrawingOptions + attributes:style.attributes + context:nil]; + } + else { + UIColor *styleColor = style.attributes[NSForegroundColorAttributeName]; + [styleColor set]; + + UIFont *theFont = style.font; + NSString *fontName = style.fontName; + + if ( !theFont && fontName ) { + theFont = [UIFont fontWithName:fontName size:style.fontSize]; + } + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + [self drawInRect:rect + withFont:theFont + lineBreakMode:style.lineBreakMode + alignment:(NSTextAlignment)style.textAlignment]; +#pragma clang diagnostic pop + } +#else + UIColor *styleColor = style.attributes[NSForegroundColorAttributeName]; + [styleColor set]; + + UIFont *theFont = self.font; + if ( !theFont ) { + theFont = [UIFont fontWithName:style.fontName size:style.fontSize]; + } + + [self drawInRect:rect + withFont:theFont + lineBreakMode:style.lineBreakMode + alignment:(NSTextAlignment)style.textAlignment]; +#endif +#endif + + CGContextRestoreGState(context); + CPTPopCGContext(); +} + +@end + +#endif diff --git a/framework/CocoaPods/CorePlot.h b/framework/SPM Umbrella Header/CorePlot.h similarity index 92% rename from framework/CocoaPods/CorePlot.h rename to framework/SPM Umbrella Header/CorePlot.h index c3660a97e..e04c0e8fd 100644 --- a/framework/CocoaPods/CorePlot.h +++ b/framework/SPM Umbrella Header/CorePlot.h @@ -1,10 +1,14 @@ -#import "TargetConditionals.h" +#import + +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE #import #import + #else + #import + #endif #import "CPTAnimation.h" @@ -22,6 +26,7 @@ #import "CPTColor.h" #import "CPTColorSpace.h" #import "CPTConstraints.h" +#import "CPTDecimalNumberValueTransformer.h" #import "CPTDefinitions.h" #import "CPTExceptions.h" #import "CPTFill.h" diff --git a/framework/Source/CPTAnimation.h b/framework/Source/CPTAnimation.h index 93f0e48ba..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) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= 100000)) \ - || (TARGET_OS_MAC && (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/CPTAnimation.m b/framework/Source/CPTAnimation.m index a626f2dc7..b72af73e6 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 @ref "CPTAnimation(CPTAnimationPeriodAdditions)" **/ @implementation CPTAnimation @@ -156,12 +158,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 +194,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 +240,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 { @@ -334,11 +336,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 class], + CPTAnimationStartedKey: @(started), + CPTAnimationFinishedKey: @(currentTime >= endTime) }; // Used -performSelectorOnMainThread:... instead of GCD to ensure the animation continues to run in all run loop common modes. @@ -379,7 +381,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; } @@ -404,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/CPTAnimationOperation.h b/framework/Source/CPTAnimationOperation.h index b179bf210..590949427 100644 --- a/framework/Source/CPTAnimationOperation.h +++ b/framework/Source/CPTAnimationOperation.h @@ -1,5 +1,12 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTAnimation.h" #import "CPTDefinitions.h" +#endif @class CPTAnimationPeriod; 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.h b/framework/Source/CPTAnimationPeriod.h index cfd21ac63..2fb20be26 100644 --- a/framework/Source/CPTAnimationPeriod.h +++ b/framework/Source/CPTAnimationPeriod.h @@ -1,4 +1,10 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTAnimation.h" +#endif @class CPTAnimationOperation; @class CPTPlotRange; @@ -41,9 +47,6 @@ #pragma mark - -/** @category CPTAnimationPeriod(AbstractMethods) - * @brief CPTAnimationPeriod abstract methods—must be overridden by subclasses - **/ @interface CPTAnimationPeriod(AbstractMethods) /// @name Initialization diff --git a/framework/Source/CPTAnimationPeriod.m b/framework/Source/CPTAnimationPeriod.m index 3d781b79c..b38a09d6e 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() @@ -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 @ref "CPTAnimationPeriod(AbstractMethods)" **/ @implementation CPTAnimationPeriod @@ -80,12 +82,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,30 +98,30 @@ +(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 { 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]; } /** * @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 { @@ -129,20 +131,20 @@ +(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]; } /** * @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 { @@ -152,20 +154,20 @@ +(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]; } /** * @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 { @@ -175,56 +177,56 @@ +(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]; } /** * @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 { 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]; } /** * @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 { - 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]; } /** * @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 { @@ -234,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 @@ -254,12 +256,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,32 +281,32 @@ -(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 { 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; } /** * @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 { @@ -314,22 +316,22 @@ -(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; } /** * @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 { @@ -339,22 +341,22 @@ -(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; } /** * @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 { @@ -364,62 +366,62 @@ -(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; } /** * @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 { 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; } /** * @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 { - 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; } /** * @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 { @@ -429,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; } @@ -450,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. @@ -469,8 +492,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 +504,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 { @@ -492,36 +515,29 @@ -(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 /** @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 +555,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 +580,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 +604,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 +630,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 +655,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 +679,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 +705,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 +730,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 +754,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 +780,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 +805,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 +829,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 +855,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 +880,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 +904,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 +930,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 +955,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 +979,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 +1005,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 +1030,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/CPTAnnotation.h b/framework/Source/CPTAnnotation.h index cda5d79bc..9e9d66879 100644 --- a/framework/Source/CPTAnnotation.h +++ b/framework/Source/CPTAnnotation.h @@ -1,7 +1,11 @@ -#import "CPTDefinitions.h" - /// @file +#ifdef CPT_IS_FRAMEWORK +#import +#else +#import "CPTDefinitions.h" +#endif + @class CPTAnnotation; @class CPTAnnotationHostLayer; @class CPTLayer; @@ -34,9 +38,6 @@ typedef NSMutableArray<__kindof CPTAnnotation *> CPTMutableAnnotationArray; #pragma mark - -/** @category CPTAnnotation(AbstractMethods) - * @brief CPTAnnotation abstract methods—must be overridden by subclasses. - **/ @interface CPTAnnotation(AbstractMethods) /// @name Layout diff --git a/framework/Source/CPTAnnotation.m b/framework/Source/CPTAnnotation.m index 18483ec57..afebd4743 100644 --- a/framework/Source/CPTAnnotation.m +++ b/framework/Source/CPTAnnotation.m @@ -1,13 +1,15 @@ #import "CPTAnnotation.h" +#import "_NSCoderExtensions.h" #import "CPTAnnotationHostLayer.h" -#import "NSCoderExtensions.h" /** @brief An annotation positions a content layer relative to some anchor point. * * 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 @ref "CPTAnnotation(AbstractMethods)" **/ @implementation CPTAnnotation @@ -184,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/CPTAnnotationHostLayer.h b/framework/Source/CPTAnnotationHostLayer.h index a8217fa32..b167cc921 100644 --- a/framework/Source/CPTAnnotationHostLayer.h +++ b/framework/Source/CPTAnnotationHostLayer.h @@ -1,5 +1,12 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTAnnotation.h" #import "CPTLayer.h" +#endif @interface CPTAnnotationHostLayer : CPTLayer 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..85bbf4c69 100644 --- a/framework/Source/CPTAxis.h +++ b/framework/Source/CPTAxis.h @@ -1,3 +1,14 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#import +#import +#import +#import +#import +#import +#else #import "CPTAxisLabel.h" #import "CPTDefinitions.h" #import "CPTFill.h" @@ -5,8 +16,7 @@ #import "CPTLimitBand.h" #import "CPTPlotRange.h" #import "CPTTextStyle.h" - -/// @file +#endif @class CPTAxis; @class CPTAxisSet; @@ -52,8 +62,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 +76,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 +99,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 +107,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 +116,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 +124,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 +133,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 +141,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 +150,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 +158,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 +167,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 +175,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 +184,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 +192,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. **/ @@ -319,9 +329,6 @@ typedef NSMutableArray<__kindof CPTAxis *> CPTMutableAxisArray; #pragma mark - -/** @category CPTAxis(AbstractMethods) - * @brief CPTAxis abstract methods—must be overridden by subclasses - **/ @interface CPTAxis(AbstractMethods) /// @name Coordinate Space Conversions diff --git a/framework/Source/CPTAxis.m b/framework/Source/CPTAxis.m index 102318084..1851f5412 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. @@ -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 @ref "CPTAxis(AbstractMethods)" **/ @implementation CPTAxis @@ -490,8 +491,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 +504,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} @@ -535,8 +536,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 { @@ -808,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"]; @@ -931,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]; @@ -1011,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 @@ -1142,8 +1143,8 @@ -(void)autoGenerateMajorTickLocations:(CPTNumberSet *__autoreleasing *)newMajorL } [majorLocations addObject:[NSDecimalNumber decimalNumberWithDecimal:pointLocation]]; } + break; } - break; case CPTScaleTypeLog: { @@ -1188,8 +1189,8 @@ -(void)autoGenerateMajorTickLocations:(CPTNumberSet *__autoreleasing *)newMajorL [majorLocations addObject:@(pointLocation)]; } } + break; } - break; case CPTScaleTypeLogModulus: { @@ -1288,8 +1289,8 @@ -(void)autoGenerateMajorTickLocations:(CPTNumberSet *__autoreleasing *)newMajorL [majorLocations addObject:@(pointLocation)]; } } + break; } - break; default: break; @@ -1306,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]; @@ -1377,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); @@ -1389,6 +1390,7 @@ NSDecimal CPTNiceNum(NSDecimal x) NSDecimal minusOne = CPTDecimalFromInteger(-1); BOOL xIsNegative = CPTDecimalLessThan(x, zero); + if ( xIsNegative ) { x = CPTDecimalMultiply(x, minusOne); } @@ -1396,6 +1398,7 @@ NSDecimal CPTNiceNum(NSDecimal x) short exponent = (short)lrint(floor(log10(CPTDecimalDoubleValue(x)))); NSDecimal fractionPart; + NSDecimalMultiplyByPowerOf10(&fractionPart, &x, -exponent, NSRoundPlain); NSDecimal roundedFraction; @@ -1418,6 +1421,7 @@ NSDecimal CPTNiceNum(NSDecimal x) } NSDecimal roundedNumber; + NSDecimalMultiplyByPowerOf10(&roundedNumber, &roundedFraction, exponent, NSRoundPlain); return roundedNumber; @@ -1427,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); @@ -1439,6 +1443,7 @@ NSDecimal CPTNiceLength(NSDecimal length) NSDecimal minusOne = CPTDecimalFromInteger(-1); BOOL isNegative = CPTDecimalLessThan(length, zero); + if ( isNegative ) { length = CPTDecimalMultiply(length, minusOne); } @@ -1463,9 +1468,9 @@ 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 { CPTPlotRangeArray *exclusionRanges = self.labelExclusionRanges; @@ -1489,8 +1494,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 { @@ -1498,8 +1503,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 { @@ -1533,8 +1538,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 @@ -1618,9 +1623,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 +1740,7 @@ -(void)relabel return; } id theDelegate = (id)self.delegate; + if ( [theDelegate respondsToSelector:@selector(axisShouldRelabel:)] && ![theDelegate axisShouldRelabel:self] ) { self.needsRelabel = NO; return; @@ -1793,8 +1801,8 @@ -(void)relabel [self updateAxisLabelsAtLocations:self.minorTickLocations inRange:labeledRange useMajorAxisLabels:NO]; + break; } - break; default: [self updateAxisLabelsAtLocations:self.majorTickLocations @@ -1823,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]; @@ -2036,6 +2044,7 @@ -(void)removeAllBackgroundLimitBands [self.mutableBackgroundLimitBands removeAllObjects]; CPTPlotArea *thePlotArea = self.plotArea; + [thePlotArea setNeedsDisplay]; } @@ -2065,9 +2074,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 { @@ -2170,9 +2179,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 { @@ -2558,7 +2567,7 @@ -(void)setTitleLocation:(nullable NSNumber *)newLocation { BOOL needsUpdate = YES; - if ( newLocation ) { + if ( newLocation != nil ) { NSNumber *location = newLocation; needsUpdate = ![titleLocation isEqualToNumber:location]; } @@ -2865,7 +2874,7 @@ -(void)setLabelingOrigin:(nonnull NSNumber *)newLabelingOrigin { BOOL needsUpdate = YES; - if ( newLabelingOrigin ) { + if ( newLabelingOrigin != nil ) { needsUpdate = ![labelingOrigin isEqualToNumber:newLabelingOrigin]; } @@ -2880,7 +2889,7 @@ -(void)setMajorIntervalLength:(nullable NSNumber *)newIntervalLength { BOOL needsUpdate = YES; - if ( newIntervalLength ) { + if ( newIntervalLength != nil ) { NSNumber *interval = newIntervalLength; needsUpdate = ![majorIntervalLength isEqualToNumber:interval]; } @@ -3258,11 +3267,16 @@ -(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. - * @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 { @@ -3271,7 +3285,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.h b/framework/Source/CPTAxisLabel.h index b78d2ebd9..edb316175 100644 --- a/framework/Source/CPTAxisLabel.h +++ b/framework/Source/CPTAxisLabel.h @@ -1,7 +1,11 @@ -#import "CPTDefinitions.h" - /// @file +#ifdef CPT_IS_FRAMEWORK +#import +#else +#import "CPTDefinitions.h" +#endif + @class CPTAxisLabel; @class CPTLayer; @class CPTTextStyle; diff --git a/framework/Source/CPTAxisLabel.m b/framework/Source/CPTAxisLabel.m index 2f9f23f5e..3a8579a41 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. @@ -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,9 +100,9 @@ -(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 { if ((self = [super init])) { @@ -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; } @@ -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 { @@ -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)); } @@ -288,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 { @@ -320,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 { @@ -331,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/CPTAxisLabelGroup.h b/framework/Source/CPTAxisLabelGroup.h deleted file mode 100644 index e1e33b34b..000000000 --- a/framework/Source/CPTAxisLabelGroup.h +++ /dev/null @@ -1,5 +0,0 @@ -#import "CPTLayer.h" - -@interface CPTAxisLabelGroup : CPTLayer - -@end diff --git a/framework/Source/CPTAxisSet.h b/framework/Source/CPTAxisSet.h index 93bf35cda..d24528f47 100644 --- a/framework/Source/CPTAxisSet.h +++ b/framework/Source/CPTAxisSet.h @@ -1,5 +1,12 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTAxis.h" #import "CPTLayer.h" +#endif @class CPTLineStyle; 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.h b/framework/Source/CPTAxisTitle.h index e11c3befc..5b288ad39 100644 --- a/framework/Source/CPTAxisTitle.h +++ b/framework/Source/CPTAxisTitle.h @@ -1,4 +1,10 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTAxisLabel.h" +#endif @interface CPTAxisTitle : CPTAxisLabel diff --git a/framework/Source/CPTAxisTitle.m b/framework/Source/CPTAxisTitle.m index 99b26a321..0cc29c092 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 { @@ -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.h b/framework/Source/CPTBarPlot.h index 282fd873d..62fe6fcd4 100644 --- a/framework/Source/CPTBarPlot.h +++ b/framework/Source/CPTBarPlot.h @@ -1,9 +1,16 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#import +#import +#import +#else #import "CPTDefinitions.h" #import "CPTFill.h" #import "CPTLineStyle.h" #import "CPTPlot.h" - -/// @file +#endif @class CPTMutableNumericData; @class CPTNumericData; @@ -49,9 +56,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 +66,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 +84,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 +102,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 +114,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 +146,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 +156,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 +169,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 +178,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 +190,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 +199,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 e667773e3..e3189defb 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 @@ -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 { @@ -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]; @@ -199,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 { @@ -237,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 { @@ -325,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"]; @@ -631,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 { @@ -712,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; @@ -737,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; @@ -878,17 +879,20 @@ -(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; } 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 @@ -1152,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; } @@ -1163,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; } @@ -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]); } @@ -1374,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 { @@ -1395,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 { @@ -1461,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 { @@ -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:)] || @@ -1526,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 { @@ -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.h b/framework/Source/CPTBorderedLayer.h index 617d7bd79..de8176f3c 100644 --- a/framework/Source/CPTBorderedLayer.h +++ b/framework/Source/CPTBorderedLayer.h @@ -1,4 +1,10 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTAnnotationHostLayer.h" +#endif @class CPTLineStyle; @class CPTFill; diff --git a/framework/Source/CPTBorderedLayer.m b/framework/Source/CPTBorderedLayer.m index 7a6126c00..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 { @@ -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); @@ -201,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.h b/framework/Source/CPTCalendarFormatter.h index 89dc656ea..8c5f8a86a 100644 --- a/framework/Source/CPTCalendarFormatter.h +++ b/framework/Source/CPTCalendarFormatter.h @@ -1,4 +1,6 @@ -@interface CPTCalendarFormatter : NSNumberFormatter +#import + +@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 928263b4e..af312874c 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,20 +94,35 @@ -(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 { 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 @@ -139,8 +154,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/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.h b/framework/Source/CPTColor.h index 8ae9a7611..c4db56a4a 100644 --- a/framework/Source/CPTColor.h +++ b/framework/Source/CPTColor.h @@ -1,4 +1,10 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTPlatformSpecificDefines.h" +#endif @interface CPTColor : NSObject @@ -7,7 +13,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 +45,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 +60,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 2be62efdf..03f314ea8 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 @@ -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; @@ -119,7 +119,7 @@ -(CGColorRef)cgColor /** @property BOOL opaque * @brief If @YES, the color is completely opaque. - */ + **/ @dynamic opaque; #pragma mark - @@ -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,22 +425,22 @@ +(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 { 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. * * 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 { @@ -451,16 +451,16 @@ +(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. + * @param newColor The color to wrap. + * @return A new CPTColor instance initialized with the provided platform-native color. **/ +(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 } @@ -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 { @@ -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; @@ -510,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 { @@ -521,14 +522,14 @@ -(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. * * 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 { @@ -544,14 +545,14 @@ -(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 { #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 } @@ -575,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 { @@ -586,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]; @@ -621,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 @@ -643,9 +644,9 @@ -(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 { if ((self = [super init])) { @@ -655,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 ) { @@ -707,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]; @@ -739,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 { @@ -786,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..806f0593a 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..ab7d7275e 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. * @@ -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); @@ -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 { @@ -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); @@ -101,9 +101,9 @@ -(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 { if ((self = [super init])) { 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/CPTConstraints.h b/framework/Source/CPTConstraints.h index d6bf75bd3..979b9b7d1 100644 --- a/framework/Source/CPTConstraints.h +++ b/framework/Source/CPTConstraints.h @@ -1,3 +1,6 @@ +#import +#import + @interface CPTConstraints : NSObject /// @name Factory Methods @@ -16,9 +19,6 @@ @end -/** @category CPTConstraints(AbstractMethods) - * @brief CPTConstraints abstract methods—must be overridden by subclasses - **/ @interface CPTConstraints(AbstractMethods) /// @name Comparison diff --git a/framework/Source/CPTConstraints.m b/framework/Source/CPTConstraints.m index c9896ea25..2cd0bf076 100644 --- a/framework/Source/CPTConstraints.m +++ b/framework/Source/CPTConstraints.m @@ -2,12 +2,14 @@ #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. * * Supports fixed distance from either end of the range and a proportional fraction of the range. + * + * @see @ref "CPTConstraints(AbstractMethods)" **/ @implementation CPTConstraints @@ -15,21 +17,21 @@ @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 { - 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. - * @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 { - 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. @@ -37,35 +39,35 @@ +(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 { - return [[_CPTConstraintsRelative alloc] initWithRelativeOffset:newOffset]; + return [[CPTConstraintsRelative alloc] initWithRelativeOffset:newOffset]; } #pragma mark - #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 { - self = [[_CPTConstraintsFixed alloc] initWithLowerOffset:newOffset]; + self = [[CPTConstraintsFixed alloc] initWithLowerOffset:newOffset]; return self; } /** @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 { - self = [[_CPTConstraintsFixed alloc] initWithUpperOffset:newOffset]; + self = [[CPTConstraintsFixed alloc] initWithUpperOffset:newOffset]; return self; } @@ -75,12 +77,12 @@ -(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 { - self = [[_CPTConstraintsRelative alloc] initWithRelativeOffset:newOffset]; + self = [[CPTConstraintsRelative alloc] initWithRelativeOffset:newOffset]; return self; } @@ -110,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]; } @@ -120,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]; } @@ -146,14 +148,19 @@ +(BOOL)supportsSecureCoding #pragma mark - +/** + * @brief CPTConstraints abstract methods—must be overridden by subclasses + * + * @see CPTConstraints + **/ @implementation CPTConstraints(AbstractMethods) #pragma mark - #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 +172,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/CPTDarkGradientThemeTests.m b/framework/Source/CPTDarkGradientThemeTests.m index 71b64df7a..bdede3230 100644 --- a/framework/Source/CPTDarkGradientThemeTests.m +++ b/framework/Source/CPTDarkGradientThemeTests.m @@ -1,14 +1,14 @@ #import "CPTDarkGradientThemeTests.h" #import "_CPTDarkGradientTheme.h" -#import "CPTDerivedXYGraph.h" +#import "CPTXYGraphTestCase.h" @implementation CPTDarkGradientThemeTests -(void)testNewThemeShouldBeCPTXYGraph { // Arrange - _CPTDarkGradientTheme *theme = [[_CPTDarkGradientTheme alloc] init]; + CPTDarkGradientTheme *theme = [[CPTDarkGradientTheme alloc] init]; // Act CPTGraph *graph = [theme newGraph]; @@ -20,15 +20,15 @@ -(void)testNewThemeShouldBeCPTXYGraph -(void)testNewThemeSetGraphClassReturnedClassShouldBeOfCorrectType { // Arrange - _CPTDarkGradientTheme *theme = [[_CPTDarkGradientTheme alloc] init]; + 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/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/CPTDecimalNumberValueTransformer.h b/framework/Source/CPTDecimalNumberValueTransformer.h new file mode 100644 index 000000000..afa563b42 --- /dev/null +++ b/framework/Source/CPTDecimalNumberValueTransformer.h @@ -0,0 +1,11 @@ +#import + +#if TARGET_OS_OSX || TARGET_OS_MACCATALYST + +#import + +@interface CPTDecimalNumberValueTransformer : NSValueTransformer + +@end + +#endif diff --git a/framework/MacOnly/CPTDecimalNumberValueTransformer.m b/framework/Source/CPTDecimalNumberValueTransformer.m similarity index 90% rename from framework/MacOnly/CPTDecimalNumberValueTransformer.m rename to framework/Source/CPTDecimalNumberValueTransformer.m index 04477ecb9..307dfb4cd 100644 --- a/framework/MacOnly/CPTDecimalNumberValueTransformer.m +++ b/framework/Source/CPTDecimalNumberValueTransformer.m @@ -1,5 +1,8 @@ #import "CPTDecimalNumberValueTransformer.h" -#import "NSNumberExtensions.h" + +#if TARGET_OS_OSX || TARGET_OS_MACCATALYST + +#import "_NSNumberExtensions.h" /** * @brief A Cocoa Bindings value transformer for NSDecimalNumber objects. @@ -39,3 +42,5 @@ -(nullable id)reverseTransformedValue:(nullable id)value /// @endcond @end + +#endif diff --git a/framework/Source/CPTDefinitions.h b/framework/Source/CPTDefinitions.h index ff6f39eb7..e636deb76 100644 --- a/framework/Source/CPTDefinitions.h +++ b/framework/Source/CPTDefinitions.h @@ -1,7 +1,16 @@ +/// @file + #import #import -/// @file +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST +#import +#else +#import +#endif + +#pragma mark - +#pragma mark Memory management /** * @def CPT_SDK_SUPPORTS_WEAK @@ -20,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_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 @@ -32,6 +41,9 @@ #define cpt_weak_property unsafe_unretained #endif +#pragma mark - +#pragma mark Attributes + // Deprecated method attribute /** @@ -42,6 +54,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) /** @@ -56,7 +78,8 @@ #define cpt_unused __unused #endif -// Swift wrappers +#pragma mark - +#pragma mark Swift wrappers /** * @def cpt_swift_enum @@ -72,7 +95,8 @@ **/ #define cpt_swift_struct __attribute__((swift_wrapper(struct))) -// Type safety defines +#pragma mark - +#pragma mark Type safety defines /** * @def CPTFloat @@ -115,8 +139,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)) @@ -128,6 +152,9 @@ **/ #define CPTNAN ((CGFloat)NAN) +#pragma mark - +#pragma mark Enumerations + /** * @brief Enumeration of numeric types **/ @@ -171,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). @@ -182,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 @@ -218,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. @@ -230,6 +258,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. **/ @@ -271,15 +302,18 @@ 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; +#pragma mark - +#pragma mark Quick Look + /** * @brief Render a Quick Look image into the given context. **/ 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/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/CPTFill.h b/framework/Source/CPTFill.h index a011c8feb..3fe1a9181 100644 --- a/framework/Source/CPTFill.h +++ b/framework/Source/CPTFill.h @@ -1,5 +1,8 @@ /// @file +#import +#import + @class CPTGradient; @class CPTImage; @class CPTColor; @@ -33,9 +36,6 @@ typedef NSMutableArray CPTMutableFillArray; @end -/** @category CPTFill(AbstractMethods) - * @brief CPTFill abstract methods—must be overridden by subclasses - **/ @interface CPTFill(AbstractMethods) @property (nonatomic, readonly, getter = isOpaque) BOOL opaque; diff --git a/framework/Source/CPTFill.m b/framework/Source/CPTFill.m index b884fdd99..40831c610 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 @ref "CPTFill(AbstractMethods)" **/ @implementation CPTFill @@ -21,61 +23,61 @@ @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 { - return [[_CPTFillColor alloc] initWithColor:aColor]; + return [[CPTFillColor alloc] initWithColor: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 { - return [[_CPTFillGradient alloc] initWithGradient:aGradient]; + return [[CPTFillGradient alloc] initWithGradient: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 { - return [[_CPTFillImage alloc] initWithImage:anImage]; + return [[CPTFillImage alloc] initWithImage: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 { - self = [[_CPTFillColor alloc] initWithColor:aColor]; + self = [[CPTFillColor alloc] initWithColor:aColor]; return self; } /** @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 { - self = [[_CPTFillGradient alloc] initWithGradient:aGradient]; + self = [[CPTFillGradient alloc] initWithGradient:aGradient]; return self; } /** @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 { - self = [[_CPTFillImage alloc] initWithImage:anImage]; + self = [[CPTFillImage alloc] initWithImage:anImage]; return self; } @@ -106,20 +108,22 @@ -(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]; } @@ -141,20 +145,41 @@ +(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 - +/** + * @brief CPTFill abstract methods—must be overridden by subclasses + * + * @see CPTFill + **/ @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 - @@ -182,8 +207,8 @@ -(nullable CGColorRef)cgColor #pragma mark - #pragma mark Drawing -/** @brief Draws the gradient into the given graphics context inside the provided rectangle. - * @param rect The rectangle to draw into. +/** @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. **/ -(void)fillRect:(CGRect __unused)rect inContext:(nonnull CGContextRef __unused)context @@ -191,7 +216,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 @@ -199,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 diff --git a/framework/Source/CPTFillTests.m b/framework/Source/CPTFillTests.m index 8029b0a73..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"); } @@ -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); @@ -77,10 +77,11 @@ -(void)testKeyedArchivingRoundTripImage CGColorSpaceRelease(colorSpace); 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/CPTFunctionDataSource.h b/framework/Source/CPTFunctionDataSource.h index 251919c40..56739d178 100644 --- a/framework/Source/CPTFunctionDataSource.h +++ b/framework/Source/CPTFunctionDataSource.h @@ -1,9 +1,13 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTPlot.h" +#endif @class CPTPlotRange; -/// @file - /** * @brief A function called to generate plot data in a CPTFunctionDataSource datasource. **/ diff --git a/framework/Source/CPTFunctionDataSource.m b/framework/Source/CPTFunctionDataSource.m index 0e038673a..ba59ddde3 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 @@ -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 { @@ -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; diff --git a/framework/Source/CPTGradient.h b/framework/Source/CPTGradient.h index b07f6d920..9d085aeba 100644 --- a/framework/Source/CPTGradient.h +++ b/framework/Source/CPTGradient.h @@ -1,18 +1,22 @@ -// 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 +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTDefinitions.h" +#endif /** * @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/CPTGradient.m b/framework/Source/CPTGradient.m index 3d6028025..f42919218 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 @@ -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 @@ -92,7 +92,7 @@ @implementation CPTGradient /** @property BOOL opaque * @brief If @YES, the gradient is completely opaque. - */ + **/ @dynamic opaque; @synthesize elementList; @@ -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]]; @@ -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 { @@ -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); @@ -669,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 { @@ -679,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]; @@ -695,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 { @@ -711,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 { @@ -731,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 { @@ -747,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 { @@ -766,15 +782,15 @@ -(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 { CPTGradientElement *element = [self elementAtIndex:idx]; - if ( element != NULL ) { -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE + 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); #else @@ -788,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 { @@ -810,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 @@ -824,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 @@ -833,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 @@ -901,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; } @@ -919,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 { @@ -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; @@ -1165,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 ) { @@ -1175,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; @@ -1192,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; @@ -1205,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; @@ -1237,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; @@ -1248,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; @@ -1277,7 +1295,7 @@ -(void)removeAllElements { CPTGradientElement *element = self.elementList; - while ( element != NULL ) { + while ( element ) { CPTGradientElement *elementToRemove = element; element = element->nextElement; free(elementToRemove); @@ -1291,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; } @@ -1331,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; } @@ -1339,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; } @@ -1397,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; } @@ -1408,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; } @@ -1474,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; } @@ -1485,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; } @@ -1655,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/framework/Source/CPTGraph.h b/framework/Source/CPTGraph.h index 7c4c397ac..2464498a5 100644 --- a/framework/Source/CPTGraph.h +++ b/framework/Source/CPTGraph.h @@ -1,10 +1,17 @@ // Abstract class +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#import +#import +#import +#else #import "CPTBorderedLayer.h" #import "CPTDefinitions.h" #import "CPTPlot.h" #import "CPTPlotSpace.h" - -/// @file +#endif @class CPTAxisSet; @class CPTGraphHostingView; @@ -146,9 +153,6 @@ typedef NS_ENUM (NSInteger, CPTGraphLayerType) { #pragma mark - -/** @category CPTGraph(AbstractFactoryMethods) - * @brief CPTGraph abstract methods—must be overridden by subclasses - **/ @interface CPTGraph(AbstractFactoryMethods) /// @name Factory Methods diff --git a/framework/Source/CPTGraph.m b/framework/Source/CPTGraph.m index 9255efe02..23f8ca9a7 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. @@ -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 @ref "CPTGraph(AbstractFactoryMethods)" **/ @implementation CPTGraph @@ -192,11 +193,11 @@ @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. + * @param newFrame The frame rectangle. + * @return The initialized CPTGraph object. **/ -(nonnull instancetype)initWithFrame:(CGRect)newFrame { @@ -385,17 +386,32 @@ -(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]; } #else - if ( @available(iOS 13, *)) { +#ifdef __IPHONE_13_0 + if ( @available(iOS 13, tvOS 13, *)) { if ( [UITraitCollection instancesRespondToSelector:@selector(performAsCurrentTraitCollection:)] ) { UITraitCollection *traitCollection = ((UIView *)self.hostingView).traitCollection; if ( traitCollection ) { @@ -414,6 +430,9 @@ -(void)layoutAndRenderInContext:(nonnull CGContextRef)context else { [super layoutAndRenderInContext:context]; } +#else + [super layoutAndRenderInContext:context]; +#endif #endif #pragma clang diagnostic pop } @@ -474,8 +493,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 { @@ -488,8 +507,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 { @@ -513,7 +532,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 @@ -548,7 +567,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 { @@ -556,8 +575,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 @@ -602,8 +621,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 { @@ -611,8 +630,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 { @@ -1069,9 +1088,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 { @@ -1101,6 +1120,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; @@ -1130,9 +1150,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 { @@ -1195,9 +1215,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 { @@ -1227,6 +1247,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; @@ -1257,8 +1278,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 { @@ -1286,6 +1307,7 @@ -(BOOL)pointingDeviceCancelledEvent:(nonnull CPTNativeEvent *)event // Plot spaces BOOL handledEvent = NO; + for ( CPTPlotSpace *space in self.plotSpaces ) { BOOL handled = [space pointingDeviceCancelledEvent:event]; handledEvent |= handled; @@ -1299,7 +1321,7 @@ -(BOOL)pointingDeviceCancelledEvent:(nonnull CPTNativeEvent *)event } } -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST #else /** @@ -1316,10 +1338,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 { @@ -1347,6 +1369,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; @@ -1368,6 +1391,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 2708be9a5..188d2219a 100644 --- a/framework/Source/CPTImage.h +++ b/framework/Source/CPTImage.h @@ -1,5 +1,12 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTDefinitions.h" #import "CPTPlatformSpecificDefines.h" +#endif @interface CPTImage : NSObject @@ -39,9 +46,6 @@ #pragma mark - -/** @category CPTImage(CPTPlatformSpecificImageExtensions) - * @brief Platform-specific extensions to CPTImage. - **/ @interface CPTImage(CPTPlatformSpecificImageExtensions) /// @name Initialization diff --git a/framework/Source/CPTImage.m b/framework/Source/CPTImage.m index baebbc284..b954ee9f4 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 @@ -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; @@ -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 @ref "CPTImage(CPTPlatformSpecificImageExtensions)" **/ @implementation CPTImage @@ -96,7 +98,7 @@ @implementation CPTImage /** @property BOOL opaque * @brief If @YES, the image is completely opaque. - */ + **/ @dynamic opaque; /** @internal @@ -116,8 +118,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 +130,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 +152,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 { @@ -198,6 +200,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"]; @@ -210,9 +213,9 @@ -(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 { if ((self = [super init])) { @@ -279,8 +282,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 { @@ -289,8 +292,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 { @@ -299,8 +302,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 { @@ -308,9 +311,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 { @@ -318,8 +321,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 { @@ -332,8 +335,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 { @@ -348,8 +351,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 { @@ -523,7 +526,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))) { @@ -550,7 +553,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); @@ -724,7 +727,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 @@ -745,7 +748,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 @@ -753,7 +756,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/Source/CPTImageTests.m b/framework/Source/CPTImageTests.m index b106c54f2..3b22838ce 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); @@ -29,6 +29,7 @@ -(void)testKeyedArchivingRoundTrip CGColorSpaceRelease(colorSpace); CGImageRelease(cgImage); + CGContextRelease(context); CPTImage *newImage = [self archiveRoundTrip:image]; diff --git a/framework/Source/CPTLayer.h b/framework/Source/CPTLayer.h index 4cca2d8b4..27bea51fe 100644 --- a/framework/Source/CPTLayer.h +++ b/framework/Source/CPTLayer.h @@ -1,8 +1,14 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTDefinitions.h" #import "CPTResponder.h" -#import +#endif -/// @file +#import @class CPTGraph; @class CPTLayer; @@ -68,8 +74,8 @@ typedef NSMutableSet CPTMutableSublayerSet; /** * @brief Layer delegate. **/ -#if ((TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_TV) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= 100000)) \ - || (TARGET_OS_MAC && (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 @@ -97,7 +103,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; @@ -124,15 +129,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 +145,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/CPTLayer.m b/framework/Source/CPTLayer.m index eef476e9a..aa6cd5bcb 100644 --- a/framework/Source/CPTLayer.m +++ b/framework/Source/CPTLayer.m @@ -1,12 +1,13 @@ #import "CPTLayer.h" +#import "_NSCoderExtensions.h" #import "CPTGraph.h" +#import "CPTGraphHostingView.h" #import "CPTPathExtensions.h" #import "CPTPlatformSpecificCategories.h" #import "CPTPlatformSpecificFunctions.h" #import "CPTShadow.h" #import "CPTUtilities.h" -#import "NSCoderExtensions.h" #import #import @@ -33,6 +34,8 @@ @interface CPTLayer() -(void)applyTransform:(CATransform3D)transform toContext:(nonnull CGContextRef)context; -(nonnull NSString *)subLayersAtIndex:(NSUInteger)idx; +-(CPTGraphHostingView *)findHostingView; + @end /// @endcond @@ -47,6 +50,8 @@ -(nonnull NSString *)subLayersAtIndex:(NSUInteger)idx; * 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 @ref "CPTLayer(CPTPlatformSpecificLayerExtensions)" **/ @implementation CPTLayer @@ -80,11 +85,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. **/ @@ -161,8 +161,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 { @@ -202,9 +202,9 @@ -(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 { if ((self = [super initWithLayer:layer])) { @@ -263,9 +263,9 @@ -(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 { if ((self = [super initWithCoder:coder])) { @@ -329,18 +329,34 @@ -(void)display // Workaround since @available macro is not there if ( [NSView instancesRespondToSelector:@selector(effectiveAppearance)] ) { - NSAppearance *oldAppearance = NSAppearance.currentAppearance; - NSAppearance.currentAppearance = ((NSView *)self.graph.hostingView).effectiveAppearance; - [super display]; - NSAppearance.currentAppearance = oldAppearance; + CPTGraphHostingView *hostingView = [self findHostingView]; + 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]; } #else - if ( @available(iOS 13, *)) { +#ifdef __IPHONE_13_0 + if ( @available(iOS 13, tvOS 13, *)) { if ( [UITraitCollection instancesRespondToSelector:@selector(performAsCurrentTraitCollection:)] ) { - UITraitCollection *traitCollection = ((UIView *)self.graph.hostingView).traitCollection; + CPTGraphHostingView *hostingView = [self findHostingView]; + UITraitCollection *traitCollection = hostingView.traitCollection; if ( traitCollection ) { [traitCollection performAsCurrentTraitCollection: ^{ [super display]; @@ -357,11 +373,39 @@ -(void)display else { [super display]; } +#else + [super display]; +#endif #endif #pragma clang diagnostic pop } } +-(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 ) { @@ -487,7 +531,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]; @@ -546,7 +590,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 { @@ -723,9 +767,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 @@ -747,6 +791,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; @@ -838,9 +883,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 { @@ -854,14 +899,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 +936,7 @@ -(void)applyMaskToContext:(nonnull CGContextRef)context } CGPathRef maskPath = self.maskingPath; + if ( maskPath ) { CGContextAddPath(context, maskPath); CGContextClip(context); @@ -901,6 +950,7 @@ -(void)setNeedsLayout [super setNeedsLayout]; CPTGraph *theGraph = self.graph; + if ( theGraph ) { [[NSNotificationCenter defaultCenter] postNotificationName:CPTGraphNeedsRedrawNotification object:theGraph]; @@ -912,6 +962,7 @@ -(void)setNeedsDisplay [super setNeedsDisplay]; CPTGraph *theGraph = self.graph; + if ( theGraph ) { [[NSNotificationCenter defaultCenter] postNotificationName:CPTGraphNeedsRedrawNotification object:theGraph]; @@ -945,31 +996,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/Source/CPTLayerAnnotation.h b/framework/Source/CPTLayerAnnotation.h index 23e1afeea..616670c78 100644 --- a/framework/Source/CPTLayerAnnotation.h +++ b/framework/Source/CPTLayerAnnotation.h @@ -1,5 +1,12 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTAnnotation.h" #import "CPTDefinitions.h" +#endif @class CPTConstraints; diff --git a/framework/Source/CPTLayerAnnotation.m b/framework/Source/CPTLayerAnnotation.m index 69c68d6da..180b6335c 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,9 +113,9 @@ -(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 { if ((self = [super initWithCoder:coder])) { 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 d865a3e21..504f9c872 100644 --- a/framework/Source/CPTLegend.h +++ b/framework/Source/CPTLegend.h @@ -1,7 +1,12 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTBorderedLayer.h" #import "CPTPlot.h" - -/// @file +#endif @class CPTFill; @class CPTLegend; @@ -56,34 +61,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 +97,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 +115,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 +126,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 +138,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 +149,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 +161,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 +172,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 c5fcb69c4..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 @@ -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 { @@ -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++; } @@ -977,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 { @@ -991,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 { @@ -1037,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 { @@ -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 ) { @@ -1274,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 { @@ -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:)] || @@ -1341,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 { @@ -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/CPTLegendEntry.h b/framework/Source/CPTLegendEntry.h index ce7af2388..24873ddee 100644 --- a/framework/Source/CPTLegendEntry.h +++ b/framework/Source/CPTLegendEntry.h @@ -1,7 +1,11 @@ -#import "CPTDefinitions.h" - /// @file +#ifdef CPT_IS_FRAMEWORK +#import +#else +#import "CPTDefinitions.h" +#endif + @class CPTLegendEntry; @class CPTPlot; @class CPTTextStyle; diff --git a/framework/Source/CPTLegendEntry.m b/framework/Source/CPTLegendEntry.m index 02f5bc365..ed57e5ace 100644 --- a/framework/Source/CPTLegendEntry.m +++ b/framework/Source/CPTLegendEntry.m @@ -144,13 +144,13 @@ +(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 { -#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..b257d16a4 100644 --- a/framework/Source/CPTLimitBand.h +++ b/framework/Source/CPTLimitBand.h @@ -1,5 +1,7 @@ /// @file +#import + @class CPTFill; @class CPTLimitBand; @class CPTPlotRange; diff --git a/framework/Source/CPTLimitBand.m b/framework/Source/CPTLimitBand.m index 2f75847c5..8cf2b30e0 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,9 +86,9 @@ -(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 { if ((self = [super init])) { diff --git a/framework/Source/CPTLineCap.h b/framework/Source/CPTLineCap.h index e6c0605ac..d82ac4775 100644 --- a/framework/Source/CPTLineCap.h +++ b/framework/Source/CPTLineCap.h @@ -1,5 +1,8 @@ /// @file +#import +#import + @class CPTLineStyle; @class CPTFill; diff --git a/framework/Source/CPTLineCap.m b/framework/Source/CPTLineCap.m index 5350d1149..0488a10c1 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 @@ -22,7 +22,7 @@ -(nonnull CGPathRef)newLineCapPath; /** * @brief End cap decorations for lines. - */ + **/ @implementation CPTLineCap /** @property CGSize size; @@ -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; @@ -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 @@ -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/CPTLineStyle.h b/framework/Source/CPTLineStyle.h index 2b5c687b7..263f3509d 100644 --- a/framework/Source/CPTLineStyle.h +++ b/framework/Source/CPTLineStyle.h @@ -1,7 +1,11 @@ -#import "CPTDefinitions.h" - /// @file +#ifdef CPT_IS_FRAMEWORK +#import +#else +#import "CPTDefinitions.h" +#endif + @class CPTColor; @class CPTFill; @class CPTGradient; diff --git a/framework/Source/CPTLineStyle.m b/framework/Source/CPTLineStyle.m index 2208471f6..089d3b677 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() @@ -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. **/ @@ -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 - @@ -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 { @@ -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)); @@ -280,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/CPTMutableLineStyle.h b/framework/Source/CPTMutableLineStyle.h index 0d69bb453..1303b8d4f 100644 --- a/framework/Source/CPTMutableLineStyle.h +++ b/framework/Source/CPTMutableLineStyle.h @@ -1,4 +1,10 @@ +/// @file + +#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..09936b9aa 100644 --- a/framework/Source/CPTMutableNumericData+TypeConversion.h +++ b/framework/Source/CPTMutableNumericData+TypeConversion.h @@ -1,9 +1,13 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTMutableNumericData.h" #import "CPTNumericDataType.h" +#endif -/** @category CPTMutableNumericData(TypeConversion) - * @brief Type conversion methods for CPTMutableNumericData. - **/ @interface CPTMutableNumericData(TypeConversion) /// @name Data Format diff --git a/framework/Source/CPTMutableNumericData+TypeConversion.m b/framework/Source/CPTMutableNumericData+TypeConversion.m index fd9fba1ef..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 @@ -25,10 +30,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. - * @return A copy of the current numeric data converted to the new data type. + * @param newByteOrder The new byte order. **/ -(void)convertToType:(CPTDataTypeFormat)newDataType sampleBytes:(size_t)newSampleBytes diff --git a/framework/Source/CPTMutableNumericData.h b/framework/Source/CPTMutableNumericData.h index 32d299487..e43316be1 100644 --- a/framework/Source/CPTMutableNumericData.h +++ b/framework/Source/CPTMutableNumericData.h @@ -1,5 +1,12 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTNumericData.h" #import "CPTNumericDataType.h" +#endif @interface CPTMutableNumericData : CPTNumericData diff --git a/framework/Source/CPTMutableNumericData.m b/framework/Source/CPTMutableNumericData.m index 631d70704..c36864038 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 @ref "CPTMutableNumericData(TypeConversion)" **/ @implementation CPTMutableNumericData @@ -43,8 +45,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 +59,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/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..f76941ca2 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"); } @@ -177,16 +185,18 @@ -(void)testTypeConversionSwapsByteOrderDoubleInPlace uint64_t end = *(const uint64_t *)numericData.bytes; union swap { - double v; + double v; 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/CPTMutablePlotRange.h b/framework/Source/CPTMutablePlotRange.h index a4d602679..6c9a46bd6 100644 --- a/framework/Source/CPTMutablePlotRange.h +++ b/framework/Source/CPTMutablePlotRange.h @@ -1,4 +1,10 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTPlotRange.h" +#endif @interface CPTMutablePlotRange : CPTPlotRange 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/CPTMutableShadow.h b/framework/Source/CPTMutableShadow.h index 3392da191..6e5517720 100644 --- a/framework/Source/CPTMutableShadow.h +++ b/framework/Source/CPTMutableShadow.h @@ -1,4 +1,10 @@ +/// @file + +#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..00613a46f 100644 --- a/framework/Source/CPTMutableTextStyle.h +++ b/framework/Source/CPTMutableTextStyle.h @@ -1,4 +1,10 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTTextStyle.h" +#endif @class CPTColor; @@ -12,3 +18,7 @@ @property (readwrite, assign, nonatomic) NSLineBreakMode lineBreakMode; @end + +@interface CPTMutableTextStyle(CPTPlatformSpecificMutableTextStyleExtensions) + +@end diff --git a/framework/Source/CPTMutableTextStyle.m b/framework/Source/CPTMutableTextStyle.m index 50cce383a..09be8dc7a 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 @ref "CPTMutableTextStyle(CPTPlatformSpecificMutableTextStyleExtensions)" **/ @implementation CPTMutableTextStyle @@ -35,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/CPTNumericData+TypeConversion.h b/framework/Source/CPTNumericData+TypeConversion.h index 7bd08216b..fda14d19c 100644 --- a/framework/Source/CPTNumericData+TypeConversion.h +++ b/framework/Source/CPTNumericData+TypeConversion.h @@ -1,9 +1,13 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTNumericData.h" #import "CPTNumericDataType.h" +#endif -/** @category CPTNumericData(TypeConversion) - * @brief Type conversion methods for CPTNumericData. - **/ @interface CPTNumericData(TypeConversion) /// @name Type Conversion diff --git a/framework/Source/CPTNumericData+TypeConversion.m b/framework/Source/CPTNumericData+TypeConversion.m index 2ebfd19a1..c79e23c7c 100644 --- a/framework/Source/CPTNumericData+TypeConversion.m +++ b/framework/Source/CPTNumericData+TypeConversion.m @@ -3,13 +3,18 @@ #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. - * @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 +24,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 { @@ -66,6 +71,7 @@ -(nonnull CPTNumericData *)dataByConvertingToDataType:(CPTNumericDataType)newDat CPTNumericData *result = [CPTNumericData numericDataWithData:newData dataType:newDataType shape:self.shape]; + return result; } @@ -75,10 +81,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 @@ -104,10 +110,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 @@ -117,8 +122,8 @@ case sizeof(int16_t): while ( fromBytes < lastSample ) { *toBytes++ = (int16_t)*fromBytes++; } + break; } - break; case sizeof(int32_t): { // int8_t -> int32_t @@ -128,8 +133,8 @@ case sizeof(int32_t): while ( fromBytes < lastSample ) { *toBytes++ = (int32_t)*fromBytes++; } + break; } - break; case sizeof(int64_t): { // int8_t -> int64_t @@ -139,8 +144,8 @@ case sizeof(int64_t): while ( fromBytes < lastSample ) { *toBytes++ = (int64_t)*fromBytes++; } + break; } - break; } break; @@ -154,8 +159,8 @@ case sizeof(uint8_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint8_t)*fromBytes++; } + break; } - break; case sizeof(uint16_t): { // int8_t -> uint16_t @@ -165,8 +170,8 @@ case sizeof(uint16_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint16_t)*fromBytes++; } + break; } - break; case sizeof(uint32_t): { // int8_t -> uint32_t @@ -176,8 +181,8 @@ case sizeof(uint32_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint32_t)*fromBytes++; } + break; } - break; case sizeof(uint64_t): { // int8_t -> uint64_t @@ -187,8 +192,8 @@ case sizeof(uint64_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint64_t)*fromBytes++; } + break; } - break; } break; @@ -202,8 +207,8 @@ case sizeof(float): while ( fromBytes < lastSample ) { *toBytes++ = (float)*fromBytes++; } + break; } - break; case sizeof(double): { // int8_t -> double @@ -213,8 +218,8 @@ case sizeof(double): while ( fromBytes < lastSample ) { *toBytes++ = (double)*fromBytes++; } + break; } - break; } break; @@ -228,8 +233,8 @@ case sizeof(float complex): while ( fromBytes < lastSample ) { *toBytes++ = (float complex)*fromBytes++; } + break; } - break; case sizeof(double complex): { // int8_t -> double complex @@ -239,8 +244,8 @@ case sizeof(double complex): while ( fromBytes < lastSample ) { *toBytes++ = (double complex)*fromBytes++; } + break; } - break; } break; @@ -254,8 +259,8 @@ case sizeof(NSDecimal): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFromChar(*fromBytes++); } + break; } - break; } break; } @@ -276,14 +281,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 @@ -293,8 +297,8 @@ case sizeof(int32_t): while ( fromBytes < lastSample ) { *toBytes++ = (int32_t)*fromBytes++; } + break; } - break; case sizeof(int64_t): { // int16_t -> int64_t @@ -304,8 +308,8 @@ case sizeof(int64_t): while ( fromBytes < lastSample ) { *toBytes++ = (int64_t)*fromBytes++; } + break; } - break; } break; @@ -319,8 +323,8 @@ case sizeof(uint8_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint8_t)*fromBytes++; } + break; } - break; case sizeof(uint16_t): { // int16_t -> uint16_t @@ -330,8 +334,8 @@ case sizeof(uint16_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint16_t)*fromBytes++; } + break; } - break; case sizeof(uint32_t): { // int16_t -> uint32_t @@ -341,8 +345,8 @@ case sizeof(uint32_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint32_t)*fromBytes++; } + break; } - break; case sizeof(uint64_t): { // int16_t -> uint64_t @@ -352,8 +356,8 @@ case sizeof(uint64_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint64_t)*fromBytes++; } + break; } - break; } break; @@ -367,8 +371,8 @@ case sizeof(float): while ( fromBytes < lastSample ) { *toBytes++ = (float)*fromBytes++; } + break; } - break; case sizeof(double): { // int16_t -> double @@ -378,8 +382,8 @@ case sizeof(double): while ( fromBytes < lastSample ) { *toBytes++ = (double)*fromBytes++; } + break; } - break; } break; @@ -393,8 +397,8 @@ case sizeof(float complex): while ( fromBytes < lastSample ) { *toBytes++ = (float complex)*fromBytes++; } + break; } - break; case sizeof(double complex): { // int16_t -> double complex @@ -404,8 +408,8 @@ case sizeof(double complex): while ( fromBytes < lastSample ) { *toBytes++ = (double complex)*fromBytes++; } + break; } - break; } break; @@ -419,8 +423,8 @@ case sizeof(NSDecimal): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFromShort(*fromBytes++); } + break; } - break; } break; } @@ -441,8 +445,8 @@ case sizeof(int8_t): while ( fromBytes < lastSample ) { *toBytes++ = (int8_t)*fromBytes++; } + break; } - break; case sizeof(int16_t): { // int32_t -> int16_t @@ -452,14 +456,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 @@ -469,8 +472,8 @@ case sizeof(int64_t): while ( fromBytes < lastSample ) { *toBytes++ = (int64_t)*fromBytes++; } + break; } - break; } break; @@ -484,8 +487,8 @@ case sizeof(uint8_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint8_t)*fromBytes++; } + break; } - break; case sizeof(uint16_t): { // int32_t -> uint16_t @@ -495,8 +498,8 @@ case sizeof(uint16_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint16_t)*fromBytes++; } + break; } - break; case sizeof(uint32_t): { // int32_t -> uint32_t @@ -506,8 +509,8 @@ case sizeof(uint32_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint32_t)*fromBytes++; } + break; } - break; case sizeof(uint64_t): { // int32_t -> uint64_t @@ -517,8 +520,8 @@ case sizeof(uint64_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint64_t)*fromBytes++; } + break; } - break; } break; @@ -532,8 +535,8 @@ case sizeof(float): while ( fromBytes < lastSample ) { *toBytes++ = (float)*fromBytes++; } + break; } - break; case sizeof(double): { // int32_t -> double @@ -543,8 +546,8 @@ case sizeof(double): while ( fromBytes < lastSample ) { *toBytes++ = (double)*fromBytes++; } + break; } - break; } break; @@ -558,8 +561,8 @@ case sizeof(float complex): while ( fromBytes < lastSample ) { *toBytes++ = (float complex)*fromBytes++; } + break; } - break; case sizeof(double complex): { // int32_t -> double complex @@ -569,8 +572,8 @@ case sizeof(double complex): while ( fromBytes < lastSample ) { *toBytes++ = (double complex)*fromBytes++; } + break; } - break; } break; @@ -584,8 +587,8 @@ case sizeof(NSDecimal): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFromLong(*fromBytes++); } + break; } - break; } break; } @@ -606,8 +609,8 @@ case sizeof(int8_t): while ( fromBytes < lastSample ) { *toBytes++ = (int8_t)*fromBytes++; } + break; } - break; case sizeof(int16_t): { // int64_t -> int16_t @@ -617,8 +620,8 @@ case sizeof(int16_t): while ( fromBytes < lastSample ) { *toBytes++ = (int16_t)*fromBytes++; } + break; } - break; case sizeof(int32_t): { // int64_t -> int32_t @@ -628,14 +631,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; @@ -649,8 +651,8 @@ case sizeof(uint8_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint8_t)*fromBytes++; } + break; } - break; case sizeof(uint16_t): { // int64_t -> uint16_t @@ -660,8 +662,8 @@ case sizeof(uint16_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint16_t)*fromBytes++; } + break; } - break; case sizeof(uint32_t): { // int64_t -> uint32_t @@ -671,8 +673,8 @@ case sizeof(uint32_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint32_t)*fromBytes++; } + break; } - break; case sizeof(uint64_t): { // int64_t -> uint64_t @@ -682,8 +684,8 @@ case sizeof(uint64_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint64_t)*fromBytes++; } + break; } - break; } break; @@ -697,8 +699,8 @@ case sizeof(float): while ( fromBytes < lastSample ) { *toBytes++ = (float)*fromBytes++; } + break; } - break; case sizeof(double): { // int64_t -> double @@ -708,8 +710,8 @@ case sizeof(double): while ( fromBytes < lastSample ) { *toBytes++ = (double)*fromBytes++; } + break; } - break; } break; @@ -723,8 +725,8 @@ case sizeof(float complex): while ( fromBytes < lastSample ) { *toBytes++ = (float complex)*fromBytes++; } + break; } - break; case sizeof(double complex): { // int64_t -> double complex @@ -734,8 +736,8 @@ case sizeof(double complex): while ( fromBytes < lastSample ) { *toBytes++ = (double complex)*fromBytes++; } + break; } - break; } break; @@ -749,8 +751,8 @@ case sizeof(NSDecimal): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFromLongLong(*fromBytes++); } + break; } - break; } break; } @@ -775,8 +777,8 @@ case sizeof(int8_t): while ( fromBytes < lastSample ) { *toBytes++ = (int8_t)*fromBytes++; } + break; } - break; case sizeof(int16_t): { // uint8_t -> int16_t @@ -786,8 +788,8 @@ case sizeof(int16_t): while ( fromBytes < lastSample ) { *toBytes++ = (int16_t)*fromBytes++; } + break; } - break; case sizeof(int32_t): { // uint8_t -> int32_t @@ -797,8 +799,8 @@ case sizeof(int32_t): while ( fromBytes < lastSample ) { *toBytes++ = (int32_t)*fromBytes++; } + break; } - break; case sizeof(int64_t): { // uint8_t -> int64_t @@ -808,18 +810,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 @@ -829,8 +830,8 @@ case sizeof(uint16_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint16_t)*fromBytes++; } + break; } - break; case sizeof(uint32_t): { // uint8_t -> uint32_t @@ -840,8 +841,8 @@ case sizeof(uint32_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint32_t)*fromBytes++; } + break; } - break; case sizeof(uint64_t): { // uint8_t -> uint64_t @@ -851,8 +852,8 @@ case sizeof(uint64_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint64_t)*fromBytes++; } + break; } - break; } break; @@ -866,8 +867,8 @@ case sizeof(float): while ( fromBytes < lastSample ) { *toBytes++ = (float)*fromBytes++; } + break; } - break; case sizeof(double): { // uint8_t -> double @@ -877,8 +878,8 @@ case sizeof(double): while ( fromBytes < lastSample ) { *toBytes++ = (double)*fromBytes++; } + break; } - break; } break; @@ -892,8 +893,8 @@ case sizeof(float complex): while ( fromBytes < lastSample ) { *toBytes++ = (float complex)*fromBytes++; } + break; } - break; case sizeof(double complex): { // uint8_t -> double complex @@ -903,8 +904,8 @@ case sizeof(double complex): while ( fromBytes < lastSample ) { *toBytes++ = (double complex)*fromBytes++; } + break; } - break; } break; @@ -918,8 +919,8 @@ case sizeof(NSDecimal): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFromUnsignedChar(*fromBytes++); } + break; } - break; } break; } @@ -940,8 +941,8 @@ case sizeof(int8_t): while ( fromBytes < lastSample ) { *toBytes++ = (int8_t)*fromBytes++; } + break; } - break; case sizeof(int16_t): { // uint16_t -> int16_t @@ -951,8 +952,8 @@ case sizeof(int16_t): while ( fromBytes < lastSample ) { *toBytes++ = (int16_t)*fromBytes++; } + break; } - break; case sizeof(int32_t): { // uint16_t -> int32_t @@ -962,8 +963,8 @@ case sizeof(int32_t): while ( fromBytes < lastSample ) { *toBytes++ = (int32_t)*fromBytes++; } + break; } - break; case sizeof(int64_t): { // uint16_t -> int64_t @@ -973,8 +974,8 @@ case sizeof(int64_t): while ( fromBytes < lastSample ) { *toBytes++ = (int64_t)*fromBytes++; } + break; } - break; } break; @@ -988,14 +989,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 @@ -1005,8 +1005,8 @@ case sizeof(uint32_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint32_t)*fromBytes++; } + break; } - break; case sizeof(uint64_t): { // uint16_t -> uint64_t @@ -1016,8 +1016,8 @@ case sizeof(uint64_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint64_t)*fromBytes++; } + break; } - break; } break; @@ -1031,8 +1031,8 @@ case sizeof(float): while ( fromBytes < lastSample ) { *toBytes++ = (float)*fromBytes++; } + break; } - break; case sizeof(double): { // uint16_t -> double @@ -1042,8 +1042,8 @@ case sizeof(double): while ( fromBytes < lastSample ) { *toBytes++ = (double)*fromBytes++; } + break; } - break; } break; @@ -1057,8 +1057,8 @@ case sizeof(float complex): while ( fromBytes < lastSample ) { *toBytes++ = (float complex)*fromBytes++; } + break; } - break; case sizeof(double complex): { // uint16_t -> double complex @@ -1068,8 +1068,8 @@ case sizeof(double complex): while ( fromBytes < lastSample ) { *toBytes++ = (double complex)*fromBytes++; } + break; } - break; } break; @@ -1083,8 +1083,8 @@ case sizeof(NSDecimal): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFromUnsignedShort(*fromBytes++); } + break; } - break; } break; } @@ -1105,8 +1105,8 @@ case sizeof(int8_t): while ( fromBytes < lastSample ) { *toBytes++ = (int8_t)*fromBytes++; } + break; } - break; case sizeof(int16_t): { // uint32_t -> int16_t @@ -1116,8 +1116,8 @@ case sizeof(int16_t): while ( fromBytes < lastSample ) { *toBytes++ = (int16_t)*fromBytes++; } + break; } - break; case sizeof(int32_t): { // uint32_t -> int32_t @@ -1127,8 +1127,8 @@ case sizeof(int32_t): while ( fromBytes < lastSample ) { *toBytes++ = (int32_t)*fromBytes++; } + break; } - break; case sizeof(int64_t): { // uint32_t -> int64_t @@ -1138,8 +1138,8 @@ case sizeof(int64_t): while ( fromBytes < lastSample ) { *toBytes++ = (int64_t)*fromBytes++; } + break; } - break; } break; @@ -1153,8 +1153,8 @@ case sizeof(uint8_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint8_t)*fromBytes++; } + break; } - break; case sizeof(uint16_t): { // uint32_t -> uint16_t @@ -1164,14 +1164,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 @@ -1181,8 +1180,8 @@ case sizeof(uint64_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint64_t)*fromBytes++; } + break; } - break; } break; @@ -1196,8 +1195,8 @@ case sizeof(float): while ( fromBytes < lastSample ) { *toBytes++ = (float)*fromBytes++; } + break; } - break; case sizeof(double): { // uint32_t -> double @@ -1207,8 +1206,8 @@ case sizeof(double): while ( fromBytes < lastSample ) { *toBytes++ = (double)*fromBytes++; } + break; } - break; } break; @@ -1222,8 +1221,8 @@ case sizeof(float complex): while ( fromBytes < lastSample ) { *toBytes++ = (float complex)*fromBytes++; } + break; } - break; case sizeof(double complex): { // uint32_t -> double complex @@ -1233,8 +1232,8 @@ case sizeof(double complex): while ( fromBytes < lastSample ) { *toBytes++ = (double complex)*fromBytes++; } + break; } - break; } break; @@ -1248,8 +1247,8 @@ case sizeof(NSDecimal): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFromUnsignedLong(*fromBytes++); } + break; } - break; } break; } @@ -1270,8 +1269,8 @@ case sizeof(int8_t): while ( fromBytes < lastSample ) { *toBytes++ = (int8_t)*fromBytes++; } + break; } - break; case sizeof(int16_t): { // uint64_t -> int16_t @@ -1281,8 +1280,8 @@ case sizeof(int16_t): while ( fromBytes < lastSample ) { *toBytes++ = (int16_t)*fromBytes++; } + break; } - break; case sizeof(int32_t): { // uint64_t -> int32_t @@ -1292,8 +1291,8 @@ case sizeof(int32_t): while ( fromBytes < lastSample ) { *toBytes++ = (int32_t)*fromBytes++; } + break; } - break; case sizeof(int64_t): { // uint64_t -> int64_t @@ -1303,8 +1302,8 @@ case sizeof(int64_t): while ( fromBytes < lastSample ) { *toBytes++ = (int64_t)*fromBytes++; } + break; } - break; } break; @@ -1318,8 +1317,8 @@ case sizeof(uint8_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint8_t)*fromBytes++; } + break; } - break; case sizeof(uint16_t): { // uint64_t -> uint16_t @@ -1329,8 +1328,8 @@ case sizeof(uint16_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint16_t)*fromBytes++; } + break; } - break; case sizeof(uint32_t): { // uint64_t -> uint32_t @@ -1340,14 +1339,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; @@ -1361,8 +1359,8 @@ case sizeof(float): while ( fromBytes < lastSample ) { *toBytes++ = (float)*fromBytes++; } + break; } - break; case sizeof(double): { // uint64_t -> double @@ -1372,8 +1370,8 @@ case sizeof(double): while ( fromBytes < lastSample ) { *toBytes++ = (double)*fromBytes++; } + break; } - break; } break; @@ -1387,8 +1385,8 @@ case sizeof(float complex): while ( fromBytes < lastSample ) { *toBytes++ = (float complex)*fromBytes++; } + break; } - break; case sizeof(double complex): { // uint64_t -> double complex @@ -1398,8 +1396,8 @@ case sizeof(double complex): while ( fromBytes < lastSample ) { *toBytes++ = (double complex)*fromBytes++; } + break; } - break; } break; @@ -1413,8 +1411,8 @@ case sizeof(NSDecimal): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFromUnsignedLongLong(*fromBytes++); } + break; } - break; } break; } @@ -1439,8 +1437,8 @@ case sizeof(int8_t): while ( fromBytes < lastSample ) { *toBytes++ = (int8_t)*fromBytes++; } + break; } - break; case sizeof(int16_t): { // float -> int16_t @@ -1450,8 +1448,8 @@ case sizeof(int16_t): while ( fromBytes < lastSample ) { *toBytes++ = (int16_t)*fromBytes++; } + break; } - break; case sizeof(int32_t): { // float -> int32_t @@ -1461,8 +1459,8 @@ case sizeof(int32_t): while ( fromBytes < lastSample ) { *toBytes++ = (int32_t)*fromBytes++; } + break; } - break; case sizeof(int64_t): { // float -> int64_t @@ -1472,8 +1470,8 @@ case sizeof(int64_t): while ( fromBytes < lastSample ) { *toBytes++ = (int64_t)*fromBytes++; } + break; } - break; } break; @@ -1487,8 +1485,8 @@ case sizeof(uint8_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint8_t)*fromBytes++; } + break; } - break; case sizeof(uint16_t): { // float -> uint16_t @@ -1498,8 +1496,8 @@ case sizeof(uint16_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint16_t)*fromBytes++; } + break; } - break; case sizeof(uint32_t): { // float -> uint32_t @@ -1509,8 +1507,8 @@ case sizeof(uint32_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint32_t)*fromBytes++; } + break; } - break; case sizeof(uint64_t): { // float -> uint64_t @@ -1520,18 +1518,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 @@ -1541,8 +1538,8 @@ case sizeof(double): while ( fromBytes < lastSample ) { *toBytes++ = (double)*fromBytes++; } + break; } - break; } break; @@ -1556,8 +1553,8 @@ case sizeof(float complex): while ( fromBytes < lastSample ) { *toBytes++ = (float complex)*fromBytes++; } + break; } - break; case sizeof(double complex): { // float -> double complex @@ -1567,8 +1564,8 @@ case sizeof(double complex): while ( fromBytes < lastSample ) { *toBytes++ = (double complex)*fromBytes++; } + break; } - break; } break; @@ -1582,8 +1579,8 @@ case sizeof(NSDecimal): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFromFloat(*fromBytes++); } + break; } - break; } break; } @@ -1604,8 +1601,8 @@ case sizeof(int8_t): while ( fromBytes < lastSample ) { *toBytes++ = (int8_t)*fromBytes++; } + break; } - break; case sizeof(int16_t): { // double -> int16_t @@ -1615,8 +1612,8 @@ case sizeof(int16_t): while ( fromBytes < lastSample ) { *toBytes++ = (int16_t)*fromBytes++; } + break; } - break; case sizeof(int32_t): { // double -> int32_t @@ -1626,8 +1623,8 @@ case sizeof(int32_t): while ( fromBytes < lastSample ) { *toBytes++ = (int32_t)*fromBytes++; } + break; } - break; case sizeof(int64_t): { // double -> int64_t @@ -1637,8 +1634,8 @@ case sizeof(int64_t): while ( fromBytes < lastSample ) { *toBytes++ = (int64_t)*fromBytes++; } + break; } - break; } break; @@ -1652,8 +1649,8 @@ case sizeof(uint8_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint8_t)*fromBytes++; } + break; } - break; case sizeof(uint16_t): { // double -> uint16_t @@ -1663,8 +1660,8 @@ case sizeof(uint16_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint16_t)*fromBytes++; } + break; } - break; case sizeof(uint32_t): { // double -> uint32_t @@ -1674,8 +1671,8 @@ case sizeof(uint32_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint32_t)*fromBytes++; } + break; } - break; case sizeof(uint64_t): { // double -> uint64_t @@ -1685,8 +1682,8 @@ case sizeof(uint64_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint64_t)*fromBytes++; } + break; } - break; } break; @@ -1700,14 +1697,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; @@ -1721,8 +1717,8 @@ case sizeof(float complex): while ( fromBytes < lastSample ) { *toBytes++ = (float complex)*fromBytes++; } + break; } - break; case sizeof(double complex): { // double -> double complex @@ -1732,8 +1728,8 @@ case sizeof(double complex): while ( fromBytes < lastSample ) { *toBytes++ = (double complex)*fromBytes++; } + break; } - break; } break; @@ -1747,8 +1743,8 @@ case sizeof(NSDecimal): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFromDouble(*fromBytes++); } + break; } - break; } break; } @@ -1773,8 +1769,8 @@ case sizeof(int8_t): while ( fromBytes < lastSample ) { *toBytes++ = (int8_t)*fromBytes++; } + break; } - break; case sizeof(int16_t): { // float complex -> int16_t @@ -1784,8 +1780,8 @@ case sizeof(int16_t): while ( fromBytes < lastSample ) { *toBytes++ = (int16_t)*fromBytes++; } + break; } - break; case sizeof(int32_t): { // float complex -> int32_t @@ -1795,8 +1791,8 @@ case sizeof(int32_t): while ( fromBytes < lastSample ) { *toBytes++ = (int32_t)*fromBytes++; } + break; } - break; case sizeof(int64_t): { // float complex -> int64_t @@ -1806,8 +1802,8 @@ case sizeof(int64_t): while ( fromBytes < lastSample ) { *toBytes++ = (int64_t)*fromBytes++; } + break; } - break; } break; @@ -1821,8 +1817,8 @@ case sizeof(uint8_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint8_t)*fromBytes++; } + break; } - break; case sizeof(uint16_t): { // float complex -> uint16_t @@ -1832,8 +1828,8 @@ case sizeof(uint16_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint16_t)*fromBytes++; } + break; } - break; case sizeof(uint32_t): { // float complex -> uint32_t @@ -1843,8 +1839,8 @@ case sizeof(uint32_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint32_t)*fromBytes++; } + break; } - break; case sizeof(uint64_t): { // float complex -> uint64_t @@ -1854,8 +1850,8 @@ case sizeof(uint64_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint64_t)*fromBytes++; } + break; } - break; } break; @@ -1869,8 +1865,8 @@ case sizeof(float): while ( fromBytes < lastSample ) { *toBytes++ = (float)*fromBytes++; } + break; } - break; case sizeof(double): { // float complex -> double @@ -1880,18 +1876,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 @@ -1901,8 +1896,8 @@ case sizeof(double complex): while ( fromBytes < lastSample ) { *toBytes++ = (double complex)*fromBytes++; } + break; } - break; } break; @@ -1916,8 +1911,8 @@ case sizeof(NSDecimal): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFromFloat(crealf(*fromBytes++)); } + break; } - break; } break; } @@ -1938,8 +1933,8 @@ case sizeof(int8_t): while ( fromBytes < lastSample ) { *toBytes++ = (int8_t)*fromBytes++; } + break; } - break; case sizeof(int16_t): { // double complex -> int16_t @@ -1949,8 +1944,8 @@ case sizeof(int16_t): while ( fromBytes < lastSample ) { *toBytes++ = (int16_t)*fromBytes++; } + break; } - break; case sizeof(int32_t): { // double complex -> int32_t @@ -1960,8 +1955,8 @@ case sizeof(int32_t): while ( fromBytes < lastSample ) { *toBytes++ = (int32_t)*fromBytes++; } + break; } - break; case sizeof(int64_t): { // double complex -> int64_t @@ -1971,8 +1966,8 @@ case sizeof(int64_t): while ( fromBytes < lastSample ) { *toBytes++ = (int64_t)*fromBytes++; } + break; } - break; } break; @@ -1986,8 +1981,8 @@ case sizeof(uint8_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint8_t)*fromBytes++; } + break; } - break; case sizeof(uint16_t): { // double complex -> uint16_t @@ -1997,8 +1992,8 @@ case sizeof(uint16_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint16_t)*fromBytes++; } + break; } - break; case sizeof(uint32_t): { // double complex -> uint32_t @@ -2008,8 +2003,8 @@ case sizeof(uint32_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint32_t)*fromBytes++; } + break; } - break; case sizeof(uint64_t): { // double complex -> uint64_t @@ -2019,8 +2014,8 @@ case sizeof(uint64_t): while ( fromBytes < lastSample ) { *toBytes++ = (uint64_t)*fromBytes++; } + break; } - break; } break; @@ -2034,8 +2029,8 @@ case sizeof(float): while ( fromBytes < lastSample ) { *toBytes++ = (float)*fromBytes++; } + break; } - break; case sizeof(double): { // double complex -> double @@ -2045,8 +2040,8 @@ case sizeof(double): while ( fromBytes < lastSample ) { *toBytes++ = (double)*fromBytes++; } + break; } - break; } break; @@ -2060,14 +2055,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; @@ -2081,8 +2075,8 @@ case sizeof(NSDecimal): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFromDouble(creal(*fromBytes++)); } + break; } - break; } break; } @@ -2107,8 +2101,8 @@ case sizeof(int8_t): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalCharValue(*fromBytes++); } + break; } - break; case sizeof(int16_t): { // NSDecimal -> int16_t @@ -2118,8 +2112,8 @@ case sizeof(int16_t): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalShortValue(*fromBytes++); } + break; } - break; case sizeof(int32_t): { // NSDecimal -> int32_t @@ -2129,8 +2123,8 @@ case sizeof(int32_t): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalLongValue(*fromBytes++); } + break; } - break; case sizeof(int64_t): { // NSDecimal -> int64_t @@ -2140,8 +2134,8 @@ case sizeof(int64_t): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalLongLongValue(*fromBytes++); } + break; } - break; } break; @@ -2155,8 +2149,8 @@ case sizeof(uint8_t): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalUnsignedCharValue(*fromBytes++); } + break; } - break; case sizeof(uint16_t): { // NSDecimal -> uint16_t @@ -2166,8 +2160,8 @@ case sizeof(uint16_t): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalUnsignedShortValue(*fromBytes++); } + break; } - break; case sizeof(uint32_t): { // NSDecimal -> uint32_t @@ -2177,8 +2171,8 @@ case sizeof(uint32_t): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalUnsignedLongValue(*fromBytes++); } + break; } - break; case sizeof(uint64_t): { // NSDecimal -> uint64_t @@ -2188,8 +2182,8 @@ case sizeof(uint64_t): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalUnsignedLongLongValue(*fromBytes++); } + break; } - break; } break; @@ -2203,8 +2197,8 @@ case sizeof(float): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFloatValue(*fromBytes++); } + break; } - break; case sizeof(double): { // NSDecimal -> double @@ -2214,8 +2208,8 @@ case sizeof(double): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalDoubleValue(*fromBytes++); } + break; } - break; } break; @@ -2229,8 +2223,8 @@ case sizeof(float complex): while ( fromBytes < lastSample ) { *toBytes++ = CPTDecimalFloatValue(*fromBytes++); } + break; } - break; case sizeof(double complex): { // NSDecimal -> double complex @@ -2240,18 +2234,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; } @@ -2283,8 +2276,8 @@ case sizeof(uint16_t): uint16_t swapped = CFSwapInt16(*samples); *samples++ = swapped; } + break; } - break; case sizeof(uint32_t): { @@ -2296,8 +2289,8 @@ case sizeof(uint32_t): uint32_t swapped = CFSwapInt32(*samples); *samples++ = swapped; } + break; } - break; case sizeof(uint64_t): { @@ -2309,8 +2302,8 @@ case sizeof(uint64_t): uint64_t swapped = CFSwapInt64(*samples); *samples++ = swapped; } + break; } - break; default: // do nothing diff --git a/framework/Source/CPTNumericData.h b/framework/Source/CPTNumericData.h index 0215482fc..0d097dc90 100644 --- a/framework/Source/CPTNumericData.h +++ b/framework/Source/CPTNumericData.h @@ -1,5 +1,12 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTDefinitions.h" #import "CPTNumericDataType.h" +#endif @interface CPTNumericData : NSObject diff --git a/framework/Source/CPTNumericData.m b/framework/Source/CPTNumericData.m index b8c5d1243..7ebc0c400 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 @ref "CPTNumericData(TypeConversion)" **/ @implementation CPTNumericData @@ -110,10 +112,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 +127,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 +146,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 +165,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 +180,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 +198,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 +220,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 +242,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 +263,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 +279,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 +298,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 +317,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 +332,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 +354,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 +376,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 +398,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 @@ -435,7 +437,7 @@ -(void)commonInitWithData:(nonnull NSData *)newData CPTNumberArray *theShape = shapeArray; - if ( theShape == nil ) { + if ( !theShape ) { self.shape = @[@(self.numberOfSamples)]; } else { @@ -575,9 +577,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 +597,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 +697,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 +724,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 +738,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, ... { @@ -773,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]; } } @@ -788,10 +790,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. **/ @@ -892,8 +894,8 @@ case sizeof(int8_t): *toBytes++ = 0; } } + break; } - break; case sizeof(int16_t): { @@ -906,8 +908,8 @@ case sizeof(int16_t): *toBytes++ = 0; } } + break; } - break; case sizeof(int32_t): { @@ -920,8 +922,8 @@ case sizeof(int32_t): *toBytes++ = 0; } } + break; } - break; case sizeof(int64_t): { @@ -934,8 +936,8 @@ case sizeof(int64_t): *toBytes++ = 0; } } + break; } - break; } break; @@ -952,8 +954,8 @@ case sizeof(uint8_t): *toBytes++ = 0; } } + break; } - break; case sizeof(uint16_t): { @@ -966,8 +968,8 @@ case sizeof(uint16_t): *toBytes++ = 0; } } + break; } - break; case sizeof(uint32_t): { @@ -980,8 +982,8 @@ case sizeof(uint32_t): *toBytes++ = 0; } } + break; } - break; case sizeof(uint64_t): { @@ -994,8 +996,8 @@ case sizeof(uint64_t): *toBytes++ = 0; } } + break; } - break; } break; @@ -1012,8 +1014,8 @@ case sizeof(float): *toBytes++ = NAN; } } + break; } - break; case sizeof(double): { @@ -1026,8 +1028,8 @@ case sizeof(double): *toBytes++ = (double)NAN; } } + break; } - break; } break; @@ -1044,8 +1046,8 @@ case sizeof(float complex): *toBytes++ = CMPLXF(NAN, NAN); } } + break; } - break; case sizeof(double complex): { @@ -1058,8 +1060,8 @@ case sizeof(double complex): *toBytes++ = CMPLX(NAN, NAN); } } + break; } - break; } break; @@ -1076,8 +1078,8 @@ case sizeof(NSDecimal): *toBytes++ = CPTDecimalNaN(); } } + break; } - break; } break; } @@ -1161,6 +1163,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"]; @@ -1172,9 +1175,9 @@ -(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 { if ((self = [super init])) { 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/CPTNumericDataType.h b/framework/Source/CPTNumericDataType.h index 0898f7b60..01fa7ac08 100644 --- a/framework/Source/CPTNumericDataType.h +++ b/framework/Source/CPTNumericDataType.h @@ -1,5 +1,7 @@ /// @file +#import + /** * @brief Enumeration of data formats for numeric data. **/ @@ -14,9 +16,10 @@ 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) { +typedef NS_CLOSED_ENUM(NSInteger, CPTDataOrder) +{ CPTDataOrderRowsFirst, ///< Numeric data is arranged in row-major order. CPTDataOrderColumnsFirst ///< Numeric data is arranged in column-major order. }; @@ -24,16 +27,18 @@ 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 } CPTNumericDataType; +#ifdef __cplusplus #if __cplusplus extern "C" { #endif +#endif /// @name Data Type Utilities /// @{ @@ -45,6 +50,8 @@ BOOL CPTDataTypeEqualToDataType(CPTNumericDataType dataType1, CPTNumericDataType /// @} +#ifdef __cplusplus #if __cplusplus } #endif +#endif 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/CPTNumericDataTypeConversionTests.m b/framework/Source/CPTNumericDataTypeConversionTests.m index 8fc215339..92e3b5904 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]); } @@ -196,7 +203,7 @@ -(void)testTypeConversionSwapsByteOrderDouble uint64_t end = *(const uint64_t *)swappedData.bytes; union swap { - double v; + double v; CFSwappedFloat64 sv; } result; @@ -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/CPTPathExtensions.h b/framework/Source/CPTPathExtensions.h index c47bfcf5a..449aa715a 100644 --- a/framework/Source/CPTPathExtensions.h +++ b/framework/Source/CPTPathExtensions.h @@ -1,8 +1,12 @@ /// @file +#import + +#ifdef __cplusplus #if __cplusplus extern "C" { #endif +#endif CF_IMPLICIT_BRIDGING_ENABLED @@ -12,6 +16,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/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..18b13472b 100644 --- a/framework/Source/CPTPieChart.h +++ b/framework/Source/CPTPieChart.h @@ -1,8 +1,14 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#import +#import +#else #import "CPTDefinitions.h" #import "CPTFill.h" #import "CPTPlot.h" - -/// @file +#endif @class CPTColor; @class CPTPieChart; @@ -33,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. }; @@ -50,9 +57,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 +67,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 +80,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 +90,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 +102,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 +134,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 +143,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 +155,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 +164,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 +176,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 +185,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 83bbda7c8..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 @@ -128,34 +128,42 @@ @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) } }; /** @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 @@ -171,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 { @@ -204,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 { @@ -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); @@ -735,8 +749,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); @@ -759,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]]; } @@ -799,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 { @@ -837,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 @@ -992,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 { @@ -1013,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 { @@ -1095,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 { @@ -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:)] || @@ -1160,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 { @@ -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.h b/framework/Source/CPTPlot.h index d9dd3d976..4c79f7bd4 100644 --- a/framework/Source/CPTPlot.h +++ b/framework/Source/CPTPlot.h @@ -1,8 +1,14 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#import +#import +#else #import "CPTAnnotationHostLayer.h" #import "CPTDefinitions.h" #import "CPTNumericDataType.h" - -/// @file +#endif @class CPTLegend; @class CPTMutableNumericData; @@ -54,8 +60,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 +75,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 +90,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 +134,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 +146,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 +156,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 +184,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 +193,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 +205,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 +214,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 +226,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 +235,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. @@ -318,31 +324,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 +360,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,16 +379,13 @@ 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 #pragma mark - -/** @category CPTPlot(AbstractMethods) - * @brief CPTPlot abstract methods—must be overridden by subclasses - **/ @interface CPTPlot(AbstractMethods) /// @name Fields diff --git a/framework/Source/CPTPlot.m b/framework/Source/CPTPlot.m index 5cd2637a0..767a7175f 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 @@ -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 @ref "CPTPlot(AbstractMethods)" **/ @implementation CPTPlot @@ -247,7 +248,7 @@ @implementation CPTPlot /// @cond -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST #else +(void)initialize { @@ -287,8 +288,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 { @@ -373,6 +374,7 @@ -(void)encodeWithCoder:(nonnull NSCoder *)coder [super encodeWithCoder:coder]; id theDataSource = self.dataSource; + if ( [theDataSource conformsToProtocol:@protocol(NSCoding)] ) { [coder encodeConditionalObject:theDataSource forKey:@"CPTPlot.dataSource"]; } @@ -468,7 +470,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 @@ -492,6 +494,7 @@ -(void)drawInContext:(nonnull CGContextRef)context [super drawInContext:context]; id theDelegate = (id)self.delegate; + if ( [theDelegate respondsToSelector:@selector(didFinishDrawing:)] ) { [theDelegate didFinishDrawing:self]; } @@ -596,7 +599,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 @@ -629,6 +632,7 @@ -(void)insertDataAtIndex:(NSUInteger)idx numberOfRecords:(NSUInteger)numberOfRec } CPTMutableAnnotationArray *labelArray = self.labelAnnotations; + if ( labelArray ) { id nullObject = [NSNull null]; NSUInteger lastIndex = idx + numberOfRecords - 1; @@ -768,9 +772,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 { @@ -837,8 +841,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. **/ @@ -934,8 +938,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++ ) { @@ -970,7 +974,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 @@ -1012,8 +1016,8 @@ -(void)cacheNumbers:(nullable id)numbers forField:(NSUInteger)fieldEnum [self setCachedDataType:self.decimalDataType]; break; } + break; } - break; case CPTScaleTypeCategory: { @@ -1046,8 +1050,8 @@ -(void)cacheNumbers:(nullable id)numbers forField:(NSUInteger)fieldEnum else { [self.cachedData removeObjectForKey:cacheKey]; } + break; } - break; default: break; @@ -1062,9 +1066,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 { @@ -1098,20 +1102,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: { @@ -1133,8 +1137,8 @@ -(void)cacheNumbers:(nullable id)numbers forField:(NSUInteger)fieldEnum atRecord shape:nil]; } } + break; } - break; default: [self.cachedData removeObjectForKey:cacheKey]; @@ -1225,8 +1229,8 @@ -(BOOL)doublePrecisionCache break; } } + break; } - break; case CPTPlotCachePrecisionDouble: result = YES; @@ -1240,8 +1244,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 { @@ -1249,9 +1253,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 { @@ -1261,9 +1265,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 { @@ -1277,8 +1281,8 @@ -(double)cachedDoubleForField:(NSUInteger)fieldEnum recordIndex:(NSUInteger)idx if ( doubleNumber ) { return *doubleNumber; } + break; } - break; case CPTDecimalDataType: { @@ -1286,8 +1290,8 @@ -(double)cachedDoubleForField:(NSUInteger)fieldEnum recordIndex:(NSUInteger)idx if ( decimalNumber ) { return CPTDecimalDoubleValue(*decimalNumber); } + break; } - break; default: [NSException raise:CPTException format:@"Unsupported data type format"]; @@ -1298,9 +1302,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 { @@ -1314,8 +1318,8 @@ -(NSDecimal)cachedDecimalForField:(NSUInteger)fieldEnum recordIndex:(NSUInteger) if ( doubleNumber ) { return CPTDecimalFromDouble(*doubleNumber); } + break; } - break; case CPTDecimalDataType: { @@ -1323,8 +1327,8 @@ -(NSDecimal)cachedDecimalForField:(NSUInteger)fieldEnum recordIndex:(NSUInteger) if ( decimalNumber ) { return *decimalNumber; } + break; } - break; default: [NSException raise:CPTException format:@"Unsupported data type format"]; @@ -1377,8 +1381,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 { @@ -1386,9 +1390,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 { @@ -1397,7 +1401,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 { @@ -1420,8 +1424,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 { @@ -1453,8 +1457,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 { @@ -1465,6 +1469,7 @@ -(nullable CPTPlotRange *)plotRangeForField:(NSUInteger)fieldEnum CPTPlotRange *range = nil; NSUInteger numberOfSamples = numbers.numberOfSamples; + if ( numberOfSamples > 0 ) { if ( self.doublePrecisionCache ) { double min = (double)INFINITY; @@ -1519,8 +1524,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 { @@ -1531,6 +1536,7 @@ -(nullable CPTPlotRange *)plotRangeForCoordinate:(CPTCoordinate)coord } CPTMutablePlotRange *unionRange = nil; + for ( NSNumber *field in fields ) { CPTPlotRange *currentRange = [self plotRangeForField:field.unsignedIntegerValue]; if ( !unionRange ) { @@ -1545,8 +1551,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 { @@ -1554,8 +1560,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 { @@ -1566,6 +1572,7 @@ -(nullable CPTPlotRange *)plotRangeEnclosingCoordinate:(CPTCoordinate)coord } CPTMutablePlotRange *unionRange = nil; + for ( NSNumber *field in fields ) { CPTPlotRange *currentRange = [self plotRangeEnclosingField:field.unsignedIntegerValue]; if ( !unionRange ) { @@ -1584,7 +1591,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 { @@ -1613,6 +1620,7 @@ -(void)relabel BOOL hasCachedLabels = NO; CPTMutableLayerArray *cachedLabels = (CPTMutableLayerArray *)[self cachedArrayForKey:CPTPlotBindingDataLabels]; + for ( CPTLayer *label in cachedLabels ) { if ( ![label isKindOfClass:nullClass] ) { hasCachedLabels = YES; @@ -1661,7 +1669,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]; @@ -1726,7 +1734,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 { @@ -1792,8 +1800,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 { @@ -1811,8 +1819,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 { @@ -1831,9 +1839,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 @@ -1850,6 +1858,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]; } @@ -1894,9 +1903,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 { @@ -1909,6 +1918,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:)] || @@ -1970,9 +1980,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 { @@ -1987,6 +1997,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:)] || @@ -2238,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 - @@ -2260,8 +2276,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 { @@ -2269,9 +2285,9 @@ -(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 { return CPTCoordinateNone; @@ -2282,7 +2298,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 { @@ -2294,9 +2310,9 @@ -(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 { return NSNotFound; diff --git a/framework/Source/CPTPlotArea.h b/framework/Source/CPTPlotArea.h index 1d29c5f78..55ead340f 100644 --- a/framework/Source/CPTPlotArea.h +++ b/framework/Source/CPTPlotArea.h @@ -1,6 +1,14 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#import +#import +#else #import "CPTAnnotationHostLayer.h" #import "CPTGraph.h" #import "CPTLayer.h" +#endif @class CPTAxis; @class CPTAxisLabelGroup; @@ -32,7 +40,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 +55,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 +70,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 34f04616d..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 @@ -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 { @@ -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; @@ -626,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 { @@ -690,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 { @@ -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:)] || @@ -741,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 { @@ -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/CPTPlotAreaFrame.h b/framework/Source/CPTPlotAreaFrame.h index 89067ce11..fe3e1f4aa 100644 --- a/framework/Source/CPTPlotAreaFrame.h +++ b/framework/Source/CPTPlotAreaFrame.h @@ -1,4 +1,10 @@ +/// @file + +#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 c5723c6a0..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() @@ -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.h b/framework/Source/CPTPlotGroup.h deleted file mode 100644 index 77d451dec..000000000 --- a/framework/Source/CPTPlotGroup.h +++ /dev/null @@ -1,14 +0,0 @@ -#import "CPTLayer.h" - -@class CPTPlot; - -@interface CPTPlotGroup : CPTLayer - -/// @name Adding and Removing Plots -/// @{ --(void)addPlot:(nonnull CPTPlot *)plot; --(void)removePlot:(nullable CPTPlot *)plot; --(void)insertPlot:(nonnull CPTPlot *)plot atIndex:(NSUInteger)idx; -/// @} - -@end diff --git a/framework/Source/CPTPlotRange.h b/framework/Source/CPTPlotRange.h index 9a3460e96..6c83bd6c8 100644 --- a/framework/Source/CPTPlotRange.h +++ b/framework/Source/CPTPlotRange.h @@ -1,13 +1,18 @@ -#import "CPTDefinitions.h" - /// @file +#ifdef CPT_IS_FRAMEWORK +#import +#else +#import "CPTDefinitions.h" +#endif + @class CPTPlotRange; /** * @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/framework/Source/CPTPlotRange.m b/framework/Source/CPTPlotRange.m index c83c432e6..80e088df4 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() @@ -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,14 +160,14 @@ +(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 { - NSParameterAssert(loc); - NSParameterAssert(len); + NSParameterAssert(loc != nil); + NSParameterAssert(len != nil); if ((self = [super init])) { locationDecimal = loc.decimalValue; @@ -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,9 +468,9 @@ -(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 { if ((self = [super init])) { @@ -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/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.h b/framework/Source/CPTPlotSpace.h index 902817b73..3e0dc80e4 100644 --- a/framework/Source/CPTPlotSpace.h +++ b/framework/Source/CPTPlotSpace.h @@ -1,6 +1,14 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#import +#import +#else #import "CPTDefinitions.h" #import "CPTPlot.h" #import "CPTResponder.h" +#endif @class CPTLayer; @class CPTPlotRange; @@ -66,10 +74,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 +88,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 +100,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,49 +119,49 @@ 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; -#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. - * @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; @@ -208,9 +216,6 @@ typedef NSMutableArray<__kindof CPTPlotSpace *> CPTMutablePlotSpaceArray; #pragma mark - -/** @category CPTPlotSpace(AbstractMethods) - * @brief CPTPlotSpace abstract methods—must be overridden by subclasses - **/ @interface CPTPlotSpace(AbstractMethods) /// @name Coordinate Space Conversions diff --git a/framework/Source/CPTPlotSpace.m b/framework/Source/CPTPlotSpace.m index 644b1df79..9d09abecb 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 @ref "CPTPlotSpace(AbstractMethods)" **/ @implementation CPTPlotSpace @@ -125,6 +127,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"]; } @@ -138,9 +141,9 @@ -(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 { if ((self = [super init])) { @@ -178,9 +181,9 @@ +(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 { NSMutableDictionary *names = self.categoryNames; @@ -211,9 +214,9 @@ -(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 { NSParameterAssert(category); @@ -225,9 +228,9 @@ -(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 { NSParameterAssert(category); @@ -242,10 +245,10 @@ -(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 { NSParameterAssert(category); @@ -260,8 +263,8 @@ -(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 { NSMutableDictionary *names = self.categoryNames; @@ -286,7 +289,7 @@ -(void)setCategories:(nullable CPTStringArray *)newCategories forCoordinate:(CPT /** * @brief Remove all categories for every coordinate. - */ + **/ -(void)removeAllCategories { self.categoryNames = nil; @@ -294,9 +297,9 @@ -(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 { CPTMutableCategorySet *categories = [self orderedSetForCoordinate:coordinate]; @@ -306,10 +309,10 @@ -(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 { CPTMutableCategorySet *categories = [self orderedSetForCoordinate:coordinate]; @@ -321,10 +324,10 @@ -(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 { NSParameterAssert(category); @@ -352,9 +355,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 { @@ -380,9 +383,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 { @@ -408,9 +411,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 { @@ -437,8 +440,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 { @@ -452,7 +455,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 /** @@ -465,10 +468,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 { @@ -490,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 @@ -502,8 +510,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 { @@ -513,9 +521,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 { @@ -525,9 +533,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 { @@ -537,8 +545,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 { @@ -547,8 +555,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 { @@ -557,8 +565,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 { @@ -566,8 +574,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 { @@ -575,8 +583,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 { @@ -585,8 +593,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 { @@ -595,8 +603,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 { @@ -604,7 +612,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 @@ -612,8 +620,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 { @@ -621,7 +629,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 @@ -629,8 +637,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 { @@ -645,7 +653,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 @@ -656,6 +664,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 ) { @@ -681,7 +690,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 @@ -692,6 +701,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/CPTPlotSpaceAnnotation.h b/framework/Source/CPTPlotSpaceAnnotation.h index e81554e07..f1eadd47a 100644 --- a/framework/Source/CPTPlotSpaceAnnotation.h +++ b/framework/Source/CPTPlotSpaceAnnotation.h @@ -1,4 +1,10 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTAnnotation.h" +#endif @class CPTPlotSpace; diff --git a/framework/Source/CPTPlotSpaceAnnotation.m b/framework/Source/CPTPlotSpaceAnnotation.m index db08c4303..e70864cfd 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,9 +107,9 @@ -(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 { if ((self = [super initWithCoder:coder])) { diff --git a/framework/Source/CPTPlotSymbol.h b/framework/Source/CPTPlotSymbol.h index 36ca6d399..75e61ab30 100644 --- a/framework/Source/CPTPlotSymbol.h +++ b/framework/Source/CPTPlotSymbol.h @@ -1,5 +1,8 @@ /// @file +#import +#import + @class CPTLineStyle; @class CPTFill; @class CPTPlotSymbol; diff --git a/framework/Source/CPTPlotSymbol.m b/framework/Source/CPTPlotSymbol.m index 9bae6be66..c57099406 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 @@ -25,7 +25,7 @@ -(CGSize)layerSizeForScale:(CGFloat)scale; #pragma mark - /** @brief Plot symbols for CPTScatterPlot. - */ +**/ @implementation CPTPlotSymbol /** @property CGPoint anchorPoint @@ -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; @@ -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 { @@ -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/CPTRangePlot.h b/framework/Source/CPTRangePlot.h index 5e3434e38..a96ff8747 100644 --- a/framework/Source/CPTRangePlot.h +++ b/framework/Source/CPTRangePlot.h @@ -1,6 +1,14 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#import +#import +#else #import "CPTDefinitions.h" #import "CPTLineStyle.h" #import "CPTPlot.h" +#endif @class CPTFill; @class CPTRangePlot; @@ -54,9 +62,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,27 +72,27 @@ 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 *)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 - * @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. - * @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 +116,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 +125,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 +137,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 +146,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 +158,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 +167,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 b03c7e6e2..71ac954d8 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,9 +14,7 @@ #import "CPTPlotSpaceAnnotation.h" #import "CPTUtilities.h" #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. @@ -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 { @@ -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 { @@ -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 @@ -680,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 { @@ -710,10 +694,11 @@ -(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; + if ( dataCount == 0 ) { return; } @@ -728,6 +713,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 ) { @@ -1024,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; } @@ -1181,6 +1167,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; @@ -1238,9 +1225,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 { @@ -1252,6 +1239,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:)] || @@ -1303,9 +1291,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 { @@ -1321,6 +1309,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/CPTResponder.h b/framework/Source/CPTResponder.h index 6b56832ff..09759105e 100644 --- a/framework/Source/CPTResponder.h +++ b/framework/Source/CPTResponder.h @@ -1,4 +1,10 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTPlatformSpecificDefines.h" +#endif /** * @brief The basis of all event processing in Core Plot. @@ -12,9 +18,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 +28,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 +38,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,20 +49,20 @@ * @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; -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST #else /** * @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..ebca2b44a 100644 --- a/framework/Source/CPTScatterPlot.h +++ b/framework/Source/CPTScatterPlot.h @@ -1,9 +1,16 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#import +#import +#import +#else #import "CPTDefinitions.h" #import "CPTLimitBand.h" #import "CPTPlot.h" #import "CPTPlotSymbol.h" - -/// @file +#endif @class CPTLineStyle; @class CPTScatterPlot; @@ -74,9 +81,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 +91,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 +117,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 +126,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 +138,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 +147,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 +159,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 +168,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 +191,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 +208,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 +225,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 +238,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 d8417fc1f..68f83575d 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 @@ -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 { @@ -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,14 +449,14 @@ -(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 { CPTPlotSymbol *symbol = [self cachedValueForKey:CPTScatterPlotBindingPlotSymbols recordIndex:idx]; - if ((symbol == nil) || (symbol == [CPTPlot nilData])) { + if ( !symbol || (symbol == [CPTPlot nilData])) { symbol = self.plotSymbol; } @@ -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 @@ -712,8 +709,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 { @@ -725,6 +722,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 ) { @@ -745,8 +743,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 { @@ -787,10 +785,11 @@ -(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; + if ( dataCount == 0 ) { return; } @@ -808,10 +807,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]; } @@ -1021,8 +1022,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 @@ -1243,9 +1244,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. @@ -1325,8 +1326,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. @@ -1398,9 +1399,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 @@ -1471,7 +1472,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 { @@ -1631,6 +1632,7 @@ -(nonnull CGPathRef)newDataLinePath [self reloadDataIfNeeded]; NSUInteger dataCount = self.cachedDataCount; + if ( dataCount == 0 ) { return CGPathCreateMutable(); } @@ -1714,8 +1716,8 @@ -(nullable CPTPlotRange *)plotRangeEnclosingField:(NSUInteger)fieldEnum lowerLeft[CPTCoordinateX].decimalValue)]; range = [CPTPlotRange plotRangeWithLocation:lowerLeft[CPTCoordinateX] length:length]; + break; } - break; case CPTScatterPlotFieldY: { @@ -1724,8 +1726,8 @@ -(nullable CPTPlotRange *)plotRangeEnclosingField:(NSUInteger)fieldEnum lowerLeft[CPTCoordinateY].decimalValue)]; range = [CPTPlotRange plotRangeWithLocation:lowerLeft[CPTCoordinateY] length:length]; + break; } - break; default: break; @@ -1898,9 +1900,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 { @@ -1962,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. @@ -2013,9 +2015,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 { @@ -2091,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 ) { @@ -2262,7 +2264,7 @@ -(void)setAreaBaseValue:(nullable NSNumber *)newAreaBaseValue { BOOL needsUpdate = YES; - if ( newAreaBaseValue ) { + if ( newAreaBaseValue != nil ) { NSNumber *baseValue = newAreaBaseValue; needsUpdate = ![areaBaseValue isEqualToNumber:baseValue]; } @@ -2278,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/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/CPTShadow.h b/framework/Source/CPTShadow.h index 758ba528a..61c81cfb3 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/CPTShadow.m b/framework/Source/CPTShadow.m index 6204c3943..6714ffbac 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() @@ -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/CPTTestCase.m b/framework/Source/CPTTestCase.m index effe3adec..72182a6e7 100644 --- a/framework/Source/CPTTestCase.m +++ b/framework/Source/CPTTestCase.m @@ -11,16 +11,15 @@ -(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; return [unarchiver decodeObjectOfClass:archiveClass forKey:@"test"]; diff --git a/framework/Source/CPTTextLayer.h b/framework/Source/CPTTextLayer.h index 9f3c6773b..1d6f379ae 100644 --- a/framework/Source/CPTTextLayer.h +++ b/framework/Source/CPTTextLayer.h @@ -1,7 +1,12 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTBorderedLayer.h" #import "CPTTextStyle.h" - -/// @file +#endif extern const CGFloat kCPTTextLayerMarginWidth; ///< Margin width around the text. @@ -15,11 +20,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 45a208f31..9864d62b7 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. - * @param newText The text to display. - * @param newStyle The text style used to draw the text. - * @return The initialized CPTTextLayer object. +/** @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]; } @@ -86,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 { @@ -95,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 { @@ -138,12 +134,22 @@ -(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 { - 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; } /// @} @@ -375,10 +381,11 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context } NSString *myText = self.text; + 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)); @@ -386,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; @@ -405,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.h b/framework/Source/CPTTextStyle.h index df94cd374..082d087f4 100644 --- a/framework/Source/CPTTextStyle.h +++ b/framework/Source/CPTTextStyle.h @@ -1,6 +1,14 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#import +#import +#else #import "CPTDefinitions.h" #import "CPTPlatformSpecificDefines.h" #import "CPTTextStylePlatformSpecific.h" +#endif @class CPTColor; @class CPTTextStyle; @@ -35,9 +43,6 @@ typedef NSMutableArray CPTMutableTextStyleArray; #pragma mark - -/** @category CPTTextStyle(CPTPlatformSpecificTextStyleExtensions) - * @brief Platform-specific extensions to CPTTextStyle. - **/ @interface CPTTextStyle(CPTPlatformSpecificTextStyleExtensions) @property (readonly, nonatomic, nonnull) CPTDictionary *attributes; @@ -51,9 +56,6 @@ typedef NSMutableArray CPTMutableTextStyleArray; #pragma mark - -/** @category NSString(CPTTextStyleExtensions) - * @brief NSString extensions for drawing styled text. - **/ @interface NSString(CPTTextStyleExtensions) /// @name Measurement diff --git a/framework/Source/CPTTextStyle.m b/framework/Source/CPTTextStyle.m index f1c5c4628..6cf278831 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() @@ -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 @ref "CPTTextStyle(CPTPlatformSpecificTextStyleExtensions)" **/ @implementation CPTTextStyle @@ -56,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; @@ -75,8 +77,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 { @@ -106,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. **/ @@ -132,7 +134,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 +154,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/CPTTheme.h b/framework/Source/CPTTheme.h index 83cda6ef7..7cdfa3077 100644 --- a/framework/Source/CPTTheme.h +++ b/framework/Source/CPTTheme.h @@ -1,4 +1,10 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTDefinitions.h" +#endif /** * @brief Theme name type. @@ -25,7 +31,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; @@ -38,9 +43,6 @@ extern CPTThemeName __nonnull const kCPTStocksTheme; ///< A graph theme wi @end -/** @category CPTTheme(AbstractMethods) - * @brief CPTTheme abstract methods—must be overridden by subclasses - **/ @interface CPTTheme(AbstractMethods) /// @name Theme Usage diff --git a/framework/Source/CPTTheme.m b/framework/Source/CPTTheme.m index 9d17a6e00..d94ec28b3 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 NSMutableSet *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 @@ -17,6 +39,8 @@ * 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 @ref "CPTTheme(AbstractMethods)" **/ @implementation CPTTheme @@ -58,6 +82,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"]; } @@ -95,6 +120,84 @@ +(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) +{ + 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 && 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. **/ @@ -102,55 +205,34 @@ +(BOOL)supportsSecureCoding { NSSortDescriptor *nameSort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)]; - return [themes sortedArrayUsingDescriptors:@[nameSort]]; + return [[self themeDictionary].allValues sortedArrayUsingDescriptors:@[nameSort]]; } /** @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 { 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 = [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); - - @synchronized ( self ) { - if ( !themes ) { - themes = [[NSMutableSet alloc] init]; - } - - if ( [themes containsObject:themeClass] ) { - [NSException raise:CPTException format:@"Theme class already registered: %@", themeClass]; - } - else { - [themes addObject:themeClass]; - } - } -} - /** @brief The name used for this theme class. * @return The name. **/ +(nonnull CPTThemeName)name { - return NSStringFromClass(self); + return @""; } #pragma mark - @@ -186,11 +268,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]; } @@ -200,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/CPTThemeTests.m b/framework/Source/CPTThemeTests.m index d0007cb38..d9ca89e2a 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 @@ -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/CPTTimeFormatter.h b/framework/Source/CPTTimeFormatter.h index 9a5de1b9d..f4e884a53 100644 --- a/framework/Source/CPTTimeFormatter.h +++ b/framework/Source/CPTTimeFormatter.h @@ -1,4 +1,6 @@ -@interface CPTTimeFormatter : NSNumberFormatter +#import + +@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 8d0ad4b51..05500d652 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,18 +72,32 @@ -(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 { 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 @@ -113,8 +127,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/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.h b/framework/Source/CPTTradingRangePlot.h index b32085afe..3db6ccec2 100644 --- a/framework/Source/CPTTradingRangePlot.h +++ b/framework/Source/CPTTradingRangePlot.h @@ -1,9 +1,16 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#import +#import +#import +#else #import "CPTDefinitions.h" #import "CPTFill.h" #import "CPTLineStyle.h" #import "CPTPlot.h" - -/// @file +#endif @class CPTTradingRangePlot; @@ -58,9 +65,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 +75,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,27 +92,27 @@ 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 *)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 - * @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 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 +122,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 +132,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 +150,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 +168,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 +195,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 +204,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 +216,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 +225,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 +237,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 +246,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 3589b2870..b4dcf43d8 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,9 +13,7 @@ #import "CPTPlotSpaceAnnotation.h" #import "CPTUtilities.h" #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. @@ -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 { @@ -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 { @@ -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 { @@ -620,10 +620,11 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context CPTMutableNumericData *closes = [self cachedNumbersForField:CPTTradingRangePlotFieldClose]; NSUInteger sampleCount = locations.numberOfSamples; + if ( sampleCount == 0 ) { return; } - if ((opens == nil) || (highs == nil) || (lows == nil) || (closes == nil)) { + if ( !opens || !highs || !lows || !closes ) { return; } @@ -869,6 +870,7 @@ -(void)drawCandleStickInContext:(nonnull CGContextRef)context CPTAlignPointFunction alignmentFunction = CPTAlignPointToUserSpace; BOOL hasLineStyle = [theBorderLineStyle isKindOfClass:[CPTLineStyle class]]; + if ( hasLineStyle ) { [theBorderLineStyle setLineStyleInContext:context]; @@ -1111,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; } @@ -1122,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; } @@ -1133,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; } @@ -1144,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]; } @@ -1159,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]; } @@ -1303,6 +1305,7 @@ -(void)positionLabelAnnotation:(nonnull CPTPlotSpaceAnnotation *)label forIndex: highValue, lowValue]; CPTNumberArray *yValuesSorted = [yValues sortedArrayUsingSelector:@selector(compare:)]; + if ( positiveDirection ) { yValue = yValuesSorted.lastObject; } @@ -1581,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 { @@ -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:)] || @@ -1646,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 { @@ -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/CPTUtilities.h b/framework/Source/CPTUtilities.h index 691923cec..23e81bded 100644 --- a/framework/Source/CPTUtilities.h +++ b/framework/Source/CPTUtilities.h @@ -1,14 +1,20 @@ -#import "CPTDefinitions.h" - /// @file +#ifdef CPT_IS_FRAMEWORK +#import +#else +#import "CPTDefinitions.h" +#endif + #pragma clang assume_nonnull begin @class CPTLineStyle; +#ifdef __cplusplus #if __cplusplus extern "C" { #endif +#endif /// @name Convert NSDecimal to Primitive Types /// @{ @@ -108,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); @@ -157,8 +183,10 @@ double CPTInverseLogModulus(double value); /// @} +#ifdef __cplusplus #if __cplusplus } #endif +#endif #pragma clang assume_nonnull end diff --git a/framework/Source/CPTUtilities.m b/framework/Source/CPTUtilities.m index 1a4641de6..123207eb6 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) { @@ -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; @@ -1021,8 +1032,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 +1041,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 +1050,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 +1059,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 +1071,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 +1088,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 +1107,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 +1123,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 +1140,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/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/CPTXYAxis.h b/framework/Source/CPTXYAxis.h index 36cf150d2..cf15f624d 100644 --- a/framework/Source/CPTXYAxis.h +++ b/framework/Source/CPTXYAxis.h @@ -1,4 +1,10 @@ +/// @file + +#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 9b0c117a4..3002ec0bd 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 @@ -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 { @@ -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]; } @@ -422,8 +424,8 @@ -(void)drawGridLinesInContext:(nonnull CGContextRef)context isMajor:(BOOL)major if ( theVisibleRange ) { [labeledRange intersectionPlotRange:theVisibleRange]; } + break; } - break; default: break; @@ -541,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 ) { @@ -570,8 +569,7 @@ -(NSUInteger)initialBandIndexForSortedLocations:(CPTNumberArray *)sortedLocation } bandIndex = bandIndex % bandCount; - } - break; + break; } if ( !CPTDecimalEquals(majorInterval, zero)) { @@ -830,8 +828,8 @@ -(nonnull NSNumber *)defaultTitleLocation else { location = axisRange.midPoint; } + break; } - break; case CPTScaleTypeLogModulus: { @@ -839,8 +837,8 @@ -(nonnull NSNumber *)defaultTitleLocation double end = axisRange.endDouble; location = @(CPTInverseLogModulus((CPTLogModulus(loc) + CPTLogModulus(end)) / 2.0)); + break; } - break; default: location = axisRange.midPoint; @@ -874,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/Source/CPTXYAxisSet.h b/framework/Source/CPTXYAxisSet.h index ef7bc8d69..353d01619 100644 --- a/framework/Source/CPTXYAxisSet.h +++ b/framework/Source/CPTXYAxisSet.h @@ -1,4 +1,10 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTAxisSet.h" +#endif @class CPTXYAxis; diff --git a/framework/Source/CPTXYAxisSet.m b/framework/Source/CPTXYAxisSet.m index 70c48c5bf..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 { @@ -70,6 +70,7 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context } CPTLineStyle *theLineStyle = self.borderLineStyle; + if ( theLineStyle ) { [super renderAsVectorInContext:context]; diff --git a/framework/Source/CPTXYGraph.h b/framework/Source/CPTXYGraph.h index a761dbd88..685e6910c 100644 --- a/framework/Source/CPTXYGraph.h +++ b/framework/Source/CPTXYGraph.h @@ -1,14 +1,18 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#import +#else #import "CPTDefinitions.h" #import "CPTGraph.h" +#endif @interface CPTXYGraph : CPTGraph /// @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..eb1abbb3c 100644 --- a/framework/Source/CPTXYGraph.m +++ b/framework/Source/CPTXYGraph.m @@ -38,16 +38,14 @@ @implementation CPTXYGraph /** @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. - * @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 { - if ((self = [super initWithFrame:newFrame])) { + if ((self = [self initWithFrame:newFrame])) { xScaleType = newXScaleType; yScaleType = newYScaleType; } @@ -63,13 +61,17 @@ -(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 { - return [self initWithFrame:newFrame xScaleType:CPTScaleTypeLinear yScaleType:CPTScaleTypeLinear]; + if ((self = [super initWithFrame:newFrame])) { + xScaleType = CPTScaleTypeLinear; + yScaleType = CPTScaleTypeLinear; + } + return self; } /// @} 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/framework/Source/CPTXYPlotSpace.h b/framework/Source/CPTXYPlotSpace.h index ed084f42a..6c19e3bab 100644 --- a/framework/Source/CPTXYPlotSpace.h +++ b/framework/Source/CPTXYPlotSpace.h @@ -1,6 +1,16 @@ +/// @file + +#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 3b2750488..9b971490f 100644 --- a/framework/Source/CPTXYPlotSpace.m +++ b/framework/Source/CPTXYPlotSpace.m @@ -1,10 +1,11 @@ #import "CPTXYPlotSpace.h" +#import "_CPTDebugQuickLook.h" +#import "_NSCoderExtensions.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" @@ -13,7 +14,6 @@ #import "CPTPlotArea.h" #import "CPTPlotAreaFrame.h" #import "CPTUtilities.h" -#import "NSCoderExtensions.h" #import /// @cond @@ -531,14 +531,27 @@ -(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; + } } } @@ -773,6 +786,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 +802,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 +826,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 +842,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 +908,7 @@ -(CGFloat)viewCoordinateForViewLength:(NSDecimal)viewLength linearPlotRange:(non } NSDecimal factor = CPTDecimalDivide(CPTDecimalSubtract(plotCoord, range.locationDecimal), range.lengthDecimal); + if ( NSDecimalIsNotANumber(&factor)) { factor = CPTDecimalFromInteger(0); } @@ -920,6 +938,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 +953,7 @@ -(double)doublePrecisionPlotCoordinateForViewLength:(CGFloat)viewLength linearPl } double coordinate = (double)viewLength / (double)boundsLength; + coordinate *= range.lengthDouble; coordinate += range.locationDouble; @@ -1030,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"]; @@ -1052,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"]; @@ -1095,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"]; @@ -1119,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"]; @@ -1372,7 +1384,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; @@ -1429,6 +1441,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 +1452,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 +1465,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 +1478,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 +1495,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; @@ -1512,26 +1529,29 @@ -(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 { 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; @@ -1566,9 +1586,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 { @@ -1580,6 +1600,7 @@ -(BOOL)pointingDeviceUpEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoint)in CPTGraph *theGraph = self.graph; CPTPlotArea *plotArea = theGraph.plotAreaFrame.plotArea; + if ( !self.allowsUserInteraction || !plotArea ) { return NO; } @@ -1664,9 +1685,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 { @@ -1678,6 +1699,7 @@ -(BOOL)pointingDeviceDraggedEvent:(nonnull CPTNativeEvent *)event atPoint:(CGPoi CPTGraph *theGraph = self.graph; CPTPlotArea *plotArea = theGraph.plotAreaFrame.plotArea; + if ( !self.allowsUserInteraction || !plotArea ) { return NO; } @@ -1775,7 +1797,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 /** @@ -1788,10 +1810,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 { @@ -1803,6 +1825,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 +1844,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.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 888b6045d..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; + 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]; 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,31 +73,30 @@ -(void)testViewPointForPlotPointArrayLinear -(void)testViewPointForPlotPointLinear { - 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]; + 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), @""); @@ -101,31 +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), @""); @@ -136,29 +138,27 @@ -(void)testViewPointForDoublePrecisionPlotPointLinear -(void)testViewPointForPlotPointArrayLog { - 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]; 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), @""); @@ -166,31 +166,30 @@ -(void)testViewPointForPlotPointArrayLog -(void)testViewPointForPlotPointLog { - 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]; 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), @""); @@ -198,31 +197,30 @@ -(void)testViewPointForPlotPointLog -(void)testViewPointForDoublePrecisionPlotPointLog { - 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]; 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), @""); @@ -233,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), @""); @@ -253,21 +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), @""); @@ -275,21 +270,20 @@ -(void)testViewPointForPlotPointLogModulus -(void)testViewPointForDoublePrecisionPlotPointLogModulus { - 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]; 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), @""); @@ -300,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]]; @@ -322,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); @@ -346,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); @@ -373,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); @@ -397,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); @@ -421,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); @@ -448,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); @@ -472,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); @@ -496,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); @@ -523,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); @@ -546,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); @@ -562,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 @@ -571,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); @@ -579,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 @@ -588,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); @@ -599,56 +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]; - XCTAssertTrue([plotSpace.xRange isEqualToRange:expectedRangeX], @"%@", errMessage); + NSString *errMessage = [NSString stringWithFormat:@"xRange was %@, expected %@", self.plotSpace.xRange, expectedRangeX]; - errMessage = [NSString stringWithFormat:@"yRange was %@, expected %@", plotSpace.yRange, expectedRangeY]; - XCTAssertTrue([plotSpace.yRange isEqualToRange:expectedRangeY], @"%@", errMessage); + XCTAssertTrue([self.plotSpace.xRange isEqualToRange:expectedRangeX], @"%@", 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; - - 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: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]; - XCTAssertTrue([plotSpace.xRange isEqualToRange:expectedRangeX], @"%@", errMessage); + NSString *errMessage = [NSString stringWithFormat:@"xRange was %@, expected %@", self.plotSpace.xRange, expectedRangeX]; - errMessage = [NSString stringWithFormat:@"yRange was %@, expected %@", plotSpace.yRange, expectedRangeY]; - XCTAssertTrue([plotSpace.yRange isEqualToRange:expectedRangeY], @"%@", errMessage); + XCTAssertTrue([self.plotSpace.xRange isEqualToRange:expectedRangeX], @"%@", errMessage); + + errMessage = [NSString stringWithFormat:@"yRange was %@, expected %@", self.plotSpace.yRange, expectedRangeY]; + XCTAssertTrue([self.plotSpace.yRange isEqualToRange:expectedRangeY], @"%@", errMessage); } #pragma mark - @@ -656,29 +622,29 @@ -(void)testScaleByAboutPoint2 -(void)testKeyedArchivingRoundTrip { - CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; + self.plotSpace.globalXRange = [CPTPlotRange plotRangeWithLocation:@0.0 + length:@10.0]; + self.plotSpace.globalYRange = [CPTPlotRange plotRangeWithLocation:@10.0 + length:@(-10.0)]; - plotSpace.globalXRange = [CPTPlotRange plotRangeWithLocation:@0.0 - length:@10.0]; - plotSpace.globalYRange = [CPTPlotRange plotRangeWithLocation:@10.0 - length:@(-10.0)]; + CPTXYPlotSpace *oldPlotSpace = self.plotSpace; + CPTXYPlotSpace *newPlotSpace = [self archiveRoundTrip:oldPlotSpace]; - CPTXYPlotSpace *newPlotSpace = [self archiveRoundTrip:plotSpace]; + NSString *errMessage = [NSString stringWithFormat:@"xRange was %@, expected %@", oldPlotSpace.xRange, newPlotSpace.xRange]; - NSString *errMessage = [NSString stringWithFormat:@"xRange was %@, expected %@", plotSpace.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 diff --git a/framework/Source/NSDecimalNumberExtensions.h b/framework/Source/NSDecimalNumberExtensions.h deleted file mode 100644 index 1d41a0eb5..000000000 --- a/framework/Source/NSDecimalNumberExtensions.h +++ /dev/null @@ -1,8 +0,0 @@ -/** @category NSDecimalNumber(CPTExtensions) - * @brief Core Plot extensions to NSDecimalNumber. - **/ -@interface NSDecimalNumber(CPTExtensions) - --(nonnull NSDecimalNumber *)decimalNumber; - -@end 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 1bcf82cea..9e59a6dbc 100644 --- a/framework/Source/_CPTAnimationCGFloatPeriod.m +++ b/framework/Source/_CPTAnimationCGFloatPeriod.m @@ -1,9 +1,9 @@ #import "_CPTAnimationCGFloatPeriod.h" -#import "NSNumberExtensions.h" +#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) { @@ -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.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 bb6246379..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) { @@ -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.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 1e05bf9b8..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) { @@ -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.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 e0b54f48e..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) { @@ -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.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 bcf36e651..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) { @@ -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/_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 e4692f041..b23a28f7a 100644 --- a/framework/Source/_CPTAnimationNSNumberPeriod.m +++ b/framework/Source/_CPTAnimationNSNumberPeriod.m @@ -2,12 +2,12 @@ #import "CPTUtilities.h" -@implementation _CPTAnimationNSNumberPeriod +@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.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 857d65506..25a12700e 100644 --- a/framework/Source/_CPTAnimationPlotRangePeriod.m +++ b/framework/Source/_CPTAnimationPlotRangePeriod.m @@ -3,12 +3,12 @@ #import "CPTPlotRange.h" #import "CPTUtilities.h" -@implementation _CPTAnimationPlotRangePeriod +@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; diff --git a/framework/Source/_CPTAnimationTimingFunctions.h b/framework/Source/_CPTAnimationTimingFunctions.h index a173ae528..da5d128b1 100644 --- a/framework/Source/_CPTAnimationTimingFunctions.h +++ b/framework/Source/_CPTAnimationTimingFunctions.h @@ -1,10 +1,14 @@ /// @file +#import + typedef CGFloat (*CPTAnimationTimingFunction)(CGFloat, CGFloat); +#ifdef __cplusplus #if __cplusplus extern "C" { #endif +#endif /// @name Linear /// @{ @@ -92,6 +96,8 @@ CGFloat CPTAnimationTimingFunctionQuinticInOut(CGFloat time, CGFloat duration); /// @} +#ifdef __cplusplus #if __cplusplus } #endif +#endif 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/_CPTAxisLabelGroup.h b/framework/Source/_CPTAxisLabelGroup.h new file mode 100644 index 000000000..1b4732184 --- /dev/null +++ b/framework/Source/_CPTAxisLabelGroup.h @@ -0,0 +1,11 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#else +#import "CPTLayer.h" +#endif + +@interface CPTAxisLabelGroup : CPTLayer + +@end diff --git a/framework/Source/CPTAxisLabelGroup.m b/framework/Source/_CPTAxisLabelGroup.m similarity index 79% rename from framework/Source/CPTAxisLabelGroup.m rename to framework/Source/_CPTAxisLabelGroup.m index 1693c7a78..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. @@ -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/_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.h b/framework/Source/_CPTConstraintsFixed.h index 6bf4b66c5..ef7b67672 100644 --- a/framework/Source/_CPTConstraintsFixed.h +++ b/framework/Source/_CPTConstraintsFixed.h @@ -1,6 +1,12 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTConstraints.h" +#endif -@interface _CPTConstraintsFixed : CPTConstraints +@interface CPTConstraintsFixed : CPTConstraints /// @name Initialization /// @{ @@ -9,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 7cef014bc..516863c93 100644 --- a/framework/Source/_CPTConstraintsFixed.m +++ b/framework/Source/_CPTConstraintsFixed.m @@ -1,9 +1,9 @@ #import "_CPTConstraintsFixed.h" -#import "NSCoderExtensions.h" +#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; @@ -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 { @@ -62,18 +62,13 @@ -(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 - #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"); @@ -97,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; @@ -119,21 +114,21 @@ -(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 /** @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 { 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 bad6150cb..560ea5992 100644 --- a/framework/Source/_CPTConstraintsRelative.h +++ b/framework/Source/_CPTConstraintsRelative.h @@ -1,6 +1,12 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTConstraints.h" +#endif -@interface _CPTConstraintsRelative : CPTConstraints +@interface CPTConstraintsRelative : CPTConstraints /// @name Initialization /// @{ @@ -8,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 533e204ed..355f08067 100644 --- a/framework/Source/_CPTConstraintsRelative.m +++ b/framework/Source/_CPTConstraintsRelative.m @@ -1,10 +1,10 @@ #import "_CPTConstraintsRelative.h" -#import "NSCoderExtensions.h" +#import "_NSCoderExtensions.h" #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; @@ -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 { @@ -50,17 +50,12 @@ -(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 - #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"); @@ -77,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; @@ -98,19 +93,19 @@ -(nonnull Class)classForCoder -(void)encodeWithCoder:(nonnull NSCoder *)coder { - [coder encodeCGFloat:self.offset forKey:@"_CPTConstraintsRelative.offset"]; + [coder encodeCGFloat:self.offset forKey:@"CPTConstraintsRelative.offset"]; } /// @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 { 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 54494ace7..9037df6bb 100644 --- a/framework/Source/_CPTDarkGradientTheme.h +++ b/framework/Source/_CPTDarkGradientTheme.h @@ -1,5 +1,11 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "_CPTXYTheme.h" +#endif -@interface _CPTDarkGradientTheme : _CPTXYTheme +@interface CPTDarkGradientTheme : CPTXYTheme @end diff --git a/framework/Source/_CPTDarkGradientTheme.m b/framework/Source/_CPTDarkGradientTheme.m index e15eaf091..3dcb4008d 100644 --- a/framework/Source/_CPTDarkGradientTheme.m +++ b/framework/Source/_CPTDarkGradientTheme.m @@ -19,14 +19,9 @@ /** * @brief Creates a CPTXYGraph instance formatted with dark gray gradient backgrounds and light gray lines. **/ -@implementation _CPTDarkGradientTheme +@implementation CPTDarkGradientTheme -+(void)load -{ - [self registerTheme:self]; -} - -+(nonnull NSString *)name ++(nonnull CPTThemeName)name { return kCPTDarkGradientTheme; } @@ -53,6 +48,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 +65,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/CPTDebugQuickLook.h b/framework/Source/_CPTDebugQuickLook.h similarity index 90% rename from framework/Source/CPTDebugQuickLook.h rename to framework/Source/_CPTDebugQuickLook.h index 62afb37c9..6d7d1660f 100644 --- a/framework/Source/CPTDebugQuickLook.h +++ b/framework/Source/_CPTDebugQuickLook.h @@ -17,8 +17,10 @@ #pragma mark - -/** @category NSObject(CPTDebugQuickLookExtension) +/** * @brief Debugging extensions to NSObject. + * + * @see NSObject **/ @interface NSObject(CPTDebugQuickLookExtension) { diff --git a/framework/Source/_CPTFillColor.h b/framework/Source/_CPTFillColor.h index b04943ae2..2eb460224 100644 --- a/framework/Source/_CPTFillColor.h +++ b/framework/Source/_CPTFillColor.h @@ -1,6 +1,12 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTFill.h" +#endif -@interface _CPTFillColor : CPTFill +@interface CPTFillColor : CPTFill /// @name Initialization /// @{ @@ -8,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/_CPTFillColor.m b/framework/Source/_CPTFillColor.m index 628f5b6d1..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. - * @param aColor The color. - * @return The initialized _CPTFillColor object. +/** @brief Initializes a newly allocated CPTFillColor object with the provided color. + * @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 @@ -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,20 +108,20 @@ -(nonnull Class)classForCoder -(void)encodeWithCoder:(nonnull NSCoder *)coder { - [coder encodeObject:self.fillColor forKey:@"_CPTFillColor.fillColor"]; + [coder encodeObject:self.fillColor forKey:@"CPTFillColor.fillColor"]; } /// @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 { 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 5344bf7fb..b81935820 100644 --- a/framework/Source/_CPTFillGradient.h +++ b/framework/Source/_CPTFillGradient.h @@ -1,8 +1,14 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTFill.h" +#endif @class CPTGradient; -@interface _CPTFillGradient : CPTFill +@interface CPTFillGradient : CPTFill /// @name Initialization /// @{ @@ -10,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/_CPTFillGradient.m b/framework/Source/_CPTFillGradient.m index c7d0aa70c..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. - * @param aGradient The gradient. - * @return The initialized _CPTFillGradient object. +/** @brief Initializes a newly allocated CPTFillGradient object with the provided gradient. + * @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 @@ -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,20 +94,20 @@ -(nonnull Class)classForCoder -(void)encodeWithCoder:(nonnull NSCoder *)coder { - [coder encodeObject:self.fillGradient forKey:@"_CPTFillGradient.fillGradient"]; + [coder encodeObject:self.fillGradient forKey:@"CPTFillGradient.fillGradient"]; } /// @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 { 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 49bbb205f..705a8e58f 100644 --- a/framework/Source/_CPTFillImage.h +++ b/framework/Source/_CPTFillImage.h @@ -1,8 +1,14 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTFill.h" +#endif @class CPTImage; -@interface _CPTFillImage : CPTFill +@interface CPTFillImage : CPTFill /// @name Initialization /// @{ @@ -10,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.m b/framework/Source/_CPTFillImage.m index 48614de11..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. - * @param anImage The image. - * @return The initialized _CPTFillImage object. +/** @brief Initializes a newly allocated CPTFillImage object with the provided image. + * @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 @@ -58,6 +58,7 @@ -(void)fillPathInContext:(nonnull CGContextRef)context CGContextSaveGState(context); CGRect bounds = CGContextGetPathBoundingBox(context); + CGContextClip(context); [self.fillImage drawInRect:bounds inContext:context]; @@ -79,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; @@ -100,20 +101,20 @@ -(nonnull Class)classForCoder -(void)encodeWithCoder:(nonnull NSCoder *)coder { - [coder encodeObject:self.fillImage forKey:@"_CPTFillImage.fillImage"]; + [coder encodeObject:self.fillImage forKey:@"CPTFillImage.fillImage"]; } /// @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 { 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/CPTGridLineGroup.h b/framework/Source/_CPTGridLineGroup.h similarity index 73% rename from framework/Source/CPTGridLineGroup.h rename to framework/Source/_CPTGridLineGroup.h index bca74c4cd..62ab1bf08 100644 --- a/framework/Source/CPTGridLineGroup.h +++ b/framework/Source/_CPTGridLineGroup.h @@ -1,4 +1,10 @@ +/// @file + +#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 94% rename from framework/Source/CPTGridLineGroup.m rename to framework/Source/_CPTGridLineGroup.m index d68f67fc4..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" @@ -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 { @@ -114,7 +114,10 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context return; } + [super renderAsVectorInContext: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.h b/framework/Source/_CPTGridLines.h similarity index 72% rename from framework/Source/CPTGridLines.h rename to framework/Source/_CPTGridLines.h index f5ee267a7..bb74ffb2b 100644 --- a/framework/Source/CPTGridLines.h +++ b/framework/Source/_CPTGridLines.h @@ -1,4 +1,10 @@ +/// @file + +#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 93% rename from framework/Source/CPTGridLines.m rename to framework/Source/_CPTGridLines.m index 6c0992e6b..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" @@ -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 { @@ -109,7 +109,10 @@ -(void)renderAsVectorInContext:(nonnull CGContextRef)context return; } + [super renderAsVectorInContext:context]; + CPTAxis *theAxis = self.axis; + [theAxis drawGridLinesInContext:context isMajor:self.major]; } 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 { diff --git a/framework/Source/_CPTPlainBlackTheme.h b/framework/Source/_CPTPlainBlackTheme.h index 8e9287a5d..cdf10450e 100644 --- a/framework/Source/_CPTPlainBlackTheme.h +++ b/framework/Source/_CPTPlainBlackTheme.h @@ -1,5 +1,11 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "_CPTXYTheme.h" +#endif -@interface _CPTPlainBlackTheme : _CPTXYTheme +@interface CPTPlainBlackTheme : CPTXYTheme @end diff --git a/framework/Source/_CPTPlainBlackTheme.m b/framework/Source/_CPTPlainBlackTheme.m index 05783b4f1..c4a2d8b3d 100644 --- a/framework/Source/_CPTPlainBlackTheme.m +++ b/framework/Source/_CPTPlainBlackTheme.m @@ -16,14 +16,9 @@ /** * @brief Creates a CPTXYGraph instance formatted with black backgrounds and white lines. **/ -@implementation _CPTPlainBlackTheme +@implementation CPTPlainBlackTheme -+(void)load -{ - [self registerTheme:self]; -} - -+(nonnull NSString *)name ++(nonnull CPTThemeName)name { return kCPTPlainBlackTheme; } @@ -40,6 +35,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 +52,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.h b/framework/Source/_CPTPlainWhiteTheme.h index f9248e8d4..838b9b9cf 100644 --- a/framework/Source/_CPTPlainWhiteTheme.h +++ b/framework/Source/_CPTPlainWhiteTheme.h @@ -1,5 +1,11 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "_CPTXYTheme.h" +#endif -@interface _CPTPlainWhiteTheme : _CPTXYTheme +@interface CPTPlainWhiteTheme : CPTXYTheme @end diff --git a/framework/Source/_CPTPlainWhiteTheme.m b/framework/Source/_CPTPlainWhiteTheme.m index 5a8ed24f2..6b0e5b02e 100644 --- a/framework/Source/_CPTPlainWhiteTheme.m +++ b/framework/Source/_CPTPlainWhiteTheme.m @@ -16,14 +16,9 @@ /** * @brief Creates a CPTXYGraph instance formatted with white backgrounds and black lines. **/ -@implementation _CPTPlainWhiteTheme +@implementation CPTPlainWhiteTheme -+(void)load -{ - [self registerTheme:self]; -} - -+(nonnull NSString *)name ++(nonnull CPTThemeName)name { return kCPTPlainWhiteTheme; } @@ -40,6 +35,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 +52,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/_CPTPlotGroup.h b/framework/Source/_CPTPlotGroup.h new file mode 100644 index 000000000..3e966ac46 --- /dev/null +++ b/framework/Source/_CPTPlotGroup.h @@ -0,0 +1,20 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#else +#import "CPTLayer.h" +#endif + +@class CPTPlot; + +@interface CPTPlotGroup : CPTLayer + +/// @name Adding and Removing Plots +/// @{ +-(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 similarity index 83% rename from framework/Source/CPTPlotGroup.m rename to framework/Source/_CPTPlotGroup.m index 4a224e691..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" @@ -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 { @@ -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/_CPTSlateTheme.h b/framework/Source/_CPTSlateTheme.h index 2d9416a03..ad703a62b 100644 --- a/framework/Source/_CPTSlateTheme.h +++ b/framework/Source/_CPTSlateTheme.h @@ -1,5 +1,11 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "_CPTXYTheme.h" +#endif -@interface _CPTSlateTheme : _CPTXYTheme +@interface CPTSlateTheme : CPTXYTheme @end diff --git a/framework/Source/_CPTSlateTheme.m b/framework/Source/_CPTSlateTheme.m index c357e48a9..eb8efed1a 100644 --- a/framework/Source/_CPTSlateTheme.m +++ b/framework/Source/_CPTSlateTheme.m @@ -19,14 +19,9 @@ /** * @brief Creates a CPTXYGraph instance with colors that match the default iPhone navigation bar, toolbar buttons, and table views. **/ -@implementation _CPTSlateTheme +@implementation CPTSlateTheme -+(void)load -{ - [self registerTheme:self]; -} - -+(nonnull NSString *)name ++(nonnull CPTThemeName)name { return kCPTSlateTheme; } @@ -52,6 +47,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 +64,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.h b/framework/Source/_CPTStocksTheme.h index fe57426c1..617359911 100644 --- a/framework/Source/_CPTStocksTheme.h +++ b/framework/Source/_CPTStocksTheme.h @@ -1,5 +1,11 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "_CPTXYTheme.h" +#endif -@interface _CPTStocksTheme : _CPTXYTheme +@interface CPTStocksTheme : CPTXYTheme @end diff --git a/framework/Source/_CPTStocksTheme.m b/framework/Source/_CPTStocksTheme.m index 4e3dcf0bc..745648bcf 100644 --- a/framework/Source/_CPTStocksTheme.m +++ b/framework/Source/_CPTStocksTheme.m @@ -17,14 +17,9 @@ /** * @brief Creates a CPTXYGraph instance formatted with a gradient background and white lines. **/ -@implementation _CPTStocksTheme +@implementation CPTStocksTheme -+(void)load -{ - [self registerTheme:self]; -} - -+(nonnull NSString *)name ++(nonnull CPTThemeName)name { return kCPTStocksTheme; } @@ -53,6 +48,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 +65,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.h b/framework/Source/_CPTXYTheme.h index e395011a1..72ca7737b 100644 --- a/framework/Source/_CPTXYTheme.h +++ b/framework/Source/_CPTXYTheme.h @@ -1,5 +1,11 @@ +/// @file + +#ifdef CPT_IS_FRAMEWORK +#import +#else #import "CPTTheme.h" +#endif -@interface _CPTXYTheme : CPTTheme +@interface CPTXYTheme : CPTTheme @end diff --git a/framework/Source/_CPTXYTheme.m b/framework/Source/_CPTXYTheme.m index 129d137aa..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 /// @{ @@ -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/Source/NSCoderExtensions.h b/framework/Source/_NSCoderExtensions.h similarity index 93% rename from framework/Source/NSCoderExtensions.h rename to framework/Source/_NSCoderExtensions.h index 896d3c0c9..97e0e95f0 100644 --- a/framework/Source/NSCoderExtensions.h +++ b/framework/Source/_NSCoderExtensions.h @@ -1,6 +1,6 @@ -/** @category NSCoder(CPTExtensions) - * @brief Core Plot extensions to NSCoder. - **/ +#import +#import + @interface NSCoder(CPTExtensions) /// @name Encoding Data diff --git a/framework/Source/NSCoderExtensions.m b/framework/Source/_NSCoderExtensions.m similarity index 87% rename from framework/Source/NSCoderExtensions.m rename to framework/Source/_NSCoderExtensions.m index cfa40b7f7..30cd4f257 100644 --- a/framework/Source/NSCoderExtensions.m +++ b/framework/Source/_NSCoderExtensions.m @@ -1,12 +1,17 @@ -#import "NSCoderExtensions.h" +#import "_NSCoderExtensions.h" +#import "_NSNumberExtensions.h" #import "CPTUtilities.h" -#import "NSNumberExtensions.h" void CPTPathApplierFunc(void *info, const CGPathElement *element); #pragma mark - +/** + * @brief Core Plot extensions to NSCoder. + * + * @see NSCoder + **/ @implementation NSCoder(CPTExtensions) #pragma mark - @@ -14,7 +19,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 +32,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 +46,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 +60,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,36 +74,30 @@ -(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 -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunused-parameter" -#endif +#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE || TARGET_OS_MACCATALYST -(void)encodeCGColorSpace:(nullable CGColorSpaceRef)colorSpace forKey:(nonnull NSString *)key { -#if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE 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; - // CGColorSpaceCopyICCProfile() is deprecated as of macOS 10.13 - if ( CGColorSpaceCopyICCData ) { - iccProfile = CGColorSpaceCopyICCData(colorSpace); - } - else { - iccProfile = CGColorSpaceCopyICCProfile(colorSpace); - } + iccProfile = CGColorSpaceCopyICCData(colorSpace); [self encodeObject:(__bridge NSData *)iccProfile forKey:key]; CFRelease(iccProfile); } -#endif } +#endif + /// @cond void CPTPathApplierFunc(void *__nullable info, const CGPathElement *__nonnull element) @@ -107,6 +106,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); @@ -125,8 +126,10 @@ void CPTPathApplierFunc(void *__nullable info, const CGPathElement *__nonnull el case kCGPathElementCloseSubpath: // 0 points break; } +#pragma clang diagnostic pop + + NSMutableArray *> *pathData = (__bridge NSMutableArray *> *) info; - NSMutableArray *> *pathData = (__bridge NSMutableArray *> *)info; [pathData addObject:elementData]; } @@ -134,7 +137,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 { @@ -146,6 +149,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 @@ -158,6 +162,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]; @@ -182,12 +188,13 @@ -(void)encodeCGPath:(nullable CGPathRef)path forKey:(nonnull NSString *)key case kCGPathElementCloseSubpath: // 0 points break; } +#pragma clang diagnostic pop } } /** @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 { @@ -209,14 +216,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 +234,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]; @@ -247,7 +258,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 { @@ -258,10 +269,10 @@ -(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. + * @param key The key associated with the number. + * @return The number as a @ref CGFloat. **/ -(CGFloat)decodeCGFloatForKey:(nonnull NSString *)key { @@ -273,10 +284,10 @@ -(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. + * @param key The key associated with the point. + * @return The point. **/ -(CGPoint)decodeCPTPointForKey:(nonnull NSString *)key { @@ -293,10 +304,10 @@ -(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. + * @param key The key associated with the size. + * @return The size. **/ -(CGSize)decodeCPTSizeForKey:(nonnull NSString *)key { @@ -313,10 +324,10 @@ -(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. + * @param key The key associated with the rectangle. + * @return The rectangle. **/ -(CGRect)decodeCPTRectForKey:(nonnull NSString *)key { @@ -333,35 +344,24 @@ -(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. + * @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 -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunused-parameter" -#endif -(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 #else NSData *iccProfile = [self decodeObjectOfClass:[NSData class] forKey:key]; if ( iccProfile ) { - // CGColorSpaceCreateWithICCProfile() is deprecated as of macOS 10.13 - if ( CGColorSpaceCreateWithICCData ) { - colorSpace = CGColorSpaceCreateWithICCData((__bridge CFDataRef)iccProfile); - } - else { - colorSpace = CGColorSpaceCreateWithICCProfile((__bridge CFDataRef)iccProfile); - } + colorSpace = CGColorSpaceCreateWithICCData((__bridge CFDataRef)iccProfile); } else { NSLog(@"Color space not available for key '%@'. Using generic RGB color space.", key); @@ -373,10 +373,10 @@ -(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. + * @param key The key associated with the path. + * @return The new path. **/ -(nullable CGPathRef)newCGPathDecodeForKey:(nonnull NSString *)key { @@ -395,6 +395,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]; @@ -413,6 +415,7 @@ -(nullable CGPathRef)newCGPathDecodeForKey:(nonnull NSString *)key case kCGPathElementCloseSubpath: // 0 points break; } +#pragma clang diagnostic pop switch ( type ) { case kCGPathElementMoveToPoint: @@ -441,10 +444,10 @@ -(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. + * @param key The key associated with the image. + * @return The new image. **/ -(nullable CGImageRef)newCGImageDecodeForKey:(nonnull NSString *)key { @@ -478,6 +481,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)); @@ -518,10 +522,10 @@ -(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. + * @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/_NSDecimalNumberExtensions.h b/framework/Source/_NSDecimalNumberExtensions.h new file mode 100644 index 000000000..6b55fc3a4 --- /dev/null +++ b/framework/Source/_NSDecimalNumberExtensions.h @@ -0,0 +1,7 @@ +#import + +@interface NSDecimalNumber(CPTExtensions) + +-(nonnull NSDecimalNumber *)decimalNumber; + +@end diff --git a/framework/Source/NSDecimalNumberExtensions.m b/framework/Source/_NSDecimalNumberExtensions.m similarity index 66% rename from framework/Source/NSDecimalNumberExtensions.m rename to framework/Source/_NSDecimalNumberExtensions.m index b27563037..2c3cf1c01 100644 --- a/framework/Source/NSDecimalNumberExtensions.m +++ b/framework/Source/_NSDecimalNumberExtensions.m @@ -1,5 +1,10 @@ -#import "NSDecimalNumberExtensions.h" +#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 similarity index 71% rename from framework/Source/NSNumberExtensions.h rename to framework/Source/_NSNumberExtensions.h index 06d0bb9e4..10efdac36 100644 --- a/framework/Source/NSNumberExtensions.h +++ b/framework/Source/_NSNumberExtensions.h @@ -1,6 +1,6 @@ -/** @category NSNumber(CPTExtensions) - * @brief Core Plot extensions to NSNumber. - **/ +#import +#import + @interface NSNumber(CPTExtensions) +(nonnull instancetype)numberWithCGFloat:(CGFloat)number; diff --git a/framework/Source/NSNumberExtensions.m b/framework/Source/_NSNumberExtensions.m similarity index 74% rename from framework/Source/NSNumberExtensions.m rename to framework/Source/_NSNumberExtensions.m index a9ee47ab0..269e55c6c 100644 --- a/framework/Source/NSNumberExtensions.m +++ b/framework/Source/_NSNumberExtensions.m @@ -1,10 +1,15 @@ -#import "NSNumberExtensions.h" +#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. - * @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 +29,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/mainpage.h b/framework/Source/mainpage.h index 06ec0e648..b3739be3f 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,9 +20,9 @@ * 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 built with Doxygen and installed locally in Xcode + * - 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) * - Project Wiki on GitHub @@ -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 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 diff --git a/framework/iPhoneOnly/CPTGraphHostingView.h b/framework/iPhoneOnly/CPTGraphHostingView.h deleted file mode 100644 index 17f7ec128..000000000 --- a/framework/iPhoneOnly/CPTGraphHostingView.h +++ /dev/null @@ -1,11 +0,0 @@ -#import "CPTDefinitions.h" - -@class CPTGraph; - -@interface CPTGraphHostingView : UIView - -@property (nonatomic, readwrite, strong, nullable) CPTGraph *hostedGraph; -@property (nonatomic, readwrite, assign) BOOL collapsesLayers; -@property (nonatomic, readwrite, assign) BOOL allowPinchScaling; - -@end diff --git a/framework/iPhoneOnly/CPTGraphHostingView.m b/framework/iPhoneOnly/CPTGraphHostingView.m deleted file mode 100644 index 0c9866702..000000000 --- a/framework/iPhoneOnly/CPTGraphHostingView.m +++ /dev/null @@ -1,477 +0,0 @@ -#import "CPTGraphHostingView.h" - -#import "CPTGraph.h" -#import "CPTPlotArea.h" -#import "CPTPlotAreaFrame.h" -#import "CPTPlotSpace.h" -#import "NSNumberExtensions.h" - -/// @cond -@interface CPTGraphHostingView() - -#if (TARGET_OS_SIMULATOR || TARGET_OS_IPHONE) && !TARGET_OS_TV -@property (nonatomic, readwrite, nullable, cpt_weak_property) UIPinchGestureRecognizer *pinchGestureRecognizer; - --(void)handlePinchGesture:(nonnull UIPinchGestureRecognizer *)aPinchGestureRecognizer; -#endif - --(void)graphNeedsRedraw:(nonnull NSNotification *)notification; - -@end - -/// @endcond - -#pragma mark - - -/** - * @brief A container view for displaying a CPTGraph. - **/ -@implementation CPTGraphHostingView - -/** @property nullable CPTGraph *hostedGraph - * @brief The CPTLayer hosted inside this view. - **/ -@synthesize hostedGraph; - -/** @property BOOL collapsesLayers - * @brief Whether view draws all graph layers into a single layer. - * Collapsing layers may improve performance in some cases. - **/ -@synthesize collapsesLayers; - -/** @property BOOL allowPinchScaling - * @brief Whether a pinch will trigger plot space scaling. - * Default is @YES. This causes gesture recognizers to be added to identify pinches. - **/ -@synthesize allowPinchScaling; - -/// @cond - -#if (TARGET_OS_SIMULATOR || TARGET_OS_IPHONE) && !TARGET_OS_TV - -/** @internal - * @property nullable UIPinchGestureRecognizer *pinchGestureRecognizer - * @brief The pinch gesture recognizer for this view. - * @since Not available on tvOS. - **/ -@synthesize pinchGestureRecognizer; -#endif - -/// @endcond - -#pragma mark - -#pragma mark init/dealloc - -/// @cond - -+(nonnull Class)layerClass -{ - return [CALayer class]; -} - --(void)commonInit -{ - self.hostedGraph = nil; - self.collapsesLayers = NO; - - self.backgroundColor = [UIColor clearColor]; - - self.allowPinchScaling = YES; - - // 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)); -} - --(nonnull instancetype)initWithFrame:(CGRect)frame -{ - if ((self = [super initWithFrame:frame])) { - [self commonInit]; - } - return self; -} - --(void)awakeFromNib -{ - [super awakeFromNib]; - - [self commonInit]; -} - --(void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -/// @endcond - -#pragma mark - -#pragma mark NSCoding methods - -/// @cond - --(void)encodeWithCoder:(nonnull NSCoder *)coder -{ - [super encodeWithCoder:coder]; - - [coder encodeBool:self.collapsesLayers forKey:@"CPTGraphHostingView.collapsesLayers"]; - [coder encodeObject:self.hostedGraph forKey:@"CPTGraphHostingView.hostedGraph"]; - [coder encodeBool:self.allowPinchScaling forKey:@"CPTGraphHostingView.allowPinchScaling"]; - - // No need to archive these properties: - // pinchGestureRecognizer -} - --(nullable instancetype)initWithCoder:(nonnull NSCoder *)coder -{ - if ((self = [super initWithCoder:coder])) { - [self commonInit]; - - collapsesLayers = [coder decodeBoolForKey:@"CPTGraphHostingView.collapsesLayers"]; - self.hostedGraph = [coder decodeObjectOfClass:[CPTGraph class] - forKey:@"CPTGraphHostingView.hostedGraph"]; // setup layers - - if ( [coder containsValueForKey:@"CPTGraphHostingView.allowPinchScaling"] ) { - self.allowPinchScaling = [coder decodeBoolForKey:@"CPTGraphHostingView.allowPinchScaling"]; // set gesture recognizer if needed - } - } - return self; -} - -/// @endcond - -#pragma mark - -#pragma mark NSSecureCoding Methods - -/// @cond - -+(BOOL)supportsSecureCoding -{ - return YES; -} - -/// @endcond - -#pragma mark - -#pragma mark Touch handling - -/// @cond - --(void)touchesBegan:(nonnull NSSet *)touches withEvent:(nullable UIEvent *)event -{ - BOOL handled = NO; - - // Ignore pinch or other multitouch gestures - if ( [event allTouches].count == 1 ) { - CPTGraph *theHostedGraph = self.hostedGraph; - UIEvent *theEvent = event; - - theHostedGraph.frame = self.bounds; - [theHostedGraph layoutIfNeeded]; - - CGPoint pointOfTouch = [[[theEvent touchesForView:self] anyObject] locationInView:self]; - - if ( self.collapsesLayers ) { - pointOfTouch.y = self.frame.size.height - pointOfTouch.y; - } - else { - pointOfTouch = [self.layer convertPoint:pointOfTouch toLayer:theHostedGraph]; - } - handled = [theHostedGraph pointingDeviceDownEvent:theEvent atPoint:pointOfTouch]; - } - - if ( !handled ) { - [super touchesBegan:touches withEvent:event]; - } -} - --(void)touchesMoved:(nonnull NSSet *)touches withEvent:(nullable UIEvent *)event -{ - BOOL handled = NO; - - if ( event ) { - CPTGraph *theHostedGraph = self.hostedGraph; - UIEvent *theEvent = event; - - theHostedGraph.frame = self.bounds; - [theHostedGraph layoutIfNeeded]; - - CGPoint pointOfTouch = [[[theEvent touchesForView:self] anyObject] locationInView:self]; - - if ( self.collapsesLayers ) { - pointOfTouch.y = self.frame.size.height - pointOfTouch.y; - } - else { - pointOfTouch = [self.layer convertPoint:pointOfTouch toLayer:theHostedGraph]; - } - handled = [theHostedGraph pointingDeviceDraggedEvent:theEvent atPoint:pointOfTouch]; - } - if ( !handled ) { - [super touchesMoved:touches withEvent:event]; - } -} - --(void)touchesEnded:(nonnull NSSet *)touches withEvent:(nullable UIEvent *)event -{ - BOOL handled = NO; - - if ( event ) { - CPTGraph *theHostedGraph = self.hostedGraph; - UIEvent *theEvent = event; - - theHostedGraph.frame = self.bounds; - [theHostedGraph layoutIfNeeded]; - - CGPoint pointOfTouch = [[[theEvent touchesForView:self] anyObject] locationInView:self]; - - if ( self.collapsesLayers ) { - pointOfTouch.y = self.frame.size.height - pointOfTouch.y; - } - else { - pointOfTouch = [self.layer convertPoint:pointOfTouch toLayer:theHostedGraph]; - } - handled = [theHostedGraph pointingDeviceUpEvent:theEvent atPoint:pointOfTouch]; - } - - if ( !handled ) { - [super touchesEnded:touches withEvent:event]; - } -} - --(void)touchesCancelled:(nonnull NSSet *)touches withEvent:(nullable UIEvent *)event -{ - BOOL handled = NO; - - if ( event ) { - UIEvent *theEvent = event; - handled = [self.hostedGraph pointingDeviceCancelledEvent:theEvent]; - } - - if ( !handled ) { - [super touchesCancelled:touches withEvent:event]; - } -} - -/// @endcond - -#pragma mark - -#pragma mark Gestures - -/// @cond - -#if (TARGET_OS_SIMULATOR || TARGET_OS_IPHONE) && !TARGET_OS_TV --(void)setAllowPinchScaling:(BOOL)allowScaling -{ - if ( allowPinchScaling != allowScaling ) { - allowPinchScaling = allowScaling; - if ( allowPinchScaling ) { - // Register for pinches - UIPinchGestureRecognizer *gestureRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinchGesture:)]; - [self addGestureRecognizer:gestureRecognizer]; - self.pinchGestureRecognizer = gestureRecognizer; - } - else { - UIPinchGestureRecognizer *pinchRecognizer = self.pinchGestureRecognizer; - if ( pinchRecognizer ) { - [self removeGestureRecognizer:pinchRecognizer]; - self.pinchGestureRecognizer = nil; - } - } - } -} - --(void)handlePinchGesture:(nonnull UIPinchGestureRecognizer *)aPinchGestureRecognizer -{ - CGPoint interactionPoint = [aPinchGestureRecognizer locationInView:self]; - CPTGraph *theHostedGraph = self.hostedGraph; - - theHostedGraph.frame = self.bounds; - [theHostedGraph layoutIfNeeded]; - - if ( self.collapsesLayers ) { - interactionPoint.y = self.frame.size.height - interactionPoint.y; - } - else { - interactionPoint = [self.layer convertPoint:interactionPoint toLayer:theHostedGraph]; - } - - CGPoint pointInPlotArea = [theHostedGraph convertPoint:interactionPoint toLayer:theHostedGraph.plotAreaFrame.plotArea]; - - UIPinchGestureRecognizer *pinchRecognizer = self.pinchGestureRecognizer; - - CGFloat scale = pinchRecognizer.scale; - - for ( CPTPlotSpace *space in theHostedGraph.allPlotSpaces ) { - if ( space.allowsUserInteraction ) { - [space scaleBy:scale aboutPoint:pointInPlotArea]; - } - } - - pinchRecognizer.scale = 1.0; -} - -#endif - -/// @endcond - -#pragma mark - -#pragma mark TV Focus - -/// @cond - -#if TARGET_OS_TV - --(BOOL)canBecomeFocused -{ - return YES; -} - -#endif - -/// @endcond - -#pragma mark - -#pragma mark Drawing - -/// @cond - --(void)drawRect:(CGRect __unused)rect -{ - if ( self.collapsesLayers ) { - CGContextRef context = UIGraphicsGetCurrentContext(); - CGContextTranslateCTM(context, 0, self.bounds.size.height); - CGContextScaleCTM(context, 1, -1); - - CPTGraph *theHostedGraph = self.hostedGraph; - theHostedGraph.frame = self.bounds; - [theHostedGraph layoutAndRenderInContext:context]; - } -} - --(void)graphNeedsRedraw:(nonnull NSNotification *__unused)notification -{ - [self setNeedsDisplay]; -} - --(void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection -{ - [super traitCollectionDidChange:previousTraitCollection]; - - [self.hostedGraph setNeedsDisplayAllLayers]; -} - -/// @endcond - -#pragma mark - -#pragma mark Accessors - -/// @cond - --(void)setHostedGraph:(nullable CPTGraph *)newLayer -{ - NSParameterAssert((newLayer == nil) || [newLayer isKindOfClass:[CPTGraph class]]); - - if ( newLayer == hostedGraph ) { - return; - } - - if ( hostedGraph ) { - [hostedGraph removeFromSuperlayer]; - hostedGraph.hostingView = nil; - [[NSNotificationCenter defaultCenter] removeObserver:self - name:CPTGraphNeedsRedrawNotification - object:hostedGraph]; - } - hostedGraph = newLayer; - - // Screen scaling - UIScreen *screen = self.window.screen; - if ( !screen ) { - screen = [UIScreen mainScreen]; - } - - hostedGraph.contentsScale = screen.scale; - hostedGraph.hostingView = self; - - if ( self.collapsesLayers ) { - [self setNeedsDisplay]; - if ( hostedGraph ) { - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(graphNeedsRedraw:) - name:CPTGraphNeedsRedrawNotification - object:hostedGraph]; - } - } - else { - if ( newLayer ) { - CPTGraph *newGraph = newLayer; - - newGraph.frame = self.layer.bounds; - [self.layer addSublayer:newGraph]; - } - } -} - --(void)setCollapsesLayers:(BOOL)collapse -{ - if ( collapse != collapsesLayers ) { - collapsesLayers = collapse; - - CPTGraph *theHostedGraph = self.hostedGraph; - - [self setNeedsDisplay]; - - if ( collapsesLayers ) { - [theHostedGraph removeFromSuperlayer]; - - if ( theHostedGraph ) { - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(graphNeedsRedraw:) - name:CPTGraphNeedsRedrawNotification - object:theHostedGraph]; - } - } - else { - if ( theHostedGraph ) { - [self.layer addSublayer:theHostedGraph]; - - [[NSNotificationCenter defaultCenter] removeObserver:self - name:CPTGraphNeedsRedrawNotification - object:theHostedGraph]; - } - } - } -} - --(void)setFrame:(CGRect)newFrame -{ - super.frame = newFrame; - - CPTGraph *theHostedGraph = self.hostedGraph; - [theHostedGraph setNeedsLayout]; - - if ( self.collapsesLayers ) { - [self setNeedsDisplay]; - } - else { - theHostedGraph.frame = self.bounds; - } -} - --(void)setBounds:(CGRect)newBounds -{ - super.bounds = newBounds; - - CPTGraph *theHostedGraph = self.hostedGraph; - [theHostedGraph setNeedsLayout]; - - if ( self.collapsesLayers ) { - [self setNeedsDisplay]; - } - else { - theHostedGraph.frame = newBounds; - } -} - -/// @endcond - -@end diff --git a/framework/iPhoneOnly/CPTImagePlatformSpecific.m b/framework/iPhoneOnly/CPTImagePlatformSpecific.m deleted file mode 100644 index 20c73f03d..000000000 --- a/framework/iPhoneOnly/CPTImagePlatformSpecific.m +++ /dev/null @@ -1,81 +0,0 @@ -#import "CPTImage.h" - -#import "CPTUtilities.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 initWithCGImage:NULL scale:anImage.scale])) { - self.nativeImage = anImage; - - UIEdgeInsets insets = anImage.capInsets; - self.edgeInsets = CPTEdgeInsetsMake(insets.top, insets.left, insets.bottom, insets.right); - } - - 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 - CGDataProviderRef dataProvider = NULL; - CGImageRef cgImage = NULL; - - for ( UIScreen *screen in [UIScreen screens] ) { - imageScale = MAX(imageScale, screen.scale); - } - - if ( 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 ) { - dataProvider = CGDataProviderCreateWithFilename([hiDpiPath cStringUsingEncoding:NSUTF8StringEncoding]); - } - if ( !dataProvider ) { - imageScale = CPTFloat(1.0); - } - } - - // if hi-dpi display or @2x image not available, load the 1x image at the original path - if ( !dataProvider ) { - dataProvider = CGDataProviderCreateWithFilename([path cStringUsingEncoding:NSUTF8StringEncoding]); - } - if ( dataProvider ) { - cgImage = CGImageCreateWithPNGDataProvider(dataProvider, NULL, YES, kCGRenderingIntentDefault); - } - - if ( cgImage ) { - self = [self initWithCGImage:cgImage scale:imageScale]; - } - else { - self = nil; - } - CGImageRelease(cgImage); - CGDataProviderRelease(dataProvider); - return self; -} - -@end diff --git a/framework/iPhoneOnly/CPTPlatformSpecificCategories.m b/framework/iPhoneOnly/CPTPlatformSpecificCategories.m deleted file mode 100644 index cad04a6f3..000000000 --- a/framework/iPhoneOnly/CPTPlatformSpecificCategories.m +++ /dev/null @@ -1,119 +0,0 @@ -#import "CPTPlatformSpecificCategories.h" - -#import "CPTPlatformSpecificFunctions.h" -#import "tgmath.h" - -#pragma mark - CPTLayer - -@implementation CPTLayer(CPTPlatformSpecificLayerExtensions) - -/** @brief Gets an image of the layer contents. - * @return A native image representation of the layer content. - **/ --(nullable CPTNativeImage *)imageOfLayer -{ - CGSize boundsSize = self.bounds.size; - - UIGraphicsBeginImageContextWithOptions(boundsSize, self.opaque, CPTFloat(0.0)); - - CGContextRef context = UIGraphicsGetCurrentContext(); - CGContextSaveGState(context); - CGContextSetAllowsAntialiasing(context, true); - - CGContextTranslateCTM(context, CPTFloat(0.0), boundsSize.height); - CGContextScaleCTM(context, CPTFloat(1.0), CPTFloat(-1.0)); - - [self layoutAndRenderInContext:context]; - CPTNativeImage *layerImage = UIGraphicsGetImageFromCurrentImageContext(); - CGContextSetAllowsAntialiasing(context, false); - - CGContextRestoreGState(context); - UIGraphicsEndImageContext(); - - return layerImage; -} - -@end - -#pragma mark - NSNumber - -@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. - **/ --(BOOL)isLessThan:(nonnull NSNumber *)other -{ - return [self compare:other] == NSOrderedAscending; -} - -/** @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. - **/ --(BOOL)isLessThanOrEqualTo:(nonnull NSNumber *)other -{ - return [self compare:other] == NSOrderedSame || [self compare:other] == NSOrderedAscending; -} - -/** @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. - **/ --(BOOL)isGreaterThan:(nonnull NSNumber *)other -{ - return [self compare:other] == NSOrderedDescending; -} - -/** @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. - **/ --(BOOL)isGreaterThanOrEqualTo:(nonnull NSNumber *)other -{ - return [self compare:other] == NSOrderedSame || [self compare:other] == NSOrderedDescending; -} - -@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. - * @since Available on iOS 6.0 and later. Does nothing on earlier versions. - **/ --(void)drawInRect:(CGRect)rect inContext:(nonnull CGContextRef)context -{ - if ( [self respondsToSelector:@selector(drawInRect:)] ) { - CPTPushCGContext(context); - - [self drawWithRect:rect - options:CPTStringDrawingOptions - context:nil]; - - 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 = [self boundingRectWithSize:CPTSizeMake(10000.0, 10000.0) - options:CPTStringDrawingOptions - context:nil]; - - CGSize textSize = rect.size; - - textSize.width = ceil(textSize.width); - textSize.height = ceil(textSize.height); - - return textSize; -} - -@end diff --git a/framework/iPhoneOnly/CPTPlatformSpecificDefines.h b/framework/iPhoneOnly/CPTPlatformSpecificDefines.h deleted file mode 100644 index 471ca99d5..000000000 --- a/framework/iPhoneOnly/CPTPlatformSpecificDefines.h +++ /dev/null @@ -1,6 +0,0 @@ -/// @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. diff --git a/framework/iPhoneOnly/CPTPlatformSpecificDefines.m b/framework/iPhoneOnly/CPTPlatformSpecificDefines.m deleted file mode 100644 index e69de29bb..000000000 diff --git a/framework/iPhoneOnly/CPTPlatformSpecificFunctions.h b/framework/iPhoneOnly/CPTPlatformSpecificFunctions.h deleted file mode 100644 index 178bba70c..000000000 --- a/framework/iPhoneOnly/CPTPlatformSpecificFunctions.h +++ /dev/null @@ -1,25 +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 Debugging -/// @{ -CPTNativeImage *__nonnull CPTQuickLookImage(CGRect rect, __nonnull CPTQuickLookImageBlock renderBlock); - -/// @} - -#if __cplusplus -} -#endif diff --git a/framework/iPhoneOnly/CPTPlatformSpecificFunctions.m b/framework/iPhoneOnly/CPTPlatformSpecificFunctions.m deleted file mode 100644 index 737d400f5..000000000 --- a/framework/iPhoneOnly/CPTPlatformSpecificFunctions.m +++ /dev/null @@ -1,38 +0,0 @@ -#import "CPTPlatformSpecificFunctions.h" - -#import "CPTExceptions.h" - -#pragma mark - -#pragma mark Context management - -void CPTPushCGContext(__nonnull CGContextRef newContext) -{ - UIGraphicsPushContext(newContext); -} - -void CPTPopCGContext(void) -{ - UIGraphicsPopContext(); -} - -#pragma mark - -#pragma mark Debugging - -CPTNativeImage *__nonnull CPTQuickLookImage(CGRect rect, __nonnull CPTQuickLookImageBlock renderBlock) -{ - UIGraphicsBeginImageContextWithOptions(rect.size, YES, 1.0); - CGContextRef context = UIGraphicsGetCurrentContext(); - - CGContextTranslateCTM(context, 0, rect.size.height); - CGContextScaleCTM(context, 1.0, -1.0); - - CGContextSetRGBFillColor(context, CPTFloat(0xf6 / 255.0), CPTFloat(0xf5 / 255.0), CPTFloat(0xf6 / 255.0), 1.0); - CGContextFillRect(context, rect); - - renderBlock(context, 1.0, rect); - - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - return image; -} diff --git a/framework/iPhoneOnly/CPTTextStylePlatformSpecific.h b/framework/iPhoneOnly/CPTTextStylePlatformSpecific.h deleted file mode 100644 index b1e699720..000000000 --- a/framework/iPhoneOnly/CPTTextStylePlatformSpecific.h +++ /dev/null @@ -1,12 +0,0 @@ -/// @file - -/** - * @brief Enumeration of paragraph alignments. - **/ -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. -}; diff --git a/framework/iPhoneOnly/CPTTextStylePlatformSpecific.m b/framework/iPhoneOnly/CPTTextStylePlatformSpecific.m deleted file mode 100644 index c2602bbc6..000000000 --- a/framework/iPhoneOnly/CPTTextStylePlatformSpecific.m +++ /dev/null @@ -1,262 +0,0 @@ -#import "CPTTextStylePlatformSpecific.h" - -#import "CPTColor.h" -#import "CPTMutableTextStyle.h" -#import "CPTPlatformSpecificCategories.h" -#import "CPTPlatformSpecificFunctions.h" -#import "tgmath.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 - UIFont *styleFont = attributes[NSFontAttributeName]; - - if ( styleFont ) { - newStyle.font = styleFont; - newStyle.fontName = styleFont.fontName; - newStyle.fontSize = styleFont.pointSize; - } - - // 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; - } - - return [newStyle copy]; -} - -#pragma mark - -#pragma mark Accessors - -/// @cond - --(nonnull CPTDictionary *)attributes -{ - CPTMutableDictionary *myAttributes = [NSMutableDictionary dictionary]; - - // Font - UIFont *styleFont = self.font; - NSString *fontName = self.fontName; - - if ((styleFont == nil) && fontName ) { - styleFont = [UIFont fontWithName:fontName size:self.fontSize]; - } - - if ( styleFont ) { - [myAttributes setValue:styleFont - forKey:NSFontAttributeName]; - } - - // Color - UIColor *styleColor = self.color.uiColor; - - 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 - UIFont *styleFont = attributes[NSFontAttributeName]; - - if ( styleFont ) { - newStyle.font = styleFont; - newStyle.fontName = styleFont.fontName; - newStyle.fontSize = styleFont.pointSize; - } - - // 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; - } - - 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 = [self boundingRectWithSize:CPTSizeMake(10000.0, 10000.0) - options:CPTStringDrawingOptions - attributes:style.attributes - context:nil]; - - 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; - } - - CGContextSaveGState(context); - CGColorRef textColor = style.color.cgColor; - - CGContextSetStrokeColorWithColor(context, textColor); - CGContextSetFillColorWithColor(context, textColor); - - CPTPushCGContext(context); - -#if TARGET_OS_SIMULATOR || TARGET_OS_TV - [self drawWithRect:rect - options:CPTStringDrawingOptions - attributes:style.attributes - context:nil]; -#else -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 - // -drawWithRect:options:attributes:context: method is available in iOS 7.0 and later - if ( [self respondsToSelector:@selector(drawWithRect:options:attributes:context:)] ) { - [self drawWithRect:rect - options:CPTStringDrawingOptions - attributes:style.attributes - context:nil]; - } - else { - UIColor *styleColor = style.attributes[NSForegroundColorAttributeName]; - [styleColor set]; - - UIFont *theFont = style.font; - NSString *fontName = style.fontName; - - if ((theFont == nil) && fontName ) { - theFont = [UIFont fontWithName:fontName size:style.fontSize]; - } - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - [self drawInRect:rect - withFont:theFont - lineBreakMode:style.lineBreakMode - alignment:(NSTextAlignment)style.textAlignment]; -#pragma clang diagnostic pop - } -#else - UIColor *styleColor = style.attributes[NSForegroundColorAttributeName]; - [styleColor set]; - - UIFont *theFont = self.font; - if ( theFont == nil ) { - theFont = [UIFont fontWithName:style.fontName size:style.fontSize]; - } - - [self drawInRect:rect - withFont:theFont - lineBreakMode:style.lineBreakMode - alignment:(NSTextAlignment)style.textAlignment]; -#endif -#endif - - CGContextRestoreGState(context); - CPTPopCGContext(); -} - -@end diff --git a/framework/xcconfig/CorePlot.xcconfig b/framework/xcconfig/CorePlot.xcconfig index f57ece3ce..14a991e37 100644 --- a/framework/xcconfig/CorePlot.xcconfig +++ b/framework/xcconfig/CorePlot.xcconfig @@ -1,36 +1,89 @@ #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 = 8.0 -MACOSX_DEPLOYMENT_TARGET = 10.8 -TVOS_DEPLOYMENT_TARGET = 9.0 +IPHONEOS_DEPLOYMENT_TARGET = 13.0 +MACOSX_DEPLOYMENT_TARGET = 11.0 +TVOS_DEPLOYMENT_TARGET = 12.0 -SYMROOT = $(PROJECT_DIR)/../build +SWIFT_VERSION = 6.0 + +PRODUCT_BUNDLE_IDENTIFIER = com.CorePlot.$(PRODUCT_NAME:rfc1034identifier) + +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 + +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 + +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 + 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 = CorePlot_Prefix.pch +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 SKIP_INSTALL = YES -STRIP_STYLE = debugging -STRIP_SWIFT_SYMBOLS = YES -SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule" -USE_HEADERMAP = NO + +USE_HEADERMAP = YES +FUSE_BUILD_SCRIPT_PHASES = YES diff --git a/framework/xcconfig/CorePlotDebug.xcconfig b/framework/xcconfig/CorePlotDebug.xcconfig index b4bcbc7e7..ae5780635 100644 --- a/framework/xcconfig/CorePlotDebug.xcconfig +++ b/framework/xcconfig/CorePlotDebug.xcconfig @@ -2,9 +2,13 @@ ONLY_ACTIVE_ARCH = YES VALIDATE_PRODUCT = NO -DEPLOYMENT_POSTPROCESSING = NO -STRIP_INSTALLED_PRODUCT = NO +ENABLE_TESTABILITY = YES + +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/CorePlotDebugModule.xcconfig b/framework/xcconfig/CorePlotDebugModule.xcconfig new file mode 100644 index 000000000..131087a19 --- /dev/null +++ b/framework/xcconfig/CorePlotDebugModule.xcconfig @@ -0,0 +1,4 @@ +#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..9409d7ed2 --- /dev/null +++ b/framework/xcconfig/CorePlotDocumentation.xcconfig @@ -0,0 +1,4 @@ +PRODUCT_NAME = $(TARGET_NAME) +ENABLE_USER_SCRIPT_SANDBOXING = NO + +DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen 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 new file mode 100644 index 000000000..48c5696ee --- /dev/null +++ b/framework/xcconfig/CorePlotExamplesDebug.xcconfig @@ -0,0 +1,2 @@ +#include "CorePlotDebug.xcconfig" +#include "CorePlotExamples.xcconfig" diff --git a/framework/xcconfig/CorePlotExamplesRelease.xcconfig b/framework/xcconfig/CorePlotExamplesRelease.xcconfig new file mode 100644 index 000000000..ac9dd9f63 --- /dev/null +++ b/framework/xcconfig/CorePlotExamplesRelease.xcconfig @@ -0,0 +1,2 @@ +#include "CorePlotRelease.xcconfig" +#include "CorePlotExamples.xcconfig" diff --git a/framework/xcconfig/CorePlotModule.xcconfig b/framework/xcconfig/CorePlotModule.xcconfig new file mode 100644 index 000000000..2efe495e5 --- /dev/null +++ b/framework/xcconfig/CorePlotModule.xcconfig @@ -0,0 +1,11 @@ +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 + +CURRENT_PROJECT_VERSION = 2.4 + +PRODUCT_NAME = $(PROJECT_NAME) +PRODUCT_MODULE_NAME = $(PRODUCT_NAME:rfc1034identifier) diff --git a/framework/xcconfig/CorePlotRelease.xcconfig b/framework/xcconfig/CorePlotRelease.xcconfig index 8d9600513..b30644948 100644 --- a/framework/xcconfig/CorePlotRelease.xcconfig +++ b/framework/xcconfig/CorePlotRelease.xcconfig @@ -2,8 +2,13 @@ ONLY_ACTIVE_ARCH = NO VALIDATE_PRODUCT = YES -DEPLOYMENT_POSTPROCESSING = YES -STRIP_INSTALLED_PRODUCT = YES -GCC_OPTIMIZATION_LEVEL = s +ENABLE_TESTABILITY = NO + 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/CorePlotReleaseModule.xcconfig b/framework/xcconfig/CorePlotReleaseModule.xcconfig new file mode 100644 index 000000000..fda176240 --- /dev/null +++ b/framework/xcconfig/CorePlotReleaseModule.xcconfig @@ -0,0 +1,4 @@ +#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 8c11ec296..b6e78859a 100644 --- a/framework/xcconfig/CorePlotWarnings.xcconfig +++ b/framework/xcconfig/CorePlotWarnings.xcconfig @@ -1,11 +1,20 @@ +PRODUCT_NAME = $(TARGET_NAME) +ENABLE_USER_SCRIPT_SANDBOXING = NO + 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_AGGRESSIVE +CLANG_ANALYZER_NULL_DEREFERENCE = YES CLANG_ANALYZER_OBJC_ATSYNC = YES CLANG_ANALYZER_OBJC_COLLECTIONS = YES CLANG_ANALYZER_OBJC_DEALLOC = YES @@ -15,6 +24,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 +34,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 +57,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 +103,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 +121,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 +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 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..7ade41b19 --- /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 the **scripts** folder under **project's root** run: + + `bash scripts/generate_spm_sources_layout.sh` + +2. Commit Changes + +This script is run automatically when building the Core Plot project for any platform. 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. diff --git a/scripts/README Creating a release package.md b/scripts/README Creating a release package.md index bcfb6724c..a343b0155 100644 --- a/scripts/README Creating a release package.md +++ b/scripts/README Creating a release package.md @@ -5,36 +5,43 @@ 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
  • +
  • [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. -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. Remove the branch qualifier from the `source` link in the [podspec](https://github.com/core-plot/core-plot/blob/master/CorePlot.podspec): -5. Open the Terminal application and `cd` to the root directory of your local Core Plot source directory. + `s.source = { :git => 'https://github.com/core-plot/core-plot.git' }` -6. Tag the current revision with the release version: +5. In the **CorePlotModule.xcconfig** configuration file, set the `CURRENT_PROJECT_VERSION` to the release version. Commit the change in Git. - `$ git tag release_` +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 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: +9. Change to the **scripts** folder: `$ cd scripts` -8. Run the createrelease script: +10. Run the createrelease script: - `$ python createrelease.py ` + `$ python3 createrelease.py ` -9. 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. -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: +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/
  • @@ -46,13 +53,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. +13. 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. +14. Log into GitHub and navigate to the [Releases](https://github.com/core-plot/core-plot/releases) page. -13. Click **Draft a new release**. +15. Click **Draft a new release**. -14. Select the tag for the new release (`release_`). +16. Select the tag for the new release (``). Enter the following: @@ -61,7 +68,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**. +17. Click **Publish release**. # Update Documentation @@ -73,7 +80,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 +92,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). diff --git a/scripts/createrelease.py b/scripts/createrelease.py index 9375881c2..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,37 +58,22 @@ 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 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') -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') 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" | \ diff --git a/scripts/generate_core_plot_docs.sh b/scripts/generate_core_plot_docs.sh new file mode 100755 index 000000000..f68562868 --- /dev/null +++ b/scripts/generate_core_plot_docs.sh @@ -0,0 +1,63 @@ +#!/bin/sh + +# 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 +# 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' + +# 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 diff --git a/scripts/generate_spm_sources_layout.sh b/scripts/generate_spm_sources_layout.sh new file mode 100755 index 000000000..a7a370690 --- /dev/null +++ b/scripts/generate_spm_sources_layout.sh @@ -0,0 +1,124 @@ +#!/bin/sh + +set -e + +SPM_SOURCES_PATH="$SOURCE_ROOT/../spm/Sources/core-plot" +SPM_PUBLIC_HEADERS_PATH="$SPM_SOURCES_PATH/include" + +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() { + echo "Generate symbolic links for all public headers. *.h" + echo "Generated under $SPM_PUBLIC_HEADERS_PATH" + + public_headers_list=$( + find "framework" \ + -type f \ + -name "*.[h]" \ + -not -path "*/build/*" \ + -not -path "framework/CorePlot.h" \ + -not -name "*Test*.[hm]" \ + -not -name "_*.[hm]" \ + -not -name "mainpage.h" \ + | sed "s| \([^/]\)|:\1|g" + ) + + SRC_ROOT="$(pwd)" + + mkdir -p "$SPM_PUBLIC_HEADERS_PATH" + 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 headers/implementations. _*.h && _*.m" + echo "Generated under $SPM_SOURCES_PATH" + + private_sources_list=$( + find "framework" \ + -type f \ + -name "_*.[mh]" \ + -not -path "*/build/*" \ + | sed "s| \([^/]\)|:\1|g" + ) + + SRC_ROOT="$(pwd)" + + mkdir -p "$SPM_SOURCES_PATH" + 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 implementations. *.m" + echo "Generated under $SPM_SOURCES_PATH" + + public_sources_list=$( + find "framework" \ + -type f \ + -name "*.[m]" \ + -not -path "*/build/*" \ + -not -path "framework/CorePlot.h" \ + -not -name "*Test*.[hm]" \ + -not -name "_*.[hm]" \ + | sed "s| \([^/]\)|:\1|g" + ) + + SRC_ROOT="$(pwd)" + + mkdir -p "$SPM_SOURCES_PATH" + 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 ############# +#0 +cd .. +#1 +cleanup +#2 +generate_spm_public_headers +#3 +generate_spm_private_sources +#4 +generate_spm_public_sources 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 diff --git a/scripts/uncrustify.cfg b/scripts/uncrustify.cfg index adf13c0dd..186048561 100644 --- a/scripts/uncrustify.cfg +++ b/scripts/uncrustify.cfg @@ -1,4 +1,4 @@ -# Uncrustify_d-0.70.1 +# Uncrustify-0.81.0_f newlines = auto input_tab_size = 4 output_tab_size = 4 @@ -6,26 +6,28 @@ 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 +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_empty = ignore +sp_cpp_lambda_argument_list = ignore sp_cpp_lambda_paren_brace = ignore 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 @@ -39,23 +41,35 @@ 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 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 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_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 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 @@ -74,14 +88,22 @@ 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 +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 @@ -89,8 +111,10 @@ 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 sp_inside_square_oc_array = remove sp_after_comma = force sp_before_comma = remove @@ -98,10 +122,13 @@ 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_type_question = remove +sp_ptr_type_ellipsis = remove sp_paren_ellipsis = remove +sp_byref_ellipsis = remove sp_paren_qualifier = remove sp_paren_noexcept = remove sp_after_class_colon = force @@ -118,6 +145,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 @@ -138,6 +167,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 @@ -151,6 +183,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 @@ -159,6 +192,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,12 +211,13 @@ 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 sp_d_array_colon = remove sp_not = remove +sp_not_not = remove sp_inv = remove sp_addr = remove sp_member = remove @@ -220,23 +255,36 @@ 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 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_emb_cmt_priority = false 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 +sp_string_string = ignore +sp_struct_type = ignore indent_columns = 4 +indent_ignore_first_continue = false indent_continue = 0 indent_continue_class_head = 0 indent_single_newlines = false @@ -258,17 +306,22 @@ 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 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 @@ -283,15 +336,23 @@ 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_switch_body = 4 +indent_ignore_case_brace = false +indent_case_brace = 0 indent_switch_break_with_case = false indent_switch_pp = true indent_case_shift = 0 -indent_case_brace = 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 @@ -300,15 +361,23 @@ indent_paren_close = 1 indent_paren_after_func_def = false indent_paren_after_func_decl = false indent_paren_after_func_call = 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_bool_nested_all = true +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 +indent_oc_inside_msg_sel = false indent_oc_block = true indent_oc_block_msg = 0 indent_oc_msg_colon = 0 @@ -322,12 +391,17 @@ 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 +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 @@ -337,6 +411,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 @@ -367,6 +442,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 @@ -390,8 +466,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 @@ -433,6 +509,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,22 +522,29 @@ 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 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 nl_return_expr = remove +nl_throw_expr = ignore nl_after_semicolon = true 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 @@ -468,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 @@ -484,6 +569,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 @@ -501,8 +587,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 @@ -513,12 +601,14 @@ 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_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 @@ -527,6 +617,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 @@ -545,6 +636,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 @@ -556,6 +651,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 @@ -587,6 +683,9 @@ align_var_def_inline = true align_assign_span = 1 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 align_enum_equ_thresh = 0 @@ -608,6 +707,9 @@ 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 align_func_proto_gap = 1 align_on_operator = true @@ -616,19 +718,27 @@ 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_nl_cont_spaces = 1 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 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 @@ -653,16 +763,21 @@ 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_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 @@ -673,10 +788,26 @@ mod_sort_case_sensitive = false mod_sort_import = true mod_sort_using = false mod_sort_include = true -mod_move_case_break = false +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 = true +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 @@ -685,21 +816,27 @@ 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 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_multiline_define_body_indent = 8 pp_indent_case = true pp_indent_func_def = true pp_indent_extern = true -pp_indent_brace = true +pp_indent_brace = 1 +pp_unbalanced_if_action = 0 include_category_0 = "" include_category_1 = "" include_category_2 = "" @@ -708,6 +845,16 @@ 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 -# option(s) with 'not default' value: 332 +debug_max_number_of_loops = 0 +debug_line_number_to_protocol = 0 +debug_timeout = 0 +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: 383 # 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/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/CPTDecimalNumberValueTransformer.m b/spm/Sources/core-plot/CPTDecimalNumberValueTransformer.m new file mode 120000 index 000000000..a56dd9e6f --- /dev/null +++ b/spm/Sources/core-plot/CPTDecimalNumberValueTransformer.m @@ -0,0 +1 @@ +../../../framework/Source/CPTDecimalNumberValueTransformer.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/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/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/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/_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/_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/_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/_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/_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/_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/_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/_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/_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/_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/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/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/CPTDecimalNumberValueTransformer.h b/spm/Sources/core-plot/include/CPTDecimalNumberValueTransformer.h new file mode 120000 index 000000000..eae4be6d7 --- /dev/null +++ b/spm/Sources/core-plot/include/CPTDecimalNumberValueTransformer.h @@ -0,0 +1 @@ +../../../../framework/Source/CPTDecimalNumberValueTransformer.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/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/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/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..d9d423c2a --- /dev/null +++ b/spm/Sources/core-plot/include/CorePlot.h @@ -0,0 +1 @@ +../../../../framework/SPM Umbrella Header/CorePlot.h \ No newline at end of file