Skip to content

Commit 7208e1f

Browse files
committed
Adding CGRectCeil, CGRectFloor and CGRectRound
1 parent 9f6d689 commit 7208e1f

File tree

3 files changed

+126
-3
lines changed

3 files changed

+126
-3
lines changed

Source/CoreGraphics_Extensions/CGGeometry+AGGeometryKit.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,13 @@
2525
#import <CoreGraphics/CoreGraphics.h>
2626
#import <QuartzCore/QuartzCore.h>
2727

28+
// CGFloat
29+
30+
CGFloat CGFloatRound_AGK(CGFloat v);
31+
CGFloat CGFloatCeil_AGK(CGFloat v);
32+
CGFloat CGFloatFloor_AGK(CGFloat v);
33+
34+
2835
// CGPoint
2936

3037
BOOL CGPointGotAnyNanValues_AGK(CGPoint origin);
@@ -98,5 +105,9 @@ CGRect CGRectWithOriginMidX_AGK(CGRect rect, CGFloat value);
98105
CGRect CGRectWithOriginMidY_AGK(CGRect rect, CGFloat value);
99106
CGRect CGRectWithOriginMid_AGK(CGRect rect, CGPoint origin);
100107

108+
CGRect CGRectFloor_AGK(CGRect rect);
109+
CGRect CGRectCeil_AGK(CGRect rect);
110+
CGRect CGRectRound_AGK(CGRect rect);
111+
101112
CGRect CGRectInterpolate_AGK(CGRect rect1, CGRect rect2, CGFloat progress);
102113

Source/CoreGraphics_Extensions/CGGeometry+AGGeometryKit.m

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,37 @@
3131
// Usefull resources for further development:
3232
// http://processingjs.nihongoresources.com/bezierinfo/
3333

34+
#pragma mark - CGFloat
35+
36+
CGFloat CGFloatRound_AGK(CGFloat v)
37+
{
38+
#if CGFLOAT_IS_DOUBLE
39+
return round(v);
40+
#else
41+
return roundf(v);
42+
#endif
43+
}
44+
45+
CGFloat CGFloatCeil_AGK(CGFloat v)
46+
{
47+
#if CGFLOAT_IS_DOUBLE
48+
return ceil(v);
49+
#else
50+
return ceilf(v);
51+
#endif
52+
}
53+
54+
CGFloat CGFloatFloor_AGK(CGFloat v)
55+
{
56+
#if CGFLOAT_IS_DOUBLE
57+
return floor(v);
58+
#else
59+
return floorf(v);
60+
#endif
61+
}
62+
63+
64+
3465
#pragma mark - CGPoint
3566

3667
BOOL CGPointGotAnyNanValues_AGK(CGPoint origin)
@@ -437,6 +468,30 @@ CGRect CGRectWithOriginMid_AGK(CGRect rect, CGPoint origin)
437468
return rect;
438469
}
439470

471+
CGRect CGRectFloor_AGK(CGRect rect)
472+
{
473+
return CGRectMake(CGFloatFloor_AGK(rect.origin.x),
474+
CGFloatFloor_AGK(rect.origin.y),
475+
CGFloatFloor_AGK(rect.size.width),
476+
CGFloatFloor_AGK(rect.size.height));
477+
}
478+
479+
CGRect CGRectCeil_AGK(CGRect rect)
480+
{
481+
return CGRectMake(CGFloatCeil_AGK(rect.origin.x),
482+
CGFloatCeil_AGK(rect.origin.y),
483+
CGFloatCeil_AGK(rect.size.width),
484+
CGFloatCeil_AGK(rect.size.height));
485+
}
486+
487+
CGRect CGRectRound_AGK(CGRect rect)
488+
{
489+
return CGRectMake(CGFloatRound_AGK(rect.origin.x),
490+
CGFloatRound_AGK(rect.origin.y),
491+
CGFloatRound_AGK(rect.size.width),
492+
CGFloatRound_AGK(rect.size.height));
493+
}
494+
440495
CGRect CGRectInterpolate_AGK(CGRect rect1, CGRect rect2, CGFloat progress)
441496
{
442497
CGRect result;

Source/CoreGraphics_Extensions/CGGeometry+AGGeometryKitTest.m

Lines changed: 60 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,6 @@ - (void)testCGRectWith
123123
CGRect rect = CGRectWithOriginMinY_AGK(rectWithALongNameOrPathSinceThatsWhenItIsUsefull, 300);
124124
XCTAssertEqual(rect.origin.y, 300.0f);
125125
}
126-
127-
128126
{
129127
CGRect rectWithALongNameOrPathSinceThatsWhenItIsUsefull = CGRectMake(40, 20, 150, 100);
130128
CGRect rect = CGRectWithOriginMidX_AGK(rectWithALongNameOrPathSinceThatsWhenItIsUsefull, 300);
@@ -135,7 +133,6 @@ - (void)testCGRectWith
135133
CGRect rect = CGRectWithOriginMidY_AGK(rectWithALongNameOrPathSinceThatsWhenItIsUsefull, 300);
136134
XCTAssertEqual(rect.origin.y, 250.0f);
137135
}
138-
139136
{
140137
CGRect rectWithALongNameOrPathSinceThatsWhenItIsUsefull = CGRectMake(40, 20, 150, 100);
141138
CGRect rect = CGRectWithOriginMaxX_AGK(rectWithALongNameOrPathSinceThatsWhenItIsUsefull, 300);
@@ -168,4 +165,64 @@ - (void)testCGPointModifiedCATransform3D_AGK
168165
}
169166
}
170167

168+
- (void)testCGFloatRound_AGK
169+
{
170+
XCTAssertEqual(CGFloatRound_AGK(-0.2), 0.0, @"");
171+
XCTAssertEqual(CGFloatRound_AGK(0.0), 0.0, @"");
172+
XCTAssertEqual(CGFloatRound_AGK(0.4), 0.0, @"");
173+
XCTAssertEqual(CGFloatRound_AGK(0.5), 1.0, @"");
174+
XCTAssertEqual(CGFloatRound_AGK(0.6), 1.0, @"");
175+
XCTAssertEqual(CGFloatRound_AGK(1.0), 1.0, @"");
176+
XCTAssertEqual(CGFloatRound_AGK(1.3), 1.0, @"");
177+
}
178+
179+
- (void)testCGFloatCeil_AGK
180+
{
181+
XCTAssertEqual(CGFloatCeil_AGK(-0.2), 0.0, @"");
182+
XCTAssertEqual(CGFloatCeil_AGK(0.0), 0.0, @"");
183+
XCTAssertEqual(CGFloatCeil_AGK(0.4), 1.0, @"");
184+
XCTAssertEqual(CGFloatCeil_AGK(0.5), 1.0, @"");
185+
XCTAssertEqual(CGFloatCeil_AGK(0.6), 1.0, @"");
186+
XCTAssertEqual(CGFloatCeil_AGK(1.0), 1.0, @"");
187+
XCTAssertEqual(CGFloatCeil_AGK(1.3), 2.0, @"");
188+
}
189+
190+
- (void)testCGFloatFloor_AGK
191+
{
192+
XCTAssertEqual(CGFloatFloor_AGK(-0.2), -1.0, @"");
193+
XCTAssertEqual(CGFloatFloor_AGK(0.0), 0.0, @"");
194+
XCTAssertEqual(CGFloatFloor_AGK(0.4), 0.0, @"");
195+
XCTAssertEqual(CGFloatFloor_AGK(0.5), 0.0, @"");
196+
XCTAssertEqual(CGFloatFloor_AGK(0.6), 0.0, @"");
197+
XCTAssertEqual(CGFloatFloor_AGK(1.0), 1.0, @"");
198+
XCTAssertEqual(CGFloatFloor_AGK(1.3), 1.0, @"");
199+
}
200+
201+
- (void)testCGRectFloor_AGK
202+
{
203+
{
204+
CGRect rect = CGRectFloor_AGK(CGRectMake(40.9, 20.1, 150.0, 100.0005));
205+
CGRect expected = CGRectMake(40, 20, 150, 100);
206+
XCTAssertEqualObjects([NSValue valueWithCGRect:rect], [NSValue valueWithCGRect:expected]);
207+
}
208+
}
209+
210+
- (void)testCGRectCeil_AGK
211+
{
212+
{
213+
CGRect rect = CGRectCeil_AGK(CGRectMake(40.9, 20.1, 150.0, 100.0005));
214+
CGRect expected = CGRectMake(41, 21, 150, 101);
215+
XCTAssertEqualObjects([NSValue valueWithCGRect:rect], [NSValue valueWithCGRect:expected]);
216+
}
217+
}
218+
219+
- (void)testCGRectRound_AGK
220+
{
221+
{
222+
CGRect rect = CGRectRound_AGK(CGRectMake(40.9, 20.1, 150.0, 100.0005));
223+
CGRect expected = CGRectMake(41, 20, 150, 100);
224+
XCTAssertEqualObjects([NSValue valueWithCGRect:rect], [NSValue valueWithCGRect:expected]);
225+
}
226+
}
227+
171228
@end

0 commit comments

Comments
 (0)