blob: a71bf4d7dc7fac181ffc8f25816c4f020fda9c3f [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001
reed@android.com8a1c16f2008-12-17 15:59:43 +00002/*
epoger@google.comec3ed6a2011-07-28 14:26:00 +00003 * Copyright 2006 The Android Open Source Project
reed@android.com8a1c16f2008-12-17 15:59:43 +00004 *
epoger@google.comec3ed6a2011-07-28 14:26:00 +00005 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
reed@android.com8a1c16f2008-12-17 15:59:43 +00007 */
8
epoger@google.comec3ed6a2011-07-28 14:26:00 +00009
reed@android.com8a1c16f2008-12-17 15:59:43 +000010#ifndef SkWindow_DEFINED
11#define SkWindow_DEFINED
12
13#include "SkView.h"
14#include "SkBitmap.h"
reed@android.comf2b98d62010-12-20 18:26:13 +000015#include "SkMatrix.h"
reed@android.com8a1c16f2008-12-17 15:59:43 +000016#include "SkRegion.h"
17#include "SkEvent.h"
18#include "SkKey.h"
19#include "SkTDArray.h"
20
21#ifdef SK_BUILD_FOR_WINCEx
22 #define SHOW_FPS
23#endif
24//#define USE_GX_SCREEN
25
reed@android.comf2b98d62010-12-20 18:26:13 +000026class SkCanvas;
27
reed@android.com8a1c16f2008-12-17 15:59:43 +000028class SkOSMenu;
29
30class SkWindow : public SkView {
31public:
32 SkWindow();
33 virtual ~SkWindow();
34
35 const SkBitmap& getBitmap() const { return fBitmap; }
36
37 void setConfig(SkBitmap::Config);
38 void resize(int width, int height, SkBitmap::Config config = SkBitmap::kNo_Config);
39 void eraseARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b);
40 void eraseRGB(U8CPU r, U8CPU g, U8CPU b);
41
42 bool isDirty() const { return !fDirtyRgn.isEmpty(); }
reed@android.comf2b98d62010-12-20 18:26:13 +000043 bool update(SkIRect* updateArea, SkCanvas* = NULL);
44 // does not call through to onHandleInval(), but does force the fDirtyRgn
45 // to be wide open. Call before update() to ensure we redraw everything.
46 void forceInvalAll();
47 // return the bounds of the dirty/inval rgn, or [0,0,0,0] if none
48 const SkIRect& getDirtyBounds() const { return fDirtyRgn.getBounds(); }
49
Scroggod3aed392011-06-22 13:26:56 +000050 bool handleClick(int x, int y, Click::State, void* owner = NULL);
reed@android.com8a1c16f2008-12-17 15:59:43 +000051 bool handleChar(SkUnichar);
52 bool handleKey(SkKey);
53 bool handleKeyUp(SkKey);
reed@android.com8a1c16f2008-12-17 15:59:43 +000054
55 void addMenu(SkOSMenu*);
yangsu@google.com654d72f2011-08-01 17:27:33 +000056 const SkTDArray<SkOSMenu*>* getMenus() { return &fMenus; }
rmistry@google.comfbfcd562012-08-23 18:09:54 +000057
reed@android.com0ae6b242008-12-23 16:49:54 +000058 const char* getTitle() const { return fTitle.c_str(); }
reed@android.com8a1c16f2008-12-17 15:59:43 +000059 void setTitle(const char title[]);
60
reed@android.comf2b98d62010-12-20 18:26:13 +000061 const SkMatrix& getMatrix() const { return fMatrix; }
62 void setMatrix(const SkMatrix&);
63 void preConcat(const SkMatrix&);
64 void postConcat(const SkMatrix&);
65
Scroggo8ac0d542011-06-21 14:44:57 +000066 virtual void onPDFSaved(const char title[], const char desc[],
67 const char path[]) {}
reed@android.com8a1c16f2008-12-17 15:59:43 +000068protected:
69 virtual bool onEvent(const SkEvent&);
Scroggod3aed392011-06-22 13:26:56 +000070 virtual bool onDispatchClick(int x, int y, Click::State, void* owner);
reed@android.com8a1c16f2008-12-17 15:59:43 +000071 // called if part of our bitmap is invalidated
72 virtual void onHandleInval(const SkIRect&);
73 virtual bool onHandleChar(SkUnichar);
74 virtual bool onHandleKey(SkKey);
75 virtual bool onHandleKeyUp(SkKey);
yangsu@google.com654d72f2011-08-01 17:27:33 +000076 virtual void onAddMenu(const SkOSMenu*) {};
77 virtual void onUpdateMenu(const SkOSMenu*) {};
reed@android.com8a1c16f2008-12-17 15:59:43 +000078 virtual void onSetTitle(const char title[]) {}
79
80 // overrides from SkView
reed@android.comf2b98d62010-12-20 18:26:13 +000081 virtual bool handleInval(const SkRect*);
reed@android.com8a1c16f2008-12-17 15:59:43 +000082 virtual bool onGetFocusView(SkView** focus) const;
83 virtual bool onSetFocusView(SkView* focus);
84
85private:
86 SkBitmap::Config fConfig;
87 SkBitmap fBitmap;
88 SkRegion fDirtyRgn;
Scroggod3aed392011-06-22 13:26:56 +000089
90 SkTDArray<Click*> fClicks; // to track clicks
reed@android.com8a1c16f2008-12-17 15:59:43 +000091
92 SkTDArray<SkOSMenu*> fMenus;
93
94 SkView* fFocusView;
95 bool fWaitingOnInval;
rmistry@google.comfbfcd562012-08-23 18:09:54 +000096
reed@android.com0ae6b242008-12-23 16:49:54 +000097 SkString fTitle;
reed@android.comf2b98d62010-12-20 18:26:13 +000098 SkMatrix fMatrix;
reed@android.com8a1c16f2008-12-17 15:59:43 +000099
100 typedef SkView INHERITED;
101};
102
103///////////////////////////////////////////////////////////
104
reed@android.com671cd652009-05-22 20:44:12 +0000105#ifdef SK_USE_WXWIDGETS
106 #include "SkOSWindow_wxwidgets.h"
107#elif defined(SK_BUILD_FOR_MAC)
reed@android.com8a1c16f2008-12-17 15:59:43 +0000108 #include "SkOSWindow_Mac.h"
109#elif defined(SK_BUILD_FOR_WIN)
110 #include "SkOSWindow_Win.h"
djsollen@google.com56c69772011-11-08 19:00:26 +0000111#elif defined(SK_BUILD_FOR_ANDROID)
Scroggof33d1532011-05-31 17:10:21 +0000112 #include "SkOSWindow_Android.h"
scroggob7e9aee2011-03-15 15:15:15 +0000113#elif defined(SK_BUILD_FOR_UNIX)
reed@android.com8a1c16f2008-12-17 15:59:43 +0000114 #include "SkOSWindow_Unix.h"
reed@android.com671cd652009-05-22 20:44:12 +0000115#elif defined(SK_BUILD_FOR_SDL)
116 #include "SkOSWindow_SDL.h"
reed@android.comf2b98d62010-12-20 18:26:13 +0000117#elif defined(SK_BUILD_FOR_IOS)
118 #include "SkOSWindow_iOS.h"
reed@android.com8a1c16f2008-12-17 15:59:43 +0000119#endif
120
121#endif
122