SkWindow.h revision 654d72f94c855ceae34db0ee82d92844835c0d29
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 28a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2006 The Android Open Source Project 48a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.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. 78a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 9ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkWindow_DEFINED 118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SkWindow_DEFINED 128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkView.h" 148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkBitmap.h" 15f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com#include "SkMatrix.h" 168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkRegion.h" 178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkEvent.h" 188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkKey.h" 198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkTDArray.h" 208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_BUILD_FOR_WINCEx 228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #define SHOW_FPS 238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//#define USE_GX_SCREEN 258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 26f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.comclass SkCanvas; 27f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com 288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkOSMenu; 298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkWindow : public SkView { 318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkWindow(); 338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual ~SkWindow(); 348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkBitmap& getBitmap() const { return fBitmap; } 368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void setConfig(SkBitmap::Config); 388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void resize(int width, int height, SkBitmap::Config config = SkBitmap::kNo_Config); 398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void eraseARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b); 408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void eraseRGB(U8CPU r, U8CPU g, U8CPU b); 418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool isDirty() const { return !fDirtyRgn.isEmpty(); } 43f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com bool update(SkIRect* updateArea, SkCanvas* = NULL); 44f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com // does not call through to onHandleInval(), but does force the fDirtyRgn 45f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com // to be wide open. Call before update() to ensure we redraw everything. 46f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com void forceInvalAll(); 47f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com // return the bounds of the dirty/inval rgn, or [0,0,0,0] if none 48f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com const SkIRect& getDirtyBounds() const { return fDirtyRgn.getBounds(); } 49f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com 50d3aed39ab1ad88b05b9423ee1329c227d1f8f612Scroggo bool handleClick(int x, int y, Click::State, void* owner = NULL); 518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool handleChar(SkUnichar); 528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool handleKey(SkKey); 538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool handleKeyUp(SkKey); 548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void addMenu(SkOSMenu*); 56654d72f94c855ceae34db0ee82d92844835c0d29yangsu@google.com const SkTDArray<SkOSMenu*>* getMenus() { return &fMenus; } 570ae6b245f2b79bc04f0801b08fcf05abcf98fd6creed@android.com 580ae6b245f2b79bc04f0801b08fcf05abcf98fd6creed@android.com const char* getTitle() const { return fTitle.c_str(); } 598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void setTitle(const char title[]); 608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 61f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com const SkMatrix& getMatrix() const { return fMatrix; } 62f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com void setMatrix(const SkMatrix&); 63f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com void preConcat(const SkMatrix&); 64f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com void postConcat(const SkMatrix&); 65f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com 668ac0d542b0226e68b0faa935b3402ffc91409a02Scroggo virtual void onPDFSaved(const char title[], const char desc[], 678ac0d542b0226e68b0faa935b3402ffc91409a02Scroggo const char path[]) {} 688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected: 698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual bool onEvent(const SkEvent&); 70d3aed39ab1ad88b05b9423ee1329c227d1f8f612Scroggo virtual bool onDispatchClick(int x, int y, Click::State, void* owner); 718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // called if part of our bitmap is invalidated 728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void onHandleInval(const SkIRect&); 738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual bool onHandleChar(SkUnichar); 748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual bool onHandleKey(SkKey); 758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual bool onHandleKeyUp(SkKey); 76654d72f94c855ceae34db0ee82d92844835c0d29yangsu@google.com virtual void onAddMenu(const SkOSMenu*) {}; 77654d72f94c855ceae34db0ee82d92844835c0d29yangsu@google.com virtual void onUpdateMenu(const SkOSMenu*) {}; 788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void onSetTitle(const char title[]) {} 798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // overrides from SkView 81f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com virtual bool handleInval(const SkRect*); 828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual bool onGetFocusView(SkView** focus) const; 838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual bool onSetFocusView(SkView* focus); 848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkBitmap::Config fConfig; 878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkBitmap fBitmap; 888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkRegion fDirtyRgn; 89d3aed39ab1ad88b05b9423ee1329c227d1f8f612Scroggo 90d3aed39ab1ad88b05b9423ee1329c227d1f8f612Scroggo SkTDArray<Click*> fClicks; // to track clicks 918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkTDArray<SkOSMenu*> fMenus; 938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkView* fFocusView; 958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool fWaitingOnInval; 960ae6b245f2b79bc04f0801b08fcf05abcf98fd6creed@android.com 970ae6b245f2b79bc04f0801b08fcf05abcf98fd6creed@android.com SkString fTitle; 98f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com SkMatrix fMatrix; 998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkView INHERITED; 1018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/////////////////////////////////////////////////////////// 1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 105671cd656785de5e84564b6ffe4831625d7016dedreed@android.com#ifdef SK_USE_WXWIDGETS 106671cd656785de5e84564b6ffe4831625d7016dedreed@android.com #include "SkOSWindow_wxwidgets.h" 107671cd656785de5e84564b6ffe4831625d7016dedreed@android.com#elif defined(SK_BUILD_FOR_MAC) 1088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #include "SkOSWindow_Mac.h" 1098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#elif defined(SK_BUILD_FOR_WIN) 1108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #include "SkOSWindow_Win.h" 111f33d1537326af59b7948d2fa92db0b0190f0d99dScroggo#elif defined(ANDROID) 112f33d1537326af59b7948d2fa92db0b0190f0d99dScroggo #include "SkOSWindow_Android.h" 113b7e9aee1acf27fc98cb37ed69c05da71b4c3c69bscroggo#elif defined(SK_BUILD_FOR_UNIX) 1148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #include "SkOSWindow_Unix.h" 115671cd656785de5e84564b6ffe4831625d7016dedreed@android.com#elif defined(SK_BUILD_FOR_SDL) 116671cd656785de5e84564b6ffe4831625d7016dedreed@android.com #include "SkOSWindow_SDL.h" 117f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com#elif defined(SK_BUILD_FOR_IOS) 118f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com #include "SkOSWindow_iOS.h" 1198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 123