1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 748dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com 88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SampleCode_DEFINED 98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SampleCode_DEFINED 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 11f21833999d90ad9c8c584cff3238797b39cfc00breed@google.com#include "SkColor.h" 128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkEvent.h" 132eb595292b9624371d1698ae9da7accb4c09c26cmike@reedtribe.org#include "SkView.h" 1476113a9b7716748c70ea0ecf7aacbabe4cce5009reed 1576113a9b7716748c70ea0ecf7aacbabe4cce5009reedclass SkAnimTimer; 163cec4d71e6f53fda99705427f9820d025cfbf64breed@google.com 17a7a8b10134f78d4ed55ff0370a54d8141daa7cacreed#define DEF_SAMPLE(code) \ 18a7a8b10134f78d4ed55ff0370a54d8141daa7cacreed static SkView* SK_MACRO_APPEND_LINE(F_)() { code } \ 19a7a8b10134f78d4ed55ff0370a54d8141daa7cacreed static SkViewRegister SK_MACRO_APPEND_LINE(R_)(SK_MACRO_APPEND_LINE(F_)); 20a7a8b10134f78d4ed55ff0370a54d8141daa7cacreed 21c7027ab03f2e8bab4c74bc1b047642622d3d682bjvanverthstatic const char gCharEvtName[] = "SampleCode_Char_Event"; 22c7027ab03f2e8bab4c74bc1b047642622d3d682bjvanverthstatic const char gTitleEvtName[] = "SampleCode_Title_Event"; 23a7a8b10134f78d4ed55ff0370a54d8141daa7cacreed 248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SampleCode { 258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 26f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com static bool CharQ(const SkEvent&, SkUnichar* outUni); 27f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com 288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static bool TitleQ(const SkEvent&); 298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static void TitleR(SkEvent*, const char title[]); 30db03eaa37111a63835ab7f61cb550971e609a621yangsu@google.com static bool RequestTitle(SkView* view, SkString* title); 31ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 32d9adfe6a223955bc69c8c7661ab8e0a078afbc32reed friend class SampleWindow; 338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com////////////////////////////////////////////////////////////////////////////// 368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3748dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com// interface that constructs SkViews 3848dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.comclass SkViewFactory : public SkRefCnt { 39ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.compublic: 4048dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com virtual SkView* operator() () const = 0; 4148dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com}; 4248dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com 4348dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.comtypedef SkView* (*SkViewCreateFunc)(); 448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4548dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com// wraps SkViewCreateFunc in SkViewFactory interface 4648dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.comclass SkFuncViewFactory : public SkViewFactory { 478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 4848dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com SkFuncViewFactory(SkViewCreateFunc func); 4936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkView* operator() () const override; 50ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 5148dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.comprivate: 5248dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com SkViewCreateFunc fCreateFunc; 5348dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com}; 5448dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com 5548dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.comclass SkViewRegister : public SkRefCnt { 5648dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.compublic: 5748dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com explicit SkViewRegister(SkViewFactory*); 5848dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com explicit SkViewRegister(SkViewCreateFunc); 5948dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com 6048dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com ~SkViewRegister() { 6148dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com fFact->unref(); 6248dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com } 63ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static const SkViewRegister* Head() { return gHead; } 65ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkViewRegister* next() const { return fChain; } 6748dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com const SkViewFactory* factory() const { return fFact; } 68ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 7048dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com SkViewFactory* fFact; 718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkViewRegister* fChain; 72ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static SkViewRegister* gHead; 748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 762eb595292b9624371d1698ae9da7accb4c09c26cmike@reedtribe.org/////////////////////////////////////////////////////////////////////////////// 772eb595292b9624371d1698ae9da7accb4c09c26cmike@reedtribe.org 782eb595292b9624371d1698ae9da7accb4c09c26cmike@reedtribe.orgclass SampleView : public SkView { 792eb595292b9624371d1698ae9da7accb4c09c26cmike@reedtribe.orgpublic: 804d5c26de0a24f86c37c1da8b0e30d11a550ea67breed@google.com SampleView() 814f99e58252175f01c0b9ca1a5e2fc7acec6acec3Brian Osman : fBGColor(SK_ColorWHITE) 8263c684a8a609d39da11b4a656223cebf52ca85dccaryclark , fHaveCalledOnceBeforeDraw(false) 83868074b50b0fc3e460d2aa97c1096827fe0a1935reed {} 842eb595292b9624371d1698ae9da7accb4c09c26cmike@reedtribe.org 85f21833999d90ad9c8c584cff3238797b39cfc00breed@google.com void setBGColor(SkColor color) { fBGColor = color; } 8676113a9b7716748c70ea0ecf7aacbabe4cce5009reed bool animate(const SkAnimTimer& timer) { return this->onAnimate(timer); } 87f21833999d90ad9c8c584cff3238797b39cfc00breed@google.com 88a6ff4dc22d5006dc588769aa20c8b0bb4fde6d43reed@google.com static bool IsSampleView(SkView*); 89bbe43a9ce0513d37cbd5dca583c391b7b1e39b3acommit-bot@chromium.org 902eb595292b9624371d1698ae9da7accb4c09c26cmike@reedtribe.orgprotected: 912eb595292b9624371d1698ae9da7accb4c09c26cmike@reedtribe.org virtual void onDrawBackground(SkCanvas*); 922eb595292b9624371d1698ae9da7accb4c09c26cmike@reedtribe.org virtual void onDrawContent(SkCanvas*) = 0; 9376113a9b7716748c70ea0ecf7aacbabe4cce5009reed virtual bool onAnimate(const SkAnimTimer&) { return false; } 9463c684a8a609d39da11b4a656223cebf52ca85dccaryclark virtual void onOnceBeforeDraw() {} 95ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 962eb595292b9624371d1698ae9da7accb4c09c26cmike@reedtribe.org // overrides 972eb595292b9624371d1698ae9da7accb4c09c26cmike@reedtribe.org virtual bool onQuery(SkEvent* evt); 982eb595292b9624371d1698ae9da7accb4c09c26cmike@reedtribe.org virtual void onDraw(SkCanvas*); 992eb595292b9624371d1698ae9da7accb4c09c26cmike@reedtribe.org 100db03eaa37111a63835ab7f61cb550971e609a621yangsu@google.com SkColor fBGColor; 101ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 1022eb595292b9624371d1698ae9da7accb4c09c26cmike@reedtribe.orgprivate: 10363c684a8a609d39da11b4a656223cebf52ca85dccaryclark bool fHaveCalledOnceBeforeDraw; 1042eb595292b9624371d1698ae9da7accb4c09c26cmike@reedtribe.org typedef SkView INHERITED; 1052eb595292b9624371d1698ae9da7accb4c09c26cmike@reedtribe.org}; 1062eb595292b9624371d1698ae9da7accb4c09c26cmike@reedtribe.org 1078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 108