• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright 2011 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7#import "SkUIView.h"
8#include "SkCanvas.h"
9#include "SkCGUtils.h"
10@implementation SkUIView
11
12@synthesize fWind, fTitleItem, fOptionsDelegate;
13
14- (id)initWithDefaults {
15    fWind = NULL;
16    return self;
17}
18
19- (id)initWithCoder:(NSCoder*)coder {
20    if ((self = [super initWithCoder:coder])) {
21        self = [self initWithDefaults];
22        [self setUpWindow];
23    }
24    return self;
25}
26
27- (id)initWithFrame:(CGRect)frame {
28    if (self = [super initWithFrame:frame]) {
29        self = [self initWithDefaults];
30        [self setUpWindow];
31    }
32    return self;
33}
34
35- (void)setUpWindow {
36    if (NULL != fWind) {
37        fWind->setVisibleP(true);
38        fWind->resize(self.frame.size.width, self.frame.size.height);
39    }
40}
41
42- (void)dealloc {
43    delete fWind;
44    [fTitleItem release];
45    [super dealloc];
46}
47
48- (void)forceRedraw {
49    [self drawInRaster];
50}
51
52- (void)drawInRaster {
53    SkCanvas canvas(fWind->getBitmap());
54    fWind->draw(&canvas);
55    CGImageRef cgimage = SkCreateCGImageRef(fWind->getBitmap());
56    self.layer.contents = (id)cgimage;
57    CGImageRelease(cgimage);
58}
59
60//Gesture Handlers
61- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
62    for (UITouch *touch in touches) {
63        CGPoint loc = [touch locationInView:self];
64        fWind->handleClick(loc.x, loc.y, SkView::Click::kDown_State, touch);
65    }
66}
67
68- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
69    for (UITouch *touch in touches) {
70        CGPoint loc = [touch locationInView:self];
71        fWind->handleClick(loc.x, loc.y, SkView::Click::kMoved_State, touch);
72    }
73}
74
75- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
76    for (UITouch *touch in touches) {
77        CGPoint loc = [touch locationInView:self];
78        fWind->handleClick(loc.x, loc.y, SkView::Click::kUp_State, touch);
79    }
80}
81
82- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
83    for (UITouch *touch in touches) {
84        CGPoint loc = [touch locationInView:self];
85        fWind->handleClick(loc.x, loc.y, SkView::Click::kUp_State, touch);
86    }
87}
88
89///////////////////////////////////////////////////////////////////////////////
90
91- (void)setSkTitle:(const char *)title {
92    if (fTitleItem) {
93        fTitleItem.title = [NSString stringWithUTF8String:title];
94    }
95}
96
97- (BOOL)onHandleEvent:(const SkEvent&)evt {
98    return false;
99}
100
101- (void)getAttachmentInfo:(SkOSWindow::AttachmentInfo*)info {
102    // we don't have a GL context.
103    info->fSampleCount = 0;
104    info->fStencilBits = 0;
105}
106
107#include "SkOSMenu.h"
108- (void)onAddMenu:(const SkOSMenu*)menu {
109    [self.fOptionsDelegate view:self didAddMenu:menu];
110}
111- (void)onUpdateMenu:(SkOSMenu*)menu {
112    [self.fOptionsDelegate view:self didUpdateMenu:menu];
113}
114
115- (void)postInvalWithRect:(const SkIRect*)r {
116    [self performSelector:@selector(drawInRaster) withObject:nil afterDelay:0];
117    [self setNeedsDisplay];
118}
119
120@end
121