mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-08-25 13:07:02 +00:00
229 lines
5.2 KiB
Plaintext
229 lines
5.2 KiB
Plaintext
/*
|
|
* AppController.j
|
|
* AdvancedHelloWorld
|
|
*
|
|
* Created by You on December 8, 2011.
|
|
* Copyright 2011, Your Company All rights reserved.
|
|
*/
|
|
/*
|
|
This Cucapp tests the following:
|
|
• CPAnimationContext -setCompletionHandler: is called and the end value is correct when the frame of a view is animated.
|
|
Tested for a vanilla view (no drawing, no layout), a view with custom drawing, with custom layout, with both.
|
|
• CPAnimationContext CPView special keyPaths CPAnimationTriggerOrderIn and CPAnimationTriggerOrderOut.
|
|
Checks that adding or removing the animator to/from the superview does not throw an error and the superview final value is correct.
|
|
*/
|
|
|
|
@import <Foundation/CPObject.j>
|
|
|
|
@import "CPResponder+Cucapp.j"
|
|
|
|
@class ColorView
|
|
|
|
var ANIMATION_DURATION = 0.9;
|
|
|
|
@implementation AppController : CPObject
|
|
{
|
|
/* this "outlet" is connected automatically by the Cib */
|
|
CPWindow theWindow;
|
|
|
|
/* We create the outlets of the textfields here */
|
|
@outlet DrawView drawView;
|
|
@outlet CustomLayoutView layoutView;
|
|
@outlet CustomLayoutDrawView layoutDrawView;
|
|
|
|
CPInteger testNumber;
|
|
CPString passed;
|
|
}
|
|
|
|
- (void)awakeFromCib
|
|
{
|
|
[theWindow setFullPlatformWindow:YES];
|
|
[layoutView setNeedsLayout];
|
|
[layoutDrawView setNeedsLayout];
|
|
testNumber = 0;
|
|
passed = "";
|
|
}
|
|
|
|
- (void)testDidPass
|
|
{
|
|
passed = "true";
|
|
testNumber++;
|
|
}
|
|
|
|
- (IBAction)test:(id)sender
|
|
{
|
|
passed = "false";
|
|
[self performSelector:CPSelectorFromString("test" + testNumber)];
|
|
}
|
|
|
|
- (void)test0
|
|
{
|
|
vanillaView = [[ColorView alloc] initWithFrame:CGRectMake(30,30,148,115)];
|
|
[vanillaView setBackgroundColor:[vanillaView color]];
|
|
|
|
var fadeOut = [CABasicAnimation animationWithKeyPath:@"alphaValue"];
|
|
[fadeOut setFromValue:1];
|
|
[fadeOut setToValue:0];
|
|
[fadeOut setDuration:ANIMATION_DURATION];
|
|
|
|
[vanillaView setAnimations:@{@"CPAnimationTriggerOrderOut":fadeOut}];
|
|
|
|
var ctx = [CPAnimationContext currentContext];
|
|
[ctx setCompletionHandler:function()
|
|
{
|
|
if ([vanillaView superview] == [theWindow contentView] && [vanillaView alphaValue] == 1)
|
|
[self testDidPass];
|
|
}];
|
|
|
|
[[theWindow contentView] addSubview:vanillaView];
|
|
}
|
|
|
|
- (void)test1
|
|
{
|
|
[self move:vanillaView];
|
|
}
|
|
|
|
- (void)test2
|
|
{
|
|
[self move:drawView];
|
|
}
|
|
|
|
- (void)test3
|
|
{
|
|
[self move:layoutView];
|
|
}
|
|
|
|
- (void)test4
|
|
{
|
|
[self move:layoutDrawView];
|
|
}
|
|
|
|
- (void)test5
|
|
{
|
|
var ctx = [CPAnimationContext currentContext];
|
|
[ctx setCompletionHandler:function()
|
|
{
|
|
if ([vanillaView superview] == nil && [vanillaView alphaValue] == 1)
|
|
[self testDidPass];
|
|
}];
|
|
|
|
[[vanillaView animator] removeFromSuperview];
|
|
}
|
|
|
|
- (void)move:(CPView)view
|
|
{
|
|
var destinationRect = CGRectMake(200 *testNumber,200,200,200);
|
|
var ctx = [CPAnimationContext currentContext];
|
|
[ctx setDuration:ANIMATION_DURATION];
|
|
[ctx setCompletionHandler:function()
|
|
{
|
|
if (CGRectEqualToRect([view frame], destinationRect))
|
|
[self testDidPass];
|
|
}];
|
|
|
|
[[view animator] setFrame:destinationRect];
|
|
}
|
|
|
|
@end
|
|
|
|
|
|
@implementation ColorView : CPView
|
|
{
|
|
CPColor color @accessors;
|
|
}
|
|
|
|
- (id)initWithFrame:(CGRect)aFrame
|
|
{
|
|
self = [super initWithFrame:aFrame];
|
|
|
|
color = [CPColor randomColor];
|
|
|
|
return self;
|
|
}
|
|
|
|
- (void)viewDidMoveToSuperview
|
|
{
|
|
[self setBackgroundColor:color];
|
|
}
|
|
|
|
@end
|
|
|
|
@implementation DrawView : CPView
|
|
{
|
|
CPColor color;
|
|
}
|
|
|
|
- (id)initWithFrame:(CGRect)aFrame
|
|
{
|
|
self = [super initWithFrame:aFrame];
|
|
|
|
color = [CPColor randomColor];
|
|
|
|
return self;
|
|
}
|
|
|
|
- (void)drawRect:(CGRect)aRect
|
|
{
|
|
var context = [[CPGraphicsContext currentContext] graphicsPort],
|
|
bounds = [self bounds];
|
|
|
|
CGContextSetLineWidth(context, 2);
|
|
CGContextSetStrokeColor(context, [CPColor blackColor]);
|
|
CGContextSetFillColor(context, color);
|
|
|
|
CGContextBeginPath(context);
|
|
CGContextFillRect(context, bounds);
|
|
|
|
var height = CGRectGetHeight(bounds),
|
|
width = CGRectGetWidth(bounds);
|
|
|
|
CGContextStrokeLineSegments(context, [CGPointMake(10,0), CGPointMake(10, height),
|
|
CGPointMake(0, 10), CGPointMake(CGRectGetWidth(aRect), 10),
|
|
CGPointMake(width - 10, 0), CGPointMake(width - 10, height),
|
|
CGPointMake(0, height - 10), CGPointMake(width, height - 10)], 8);
|
|
}
|
|
|
|
@end
|
|
|
|
@implementation CustomLayoutView : ColorView
|
|
{
|
|
}
|
|
|
|
- (void)layoutSubviews
|
|
{
|
|
[self setBackgroundColor:color];
|
|
|
|
var subviews = [self subviews],
|
|
count = [subviews count] - 1;
|
|
|
|
var dx = (CGRectGetWidth([self frame]) - 100) / count,
|
|
dy = (CGRectGetHeight([self frame]) - 26) / count
|
|
|
|
[subviews enumerateObjectsUsingBlock:function(view, idx, stop)
|
|
{
|
|
[view setFrameOrigin:CGPointMake(dx * idx, dy * idx)];
|
|
}];
|
|
}
|
|
|
|
@end
|
|
|
|
@implementation CustomLayoutDrawView : DrawView
|
|
{
|
|
}
|
|
|
|
- (void)layoutSubviews
|
|
{
|
|
var subviews = [self subviews],
|
|
count = [subviews count] - 1;
|
|
|
|
var dx = (CGRectGetWidth([self frame]) - 100) / count,
|
|
dy = (CGRectGetHeight([self frame]) - 26) / count
|
|
|
|
[subviews enumerateObjectsUsingBlock:function(view, idx, stop)
|
|
{
|
|
[view setFrameOrigin:CGPointMake(dx * idx, dy * idx)];
|
|
}];
|
|
}
|
|
|
|
@end
|