SkWindow.h revision e229e92ea51e9bc7c11033e2099d3ef275621115
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 "SkTDArray.h"
18
19#ifdef SK_BUILD_FOR_WINCEx
20    #define SHOW_FPS
21#endif
22//#define USE_GX_SCREEN
23
24class SkCanvas;
25
26class SkOSMenu;
27
28class SkWindow : public SkView {
29public:
30            SkWindow();
31    virtual ~SkWindow();
32
33    const SkBitmap& getBitmap() const { return fBitmap; }
34
35    void    setConfig(SkBitmap::Config);
36    void    resize(int width, int height, SkBitmap::Config config = SkBitmap::kNo_Config);
37    void    eraseARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b);
38    void    eraseRGB(U8CPU r, U8CPU g, U8CPU b);
39
40    bool    isDirty() const { return !fDirtyRgn.isEmpty(); }
41    bool    update(SkIRect* updateArea, SkCanvas* = NULL);
42    // does not call through to onHandleInval(), but does force the fDirtyRgn
43    // to be wide open. Call before update() to ensure we redraw everything.
44    void    forceInvalAll();
45    // return the bounds of the dirty/inval rgn, or [0,0,0,0] if none
46    const SkIRect& getDirtyBounds() const { return fDirtyRgn.getBounds(); }
47
48    bool    handleClick(int x, int y, Click::State, void* owner = NULL);
49    bool    handleChar(SkUnichar);
50    bool    handleKey(SkKey);
51    bool    handleKeyUp(SkKey);
52
53    void    addMenu(SkOSMenu*);
54    const SkTDArray<SkOSMenu*>* getMenus() { return &fMenus; }
55
56    const char* getTitle() const { return fTitle.c_str(); }
57    void    setTitle(const char title[]);
58
59    const SkMatrix& getMatrix() const { return fMatrix; }
60    void    setMatrix(const SkMatrix&);
61    void    preConcat(const SkMatrix&);
62    void    postConcat(const SkMatrix&);
63
64    virtual void onPDFSaved(const char title[], const char desc[],
65        const char path[]) {}
66protected:
67    virtual bool onEvent(const SkEvent&);
68    virtual bool onDispatchClick(int x, int y, Click::State, void* owner);
69    // 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);
74    virtual void onAddMenu(const SkOSMenu*) {};
75    virtual void onUpdateMenu(const SkOSMenu*) {};
76    virtual void onSetTitle(const char title[]) {}
77
78    // overrides from SkView
79    virtual bool handleInval(const SkRect*);
80    virtual bool onGetFocusView(SkView** focus) const;
81    virtual bool onSetFocusView(SkView* focus);
82
83private:
84    SkBitmap::Config    fConfig;
85    SkBitmap    fBitmap;
86    SkRegion    fDirtyRgn;
87
88    SkTDArray<Click*>       fClicks; // to track clicks
89
90    SkTDArray<SkOSMenu*>    fMenus;
91
92    SkView* fFocusView;
93    bool    fWaitingOnInval;
94
95    SkString    fTitle;
96    SkMatrix    fMatrix;
97
98    typedef SkView INHERITED;
99};
100
101////////////////////////////////////////////////////////////////////////////////
102
103#if defined(SK_BUILD_FOR_MAC)
104    #include "SkOSWindow_Mac.h"
105#elif defined(SK_BUILD_FOR_WIN)
106    #include "SkOSWindow_Win.h"
107#elif defined(SK_BUILD_FOR_ANDROID)
108    #include "SkOSWindow_Android.h"
109#elif defined(SK_BUILD_FOR_UNIX)
110  #include "SkOSWindow_Unix.h"
111#elif defined(SK_BUILD_FOR_SDL)
112    #include "SkOSWindow_SDL.h"
113#elif defined(SK_BUILD_FOR_IOS)
114    #include "SkOSWindow_iOS.h"
115#endif
116
117#endif
118