SkWindow.h revision 4302ae91b0c97993f7b659474a5fd305921cdc5e
1/* 2 * Copyright 2006 The Android Open Source Project 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8#ifndef SkWindow_DEFINED 9#define SkWindow_DEFINED 10 11#include "SkView.h" 12#include "SkBitmap.h" 13#include "SkMatrix.h" 14#include "SkRegion.h" 15#include "SkEvent.h" 16#include "SkKey.h" 17#include "SkSurfaceProps.h" 18#include "SkTDArray.h" 19 20#ifdef SK_BUILD_FOR_WINCEx 21 #define SHOW_FPS 22#endif 23//#define USE_GX_SCREEN 24 25class SkSurface; 26class SkOSMenu; 27 28class SkWindow : public SkView { 29public: 30 SkWindow(); 31 virtual ~SkWindow(); 32 33 SkSurfaceProps getSurfaceProps() const { return fSurfaceProps; } 34 void setSurfaceProps(const SkSurfaceProps& props) { 35 fSurfaceProps = props; 36 } 37 38 const SkBitmap& getBitmap() const { return fBitmap; } 39 40 void setColorType(SkColorType); 41 void resize(int width, int height, SkColorType = kUnknown_SkColorType); 42 43 bool isDirty() const { return !fDirtyRgn.isEmpty(); } 44 bool update(SkIRect* updateArea); 45 // does not call through to onHandleInval(), but does force the fDirtyRgn 46 // to be wide open. Call before update() to ensure we redraw everything. 47 void forceInvalAll(); 48 // return the bounds of the dirty/inval rgn, or [0,0,0,0] if none 49 const SkIRect& getDirtyBounds() const { return fDirtyRgn.getBounds(); } 50 51 bool handleClick(int x, int y, Click::State, void* owner, unsigned modi = 0); 52 bool handleChar(SkUnichar); 53 bool handleKey(SkKey); 54 bool handleKeyUp(SkKey); 55 56 void addMenu(SkOSMenu*); 57 const SkTDArray<SkOSMenu*>* getMenus() { return &fMenus; } 58 59 const char* getTitle() const { return fTitle.c_str(); } 60 void setTitle(const char title[]); 61 62 const SkMatrix& getMatrix() const { return fMatrix; } 63 void setMatrix(const SkMatrix&); 64 void preConcat(const SkMatrix&); 65 void postConcat(const SkMatrix&); 66 67 virtual SkSurface* createSurface(); 68 69 virtual void onPDFSaved(const char title[], const char desc[], 70 const char path[]) {} 71protected: 72 virtual bool onEvent(const SkEvent&); 73 virtual bool onDispatchClick(int x, int y, Click::State, void* owner, unsigned modi); 74 // called if part of our bitmap is invalidated 75 virtual void onHandleInval(const SkIRect&); 76 virtual bool onHandleChar(SkUnichar); 77 virtual bool onHandleKey(SkKey); 78 virtual bool onHandleKeyUp(SkKey); 79 virtual void onAddMenu(const SkOSMenu*) {}; 80 virtual void onUpdateMenu(const SkOSMenu*) {}; 81 virtual void onSetTitle(const char title[]) {} 82 83 // overrides from SkView 84 virtual bool handleInval(const SkRect*); 85 virtual bool onGetFocusView(SkView** focus) const; 86 virtual bool onSetFocusView(SkView* focus); 87 88private: 89 SkSurfaceProps fSurfaceProps; 90 SkColorType fColorType; 91 SkBitmap fBitmap; 92 SkRegion fDirtyRgn; 93 94 SkTDArray<Click*> fClicks; // to track clicks 95 96 SkTDArray<SkOSMenu*> fMenus; 97 98 SkView* fFocusView; 99 bool fWaitingOnInval; 100 101 SkString fTitle; 102 SkMatrix fMatrix; 103 104 typedef SkView INHERITED; 105}; 106 107//////////////////////////////////////////////////////////////////////////////// 108 109#if defined(SK_BUILD_FOR_NACL) 110 #include "SkOSWindow_NaCl.h" 111#elif defined(SK_BUILD_FOR_MAC) 112 #include "SkOSWindow_Mac.h" 113#elif defined(SK_BUILD_FOR_WIN) 114 #include "SkOSWindow_Win.h" 115#elif defined(SK_BUILD_FOR_ANDROID) 116 #include "SkOSWindow_Android.h" 117#elif defined(SK_BUILD_FOR_UNIX) 118 #include "SkOSWindow_Unix.h" 119#elif defined(SK_BUILD_FOR_SDL) 120 #include "SkOSWindow_SDL.h" 121#elif defined(SK_BUILD_FOR_IOS) 122 #include "SkOSWindow_iOS.h" 123#endif 124 125#endif 126