00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "CGGeometry.h"
00024
00025 #define _function(inline) function inline { return _##inline; }
00026
00027 _function(CGPointMake(x, y))
00028 _function(CGPointMakeZero())
00029 _function(CGPointMakeCopy(aPoint))
00030 _function(CGPointCreateCopy(aPoint))
00031
00032 _function(CGPointEqualToPoint(lhsPoint, rhsPoint))
00033 _function(CGStringFromPoint(aPoint))
00034
00035 _function(CGSizeMake(width, height))
00036 _function(CGSizeMakeZero())
00037 _function(CGSizeMakeCopy(aSize))
00038 _function(CGSizeCreateCopy(aSize))
00039
00040 _function(CGSizeEqualToSize(lhsSize, rhsSize))
00041 _function(CGStringFromSize(aSize))
00042
00043 _function(CGRectMake(x, y, width, height))
00044 _function(CGRectMakeZero())
00045 _function(CGRectMakeCopy(aRect))
00046 _function(CGRectCreateCopy(aRect))
00047
00048 _function(CGRectEqualToRect(lhsRect, rhsRect))
00049 _function(CGStringFromRect(aRect))
00050
00051 _function(CGRectOffset(aRect, dX, dY))
00052 _function(CGRectInset(aRect, dX, dY))
00053
00054 _function(CGRectGetHeight(aRect))
00055 _function(CGRectGetMaxX(aRect))
00056 _function(CGRectGetMaxY(aRect))
00057 _function(CGRectGetMidX(aRect))
00058 _function(CGRectGetMidY(aRect))
00059 _function(CGRectGetMinX(aRect))
00060 _function(CGRectGetMinY(aRect))
00061 _function(CGRectGetWidth(aRect))
00062
00063 _function(CGRectIsEmpty(aRect))
00064 _function(CGRectIsNull(aRect))
00065
00066 _function(CGRectContainsPoint(aRect, aPoint))
00067
00076 function CGRectContainsRect(lhsRect, rhsRect)
00077 {
00078 var union = CGRectUnion(lhsRect, rhsRect);
00079
00080 return _CGRectEqualToRect(union, lhsRect);
00081 }
00082
00090 function CGRectIntersectsRect(lhsRect, rhsRect)
00091 {
00092 var intersection = CGRectIntersection(lhsRect, rhsRect);
00093
00094 return !_CGRectIsEmpty(intersection);
00095 }
00096
00104 function CGRectIntegral(aRect)
00105 {
00106 aRect = CGRectStandardize(aRect);
00107
00108
00109 var x = FLOOR(_CGRectGetMinX(aRect)),
00110 y = FLOOR(_CGRectGetMinY(aRect));
00111
00112 aRect.size.width = CEIL(_CGRectGetMaxX(aRect)) - x;
00113 aRect.size.height = CEIL(_CGRectGetMaxY(aRect)) - y;
00114
00115 aRect.origin.x = x;
00116 aRect.origin.y = y;
00117
00118 return aRect;
00119 }
00120
00128 function CGRectIntersection(lhsRect, rhsRect)
00129 {
00130 var intersection = _CGRectMake(
00131 MAX(_CGRectGetMinX(lhsRect), _CGRectGetMinX(rhsRect)),
00132 MAX(_CGRectGetMinY(lhsRect), _CGRectGetMinY(rhsRect)),
00133 0, 0);
00134
00135 intersection.size.width = MIN(_CGRectGetMaxX(lhsRect), _CGRectGetMaxX(rhsRect)) - _CGRectGetMinX(intersection);
00136 intersection.size.height = MIN(_CGRectGetMaxY(lhsRect), _CGRectGetMaxY(rhsRect)) - _CGRectGetMinY(intersection);
00137
00138 return _CGRectIsEmpty(intersection) ? _CGRectMakeZero() : intersection;
00139 }
00140
00141
00142
00143
00144 function CGRectStandardize(aRect)
00145 {
00146 var width = _CGRectGetWidth(aRect),
00147 height = _CGRectGetHeight(aRect),
00148 standardized = aRect;
00149
00150 if (width < 0.0)
00151 {
00152 if (standardized == aRect)
00153 standardized = _CGRectMakeCopy(aRect);
00154
00155 standardized.origin.x += width;
00156 standardized.size.width = -width;
00157 }
00158
00159 if (height < 0.0)
00160 {
00161 if (standardized == aRect)
00162 standardized = _CGRectMakeCopy(aRect);
00163
00164 standardized.origin.y += height;
00165 standardized.size.height = -height;
00166 }
00167
00168 return standardized;
00169 }
00170
00171 function CGRectUnion(lhsRect, rhsRect)
00172 {
00173 var minX = MIN(_CGRectGetMinX(lhsRect), _CGRectGetMinX(rhsRect)),
00174 minY = MIN(_CGRectGetMinY(lhsRect), _CGRectGetMinY(rhsRect)),
00175 maxX = MAX(_CGRectGetMaxX(lhsRect), _CGRectGetMaxX(rhsRect)),
00176 maxY = MAX(_CGRectGetMaxY(lhsRect), _CGRectGetMaxY(rhsRect));
00177
00178 return _CGRectMake(minX, minY, maxX - minX, maxY - minY);
00179 }
00180
00181 function CGPointFromString(aString)
00182 {
00183 var comma = aString.indexOf(',');
00184
00185 return { x:parseInt(aString.substr(1, comma - 1)), y:parseInt(aString.substring(comma + 1, aString.length)) };
00186 }
00187
00188 function CGSizeFromString(aString)
00189 {
00190 var comma = aString.indexOf(',');
00191
00192 return { width:parseInt(aString.substr(1, comma - 1)), height:parseInt(aString.substring(comma + 1, aString.length)) };
00193 }
00194
00195 function CGRectFromString(aString)
00196 {
00197 var comma = aString.indexOf(',', aString.indexOf(',') + 1);
00198
00199 return { origin:CGPointFromString(aString.substr(1, comma - 1)), size:CGSizeFromString(aString.substring(comma + 2, aString.length)) };
00200 }
00201
00202 function CGPointFromEvent(anEvent)
00203 {
00204 return _CGPointMake(anEvent.clientX, anEvent.clientY);
00205 }