11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/* 31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2011 Google Inc. 41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * 51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file. 71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */ 80b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SampleCode.h" 90b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkView.h" 100b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkCanvas.h" 110b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkMovie.h" 120b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkTime.h" 130b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include <new> 140b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 150b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerclass AnimGifView : public SkView { 160b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkMovie* fMovie; 170b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerpublic: 180b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger AnimGifView() { 190b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger fMovie = SkMovie::DecodeFile("/skimages/dollarblk.gif"); 200b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger } 210b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 220b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger virtual ~AnimGifView() { 230b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkSafeUnref(fMovie); 240b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger } 250b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 260b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerprotected: 270b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger // overrides from SkEventSink 280b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger virtual bool onQuery(SkEvent* evt) { 290b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger if (SampleCode::TitleQ(*evt)) { 300b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SampleCode::TitleR(evt, "Animated Gif"); 310b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger return true; 320b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger } 330b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger return this->INHERITED::onQuery(evt); 340b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger } 350b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 360b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger void drawBG(SkCanvas* canvas) { 370b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->drawColor(0xFFDDDDDD); 380b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger } 390b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 400b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger virtual void onDraw(SkCanvas* canvas) { 410b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger this->drawBG(canvas); 420b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 430b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger if (fMovie) { 440b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger if (fMovie->duration()) { 450b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger fMovie->setTime(SkTime::GetMSecs() % fMovie->duration()); 460b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger } else { 470b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger fMovie->setTime(0); 480b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger } 490b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->drawBitmap(fMovie->bitmap(), SkIntToScalar(20), 500b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkIntToScalar(20)); 510b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger this->inval(NULL); 520b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger } 530b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger } 540b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 550b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerprivate: 560b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkRect fClip; 570b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkIPoint* fPoints; 580b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkPath fPath; 590b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger int fPtCount; 600b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 610b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger typedef SkView INHERITED; 620b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger}; 630b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 640b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger////////////////////////////////////////////////////////////////////////////// 650b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 660b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerstatic SkView* MyFactory() { return new AnimGifView; } 670b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerstatic SkViewRegister reg(MyFactory); 680b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 69