1f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com/*
25bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * Copyright 2006 The Android Open Source Project
3f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com *
45bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * Use of this source code is governed by a BSD-style license that can be
55bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * found in the LICENSE file.
6f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com */
7f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
8f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#ifndef SkWindow_DEFINED
9f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#define SkWindow_DEFINED
10f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
11f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#include "SkView.h"
12f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#include "SkBitmap.h"
13982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com#include "SkMatrix.h"
14f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#include "SkRegion.h"
15f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#include "SkEvent.h"
16f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#include "SkKey.h"
17f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#include "SkTDArray.h"
18f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
19f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#ifdef SK_BUILD_FOR_WINCEx
20f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    #define SHOW_FPS
21f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#endif
22f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com//#define USE_GX_SCREEN
23f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
24982b0d497ffd4f50916124e5f2dd95623883e670reed@android.comclass SkCanvas;
25982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com
26f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.comclass SkOSMenu;
27f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
28f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.comclass SkWindow : public SkView {
29f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.compublic:
30f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com            SkWindow();
31f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    virtual ~SkWindow();
32f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
33f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    const SkBitmap& getBitmap() const { return fBitmap; }
34f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
35f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    void    setConfig(SkBitmap::Config);
36f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    void    resize(int width, int height, SkBitmap::Config config = SkBitmap::kNo_Config);
37f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    void    eraseARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b);
38f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    void    eraseRGB(U8CPU r, U8CPU g, U8CPU b);
39f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
40f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    bool    isDirty() const { return !fDirtyRgn.isEmpty(); }
41f5aba6b8f7d46ff3a206854df3c81fccea003200reed@google.com    bool    update(SkIRect* updateArea);
42982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com    // does not call through to onHandleInval(), but does force the fDirtyRgn
43982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com    // to be wide open. Call before update() to ensure we redraw everything.
44982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com    void    forceInvalAll();
45982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com    // return the bounds of the dirty/inval rgn, or [0,0,0,0] if none
46982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com    const SkIRect& getDirtyBounds() const { return fDirtyRgn.getBounds(); }
47982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com
482e4308eedc213a0a646b71797e0fae112e53f6a0reed@google.com    bool    handleClick(int x, int y, Click::State, void* owner, unsigned modi = 0);
49f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    bool    handleChar(SkUnichar);
50f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    bool    handleKey(SkKey);
51f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    bool    handleKeyUp(SkKey);
52f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
53f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    void    addMenu(SkOSMenu*);
542c63a489e8cdb1ab561b60c57be6a19eea84b332yangsu@google.com    const SkTDArray<SkOSMenu*>* getMenus() { return &fMenus; }
551fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com
5638512471121a1720c4f46ae6f5f5e654a01557c6reed@android.com    const char* getTitle() const { return fTitle.c_str(); }
57f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    void    setTitle(const char title[]);
58f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
59982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com    const SkMatrix& getMatrix() const { return fMatrix; }
60982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com    void    setMatrix(const SkMatrix&);
61982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com    void    preConcat(const SkMatrix&);
62982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com    void    postConcat(const SkMatrix&);
63982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com
6412b12220b654e0163a11b90782171e8d6b7af4e1reed@google.com    virtual SkCanvas* createCanvas();
6512b12220b654e0163a11b90782171e8d6b7af4e1reed@google.com
660ebc9ad15575259ff918450862f47620c8ab6f01Scroggo    virtual void onPDFSaved(const char title[], const char desc[],
670ebc9ad15575259ff918450862f47620c8ab6f01Scroggo        const char path[]) {}
68f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.comprotected:
69f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    virtual bool onEvent(const SkEvent&);
702e4308eedc213a0a646b71797e0fae112e53f6a0reed@google.com    virtual bool onDispatchClick(int x, int y, Click::State, void* owner, unsigned modi);
71f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    // called if part of our bitmap is invalidated
72f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    virtual void onHandleInval(const SkIRect&);
73f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    virtual bool onHandleChar(SkUnichar);
74f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    virtual bool onHandleKey(SkKey);
75f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    virtual bool onHandleKeyUp(SkKey);
762c63a489e8cdb1ab561b60c57be6a19eea84b332yangsu@google.com    virtual void onAddMenu(const SkOSMenu*) {};
772c63a489e8cdb1ab561b60c57be6a19eea84b332yangsu@google.com    virtual void onUpdateMenu(const SkOSMenu*) {};
78f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    virtual void onSetTitle(const char title[]) {}
79f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
80f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    // overrides from SkView
81982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com    virtual bool handleInval(const SkRect*);
82f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    virtual bool onGetFocusView(SkView** focus) const;
83f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    virtual bool onSetFocusView(SkView* focus);
84f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
85f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.comprivate:
86f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    SkBitmap::Config    fConfig;
87f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    SkBitmap    fBitmap;
88f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    SkRegion    fDirtyRgn;
89a168eac9ba43c9d23b490b100acd936fd88f9449Scroggo
90a168eac9ba43c9d23b490b100acd936fd88f9449Scroggo    SkTDArray<Click*>       fClicks; // to track clicks
91f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
92f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    SkTDArray<SkOSMenu*>    fMenus;
93f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
94f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    SkView* fFocusView;
95f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    bool    fWaitingOnInval;
961fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com
9738512471121a1720c4f46ae6f5f5e654a01557c6reed@android.com    SkString    fTitle;
98982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com    SkMatrix    fMatrix;
99f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
100f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    typedef SkView INHERITED;
101f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com};
102f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
1038c8a8e8c04f41254e8ae1bfe8186af926840ad17tfarina@chromium.org////////////////////////////////////////////////////////////////////////////////
104f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
105d40fe601b77b248d709a30caab4ed5ccc514ea4eborenet@google.com#if defined(SK_BUILD_FOR_NACL)
106d40fe601b77b248d709a30caab4ed5ccc514ea4eborenet@google.com    #include "SkOSWindow_NaCl.h"
107d40fe601b77b248d709a30caab4ed5ccc514ea4eborenet@google.com#elif defined(SK_BUILD_FOR_MAC)
108f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    #include "SkOSWindow_Mac.h"
109f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#elif defined(SK_BUILD_FOR_WIN)
110f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    #include "SkOSWindow_Win.h"
111402578afdfb28800f7c24ebb2172175d80817f1cdjsollen@google.com#elif defined(SK_BUILD_FOR_ANDROID)
112b954ca44eda89e3c1abdaef900f8461f78ddf6edScroggo    #include "SkOSWindow_Android.h"
113ddd09613cee5a13edee9e67edc0ed032b795a608scroggo#elif defined(SK_BUILD_FOR_UNIX)
114f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com  #include "SkOSWindow_Unix.h"
11531ff4ec4ee65126699fc86b3d5361ae52f093071reed@android.com#elif defined(SK_BUILD_FOR_SDL)
11631ff4ec4ee65126699fc86b3d5361ae52f093071reed@android.com    #include "SkOSWindow_SDL.h"
117982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com#elif defined(SK_BUILD_FOR_IOS)
118982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com    #include "SkOSWindow_iOS.h"
119f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#endif
120f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
121f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#endif
122