SkWindow.h revision 654d72f94c855ceae34db0ee82d92844835c0d29
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
28a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2006 The Android Open Source Project
48a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com *
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
78a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */
88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
9ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkWindow_DEFINED
118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SkWindow_DEFINED
128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkView.h"
148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkBitmap.h"
15f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com#include "SkMatrix.h"
168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkRegion.h"
178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkEvent.h"
188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkKey.h"
198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkTDArray.h"
208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_BUILD_FOR_WINCEx
228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    #define SHOW_FPS
238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif
248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//#define USE_GX_SCREEN
258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
26f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.comclass SkCanvas;
27f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com
288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkOSMenu;
298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkWindow : public SkView {
318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic:
328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            SkWindow();
338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual ~SkWindow();
348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    const SkBitmap& getBitmap() const { return fBitmap; }
368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void    setConfig(SkBitmap::Config);
388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void    resize(int width, int height, SkBitmap::Config config = SkBitmap::kNo_Config);
398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void    eraseARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b);
408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void    eraseRGB(U8CPU r, U8CPU g, U8CPU b);
418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    bool    isDirty() const { return !fDirtyRgn.isEmpty(); }
43f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com    bool    update(SkIRect* updateArea, SkCanvas* = NULL);
44f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com    // does not call through to onHandleInval(), but does force the fDirtyRgn
45f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com    // to be wide open. Call before update() to ensure we redraw everything.
46f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com    void    forceInvalAll();
47f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com    // return the bounds of the dirty/inval rgn, or [0,0,0,0] if none
48f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com    const SkIRect& getDirtyBounds() const { return fDirtyRgn.getBounds(); }
49f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com
50d3aed39ab1ad88b05b9423ee1329c227d1f8f612Scroggo    bool    handleClick(int x, int y, Click::State, void* owner = NULL);
518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    bool    handleChar(SkUnichar);
528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    bool    handleKey(SkKey);
538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    bool    handleKeyUp(SkKey);
548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void    addMenu(SkOSMenu*);
56654d72f94c855ceae34db0ee82d92844835c0d29yangsu@google.com    const SkTDArray<SkOSMenu*>* getMenus() { return &fMenus; }
570ae6b245f2b79bc04f0801b08fcf05abcf98fd6creed@android.com
580ae6b245f2b79bc04f0801b08fcf05abcf98fd6creed@android.com    const char* getTitle() const { return fTitle.c_str(); }
598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void    setTitle(const char title[]);
608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
61f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com    const SkMatrix& getMatrix() const { return fMatrix; }
62f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com    void    setMatrix(const SkMatrix&);
63f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com    void    preConcat(const SkMatrix&);
64f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com    void    postConcat(const SkMatrix&);
65f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com
668ac0d542b0226e68b0faa935b3402ffc91409a02Scroggo    virtual void onPDFSaved(const char title[], const char desc[],
678ac0d542b0226e68b0faa935b3402ffc91409a02Scroggo        const char path[]) {}
688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected:
698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool onEvent(const SkEvent&);
70d3aed39ab1ad88b05b9423ee1329c227d1f8f612Scroggo    virtual bool onDispatchClick(int x, int y, Click::State, void* owner);
718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    // called if part of our bitmap is invalidated
728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual void onHandleInval(const SkIRect&);
738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool onHandleChar(SkUnichar);
748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool onHandleKey(SkKey);
758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool onHandleKeyUp(SkKey);
76654d72f94c855ceae34db0ee82d92844835c0d29yangsu@google.com    virtual void onAddMenu(const SkOSMenu*) {};
77654d72f94c855ceae34db0ee82d92844835c0d29yangsu@google.com    virtual void onUpdateMenu(const SkOSMenu*) {};
788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual void onSetTitle(const char title[]) {}
798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    // overrides from SkView
81f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com    virtual bool handleInval(const SkRect*);
828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool onGetFocusView(SkView** focus) const;
838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool onSetFocusView(SkView* focus);
848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate:
868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkBitmap::Config    fConfig;
878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkBitmap    fBitmap;
888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkRegion    fDirtyRgn;
89d3aed39ab1ad88b05b9423ee1329c227d1f8f612Scroggo
90d3aed39ab1ad88b05b9423ee1329c227d1f8f612Scroggo    SkTDArray<Click*>       fClicks; // to track clicks
918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkTDArray<SkOSMenu*>    fMenus;
938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkView* fFocusView;
958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    bool    fWaitingOnInval;
960ae6b245f2b79bc04f0801b08fcf05abcf98fd6creed@android.com
970ae6b245f2b79bc04f0801b08fcf05abcf98fd6creed@android.com    SkString    fTitle;
98f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com    SkMatrix    fMatrix;
998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    typedef SkView INHERITED;
1018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com};
1028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com///////////////////////////////////////////////////////////
1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
105671cd656785de5e84564b6ffe4831625d7016dedreed@android.com#ifdef SK_USE_WXWIDGETS
106671cd656785de5e84564b6ffe4831625d7016dedreed@android.com    #include "SkOSWindow_wxwidgets.h"
107671cd656785de5e84564b6ffe4831625d7016dedreed@android.com#elif defined(SK_BUILD_FOR_MAC)
1088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    #include "SkOSWindow_Mac.h"
1098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#elif defined(SK_BUILD_FOR_WIN)
1108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    #include "SkOSWindow_Win.h"
111f33d1537326af59b7948d2fa92db0b0190f0d99dScroggo#elif defined(ANDROID)
112f33d1537326af59b7948d2fa92db0b0190f0d99dScroggo    #include "SkOSWindow_Android.h"
113b7e9aee1acf27fc98cb37ed69c05da71b4c3c69bscroggo#elif defined(SK_BUILD_FOR_UNIX)
1148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  #include "SkOSWindow_Unix.h"
115671cd656785de5e84564b6ffe4831625d7016dedreed@android.com#elif defined(SK_BUILD_FOR_SDL)
116671cd656785de5e84564b6ffe4831625d7016dedreed@android.com    #include "SkOSWindow_SDL.h"
117f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com#elif defined(SK_BUILD_FOR_IOS)
118f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com    #include "SkOSWindow_iOS.h"
1198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif
1208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif
1228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
123