Javier Cicchelli 9bcdaa697b [Setup] Basic project structure (#1)
This PR contains all the work related to setting up this project as required to implement the [Assignment](https://repo.rock-n-code.com/rock-n-code/deep-linking-assignment/wiki/Assignment) on top, as intended.

To summarise this work:
- [x] created a new **Xcode** project;
- [x] cloned the `Wikipedia` app and inserted it into the **Xcode** project;
- [x] created the `Locations` app and also, its `Libraries` package;
- [x] created the `Shared` package to share dependencies between the apps;
- [x] added a `Makefile` file and implemented some **environment** and **help** commands.

Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Reviewed-on: rock-n-code/deep-linking-assignment#1
2023-04-08 18:37:13 +00:00

72 lines
2.5 KiB
C

#import <WMF/WMFGeometry.h>
#include <CoreGraphics/CGAffineTransform.h>
#include "math.h"
#pragma mark - Aggregate Operations
CGRect WMFConvertAndNormalizeCGRectUsingSize(CGRect rect, CGSize size) {
CGAffineTransform normalizeAndConvertTransform =
CGAffineTransformConcat(WMFAffineCoreGraphicsToUIKitTransformMake(size),
WMFAffineNormalizeTransformMake(size));
return CGRectApplyAffineTransform(rect, normalizeAndConvertTransform);
}
#pragma mark - Normalization
CGRect WMFNormalizeRectUsingSize(CGRect rect, CGSize size) {
if (CGSizeEqualToSize(size, CGSizeZero) || CGRectIsEmpty(rect)) {
return CGRectZero;
}
return CGRectApplyAffineTransform(rect, WMFAffineNormalizeTransformMake(size));
}
CGRect WMFDenormalizeRectUsingSize(CGRect rect, CGSize size) {
if (CGSizeEqualToSize(size, CGSizeZero) || CGRectIsEmpty(rect)) {
return CGRectZero;
}
return CGRectApplyAffineTransform(rect, WMFAffineDenormalizeTransformMake(size));
}
#pragma mark - Normalization Transforms
CGAffineTransform WMFAffineNormalizeTransformMake(CGSize size) {
if (CGSizeEqualToSize(size, CGSizeZero)) {
return CGAffineTransformIdentity;
}
return CGAffineTransformMakeScale(1.0f / size.width, 1.0f / size.height);
}
CGAffineTransform WMFAffineDenormalizeTransformMake(CGSize size) {
return CGAffineTransformInvert(WMFAffineNormalizeTransformMake(size));
}
#pragma mark - Coordinate System Conversions
CGRect WMFConvertCGCoordinateRectToUICoordinateRectUsingSize(CGRect cgRect, CGSize size) {
return CGRectApplyAffineTransform(cgRect, WMFAffineCoreGraphicsToUIKitTransformMake(size));
}
CGRect WMFConvertUICoordinateRectToCGCoordinateRectUsingSize(CGRect uiRect, CGSize size) {
return CGRectApplyAffineTransform(uiRect, WMFAffineUIKitToCoreGraphicsTransformMake(size));
}
#pragma mark - Coordinate System Conversion Transforms
CGAffineTransform WMFAffineCoreGraphicsToUIKitTransformMake(CGSize size) {
if (CGSizeEqualToSize(size, CGSizeZero)) {
return CGAffineTransformIdentity;
}
CGAffineTransform transform = CGAffineTransformMakeScale(1, -1);
return CGAffineTransformTranslate(transform, 0, -size.height);
}
CGAffineTransform WMFAffineUIKitToCoreGraphicsTransformMake(CGSize size) {
return CGAffineTransformInvert(WMFAffineCoreGraphicsToUIKitTransformMake(size));
}
#pragma mark - Distance
CGFloat WMFDistanceBetweenPoints(CGPoint a, CGPoint b) {
return sqrt(pow(a.x - b.x, 2) + pow(a.y - b.y, 2));
}