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