SkWindow.h revision f2b98d67dcb6fcb3120feede9c72016fc7b3ead8
18a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/*
28a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * Copyright (C) 2006 The Android Open Source Project
38a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com *
48a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * Licensed under the Apache License, Version 2.0 (the "License");
58a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * you may not use this file except in compliance with the License.
68a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * You may obtain a copy of the License at
78a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com *
88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com *      http://www.apache.org/licenses/LICENSE-2.0
98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com *
108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * Unless required by applicable law or agreed to in writing, software
118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * distributed under the License is distributed on an "AS IS" BASIS,
128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * See the License for the specific language governing permissions and
148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * limitations under the License.
158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */
168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkWindow_DEFINED
188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SkWindow_DEFINED
198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkView.h"
218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkBitmap.h"
22f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com#include "SkMatrix.h"
238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkRegion.h"
248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkEvent.h"
258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkKey.h"
268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkTDArray.h"
278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_BUILD_FOR_WINCEx
298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    #define SHOW_FPS
308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif
318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//#define USE_GX_SCREEN
328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
33f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.comclass SkCanvas;
34f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com
358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkOSMenu;
368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkWindow : public SkView {
388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic:
398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            SkWindow();
408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual ~SkWindow();
418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    const SkBitmap& getBitmap() const { return fBitmap; }
438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void    setConfig(SkBitmap::Config);
458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void    resize(int width, int height, SkBitmap::Config config = SkBitmap::kNo_Config);
468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void    eraseARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b);
478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void    eraseRGB(U8CPU r, U8CPU g, U8CPU b);
488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    bool    isDirty() const { return !fDirtyRgn.isEmpty(); }
50f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com    bool    update(SkIRect* updateArea, SkCanvas* = NULL);
51f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com    // does not call through to onHandleInval(), but does force the fDirtyRgn
52f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com    // to be wide open. Call before update() to ensure we redraw everything.
53f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com    void    forceInvalAll();
54f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com    // return the bounds of the dirty/inval rgn, or [0,0,0,0] if none
55f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com    const SkIRect& getDirtyBounds() const { return fDirtyRgn.getBounds(); }
56f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com
578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    bool    handleClick(int x, int y, Click::State);
588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    bool    handleChar(SkUnichar);
598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    bool    handleKey(SkKey);
608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    bool    handleKeyUp(SkKey);
618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    bool    handleMenu(uint32_t os_cmd);
628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void    addMenu(SkOSMenu*);
640ae6b245f2b79bc04f0801b08fcf05abcf98fd6creed@android.com
650ae6b245f2b79bc04f0801b08fcf05abcf98fd6creed@android.com    const char* getTitle() const { return fTitle.c_str(); }
668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void    setTitle(const char title[]);
678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
68f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com    const SkMatrix& getMatrix() const { return fMatrix; }
69f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com    void    setMatrix(const SkMatrix&);
70f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com    void    preConcat(const SkMatrix&);
71f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com    void    postConcat(const SkMatrix&);
72f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com
738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected:
748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool onEvent(const SkEvent&);
758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    // called if part of our bitmap is invalidated
778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual void onHandleInval(const SkIRect&);
788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool onHandleChar(SkUnichar);
798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool onHandleKey(SkKey);
808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool onHandleKeyUp(SkKey);
818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual void onAddMenu(const SkOSMenu*) {}
828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual void onSetTitle(const char title[]) {}
838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    // overrides from SkView
85f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com    virtual bool handleInval(const SkRect*);
868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool onGetFocusView(SkView** focus) const;
878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool onSetFocusView(SkView* focus);
888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate:
908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkBitmap::Config    fConfig;
918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkBitmap    fBitmap;
928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkRegion    fDirtyRgn;
938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    Click*      fClick; // to track clicks
948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkTDArray<SkOSMenu*>    fMenus;
968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkView* fFocusView;
988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    bool    fWaitingOnInval;
990ae6b245f2b79bc04f0801b08fcf05abcf98fd6creed@android.com
1000ae6b245f2b79bc04f0801b08fcf05abcf98fd6creed@android.com    SkString    fTitle;
101f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com    SkMatrix    fMatrix;
1028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    typedef SkView INHERITED;
1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com};
1058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com///////////////////////////////////////////////////////////
1078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
108671cd656785de5e84564b6ffe4831625d7016dedreed@android.com#ifdef SK_USE_WXWIDGETS
109671cd656785de5e84564b6ffe4831625d7016dedreed@android.com    #include "SkOSWindow_wxwidgets.h"
110671cd656785de5e84564b6ffe4831625d7016dedreed@android.com#elif defined(SK_BUILD_FOR_MAC)
1118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    #include "SkOSWindow_Mac.h"
1128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#elif defined(SK_BUILD_FOR_WIN)
1138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    #include "SkOSWindow_Win.h"
1148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#elif defined(SK_BUILD_FOR_UNIXx)
1158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  #include "SkOSWindow_Unix.h"
116671cd656785de5e84564b6ffe4831625d7016dedreed@android.com#elif defined(SK_BUILD_FOR_SDL)
117671cd656785de5e84564b6ffe4831625d7016dedreed@android.com    #include "SkOSWindow_SDL.h"
118f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com#elif defined(SK_BUILD_FOR_IOS)
119f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com    #include "SkOSWindow_iOS.h"
1208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif
1218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif
1238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
124