SkWindow.h revision dd0cd34067d103ace7c6739405cb7885d8ad3fb2
1/* 2 * Copyright (C) 2006 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#ifndef SkWindow_DEFINED 18#define SkWindow_DEFINED 19 20#include "SkView.h" 21#include "SkBitmap.h" 22#include "SkMatrix.h" 23#include "SkRegion.h" 24#include "SkEvent.h" 25#include "SkKey.h" 26#include "SkTDArray.h" 27 28#ifdef SK_BUILD_FOR_WINCEx 29 #define SHOW_FPS 30#endif 31//#define USE_GX_SCREEN 32 33class SkCanvas; 34 35class SkOSMenu; 36 37class SkWindow : public SkView { 38public: 39 SkWindow(); 40 virtual ~SkWindow(); 41 42 const SkBitmap& getBitmap() const { return fBitmap; } 43 44 void setConfig(SkBitmap::Config); 45 void resize(int width, int height, SkBitmap::Config config = SkBitmap::kNo_Config); 46 void eraseARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b); 47 void eraseRGB(U8CPU r, U8CPU g, U8CPU b); 48 49 bool isDirty() const { return !fDirtyRgn.isEmpty(); } 50 bool update(SkIRect* updateArea, SkCanvas* = NULL); 51 // does not call through to onHandleInval(), but does force the fDirtyRgn 52 // to be wide open. Call before update() to ensure we redraw everything. 53 void forceInvalAll(); 54 // return the bounds of the dirty/inval rgn, or [0,0,0,0] if none 55 const SkIRect& getDirtyBounds() const { return fDirtyRgn.getBounds(); } 56 57 bool handleClick(int x, int y, Click::State); 58 bool handleChar(SkUnichar); 59 bool handleKey(SkKey); 60 bool handleKeyUp(SkKey); 61 bool handleMenu(uint32_t os_cmd); 62 63 void addMenu(SkOSMenu*); 64 65 const char* getTitle() const { return fTitle.c_str(); } 66 void setTitle(const char title[]); 67 68 const SkMatrix& getMatrix() const { return fMatrix; } 69 void setMatrix(const SkMatrix&); 70 void preConcat(const SkMatrix&); 71 void postConcat(const SkMatrix&); 72 73protected: 74 virtual bool onEvent(const SkEvent&); 75 virtual bool onDispatchClick(int x, int y, Click::State); 76 // called if part of our bitmap is invalidated 77 virtual void onHandleInval(const SkIRect&); 78 virtual bool onHandleChar(SkUnichar); 79 virtual bool onHandleKey(SkKey); 80 virtual bool onHandleKeyUp(SkKey); 81 virtual void onAddMenu(const SkOSMenu*) {} 82 virtual void onSetTitle(const char title[]) {} 83 84 // overrides from SkView 85 virtual bool handleInval(const SkRect*); 86 virtual bool onGetFocusView(SkView** focus) const; 87 virtual bool onSetFocusView(SkView* focus); 88 89private: 90 SkBitmap::Config fConfig; 91 SkBitmap fBitmap; 92 SkRegion fDirtyRgn; 93 Click* fClick; // to track clicks 94 95 SkTDArray<SkOSMenu*> fMenus; 96 97 SkView* fFocusView; 98 bool fWaitingOnInval; 99 100 SkString fTitle; 101 SkMatrix fMatrix; 102 103 typedef SkView INHERITED; 104}; 105 106/////////////////////////////////////////////////////////// 107 108#ifdef SK_USE_WXWIDGETS 109 #include "SkOSWindow_wxwidgets.h" 110#elif defined(SK_BUILD_FOR_MAC) 111 #include "SkOSWindow_Mac.h" 112#elif defined(SK_BUILD_FOR_WIN) 113 #include "SkOSWindow_Win.h" 114#elif defined(SK_BUILD_FOR_UNIX) 115 #include "SkOSWindow_Unix.h" 116#elif defined(SK_BUILD_FOR_SDL) 117 #include "SkOSWindow_SDL.h" 118#elif defined(SK_BUILD_FOR_IOS) 119 #include "SkOSWindow_iOS.h" 120#endif 121 122#endif 123 124