00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 @import "CGGeometry.j"
00024
00025
00026 CPMinXEdge = 0;
00027 CPMinYEdge = 1;
00028 CPMaxXEdge = 2;
00029 CPMaxYEdge = 3;
00030
00031
00032 CPMakePoint = CGPointMake;
00033 CPMakeSize = CGSizeMake;
00034 CPMakeRect = CGRectMake;
00035
00042 function CPPointCreateCopy(aPoint)
00043 {
00044 return { x: aPoint.x, y: aPoint.y };
00045 }
00046
00054 function CPPointMake(x, y)
00055 {
00056 return { x: x, y: y };
00057 }
00058
00066 function CPRectInset(aRect, dX, dY)
00067 {
00068 return CPRectMake( aRect.origin.x + dX, aRect.origin.y + dY,
00069 aRect.size.width - 2 * dX, aRect.size.height - 2*dY);
00070 }
00071
00078 function CPRectIntegral(aRect)
00079 {
00080
00081 alert("CPRectIntegral unimplemented");
00082 }
00083
00091 function CPRectIntersection(lhsRect, rhsRect)
00092 {
00093 var intersection = CPRectMake(
00094 Math.max(CPRectGetMinX(lhsRect), CPRectGetMinX(rhsRect)),
00095 Math.max(CPRectGetMinY(lhsRect), CPRectGetMinY(rhsRect)),
00096 0, 0);
00097
00098 intersection.size.width = Math.min(CPRectGetMaxX(lhsRect), CPRectGetMaxX(rhsRect)) - CPRectGetMinX(intersection);
00099 intersection.size.height = Math.min(CPRectGetMaxY(lhsRect), CPRectGetMaxY(rhsRect)) - CPRectGetMinY(intersection);
00100
00101 return CPRectIsEmpty(intersection) ? CPRectMakeZero() : intersection;
00102 }
00103
00110 function CPRectCreateCopy(aRect)
00111 {
00112 return { origin: CPPointCreateCopy(aRect.origin), size: CPSizeCreateCopy(aRect.size) };
00113 }
00114
00124 function CPRectMake(x, y, width, height)
00125 {
00126 return { origin: CPPointMake(x, y), size: CPSizeMake(width, height) };
00127 }
00128
00137 function CPRectOffset(aRect, dX, dY)
00138 {
00139 return CPRectMake(aRect.origin.x + dX, aRect.origin.y + dY, aRect.size.width, aRect.size.height);
00140 }
00141
00147 function CPRectStandardize(aRect)
00148 {
00149 var width = CPRectGetWidth(aRect),
00150 height = CPRectGetHeight(aRect),
00151 standardized = CPRectCreateCopy(aRect);
00152
00153 if (width < 0.0)
00154 {
00155 standardized.origin.x += width;
00156 standardized.size.width = -width;
00157 }
00158
00159 if (height < 0.0)
00160 {
00161 standardized.origin.y += height;
00162 standardized.size.height = -height;
00163 }
00164
00165 return standardized;
00166 }
00167
00175 function CPRectUnion(lhsRect, rhsRect)
00176 {
00177 var minX = Math.min(CPRectGetMinX(lhsRect), CPRectGetMinX(rhsRect)),
00178 minY = Math.min(CPRectGetMinY(lhsRect), CPRectGetMinY(rhsRect)),
00179 maxX = Math.max(CPRectGetMaxX(lhsRect), CPRectGetMaxX(rhsRect)),
00180 maxY = Math.max(CPRectGetMaxY(lhsRect), CPRectGetMaxY(rhsRect));
00181
00182 return CPRectMake(minX, minY, maxX - minX, maxY - minY);
00183 }
00184
00191 function CPSizeCreateCopy(aSize)
00192 {
00193 return { width: aSize.width, height: aSize.height };
00194 }
00195
00203 function CPSizeMake(width, height)
00204 {
00205 return { width: width, height: height };
00206 }
00207
00216 function CPRectContainsPoint(aRect, aPoint)
00217 {
00218 return aPoint.x >= CPRectGetMinX(aRect) &&
00219 aPoint.y >= CPRectGetMinY(aRect) &&
00220 aPoint.x < CPRectGetMaxX(aRect) &&
00221 aPoint.y < CPRectGetMaxY(aRect);
00222 }
00223
00232 function CPRectContainsRect(lhsRect, rhsRect)
00233 {
00234 return CPRectEqualToRect(CPUnionRect(lhsRect, rhsRect), rhsRect);
00235 }
00236
00245 function CPPointEqualToPoint(lhsPoint, rhsPoint)
00246 {
00247 return lhsPoint.x == rhsPoint.x && lhsPoint.y == rhsPoint.y;
00248 }
00249
00257 function CPRectEqualToRect(lhsRect, rhsRect)
00258 {
00259 return CPPointEqualToPoint(lhsRect.origin, rhsRect.origin) &&
00260 CPSizeEqualToSize(lhsRect.size, rhsRect.size);
00261 }
00262
00268 function CPRectGetHeight(aRect)
00269 {
00270 return aRect.size.height;
00271 }
00272
00278 function CPRectGetMaxX(aRect)
00279 {
00280 return aRect.origin.x + aRect.size.width;
00281 }
00282
00288 function CPRectGetMaxY(aRect)
00289 {
00290 return aRect.origin.y + aRect.size.height;
00291 }
00292
00298 function CPRectGetMidX(aRect)
00299 {
00300 return aRect.origin.x + (aRect.size.width) / 2.0;
00301 }
00302
00308 function CPRectGetMidY(aRect)
00309 {
00310 return aRect.origin.y + (aRect.size.height) / 2.0;
00311 }
00312
00318 function CPRectGetMinX(aRect)
00319 {
00320 return aRect.origin.x;
00321 }
00322
00328 function CPRectGetMinY(aRect)
00329 {
00330 return aRect.origin.y;
00331 }
00332
00338 function CPRectGetWidth(aRect)
00339 {
00340 return aRect.size.width;
00341 }
00342
00350 function CPRectIntersectsRect(lhsRect, rhsRect)
00351 {
00352 return !CPRectIsEmpty(CPRectIntersection(lhsRect, rhsRect));
00353 }
00354
00362 function CPRectIsEmpty(aRect)
00363 {
00364 return aRect.size.width <= 0.0 || aRect.size.height <= 0.0;
00365 }
00366
00373 function CPRectIsNull(aRect)
00374 {
00375 return aRect.size.width <= 0.0 || aRect.size.height <= 0.0;
00376 }
00377
00385 function CPSizeEqualToSize(lhsSize, rhsSize)
00386 {
00387 return lhsSize.width == rhsSize.width && lhsSize.height == rhsSize.height;
00388 }
00389
00396 function CPStringFromPoint(aPoint)
00397 {
00398 return "{" + aPoint.x + ", " + aPoint.y + "}";
00399 }
00400
00407 function CPStringFromSize(aSize)
00408 {
00409 return "{" + aSize.width + ", " + aSize.height + "}";
00410 }
00411
00418 function CPStringFromRect(aRect)
00419 {
00420 return "{" + CPStringFromPoint(aRect.origin) + ", " + CPStringFromSize(aRect.size) + "}";
00421 }
00422
00429 function CPPointFromString(aString)
00430 {
00431 var comma = aString.indexOf(',');
00432
00433 return { x:parseFloat(aString.substr(1, comma - 1), 10), y:parseFloat(aString.substring(comma + 1, aString.length), 10) };
00434 }
00435
00442 function CPSizeFromString(aString)
00443 {
00444 var comma = aString.indexOf(',');
00445
00446 return { width:parseFloat(aString.substr(1, comma - 1), 10), height:parseFloat(aString.substring(comma + 1, aString.length), 10) };
00447 }
00448
00455 function CPRectFromString(aString)
00456 {
00457 var comma = aString.indexOf(',', aString.indexOf(',') + 1);
00458
00459 return { origin:CPPointFromString(aString.substr(1, comma - 1)), size:CPSizeFromString(aString.substring(comma + 2, aString.length)) };
00460 }
00461
00467 function CPPointFromEvent(anEvent)
00468 {
00469 return CPPointMake(anEvent.clientX, anEvent.clientY, 0);
00470 }
00471
00477 function CPSizeMakeZero()
00478 {
00479 return CPSizeMake(0, 0);
00480 }
00481
00487 function CPRectMakeZero()
00488 {
00489 return CPRectMake(0, 0, 0, 0);
00490 }
00491
00497 function CPPointMakeZero()
00498 {
00499 return CPPointMake(0, 0, 0);
00500 }