//
// TutorialBubble.m
// Cart Collect
//
// Created by Starla Insigna on 8/4/11.
// Copyright 2011 Four Island. All rights reserved.
//
#import "TutorialBubble.h"
@implementation TutorialBubble
@synthesize name;
- (id)initWithText:(NSString*)text name:(NSString*)m_name
{
self = [super init];
textView = [[UILabel alloc] init];
textView.text = text;
textView.font = [UIFont systemFontOfSize:14.0f];
CGSize size = [textView.text sizeWithFont:textView.font constrainedToSize:CGSizeMake(200, 300) lineBreakMode:UILineBreakModeWordWrap];
textView.lineBreakMode = UILineBreakModeWordWrap;
textView.numberOfLines = 0;
textView.frame = CGRectMake(8, 8, size.width, size.height);
button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
CGImageRef framestuff = [[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"framestuff" ofType:@"png"]] CGImage];
CGImageRef topLeftRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(0, 0, 8, 8));
CGImageRef topRightRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(8, 0, 8, 8));
CGImageRef bottomLeftRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(0, 8, 8, 8));
CGImageRef bottomRightRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(8, 8, 8, 8));
CGImageRef topBorderRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(0, 16, 8, 8));
CGImageRef leftBorderRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(8, 16, 8, 8));
CGImageRef rightBorderRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(0, 24, 8, 8));
CGImageRef bottomBorderRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(8, 24, 8, 8));
UIImage* topLeft = [UIImage imageWithCGImage:topLeftRef];
UIImage* topRight = [UIImage imageWithCGImage:topRightRef];
UIImage* bottomLeft = [UIImage imageWithCGImage:bottomLeftRef];
UIImage* bottomRight = [UIImage imageWithCGImage:bottomRightRef];
UIImage* topBorder = [UIImage imageWithCGImage:topBorderRef];
UIImage* leftBorder = [UIImage imageWithCGImage:leftBorderRef];
UIImage* rightBorder = [UIImage imageWithCGImage:rightBorderRef];
UIImage* bottomBorder = [UIImage imageWithCGImage:bottomBorderRef];
CGImageRelease(topLeftRef);
CGImageRelease(topRightRef);
CGImageRelease(bottomLeftRef);
CGImageRelease(bottomRightRef);
CGImageRelease(topBorderRef);
CGImageRelease(leftBorderRef);
CGImageRelease(rightBorderRef);
CGImageRelease(bottomBorderRef);
CGSize boxSize = CGSizeMake(size.width, size.height);
UIGraphicsBeginImageContext(CGSizeMake(boxSize.width+16, boxSize.height+16));
CGContextRef context = UIGraphicsGetCurrentContext();
UIGraphicsPushContext(context);
[topLeft drawInRect:CGRectMake(0, 0, 8, 8)];
[topBorder drawInRect:CGRectMake(8, 0, boxSize.width, 8)];
[topRight drawInRect:CGRectMake(8+boxSize.width, 0, 8, 8)];
[rightBorder drawInRect:CGRectMake(8+boxSize.width, 8, 8, boxSize.height)];
[bottomRight drawInRect:CGRectMake(8+boxSize.width, 8+boxSize.height, 8, 8)];
[bottomBorder drawInRect:CGRectMake(8, 8+boxSize.height, boxSize.width, 8)];
[bottomLeft drawInRect:CGRectMake(0, 8+boxSize.height, 8, 8)];
[leftBorder drawInRect:CGRectMake(0, 8, 8, boxSize.height)];
CGContextSetFillColorWithColor(context, [[UIColor whiteColor] CGColor]);
CGContextFillRect(context, CGRectMake(8, 8, boxSize.width, boxSize.height));
UIGraphicsPopContext();
background = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
imageView = [[UIImageView alloc] initWithImage:background];
[imageView setFrame:CGRectMake(0, 0, boxSize.width+16, boxSize.height+16)];
[button addSubview:imageView];
[button addSubview:textView];
button.frame = CGRectMake(0, 0, boxSize.width+16, boxSize.height+16);
[self addSubview:button];
self.frame = CGRectMake(240-(boxSize.width+16)/2, 160-(boxSize.height+16)/2, boxSize.width+16, boxSize.height+16);
name = [m_name retain];
return self;
}
- (id)initWithText:(NSString*)text name:(NSString*)m_name spriteReference:(CCSprite*)spriteReference
{
self = [self initWithText:text name:m_name];
button.frame = CGRectMake(8, 8, button.frame.size.width, button.frame.size.height);
self.frame = CGRectMake(0, 0, button.frame.size.width+16, button.frame.size.height+16);
CGRect spriteBounds = CGRectMake(spriteReference.position.x-spriteReference.contentSize.width/2, 320-spriteReference.position.y-spriteReference.contentSize.height/2, spriteReference.contentSize.width*spriteReference.scale, spriteReference.contentSize.height*spriteReference.scale);
CGPoint boxLoc;
CGPoint arrowLoc;
int arrowRotation;
if (spriteBounds.origin.y > self.frame.size.height)
{
arrowRotation = 0;
if (CGRectGetMidX(spriteBounds) < button.frame.size.width)
{
boxLoc = CGPointMake(0, spriteBounds.origin.y-self.frame.size.height - 8);
arrowLoc = CGPointMake(spriteBounds.origin.x + 4, 8+button.frame.size.height);
} else {
boxLoc = CGPointMake(CGRectGetMaxX(spriteBounds) - self.frame.size.width, spriteBounds.origin.y-self.frame.size.height - 8);
arrowLoc = CGPointMake(button.frame.size.width - spriteBounds.size.width/2 + 4, 8+button.frame.size.height);
}
} else if (spriteBounds.origin.x > self.frame.size.width)
{
arrowRotation = 270;
if (CGRectGetMidY(spriteBounds) < button.frame.size.height)
{
boxLoc = CGPointMake(spriteBounds.origin.x-self.frame.size.width-8, 0);
arrowLoc = CGPointMake(8+button.frame.size.width, spriteBounds.origin.y+4);
} else {
boxLoc = CGPointMake(spriteBounds.origin.y-self.frame.size.width-8, CGRectGetMaxY(spriteBounds) - self.frame.size.height);
arrowLoc = CGPointMake(8+button.frame.size.width, button.frame.size.height - spriteBounds.size.height/2 + 4);
}
} else if ((480 - CGRectGetMaxX(spriteBounds)) > self.frame.size.width)
{
arrowRotation = 90;
if (CGRectGetMidY(spriteBounds) < button.frame.size.height)
{
boxLoc = CGPointMake(CGRectGetMaxX(spriteBounds), 0);
arrowLoc = CGPointMake(0, spriteBounds.origin.y+4);
} else {
boxLoc = CGPointMake(CGRectGetMaxX(spriteBounds), CGRectGetMaxY(spriteBounds) - self.frame.size.height);
arrowLoc = CGPointMake(0, button.frame.size.height - spriteBounds.size.height/2 + 4);
}
} else {
arrowRotation = 180;
if (CGRectGetMidX(spriteBounds) < button.frame.size.width)
{
boxLoc = CGPointMake(0, CGRectGetMaxY(spriteBounds)-4);
arrowLoc = CGPointMake(spriteBounds.origin.x+4, 0);
} else {
boxLoc = CGPointMake(CGRectGetMaxX(spriteBounds) - self.frame.size.width, CGRectGetMaxY(spriteBounds)-4);
arrowLoc = CGPointMake(button.frame.size.width - spriteBounds.size.width/2 + 4, 0);
}
}
CGImageRef framestuff = [[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"framestuff" ofType:@"png"]] CGImage];
CGImageRef arrowRef = CGImageCreateWithImageInRect(framestuff, CGRectMake(0, 32, 8, 8));
UIImage* arrow = [UIImage imageWithCGImage:arrowRef];
CGImageRelease(arrowRef);
arrowView = [[UIImageView alloc] initWithImage:arrow];
arrowView.transform = CGAffineTransformMakeRotation(arrowRotation * (M_PI / 180));
arrowView.frame = CGRectMake(arrowLoc.x, arrowLoc.y, 8, 8);
[self addSubview:arrowView];
self.frame = CGRectMake(boxLoc.x, boxLoc.y, self.frame.size.width, self.frame.size.height);
return self;
}
- (void)buttonPressed:(id)sender
{
if (target != nil)
{
[target performSelector:action];
}
}
- (void)setTarget:(id)sender action:(SEL)m_action
{
target = sender;
action = m_action;
}
- (void)dealloc
{
[name release];
[super dealloc];
}
@end