Home | History | Annotate | Download | only in Shared
      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