SkWindow.h revision 16adfa39330b7b1c6ac16b8127843e55f4233a29
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 "../private/SkTDArray.h" 12#include "SkView.h" 13#include "SkBitmap.h" 14#include "SkMatrix.h" 15#include "SkRegion.h" 16#include "SkEvent.h" 17#include "SkKey.h" 18#include "SkSurfaceProps.h" 19 20class SkSurface; 21class SkOSMenu; 22 23#if SK_SUPPORT_GPU 24struct GrGLInterface; 25class GrContext; 26class GrRenderTarget; 27#endif 28 29class SkWindow : public SkView { 30public: 31 SkWindow(); 32 virtual ~SkWindow(); 33 34 struct AttachmentInfo { 35 AttachmentInfo() 36 : fSampleCount(0) 37 , fStencilBits(0) 38 , fColorBits(0) {} 39 40 int fSampleCount; 41 int fStencilBits; 42 int fColorBits; 43 }; 44 45 SkSurfaceProps getSurfaceProps() const { return fSurfaceProps; } 46 void setSurfaceProps(const SkSurfaceProps& props) { 47 fSurfaceProps = props; 48 } 49 50 SkImageInfo info() const { return fBitmap.info(); } 51 const SkBitmap& getBitmap() const { return fBitmap; } 52 53 void resize(int width, int height); 54 void resize(const SkImageInfo&); 55 void setColorType(SkColorType, sk_sp<SkColorSpace>); 56 57 bool isDirty() const { return !fDirtyRgn.isEmpty(); } 58 bool update(SkIRect* updateArea); 59 // does not call through to onHandleInval(), but does force the fDirtyRgn 60 // to be wide open. Call before update() to ensure we redraw everything. 61 void forceInvalAll(); 62 // return the bounds of the dirty/inval rgn, or [0,0,0,0] if none 63 const SkIRect& getDirtyBounds() const { return fDirtyRgn.getBounds(); } 64 65 bool handleClick(int x, int y, Click::State, void* owner, unsigned modi = 0); 66 bool handleChar(SkUnichar); 67 bool handleKey(SkKey); 68 bool handleKeyUp(SkKey); 69 70 void addMenu(SkOSMenu*); 71 const SkTDArray<SkOSMenu*>* getMenus() { return &fMenus; } 72 73 const char* getTitle() const { return fTitle.c_str(); } 74 void setTitle(const char title[]); 75 76 const SkMatrix& getMatrix() const { return fMatrix; } 77 void setMatrix(const SkMatrix&); 78 void preConcat(const SkMatrix&); 79 void postConcat(const SkMatrix&); 80 81 virtual sk_sp<SkSurface> makeSurface(); 82 83#if SK_SUPPORT_GPU 84 sk_sp<SkSurface> makeGpuBackedSurface(const AttachmentInfo& attachmentInfo, 85 const GrGLInterface* , GrContext* grContext); 86#endif 87 88protected: 89 virtual bool onEvent(const SkEvent&); 90 virtual bool onDispatchClick(int x, int y, Click::State, void* owner, unsigned modi); 91 // called if part of our bitmap is invalidated 92 virtual void onHandleInval(const SkIRect&); 93 virtual bool onHandleChar(SkUnichar); 94 virtual bool onHandleKey(SkKey); 95 virtual bool onHandleKeyUp(SkKey); 96 virtual void onAddMenu(const SkOSMenu*) {} 97 virtual void onUpdateMenu(const SkOSMenu*) {} 98 virtual void onSetTitle(const char title[]) {} 99 100 // overrides from SkView 101 virtual bool handleInval(const SkRect*); 102 virtual bool onGetFocusView(SkView** focus) const; 103 virtual bool onSetFocusView(SkView* focus); 104 105private: 106 SkSurfaceProps fSurfaceProps; 107 SkBitmap fBitmap; 108 SkRegion fDirtyRgn; 109 110 SkTDArray<Click*> fClicks; // to track clicks 111 112 SkTDArray<SkOSMenu*> fMenus; 113 114 SkView* fFocusView; 115 bool fWaitingOnInval; 116 117 SkString fTitle; 118 SkMatrix fMatrix; 119 120 typedef SkView INHERITED; 121}; 122 123//////////////////////////////////////////////////////////////////////////////// 124 125#if defined(SK_USE_SDL) 126 #include "SkOSWindow_SDL.h" 127#elif defined(SK_BUILD_FOR_MAC) 128 #include "SkOSWindow_Mac.h" 129#elif defined(SK_BUILD_FOR_WIN) 130 #include "SkOSWindow_Win.h" 131#elif defined(SK_BUILD_FOR_ANDROID) 132 #error Android does not support SkOSWindow and SampleApp. Please use Viewer instead. 133#elif defined(SK_BUILD_FOR_UNIX) 134 #include "SkOSWindow_Unix.h" 135#elif defined(SK_BUILD_FOR_IOS) 136 #include "SkOSWindow_iOS.h" 137#endif 138 139#endif 140