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
00047 function CPPointCreateCopy(aPoint)
00048 {
00049 return { x: aPoint.x, y: aPoint.y };
00050 }
00051
00059 function CPPointMake(x, y)
00060 {
00061 return { x: x, y: y };
00062 }
00063
00071 function CPRectInset(aRect, dX, dY)
00072 {
00073 return CPRectMake( aRect.origin.x + dX, aRect.origin.y + dY,
00074 aRect.size.width - 2 * dX, aRect.size.height - 2*dY);
00075 }
00076
00083 function CPRectIntegral(aRect)
00084 {
00085
00086 alert("CPRectIntegral unimplemented");
00087 }
00088
00096 function CPRectIntersection(lhsRect, rhsRect)
00097 {
00098 var intersection = CPRectMake(
00099 Math.max(CPRectGetMinX(lhsRect), CPRectGetMinX(rhsRect)),
00100 Math.max(CPRectGetMinY(lhsRect), CPRectGetMinY(rhsRect)),
00101 0, 0);
00102
00103 intersection.size.width = Math.min(CPRectGetMaxX(lhsRect), CPRectGetMaxX(rhsRect)) - CPRectGetMinX(intersection);
00104 intersection.size.height = Math.min(CPRectGetMaxY(lhsRect), CPRectGetMaxY(rhsRect)) - CPRectGetMinY(intersection);
00105
00106 return CPRectIsEmpty(intersection) ? CPRectMakeZero() : intersection;
00107 }
00108
00115 function CPRectCreateCopy(aRect)
00116 {
00117 return { origin: CPPointCreateCopy(aRect.origin), size: CPSizeCreateCopy(aRect.size) };
00118 }
00119
00129 function CPRectMake(x, y, width, height)
00130 {
00131 return { origin: CPPointMake(x, y), size: CPSizeMake(width, height) };
00132 }
00133
00142 function CPRectOffset(aRect, dX, dY)
00143 {
00144 return CPRectMake(aRect.origin.x + dX, aRect.origin.y + dY, aRect.size.width, aRect.size.height);
00145 }
00146
00152 function CPRectStandardize(aRect)
00153 {
00154 var width = CPRectGetWidth(aRect),
00155 height = CPRectGetHeight(aRect),
00156 standardized = CPRectCreateCopy(aRect);
00157
00158 if (width < 0.0)
00159 {
00160 standardized.origin.x += width;
00161 standardized.size.width = -width;
00162 }
00163
00164 if (height < 0.0)
00165 {
00166 standardized.origin.y += height;
00167 standardized.size.height = -height;
00168 }
00169
00170 return standardized;
00171 }
00172
00180 function CPRectUnion(lhsRect, rhsRect)
00181 {
00182 var minX = Math.min(CPRectGetMinX(lhsRect), CPRectGetMinX(rhsRect)),
00183 minY = Math.min(CPRectGetMinY(lhsRect), CPRectGetMinY(rhsRect)),
00184 maxX = Math.max(CPRectGetMaxX(lhsRect), CPRectGetMaxX(rhsRect)),
00185 maxY = Math.max(CPRectGetMaxY(lhsRect), CPRectGetMaxY(rhsRect));
00186
00187 return CPRectMake(minX, minY, maxX - minX, maxY - minY);
00188 }
00189
00196 function CPSizeCreateCopy(aSize)
00197 {
00198 return { width: aSize.width, height: aSize.height };
00199 }
00200
00208 function CPSizeMake(width, height)
00209 {
00210 return { width: width, height: height };
00211 }
00212
00221 function CPRectContainsPoint(aRect, aPoint)
00222 {
00223 return aPoint.x >= CPRectGetMinX(aRect) &&
00224 aPoint.y >= CPRectGetMinY(aRect) &&
00225 aPoint.x < CPRectGetMaxX(aRect) &&
00226 aPoint.y < CPRectGetMaxY(aRect);
00227 }
00228
00237 function CPRectContainsRect(lhsRect, rhsRect)
00238 {
00239 return CPRectEqualToRect(CPUnionRect(lhsRect, rhsRect), rhsRect);
00240 }
00241
00250 function CPPointEqualToPoint(lhsPoint, rhsPoint)
00251 {
00252 return lhsPoint.x == rhsPoint.x && lhsPoint.y == rhsPoint.y;
00253 }
00254
00262 function CPRectEqualToRect(lhsRect, rhsRect)
00263 {
00264 return CPPointEqualToPoint(lhsRect.origin, rhsRect.origin) &&
00265 CPSizeEqualToSize(lhsRect.size, rhsRect.size);
00266 }
00267
00273 function CPRectGetHeight(aRect)
00274 {
00275 return aRect.size.height;
00276 }
00277
00283 function CPRectGetMaxX(aRect)
00284 {
00285 return aRect.origin.x + aRect.size.width;
00286 }
00287
00293 function CPRectGetMaxY(aRect)
00294 {
00295 return aRect.origin.y + aRect.size.height;
00296 }
00297
00303 function CPRectGetMidX(aRect)
00304 {
00305 return aRect.origin.x + (aRect.size.width) / 2.0;
00306 }
00307
00313 function CPRectGetMidY(aRect)
00314 {
00315 return aRect.origin.y + (aRect.size.height) / 2.0;
00316 }
00317
00323 function CPRectGetMinX(aRect)
00324 {
00325 return aRect.origin.x;
00326 }
00327
00333 function CPRectGetMinY(aRect)
00334 {
00335 return aRect.origin.y;
00336 }
00337
00343 function CPRectGetWidth(aRect)
00344 {
00345 return aRect.size.width;
00346 }
00347
00355 function CPRectIntersectsRect(lhsRect, rhsRect)
00356 {
00357 return !CPRectIsEmpty(CPRectIntersection(lhsRect, rhsRect));
00358 }
00359
00367 function CPRectIsEmpty(aRect)
00368 {
00369 return aRect.size.width <= 0.0 || aRect.size.height <= 0.0;
00370 }
00371
00378 function CPRectIsNull(aRect)
00379 {
00380 return aRect.size.width <= 0.0 || aRect.size.height <= 0.0;
00381 }
00382
00390 function CPSizeEqualToSize(lhsSize, rhsSize)
00391 {
00392 return lhsSize.width == rhsSize.width && lhsSize.height == rhsSize.height;
00393 }
00394
00401 function CPStringFromPoint(aPoint)
00402 {
00403 return "{" + aPoint.x + ", " + aPoint.y + "}";
00404 }
00405
00412 function CPStringFromSize(aSize)
00413 {
00414 return "{" + aSize.width + ", " + aSize.height + "}";
00415 }
00416
00423 function CPStringFromRect(aRect)
00424 {
00425 return "{" + CPStringFromPoint(aRect.origin) + ", " + CPStringFromSize(aRect.size) + "}";
00426 }
00427
00434 function CPPointFromString(aString)
00435 {
00436 var comma = aString.indexOf(',');
00437
00438 return { x:parseFloat(aString.substr(1, comma - 1), 10), y:parseFloat(aString.substring(comma + 1, aString.length), 10) };
00439 }
00440
00447 function CPSizeFromString(aString)
00448 {
00449 var comma = aString.indexOf(',');
00450
00451 return { width:parseFloat(aString.substr(1, comma - 1), 10), height:parseFloat(aString.substring(comma + 1, aString.length), 10) };
00452 }
00453
00460 function CPRectFromString(aString)
00461 {
00462 var comma = aString.indexOf(',', aString.indexOf(',') + 1);
00463
00464 return { origin:CPPointFromString(aString.substr(1, comma - 1)), size:CPSizeFromString(aString.substring(comma + 2, aString.length)) };
00465 }
00466
00472 function CPPointFromEvent(anEvent)
00473 {
00474 return CPPointMake(anEvent.clientX, anEvent.clientY, 0);
00475 }
00476
00482 function CPSizeMakeZero()
00483 {
00484 return CPSizeMake(0, 0);
00485 }
00486
00492 function CPRectMakeZero()
00493 {
00494 return CPRectMake(0, 0, 0, 0);
00495 }
00496
00502 function CPPointMakeZero()
00503 {
00504 return CPPointMake(0, 0, 0);
00505 }
00506