1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SampleCode.h"
98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkView.h"
108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkCanvas.h"
118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkMovie.h"
128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkTime.h"
138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include <new>
148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass AnimGifView : public SkView {
168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkMovie*    fMovie;
178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic:
18ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com    AnimGifView() {
198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        fMovie = SkMovie::DecodeFile("/skimages/dollarblk.gif");
208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
2182065d667f64e232bcde2ad849756a6096fcbe6freed@google.com
228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual ~AnimGifView() {
2382065d667f64e232bcde2ad849756a6096fcbe6freed@google.com        SkSafeUnref(fMovie);
248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected:
278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    // overrides from SkEventSink
288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool onQuery(SkEvent* evt) {
298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        if (SampleCode::TitleQ(*evt)) {
308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            SampleCode::TitleR(evt, "Animated Gif");
318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            return true;
328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        }
338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        return this->INHERITED::onQuery(evt);
348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
3582065d667f64e232bcde2ad849756a6096fcbe6freed@google.com
368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void drawBG(SkCanvas* canvas) {
378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        canvas->drawColor(0xFFDDDDDD);
388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
3982065d667f64e232bcde2ad849756a6096fcbe6freed@google.com
408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual void onDraw(SkCanvas* canvas) {
418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        this->drawBG(canvas);
4282065d667f64e232bcde2ad849756a6096fcbe6freed@google.com
438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        if (fMovie) {
448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            if (fMovie->duration()) {
458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                fMovie->setTime(SkTime::GetMSecs() % fMovie->duration());
468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            } else {
478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                fMovie->setTime(0);
488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            }
498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            canvas->drawBitmap(fMovie->bitmap(), SkIntToScalar(20),
508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                               SkIntToScalar(20));
518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            this->inval(NULL);
528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        }
538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
5482065d667f64e232bcde2ad849756a6096fcbe6freed@google.com
558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate:
568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkPath      fPath;
578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    typedef SkView INHERITED;
598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com};
608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//////////////////////////////////////////////////////////////////////////////
628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic SkView* MyFactory() { return new AnimGifView; }
648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic SkViewRegister reg(MyFactory);
65