skia2/experimental/iOSSampleApp/Shared/SkUIView.mm

116 lines
2.9 KiB
Plaintext

#import "SkUIView.h"
#include "SkCanvas.h"
#include "SkCGUtils.h"
@implementation SkUIView
@synthesize fWind, fTitleItem, fOptionsDelegate;
- (id)initWithDefaults {
fWind = NULL;
return self;
}
- (id)initWithCoder:(NSCoder*)coder {
if ((self = [super initWithCoder:coder])) {
self = [self initWithDefaults];
[self setUpWindow];
}
return self;
}
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
self = [self initWithDefaults];
[self setUpWindow];
}
return self;
}
- (void)setUpWindow {
if (NULL != fWind) {
fWind->setVisibleP(true);
fWind->resize(self.frame.size.width, self.frame.size.height,
SkBitmap::kARGB_8888_Config);
}
}
- (void)dealloc {
delete fWind;
[fTitleItem release];
[super dealloc];
}
- (void)forceRedraw {
[self drawInRaster];
}
- (void)drawInRaster {
SkCanvas canvas(fWind->getBitmap());
fWind->draw(&canvas);
CGImageRef cgimage = SkCreateCGImageRef(fWind->getBitmap());
self.layer.contents = (id)cgimage;
CGImageRelease(cgimage);
}
//Gesture Handlers
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
for (UITouch *touch in touches) {
CGPoint loc = [touch locationInView:self];
fWind->handleClick(loc.x, loc.y, SkView::Click::kDown_State, touch);
}
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
for (UITouch *touch in touches) {
CGPoint loc = [touch locationInView:self];
fWind->handleClick(loc.x, loc.y, SkView::Click::kMoved_State, touch);
}
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
for (UITouch *touch in touches) {
CGPoint loc = [touch locationInView:self];
fWind->handleClick(loc.x, loc.y, SkView::Click::kUp_State, touch);
}
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
for (UITouch *touch in touches) {
CGPoint loc = [touch locationInView:self];
fWind->handleClick(loc.x, loc.y, SkView::Click::kUp_State, touch);
}
}
///////////////////////////////////////////////////////////////////////////////
- (void)setSkTitle:(const char *)title {
if (fTitleItem) {
fTitleItem.title = [NSString stringWithUTF8String:title];
}
}
- (BOOL)onHandleEvent:(const SkEvent&)evt {
return false;
}
- (void)getAttachmentInfo:(SkOSWindow::AttachmentInfo*)info {
// we don't have a GL context.
info->fSampleCount = 0;
info->fStencilBits = 0;
}
#include "SkOSMenu.h"
- (void)onAddMenu:(const SkOSMenu*)menu {
[self.fOptionsDelegate view:self didAddMenu:menu];
}
- (void)onUpdateMenu:(SkOSMenu*)menu {
[self.fOptionsDelegate view:self didUpdateMenu:menu];
}
- (void)postInvalWithRect:(const SkIRect*)r {
[self performSelector:@selector(drawInRaster) withObject:nil afterDelay:0];
[self setNeedsDisplay];
}
@end