blob: 2a9315dc8c77c3b662e0a0af633c5883b38bdc43 [file] [log] [blame]
reed@android.com8a1c16f2008-12-17 15:59:43 +00001/*
epoger@google.comec3ed6a2011-07-28 14:26:00 +00002 * Copyright 2006 The Android Open Source Project
reed@android.com8a1c16f2008-12-17 15:59:43 +00003 *
epoger@google.comec3ed6a2011-07-28 14:26:00 +00004 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
reed@android.com8a1c16f2008-12-17 15:59:43 +00006 */
7
8#ifndef SkWindow_DEFINED
9#define SkWindow_DEFINED
10
11#include "SkView.h"
12#include "SkBitmap.h"
reed@android.comf2b98d62010-12-20 18:26:13 +000013#include "SkMatrix.h"
reed@android.com8a1c16f2008-12-17 15:59:43 +000014#include "SkRegion.h"
15#include "SkEvent.h"
16#include "SkKey.h"
17#include "SkTDArray.h"
18
19#ifdef SK_BUILD_FOR_WINCEx
20 #define SHOW_FPS
21#endif
22//#define USE_GX_SCREEN
23
reed@android.comf2b98d62010-12-20 18:26:13 +000024class SkCanvas;
25
reed@android.com8a1c16f2008-12-17 15:59:43 +000026class SkOSMenu;
27
28class SkWindow : public SkView {
29public:
30 SkWindow();
31 virtual ~SkWindow();
32
33 const SkBitmap& getBitmap() const { return fBitmap; }
34
commit-bot@chromium.orge24ad232014-02-16 22:03:38 +000035 void setColorType(SkColorType);
commit-bot@chromium.orgb45c56e2014-02-18 23:32:05 +000036 void resize(int width, int height, SkColorType = kUnknown_SkColorType);
reed@android.com8a1c16f2008-12-17 15:59:43 +000037
38 bool isDirty() const { return !fDirtyRgn.isEmpty(); }
reed@google.comaa400ee2012-09-27 21:03:49 +000039 bool update(SkIRect* updateArea);
reed@android.comf2b98d62010-12-20 18:26:13 +000040 // does not call through to onHandleInval(), but does force the fDirtyRgn
41 // to be wide open. Call before update() to ensure we redraw everything.
42 void forceInvalAll();
43 // return the bounds of the dirty/inval rgn, or [0,0,0,0] if none
44 const SkIRect& getDirtyBounds() const { return fDirtyRgn.getBounds(); }
45
reed@google.com4d5c26d2013-01-08 16:17:50 +000046 bool handleClick(int x, int y, Click::State, void* owner, unsigned modi = 0);
reed@android.com8a1c16f2008-12-17 15:59:43 +000047 bool handleChar(SkUnichar);
48 bool handleKey(SkKey);
49 bool handleKeyUp(SkKey);
reed@android.com8a1c16f2008-12-17 15:59:43 +000050
51 void addMenu(SkOSMenu*);
yangsu@google.com654d72f2011-08-01 17:27:33 +000052 const SkTDArray<SkOSMenu*>* getMenus() { return &fMenus; }
rmistry@google.comfbfcd562012-08-23 18:09:54 +000053
reed@android.com0ae6b242008-12-23 16:49:54 +000054 const char* getTitle() const { return fTitle.c_str(); }
reed@android.com8a1c16f2008-12-17 15:59:43 +000055 void setTitle(const char title[]);
56
reed@android.comf2b98d62010-12-20 18:26:13 +000057 const SkMatrix& getMatrix() const { return fMatrix; }
58 void setMatrix(const SkMatrix&);
59 void preConcat(const SkMatrix&);
60 void postConcat(const SkMatrix&);
61
reed@google.com5957f472012-10-01 20:31:56 +000062 virtual SkCanvas* createCanvas();
63
Scroggo8ac0d542011-06-21 14:44:57 +000064 virtual void onPDFSaved(const char title[], const char desc[],
65 const char path[]) {}
reed@android.com8a1c16f2008-12-17 15:59:43 +000066protected:
67 virtual bool onEvent(const SkEvent&);
reed@google.com4d5c26d2013-01-08 16:17:50 +000068 virtual bool onDispatchClick(int x, int y, Click::State, void* owner, unsigned modi);
reed@android.com8a1c16f2008-12-17 15:59:43 +000069 // called if part of our bitmap is invalidated
70 virtual void onHandleInval(const SkIRect&);
71 virtual bool onHandleChar(SkUnichar);
72 virtual bool onHandleKey(SkKey);
73 virtual bool onHandleKeyUp(SkKey);
yangsu@google.com654d72f2011-08-01 17:27:33 +000074 virtual void onAddMenu(const SkOSMenu*) {};
75 virtual void onUpdateMenu(const SkOSMenu*) {};
reed@android.com8a1c16f2008-12-17 15:59:43 +000076 virtual void onSetTitle(const char title[]) {}
77
78 // overrides from SkView
reed@android.comf2b98d62010-12-20 18:26:13 +000079 virtual bool handleInval(const SkRect*);
reed@android.com8a1c16f2008-12-17 15:59:43 +000080 virtual bool onGetFocusView(SkView** focus) const;
81 virtual bool onSetFocusView(SkView* focus);
82
83private:
commit-bot@chromium.orge24ad232014-02-16 22:03:38 +000084 SkColorType fColorType;
reed@android.com8a1c16f2008-12-17 15:59:43 +000085 SkBitmap fBitmap;
86 SkRegion fDirtyRgn;
Scroggod3aed392011-06-22 13:26:56 +000087
88 SkTDArray<Click*> fClicks; // to track clicks
reed@android.com8a1c16f2008-12-17 15:59:43 +000089
90 SkTDArray<SkOSMenu*> fMenus;
91
92 SkView* fFocusView;
93 bool fWaitingOnInval;
rmistry@google.comfbfcd562012-08-23 18:09:54 +000094
reed@android.com0ae6b242008-12-23 16:49:54 +000095 SkString fTitle;
reed@android.comf2b98d62010-12-20 18:26:13 +000096 SkMatrix fMatrix;
reed@android.com8a1c16f2008-12-17 15:59:43 +000097
98 typedef SkView INHERITED;
99};
100
tfarina@chromium.orge229e922012-09-27 13:44:57 +0000101////////////////////////////////////////////////////////////////////////////////
reed@android.com8a1c16f2008-12-17 15:59:43 +0000102
borenet@google.com7158e6a2012-11-01 17:43:44 +0000103#if defined(SK_BUILD_FOR_NACL)
104 #include "SkOSWindow_NaCl.h"
105#elif defined(SK_BUILD_FOR_MAC)
reed@android.com8a1c16f2008-12-17 15:59:43 +0000106 #include "SkOSWindow_Mac.h"
107#elif defined(SK_BUILD_FOR_WIN)
108 #include "SkOSWindow_Win.h"
djsollen@google.com56c69772011-11-08 19:00:26 +0000109#elif defined(SK_BUILD_FOR_ANDROID)
Scroggof33d1532011-05-31 17:10:21 +0000110 #include "SkOSWindow_Android.h"
scroggob7e9aee2011-03-15 15:15:15 +0000111#elif defined(SK_BUILD_FOR_UNIX)
reed@android.com8a1c16f2008-12-17 15:59:43 +0000112 #include "SkOSWindow_Unix.h"
reed@android.com671cd652009-05-22 20:44:12 +0000113#elif defined(SK_BUILD_FOR_SDL)
114 #include "SkOSWindow_SDL.h"
reed@android.comf2b98d62010-12-20 18:26:13 +0000115#elif defined(SK_BUILD_FOR_IOS)
116 #include "SkOSWindow_iOS.h"
reed@android.com8a1c16f2008-12-17 15:59:43 +0000117#endif
118
119#endif