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