From b4f7df4786bc363ec1d7c0ecb36abc7e93b1a3ae Mon Sep 17 00:00:00 2001 From: Aparajita Fishman Date: Mon, 30 Aug 2010 19:59:28 -0400 Subject: [PATCH] Graphics primitives - Implemented CGRectDivide/CPDivideRect. - Implemented CPDrawTiledRects/CPDrawColorTiledRects. - Removed CPDrawGrayBezel and CPDrawGroove, they were not being done in a Cocoa-compliant way, and the Cocoa way is not really useful right now. - Moved border drawing code back to CPScrollView since CPDrawGrayBezel/CPDrawGroove are gone. - Test app to do simple demo of the new functions. - Removed trailing whitespace. --- AppKit/CPGeometry.j | 44 +- AppKit/CPGraphics.j | 145 +++-- AppKit/CPScrollView.j | 93 +++- AppKit/CoreGraphics/CGGeometry.j | 79 ++- Tests/Manual/CPGraphicsTest/AppController.j | 90 ++++ Tests/Manual/CPGraphicsTest/Info.plist | 12 + .../CPGraphicsTest/Resources/MainMenu.cib | 1 + .../CPGraphicsTest/Resources/MainMenu.xib | 509 ++++++++++++++++++ .../CPGraphicsTest/Resources/spinner.gif | Bin 0 -> 1849 bytes Tests/Manual/CPGraphicsTest/index-debug.html | 69 +++ Tests/Manual/CPGraphicsTest/index.html | 68 +++ Tests/Manual/CPGraphicsTest/main.j | 18 + 12 files changed, 1015 insertions(+), 113 deletions(-) create mode 100644 Tests/Manual/CPGraphicsTest/AppController.j create mode 100644 Tests/Manual/CPGraphicsTest/Info.plist create mode 100644 Tests/Manual/CPGraphicsTest/Resources/MainMenu.cib create mode 100644 Tests/Manual/CPGraphicsTest/Resources/MainMenu.xib create mode 100644 Tests/Manual/CPGraphicsTest/Resources/spinner.gif create mode 100644 Tests/Manual/CPGraphicsTest/index-debug.html create mode 100644 Tests/Manual/CPGraphicsTest/index.html create mode 100755 Tests/Manual/CPGraphicsTest/main.j diff --git a/AppKit/CPGeometry.j b/AppKit/CPGeometry.j index 8eec4f8d9..7b5a61e27 100644 --- a/AppKit/CPGeometry.j +++ b/AppKit/CPGeometry.j @@ -70,7 +70,7 @@ function CPPointMake(x, y) */ function CPRectInset(aRect, dX, dY) { - return CPRectMake( aRect.origin.x + dX, aRect.origin.y + dY, + return CPRectMake( aRect.origin.x + dX, aRect.origin.y + dY, aRect.size.width - 2 * dX, aRect.size.height - 2*dY); } @@ -96,13 +96,13 @@ function CPRectIntegral(aRect) function CPRectIntersection(lhsRect, rhsRect) { var intersection = CPRectMake( - Math.max(CPRectGetMinX(lhsRect), CPRectGetMinX(rhsRect)), - Math.max(CPRectGetMinY(lhsRect), CPRectGetMinY(rhsRect)), + Math.max(CPRectGetMinX(lhsRect), CPRectGetMinX(rhsRect)), + Math.max(CPRectGetMinY(lhsRect), CPRectGetMinY(rhsRect)), 0, 0); - + intersection.size.width = Math.min(CPRectGetMaxX(lhsRect), CPRectGetMaxX(rhsRect)) - CPRectGetMinX(intersection); intersection.size.height = Math.min(CPRectGetMaxY(lhsRect), CPRectGetMaxY(rhsRect)) - CPRectGetMinY(intersection); - + return CPRectIsEmpty(intersection) ? CPRectMakeZero() : intersection; } @@ -160,13 +160,13 @@ function CPRectStandardize(aRect) standardized.origin.x += width; standardized.size.width = -width; } - + if (height < 0.0) { standardized.origin.y += height; standardized.size.height = -height; } - + return standardized; } @@ -183,7 +183,7 @@ function CPRectUnion(lhsRect, rhsRect) minY = Math.min(CPRectGetMinY(lhsRect), CPRectGetMinY(rhsRect)), maxX = Math.max(CPRectGetMaxX(lhsRect), CPRectGetMaxX(rhsRect)), maxY = Math.max(CPRectGetMaxY(lhsRect), CPRectGetMaxY(rhsRect)); - + return CPRectMake(minX, minY, maxX - minX, maxY - minY); } @@ -222,8 +222,8 @@ function CPRectContainsPoint(aRect, aPoint) { return aPoint.x >= CPRectGetMinX(aRect) && aPoint.y >= CPRectGetMinY(aRect) && - aPoint.x < CPRectGetMaxX(aRect) && - aPoint.y < CPRectGetMaxY(aRect); + aPoint.x < CPRectGetMaxX(aRect) && + aPoint.y < CPRectGetMaxY(aRect); } /*! @@ -261,7 +261,7 @@ function CPPointEqualToPoint(lhsPoint, rhsPoint) */ function CPRectEqualToRect(lhsRect, rhsRect) { - return CPPointEqualToPoint(lhsRect.origin, rhsRect.origin) && + return CPPointEqualToPoint(lhsRect.origin, rhsRect.origin) && CPSizeEqualToSize(lhsRect.size, rhsRect.size); } @@ -380,6 +380,20 @@ function CPRectIsNull(aRect) return aRect.size.width <= 0.0 || aRect.size.height <= 0.0; } +/*! + Creates two rectangles -- slice and rem -- from inRect, by dividing inRect + with a line that's parallel to the side of inRect specified by edge. + The size of slice is determined by amount, which specifies the distance from edge. + + slice and rem must not be NULL. + + @group CGRect +*/ +function CPDivideRect(inRect, slice, rem, amount, edge) +{ + CGRectDivide(inRect, slice, rem, amount, edge); +} + /*! Returns \c YES if the two CGSizes are identical. @group CGSize @@ -434,7 +448,7 @@ function CPStringFromRect(aRect) function CPPointFromString(aString) { var comma = aString.indexOf(','); - + return { x:parseFloat(aString.substr(1, comma - 1), 10), y:parseFloat(aString.substring(comma + 1, aString.length), 10) }; } @@ -447,7 +461,7 @@ function CPPointFromString(aString) function CPSizeFromString(aString) { var comma = aString.indexOf(','); - + return { width:parseFloat(aString.substr(1, comma - 1), 10), height:parseFloat(aString.substring(comma + 1, aString.length), 10) }; } @@ -460,7 +474,7 @@ function CPSizeFromString(aString) function CPRectFromString(aString) { var comma = aString.indexOf(',', aString.indexOf(',') + 1); - + return { origin:CPPointFromString(aString.substr(1, comma - 1)), size:CPSizeFromString(aString.substring(comma + 2, aString.length)) }; } @@ -504,6 +518,6 @@ function CPPointMakeZero() return CPPointMake(0, 0, 0); } -/*! +/*! @} */ diff --git a/AppKit/CPGraphics.j b/AppKit/CPGraphics.j index baf1379e3..6ac5ed67e 100644 --- a/AppKit/CPGraphics.j +++ b/AppKit/CPGraphics.j @@ -26,97 +26,80 @@ #include "CoreGraphics/CGGeometry.h" -function CPDrawGrayBezel(aRect) +function CPDrawTiledRects( + /* CGRect */ boundsRect, + /* CGRect */ clipRect, + /* CPRectEdge[] */ sides, + /* float[] */ grays) { - var context = [[CPGraphicsContext currentContext] graphicsPort]; + if (sides.length != grays.length) + [CPException raise:CPInvalidArgumentException reason:@"sides (length: " + sides.length + ") and grays (length: " + grays.length + ") must have the same length."]; - CGContextBeginPath(context); - CGContextSetStrokeColor(context, [CPColor colorWithWhite:142.0/255.0 alpha:1.0]); + var colors = []; - var y = _CGRectGetMinY(aRect) + 0.5; + for (var i = 0; i < grays.length; ++i) + colors.push([CPColor colorWithWhite:grays[i] alpha:1.0]); - CGContextMoveToPoint(context, _CGRectGetMinX(aRect), y); - CGContextAddLineToPoint(context, _CGRectGetMinX(aRect) + 1.0, y); - CGContextStrokePath(context); - - CGContextBeginPath(context); - CGContextSetStrokeColor(context, [CPColor colorWithWhite:192.0/255.0 alpha:1.0]); - CGContextMoveToPoint(context, _CGRectGetMinX(aRect) + 1.0, y); - CGContextAddLineToPoint(context, _CGRectGetMaxX(aRect) - 1.0, y); - CGContextStrokePath(context); - - CGContextBeginPath(context); - CGContextSetStrokeColor(context, [CPColor colorWithWhite:142.0/255.0 alpha:1.0]); - CGContextMoveToPoint(context, _CGRectGetMaxX(aRect) - 1.0, y); - CGContextAddLineToPoint(context, _CGRectGetMaxX(aRect), y); - CGContextStrokePath(context); - - CGContextBeginPath(context); - CGContextSetStrokeColor(context, [CPColor colorWithWhite:190.0/255.0 alpha:1.0]); - - var x = _CGRectGetMaxX(aRect) - 0.5; - - CGContextMoveToPoint(context, x, _CGRectGetMinY(aRect) + 1.0); - CGContextAddLineToPoint(context, x, _CGRectGetMaxY(aRect)); - - CGContextMoveToPoint(context, x - 0.5, _CGRectGetMaxY(aRect) - 0.5); - CGContextAddLineToPoint(context, _CGRectGetMinX(aRect), _CGRectGetMaxY(aRect) - 0.5); - - x = _CGRectGetMinX(aRect) + 0.5; - - CGContextMoveToPoint(context, x, _CGRectGetMaxY(aRect)); - CGContextAddLineToPoint(context, x, _CGRectGetMinY(aRect) + 1.0); - - CGContextStrokePath(context); + return CPDrawColorTiledRects(boundsRect, clipRect, sides, colors); } -function CPDrawGroove(aRect, drawTopBorder) +function CPDrawColorTiledRects( + /* CGRect */ boundsRect, + /* CGRect */ clipRect, + /* CPRectEdge[] */ sides, + /* CPColor[] */ colors) { - var context = [[CPGraphicsContext currentContext] graphicsPort]; + if (sides.length != colors.length) + [CPException raise:CPInvalidArgumentException reason:@"sides (length: " + sides.length + ") and colors (length: " + colors.length + ") must have the same length."]; - CGContextBeginPath(context); - CGContextSetStrokeColor(context, [CPColor colorWithWhite:159.0/255.0 alpha:1.0]); + var resultRect = _CGRectMakeCopy(boundsRect), + slice = _CGRectMakeZero(), + remainder = _CGRectMakeZero(), + context = [[CPGraphicsContext currentContext] graphicsPort]; - var y = _CGRectGetMinY(aRect) + 0.5; - - CGContextMoveToPoint(context, _CGRectGetMinX(aRect), y); - CGContextAddLineToPoint(context, _CGRectGetMaxX(aRect), y); - - var x = _CGRectGetMaxX(aRect) - 1.5; - - CGContextMoveToPoint(context, x, _CGRectGetMinY(aRect) + 2.0); - CGContextAddLineToPoint(context, x, _CGRectGetMaxY(aRect) - 1.0); - - y = _CGRectGetMaxY(aRect) - 1.5; - - CGContextMoveToPoint(context, _CGRectGetMaxX(aRect) - 1.0, y); - CGContextAddLineToPoint(context, _CGRectGetMinX(aRect) + 2.0, y); - - x = _CGRectGetMinX(aRect) + 0.5; - - CGContextMoveToPoint(context, x, _CGRectGetMaxY(aRect)); - CGContextAddLineToPoint(context, x, _CGRectGetMinY(aRect)); - - CGContextStrokePath(context); - - CGContextBeginPath(context); - CGContextSetStrokeColor(context, [CPColor whiteColor]); - - var rect = _CGRectOffset(aRect, 1.0, 1.0); - - rect.size.width -= 1.0; - rect.size.height -= 1.0; - CGContextStrokeRect(context, _CGRectInset(rect, 0.5, 0.5)); - - if (drawTopBorder) + for (var sideIndex = 0; sideIndex < sides.length; ++sideIndex) { + var side = sides[sideIndex]; + + CGRectDivide(resultRect, slice, remainder, 1.0, side); + resultRect = remainder; + slice = CGRectIntersection(slice, clipRect); + + // Cocoa docs say that only slices that are within the clipRect are actually drawn + if (_CGRectIsEmpty(slice)) + continue; + + var minX, maxX, minY, maxY; + + if (side == CPMinXEdge || side == CPMaxXEdge) + { + // Make sure we have at least 1 pixel to draw a line + if (_CGRectGetWidth(slice) < 1.0) + continue; + + minX = _CGRectGetMinX(slice) + 0.5; + maxX = minX; + minY = _CGRectGetMinY(slice); + maxY = _CGRectGetMaxY(slice); + } + else // CPMinYEdge || CPMaxYEdge + { + // Make sure we have at least 1 pixel to draw a line + if (_CGRectGetHeight(slice) < 1.0) + continue; + + minX = _CGRectGetMinX(slice); + maxX = _CGRectGetMaxX(slice); + minY = _CGRectGetMinY(slice) + 0.5; + maxY = minY; + } + CGContextBeginPath(context); - CGContextSetStrokeColor(context, [CPColor colorWithWhite:192.0/255.0 alpha:1.0]); - - y = _CGRectGetMinY(aRect) + 2.5; - - CGContextMoveToPoint(context, _CGRectGetMinX(aRect) + 2.0, y); - CGContextAddLineToPoint(context, _CGRectGetMaxX(aRect) - 2.0, y); + CGContextMoveToPoint(context, minX, minY); + CGContextAddLineToPoint(context, maxX, maxY); + CGContextSetStrokeColor(context, colors[sideIndex]); CGContextStrokePath(context); } -} + + return resultRect; +} \ No newline at end of file diff --git a/AppKit/CPScrollView.j b/AppKit/CPScrollView.j index 41dc25c94..d15ad93f9 100644 --- a/AppKit/CPScrollView.j +++ b/AppKit/CPScrollView.j @@ -772,11 +772,11 @@ break; case CPBezelBorder: - CPDrawGrayBezel(strokeRect); + [self _drawGrayBezelInContext:context bounds:strokeRect]; break; case CPGrooveBorder: - CPDrawGroove(strokeRect, YES); + [self _drawGrooveInContext:context bounds:strokeRect]; break; default: @@ -784,6 +784,95 @@ } } +- (void)_drawGrayBezelInContext:(CGContext)context bounds:(CGRect)aRect +{ + CGContextBeginPath(context); + CGContextSetStrokeColor(context, [CPColor colorWithWhite:142.0/255.0 alpha:1.0]); + + var y = _CGRectGetMinY(aRect) + 0.5; + + CGContextMoveToPoint(context, _CGRectGetMinX(aRect), y); + CGContextAddLineToPoint(context, _CGRectGetMinX(aRect) + 1.0, y); + CGContextStrokePath(context); + + CGContextBeginPath(context); + CGContextSetStrokeColor(context, [CPColor colorWithWhite:192.0/255.0 alpha:1.0]); + CGContextMoveToPoint(context, _CGRectGetMinX(aRect) + 1.0, y); + CGContextAddLineToPoint(context, _CGRectGetMaxX(aRect) - 1.0, y); + CGContextStrokePath(context); + + CGContextBeginPath(context); + CGContextSetStrokeColor(context, [CPColor colorWithWhite:142.0/255.0 alpha:1.0]); + CGContextMoveToPoint(context, _CGRectGetMaxX(aRect) - 1.0, y); + CGContextAddLineToPoint(context, _CGRectGetMaxX(aRect), y); + CGContextStrokePath(context); + + CGContextBeginPath(context); + CGContextSetStrokeColor(context, [CPColor colorWithWhite:190.0/255.0 alpha:1.0]); + + var x = _CGRectGetMaxX(aRect) - 0.5; + + CGContextMoveToPoint(context, x, _CGRectGetMinY(aRect) + 1.0); + CGContextAddLineToPoint(context, x, _CGRectGetMaxY(aRect)); + + CGContextMoveToPoint(context, x - 0.5, _CGRectGetMaxY(aRect) - 0.5); + CGContextAddLineToPoint(context, _CGRectGetMinX(aRect), _CGRectGetMaxY(aRect) - 0.5); + + x = _CGRectGetMinX(aRect) + 0.5; + + CGContextMoveToPoint(context, x, _CGRectGetMaxY(aRect)); + CGContextAddLineToPoint(context, x, _CGRectGetMinY(aRect) + 1.0); + + CGContextStrokePath(context); +} + +- (void)_drawGrooveInContext:(CGContext)context bounds:(CGRect)aRect +{ + CGContextBeginPath(context); + CGContextSetStrokeColor(context, [CPColor colorWithWhite:159.0/255.0 alpha:1.0]); + + var y = _CGRectGetMinY(aRect) + 0.5; + + CGContextMoveToPoint(context, _CGRectGetMinX(aRect), y); + CGContextAddLineToPoint(context, _CGRectGetMaxX(aRect), y); + + var x = _CGRectGetMaxX(aRect) - 1.5; + + CGContextMoveToPoint(context, x, _CGRectGetMinY(aRect) + 2.0); + CGContextAddLineToPoint(context, x, _CGRectGetMaxY(aRect) - 1.0); + + y = _CGRectGetMaxY(aRect) - 1.5; + + CGContextMoveToPoint(context, _CGRectGetMaxX(aRect) - 1.0, y); + CGContextAddLineToPoint(context, _CGRectGetMinX(aRect) + 2.0, y); + + x = _CGRectGetMinX(aRect) + 0.5; + + CGContextMoveToPoint(context, x, _CGRectGetMaxY(aRect)); + CGContextAddLineToPoint(context, x, _CGRectGetMinY(aRect)); + + CGContextStrokePath(context); + + CGContextBeginPath(context); + CGContextSetStrokeColor(context, [CPColor whiteColor]); + + var rect = _CGRectOffset(aRect, 1.0, 1.0); + + rect.size.width -= 1.0; + rect.size.height -= 1.0; + CGContextStrokeRect(context, _CGRectInset(rect, 0.5, 0.5)); + + CGContextBeginPath(context); + CGContextSetStrokeColor(context, [CPColor colorWithWhite:192.0/255.0 alpha:1.0]); + + y = _CGRectGetMinY(aRect) + 2.5; + + CGContextMoveToPoint(context, _CGRectGetMinX(aRect) + 2.0, y); + CGContextAddLineToPoint(context, _CGRectGetMaxX(aRect) - 2.0, y); + CGContextStrokePath(context); +} + + // CPResponder Overrides /*! diff --git a/AppKit/CoreGraphics/CGGeometry.j b/AppKit/CoreGraphics/CGGeometry.j index 3c2902ddb..93eb5401c 100644 --- a/AppKit/CoreGraphics/CGGeometry.j +++ b/AppKit/CoreGraphics/CGGeometry.j @@ -70,6 +70,11 @@ _function(CGInsetMakeZero()) _function(CGInsetMakeCopy(anInset)) _function(CGInsetIsEmpty(anInset)) +CGMinXEdge = 0; +CGMinYEdge = 1; +CGMaxXEdge = 2; +CGMaxYEdge = 3; + CGRectNull = _CGRectMake(Infinity, Infinity, 0.0, 0.0); /*! @@ -77,6 +82,50 @@ CGRectNull = _CGRectMake(Infinity, Infinity, 0.0, 0.0); @{ */ +/*! + Creates two rectangles -- slice and rem -- from inRect, by dividing inRect + with a line that's parallel to the side of inRect specified by edge. + The size of slice is determined by amount, which specifies the distance from edge. + + slice and rem must not be NULL, must not be the same object, and must not be the + same object as inRect. + + @group CGRect +*/ +function CGRectDivide(inRect, slice, rem, amount, edge) +{ + slice.origin = _CGPointMakeCopy(inRect.origin); + slice.size = _CGSizeMakeCopy(inRect.size); + rem.origin = _CGPointMakeCopy(inRect.origin); + rem.size = _CGSizeMakeCopy(inRect.size); + + switch (edge) + { + case CGMinXEdge: + slice.size.width = amount; + rem.origin.x += amount; + rem.size.width -= amount; + break; + + case CGMaxXEdge: + slice.origin.x = _CGRectGetMaxX(slice) - amount; + slice.size.width = amount; + rem.size.width -= amount; + break; + + case CGMinYEdge: + slice.size.height = amount; + rem.origin.y += amount; + rem.size.height -= amount; + break; + + case CGMaxYEdge: + slice.origin.y = _CGRectGetMaxY(slice) - amount; + slice.size.height = amount; + rem.size.height -= amount; + } +} + /*! Returns a \c BOOL indicating whether CGRect \c lhsRect contains CGRect \c rhsRect. @@ -88,7 +137,7 @@ CGRectNull = _CGRectMake(Infinity, Infinity, 0.0, 0.0); function CGRectContainsRect(lhsRect, rhsRect) { var union = CGRectUnion(lhsRect, rhsRect); - + return _CGRectEqualToRect(union, lhsRect); } @@ -102,12 +151,12 @@ function CGRectContainsRect(lhsRect, rhsRect) function CGRectIntersectsRect(lhsRect, rhsRect) { var intersection = CGRectIntersection(lhsRect, rhsRect); - + return !_CGRectIsEmpty(intersection); } /*! - Makes the origin and size of a CGRect all integers. Specifically, by making + Makes the origin and size of a CGRect all integers. Specifically, by making the southwest corner the origin (rounded down), and the northeast corner a CGSize (rounded up). @param aRect the rectangle to operate on @return CGRect the modified rectangle (same as the input) @@ -120,7 +169,7 @@ function CGRectIntegral(aRect) // Store these out separately, if not the GetMaxes will return incorrect values. var x = FLOOR(_CGRectGetMinX(aRect)), y = FLOOR(_CGRectGetMinY(aRect)); - + aRect.size.width = CEIL(_CGRectGetMaxX(aRect)) - x; aRect.size.height = CEIL(_CGRectGetMaxY(aRect)) - y; @@ -140,18 +189,18 @@ function CGRectIntegral(aRect) function CGRectIntersection(lhsRect, rhsRect) { var intersection = _CGRectMake( - MAX(_CGRectGetMinX(lhsRect), _CGRectGetMinX(rhsRect)), - MAX(_CGRectGetMinY(lhsRect), _CGRectGetMinY(rhsRect)), + MAX(_CGRectGetMinX(lhsRect), _CGRectGetMinX(rhsRect)), + MAX(_CGRectGetMinY(lhsRect), _CGRectGetMinY(rhsRect)), 0, 0); - + intersection.size.width = MIN(_CGRectGetMaxX(lhsRect), _CGRectGetMaxX(rhsRect)) - _CGRectGetMinX(intersection); intersection.size.height = MIN(_CGRectGetMaxY(lhsRect), _CGRectGetMaxY(rhsRect)) - _CGRectGetMinY(intersection); - + return _CGRectIsEmpty(intersection) ? _CGRectMakeZero() : intersection; } /* - + */ function CGRectStandardize(aRect) { @@ -189,28 +238,28 @@ function CGRectUnion(lhsRect, rhsRect) minY = MIN(_CGRectGetMinY(lhsRect), _CGRectGetMinY(rhsRect)), maxX = MAX(_CGRectGetMaxX(lhsRect), _CGRectGetMaxX(rhsRect)), maxY = MAX(_CGRectGetMaxY(lhsRect), _CGRectGetMaxY(rhsRect)); - + return _CGRectMake(minX, minY, maxX - minX, maxY - minY); } function CGPointFromString(aString) { var comma = aString.indexOf(','); - + return { x:parseInt(aString.substr(1, comma - 1)), y:parseInt(aString.substring(comma + 1, aString.length)) }; } function CGSizeFromString(aString) { var comma = aString.indexOf(','); - + return { width:parseInt(aString.substr(1, comma - 1)), height:parseInt(aString.substring(comma + 1, aString.length)) }; } function CGRectFromString(aString) { var comma = aString.indexOf(',', aString.indexOf(',') + 1); - + return { origin:CGPointFromString(aString.substr(1, comma - 1)), size:CGSizeFromString(aString.substring(comma + 2, aString.length)) }; } @@ -233,6 +282,6 @@ function CPStringFromCGInset(anInset) return '{' + anInset.top + ", " + anInset.left + ", " + anInset.bottom + ", " + anInset.right + '}'; } -/*! - @} +/*! + @} */ diff --git a/Tests/Manual/CPGraphicsTest/AppController.j b/Tests/Manual/CPGraphicsTest/AppController.j new file mode 100644 index 000000000..a85aeec7e --- /dev/null +++ b/Tests/Manual/CPGraphicsTest/AppController.j @@ -0,0 +1,90 @@ +/* + * AppController.j + * CPFontMetricsExplorer + * + * Created by Aparajita Fishman on August 23, 2010. + */ + +@import + +CPLogRegister(CPLogConsole); + + +@implementation AppController : CPObject +{ + CPWindow theWindow; + + @outlet CustomDrawView view1; + @outlet CustomDrawView view2; + @outlet CustomDrawView view3; + @outlet CustomDrawView view4; +} + +- (void)awakeFromCib +{ + [view1 setDelegate:self]; + [view2 setDelegate:self]; + [view3 setDelegate:self]; + [view4 setDelegate:self]; +} + +- (void)viewWillDraw:(CPView)aView dirtyRect:(CGRect)dirtyRect +{ + var context = [[CPGraphicsContext currentContext] graphicsPort], + innerRect; + + if (aView === view1 || aView === view2) + { + var bounds = [aView bounds], + sides = [CPMinYEdge, CPMaxYEdge, CPMinXEdge, CPMaxXEdge], + grays = [192.0/255.0, 1.0, 192.0/255.0, 1.0], + clipRect = [aView bounds]; + + if (aView === view2) + { + var remainder = CGRectMakeZero(); + CGRectDivide(bounds, clipRect, remainder, CGRectGetWidth(bounds) / 2, CGMinXEdge); + } + + innerRect = CPDrawTiledRects(bounds, clipRect, sides, grays); + } + else if (aView === view3) + { + var bounds = [aView bounds], + sides = [CPMinYEdge, CPMaxYEdge, CPMinXEdge, CPMaxXEdge], + colors = [[CPColor redColor], [CPColor blueColor], [CPColor whiteColor], [CPColor yellowColor]]; + + innerRect = CPDrawColorTiledRects(bounds, bounds, sides, colors); + } + else if (aView === view4) + { + var bounds = [aView bounds], + sides = [CPMinYEdge, CPMaxYEdge, CPMinXEdge, CPMaxXEdge, + CPMinYEdge, CPMaxYEdge, CPMinXEdge, CPMaxXEdge, + CPMinYEdge, CPMaxYEdge, CPMinXEdge, CPMaxXEdge], + colors = [[CPColor redColor], [CPColor blueColor], [CPColor whiteColor], [CPColor yellowColor], + [CPColor redColor], [CPColor blueColor], [CPColor whiteColor], [CPColor yellowColor], + [CPColor redColor], [CPColor blueColor], [CPColor whiteColor], [CPColor yellowColor]]; + + innerRect = CPDrawColorTiledRects(bounds, bounds, sides, colors); + } + + CGContextSetFillColor(context, [CPColor colorWithHexString:@"E1EAFF"]); + CGContextFillRect(context, innerRect); +} + +@end + + +@implementation CustomDrawView : CPView +{ + id _delegate @accessors(property=delegate); +} + +- (void)drawRect:(CGRect)dirtyRect +{ + if (_delegate && [_delegate respondsToSelector:@selector(viewWillDraw:dirtyRect:)]) + [_delegate viewWillDraw:self dirtyRect:dirtyRect]; +} + +@end diff --git a/Tests/Manual/CPGraphicsTest/Info.plist b/Tests/Manual/CPGraphicsTest/Info.plist new file mode 100644 index 000000000..886699fa0 --- /dev/null +++ b/Tests/Manual/CPGraphicsTest/Info.plist @@ -0,0 +1,12 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + CPGraphicsTest + CPPrincipalClass + CPApplication + + diff --git a/Tests/Manual/CPGraphicsTest/Resources/MainMenu.cib b/Tests/Manual/CPGraphicsTest/Resources/MainMenu.cib new file mode 100644 index 000000000..0c682c887 --- /dev/null +++ b/Tests/Manual/CPGraphicsTest/Resources/MainMenu.cib @@ -0,0 +1 @@ +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;36E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;E;E;S;16;IBCocoaFrameworkD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;36E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;27E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;65E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;66E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;67E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;68E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;6;$afontD;K;6;CP$UIDd;2;72E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;73E;K;11;$aalignmentD;K;6;CP$UIDd;2;73E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;74E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;75E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;76E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;76E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;73E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;73E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;65E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;77E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;68E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;6;$afontD;K;6;CP$UIDd;2;72E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;73E;K;11;$aalignmentD;K;6;CP$UIDd;2;73E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;78E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;75E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;76E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;76E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;73E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;73E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;16;_CPCibCustomViewK;8;$classesA;S;16;_CPCibCustomViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;79E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;80E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;82E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;80E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;2;81E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;83E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;84E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;85E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;86E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;87E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;36E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;88E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;89E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;6;$afontD;K;6;CP$UIDd;2;72E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;73E;K;11;$aalignmentD;K;6;CP$UIDd;2;73E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;90E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;75E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;76E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;76E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;73E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;73E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;91E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;92E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;6;$afontD;K;6;CP$UIDd;2;93E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;73E;K;11;$aalignmentD;K;6;CP$UIDd;2;94E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;95E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;75E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;76E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;76E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;73E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;94E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;96E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;97E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;80E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;98E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;99E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;6;$afontD;K;6;CP$UIDd;2;93E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;73E;K;11;$aalignmentD;K;6;CP$UIDd;2;94E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;100E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;75E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;76E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;76E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;73E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;94E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;101E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;89E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;6;$afontD;K;6;CP$UIDd;2;72E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;73E;K;11;$aalignmentD;K;6;CP$UIDd;2;73E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;102E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;75E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;76E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;76E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;73E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;73E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;103E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;80E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;2;81E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;104E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;104E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;105E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;106E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;70E;E;S;27;Static Text (Single border)S;41;Text Field Cell (Bezel using full bounds)S;11;ApplicationS;50;Text Field Cell (Bezel clipping half horizontally)S;37;Static Text (Bezel using full bounds)S;16;Custom Draw ViewS;18;Custom Draw View-1S;24;Window (CPGraphics Test)S;46;Static Text (Bezel clipping half horizontally)S;30;Static Text (CPDrawTiledRects)S;12;File's OwnerS;39;Text Field Cell (CPDrawColorTiledRects)S;14;App ControllerS;31;Text Field Cell (Single border)S;18;Custom Draw View-2S;35;Static Text (CPDrawColorTiledRects)S;27;Static Text (Triple border)S;31;Text Field Cell (Triple border)S;18;Custom Draw View-3S;34;Text Field Cell (CPDrawTiledRects)S;12;Content ViewD;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;16E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;30E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;107E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;30E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;27E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;108E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;30E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;31E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;109E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;30E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;24E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;30E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;34E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;30E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;25E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;112E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;27E;E;E;S;22;{{11, 330}, {177, 22}}S;19;{{0, 0}, {177, 22}}d;2;36S;6;normalD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;113E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;114E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;76E;E;d;1;2S;13;Single borderd;4;3072F;S;22;{{13, 149}, {177, 22}}S;23;Bezel using full boundsS;22;{{234, 49}, {163, 96}}S;19;{{0, 0}, {163, 96}}S;14;CustomDrawViewS;23;{{234, 230}, {163, 96}}S;28;{1.79769e+308, 1.79769e+308}S;8;CPWindowS;23;{{408, 63}, {417, 368}}d;1;7S;15;CPGraphics TestS;23;{{225, 149}, {181, 22}}S;19;{{0, 0}, {181, 22}}S;32;Bezel clipping half horizontallyS;21;{{13, 14}, {182, 30}}S;19;{{0, 0}, {182, 30}}D;K;6;$classD;K;6;CP$UIDd;2;71E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;113E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;106E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;115E;E;d;1;4S;16;CPDrawTiledRectsS;13;AppControllerS;21;{{20, 49}, {163, 96}}S;22;{{13, 195}, {231, 30}}S;19;{{0, 0}, {231, 30}}S;21;CPDrawColorTiledRectsS;23;{{223, 330}, {181, 22}}S;13;Triple borderS;22;{{20, 230}, {163, 96}}S;20;{{0, 0}, {417, 368}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;33E;E;E;d;2;18S;8;delegateS;9;theWindowS;5;view1S;5;view2S;5;view3S;5;view4S;32;Lucida Grande, Arial, sans-serifd;2;11T;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPGraphicsTest/Resources/MainMenu.xib b/Tests/Manual/CPGraphicsTest/Resources/MainMenu.xib new file mode 100644 index 000000000..e7ad42114 --- /dev/null +++ b/Tests/Manual/CPGraphicsTest/Resources/MainMenu.xib @@ -0,0 +1,509 @@ + + + + 1060 + 10F569 + 788 + 1038.29 + 461.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 788 + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + NSApplication + + + FirstResponder + + + NSApplication + + + 7 + 2 + {{408, 597}, {417, 368}} + 1946157056 + CPGraphics Test + NSWindow + + {1.79769e+308, 1.79769e+308} + + + 274 + + + + 268 + {{17, 328}, {174, 22}} + + YES + + 68288064 + 272630784 + CPDrawTiledRects + + LucidaGrande-Bold + 18 + 16 + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + + + + 268 + {{20, 223}, {163, 96}} + + CustomDrawView + + + + 268 + {{234, 223}, {163, 96}} + + CustomDrawView + + + + 268 + {{17, 147}, {223, 22}} + + YES + + 68288064 + 272630784 + CPDrawColorTiledRects + + + + + + + + + 268 + {{20, 42}, {163, 96}} + + CustomDrawView + + + + 268 + {{234, 42}, {163, 96}} + + CustomDrawView + + + + 268 + {{17, 201}, {169, 14}} + + YES + + 68288064 + 138544128 + Bezel using full bounds + + LucidaGrande + 11 + 3100 + + + + + + + + + 268 + {{229, 201}, {173, 14}} + + YES + + 68288064 + 138544128 + Bezel clipping half horizontally + + + + + + + + + 268 + {{15, 20}, {169, 14}} + + YES + + 68288064 + 138544128 + Single border + + + + + + + + + 268 + {{227, 20}, {173, 14}} + + YES + + 68288064 + 138544128 + Triple border + + + + + + + + {417, 368} + + + {{0, 0}, {1680, 1028}} + {1.79769e+308, 1.79769e+308} + + + AppController + + + + + + + delegate + + + + 451 + + + + theWindow + + + + 1090 + + + + view1 + + + + 1118 + + + + view2 + + + + 1119 + + + + view3 + + + + 1120 + + + + view4 + + + + 1121 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 371 + + + + + + + + 372 + + + + + + + + + + + + + + + + + 450 + + + + + 1069 + + + + + + + + 1070 + + + + + 1112 + + + + + 1113 + + + + + 1114 + + + + + + + + 1115 + + + + + 1116 + + + + + 1117 + + + + + 1122 + + + + + + + + 1123 + + + + + 1124 + + + + + + + + 1125 + + + + + 1126 + + + + + + + + 1127 + + + + + + + + 1128 + + + + + 1129 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{469, 508}, {417, 368}} + com.apple.InterfaceBuilder.CocoaPlugin + {{469, 508}, {417, 368}} + + {{33, 99}, {480, 360}} + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 1129 + + + + + AppController + NSObject + + id + id + + + + setFontFamily: + id + + + setFontSize: + id + + + + NSWindow + NSView + NSView + NSView + NSView + + + + theWindow + NSWindow + + + view1 + NSView + + + view2 + NSView + + + view3 + NSView + + + view4 + NSView + + + + IBUserSource + + + + + CustomDrawView + NSView + + IBUserSource + + + + + + 0 + IBCocoaFramework + YES + ../registration.xcodeproj + 3 + + diff --git a/Tests/Manual/CPGraphicsTest/Resources/spinner.gif b/Tests/Manual/CPGraphicsTest/Resources/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..06dbc2bc21dddcf0e09b566d5b211aee89570f52 GIT binary patch literal 1849 zcma*odr(tX9tZHtz31lM+(&Y`A`Ou`NeG&R#DrIfV%?hng21vs6v>ooRQQFbk7E_K!V( z{?5!fpZWgIZ%*d6t%i*j24bL}AZUJm9)h6R*;%L4IWse3G#VWaN1#$zSSXcBhlYlH zJ|D}n{r&w2f+Qp)SS*&n?*G4}{}!h?td_mjU6Kad-rW*QwWYCUk7d^e+sjpZAn6kT z5rM;`{~_}-wm+L@%+E;JphLm}C3WzQAQD0wBoY|rOTQX{(@pp-WAA8Iw0HKl|15j) zhGh(SFWu#5zUCw^T!}C~eC}~?{xG-r7ugQC>taC+|L^xr&a%{#cgUOZXIM&v?)k^2 z1i5%0!U00wq)r4vlAwXBA_m5J5WNeuBm-XJQ5pG4GD%vc|K){+TJ{AkHqN@SJKczX zU}QRd9n*_bf^h94)6Ctv{CUfz_;qs#RDuQ$DR%y1&5G-a6rhf*4Y zl+UOD1*GE{GQ7vv;c-tTIMkz0ovO>9j%b5hpa@a*CBJ#W!0@ndSwF|%hMkdFtXiU) z`BEp+yhkt8ZY>tg&uyH@%^%K4jDrbA;et&vnnzZ3z22@e6<27z2Vk13kb7OtISyxv z(XoO-LNQCZe3lfzc%*pNqU<9T+p~teThOEB+~e&U0mC|zS{Q)dJZ)!^1f7L(zg*L> z*vSW%?dR~@@0(}x6-V^A`~ImD;)NaBUnP8;RH=bS2@pk`wp>>8r&jGjmGPy%1BW}v zoPo}ca$~bze@efc3kapuEVW1!%teOZT3j2Tw5=hjiAf02d}7dL0oFC%@=RXp5Ow#% z@a>+AM|YWt$n&e`>sB-32gBcuTi>R>*|8@lp`y6thc7ydyqDsuUn~YzZf|{-R@-3y zL#wx{Ii}xxL_csiW*LBn0-A$>zp4WOmkf6=ilrjlW?-l9+bCd7|i?*b5NTmy<<6NZ0T8$SN@mwdC2f z6jqK=N@bS@!=YSj%>h0}*4p+%0HbTIrE$w7UMT6+AZZ&DAo*qZAAi(OtNbIfl#Dw^ zJWeiCp~zi#&t6x}m9)O^eR4HiLV3QA<<0>HZ8%$^lrSE94Wb}=+MM^!b>n#5&-JQR zkr-CEu9C;_F*7DqDisulV6Pmg$nFL0TPn%~*m^-`Z3^BgU(sNpnx%nW(!eV9A&FvI zHL3X3lw8Wji^6=8KbQDE-e%b?svdFxxdh$8r97@7$ojeI`6AL8Ob6QC$qh&>ZWVDX1F{0vJnT%%mE;GveKWR%C} zM&4d;Jf3s9|HAA)yVUPo`Aq;0do#)uHSXi5*QF*)x@MVVHr+cN)uMZ__F|&Ta#p8d z53TOKtce!PJUuie8UWol-S(`c2nH?UGqJP{!4RR4u$LCfn)q-hj0^f=h(VYy)T6eN zhRO!ja-aDBTcgeyP(8Ua4IdiOog^*CQa?R(cP#9AgL9`j>EX-6Yf1lzX(!~``M1XC zNmM<4<6d~wWZ$Xrk0K}UteTrq@LBBk#MsjkK;pbuVhe)NI7(7Pf(l?lxC7=1Z7Pzl zMbS;nV4NI5_N{1$P)&XC)huOGQ+h^zpYUZfb*1n6>!`#*b3y52LGmi+<4sY5jyD#- zw&$d}DTguLAfnRtjrM*JfqtHqUu6rQoU=g%1E9xk%;)TDm^2<8n-0IhTsQFaek)MY}>PK4;nBk=ow4pF>vzkO& gna%Org-kgQCf=+BeMi^RbuY;YE~rTjend;_cdi8t>i_@% literal 0 HcmV?d00001 diff --git a/Tests/Manual/CPGraphicsTest/index-debug.html b/Tests/Manual/CPGraphicsTest/index-debug.html new file mode 100644 index 000000000..5aba96e73 --- /dev/null +++ b/Tests/Manual/CPGraphicsTest/index-debug.html @@ -0,0 +1,69 @@ + + + + + + + + CPGraphics Test + + + + + + + + + + + + +
+ + + +
+ + + diff --git a/Tests/Manual/CPGraphicsTest/index.html b/Tests/Manual/CPGraphicsTest/index.html new file mode 100644 index 000000000..14e5a8fb0 --- /dev/null +++ b/Tests/Manual/CPGraphicsTest/index.html @@ -0,0 +1,68 @@ + + + + + + + + CPGraphics Test + + + + + + + + + + + + +
+ + + +
+ + + diff --git a/Tests/Manual/CPGraphicsTest/main.j b/Tests/Manual/CPGraphicsTest/main.j new file mode 100755 index 000000000..af6279da3 --- /dev/null +++ b/Tests/Manual/CPGraphicsTest/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * TableCibTest + * + * Created by Francisco Tolmasky on July 5, 2009. + * Copyright 2009, 280 North, Inc. All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +}