/* * Copyright 2011 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #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); } } - (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:(const SkOSMenu*)menu { [self.fOptionsDelegate view:self didUpdateMenu:menu]; } - (void)postInvalWithRect:(const SkIRect*)r { [self performSelector:@selector(drawInRaster) withObject:nil afterDelay:0]; [self setNeedsDisplay]; } @end