11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
20b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger/*
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2006 The Android Open Source Project
40b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger *
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
70b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger */
80b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
91cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
100b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#ifndef SkWindow_DEFINED
110b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#define SkWindow_DEFINED
120b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
130b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkView.h"
140b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkBitmap.h"
150b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkMatrix.h"
160b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkRegion.h"
170b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkEvent.h"
180b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkKey.h"
190b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkTDArray.h"
200b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
210b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#ifdef SK_BUILD_FOR_WINCEx
220b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    #define SHOW_FPS
230b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#endif
240b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger//#define USE_GX_SCREEN
250b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
260b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerclass SkCanvas;
270b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
280b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerclass SkOSMenu;
290b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
300b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerclass SkWindow : public SkView {
310b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerpublic:
320b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            SkWindow();
330b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    virtual ~SkWindow();
340b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
350b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    const SkBitmap& getBitmap() const { return fBitmap; }
360b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
370b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    void    setConfig(SkBitmap::Config);
380b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    void    resize(int width, int height, SkBitmap::Config config = SkBitmap::kNo_Config);
390b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    void    eraseARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b);
400b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    void    eraseRGB(U8CPU r, U8CPU g, U8CPU b);
410b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
420b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    bool    isDirty() const { return !fDirtyRgn.isEmpty(); }
430b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    bool    update(SkIRect* updateArea, SkCanvas* = NULL);
440b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    // does not call through to onHandleInval(), but does force the fDirtyRgn
450b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    // to be wide open. Call before update() to ensure we redraw everything.
460b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    void    forceInvalAll();
470b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    // return the bounds of the dirty/inval rgn, or [0,0,0,0] if none
480b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    const SkIRect& getDirtyBounds() const { return fDirtyRgn.getBounds(); }
490b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
501cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    bool    handleClick(int x, int y, Click::State, void* owner = NULL);
510b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    bool    handleChar(SkUnichar);
520b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    bool    handleKey(SkKey);
530b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    bool    handleKeyUp(SkKey);
540b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
550b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    void    addMenu(SkOSMenu*);
561cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    const SkTDArray<SkOSMenu*>* getMenus() { return &fMenus; }
570b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
580b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    const char* getTitle() const { return fTitle.c_str(); }
590b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    void    setTitle(const char title[]);
600b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
610b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    const SkMatrix& getMatrix() const { return fMatrix; }
620b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    void    setMatrix(const SkMatrix&);
630b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    void    preConcat(const SkMatrix&);
640b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    void    postConcat(const SkMatrix&);
650b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
661cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    virtual void onPDFSaved(const char title[], const char desc[],
671cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        const char path[]) {}
680b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerprotected:
690b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    virtual bool onEvent(const SkEvent&);
701cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    virtual bool onDispatchClick(int x, int y, Click::State, void* owner);
710b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    // called if part of our bitmap is invalidated
720b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    virtual void onHandleInval(const SkIRect&);
730b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    virtual bool onHandleChar(SkUnichar);
740b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    virtual bool onHandleKey(SkKey);
750b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    virtual bool onHandleKeyUp(SkKey);
761cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    virtual void onAddMenu(const SkOSMenu*) {};
771cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    virtual void onUpdateMenu(const SkOSMenu*) {};
780b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    virtual void onSetTitle(const char title[]) {}
790b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
800b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    // overrides from SkView
810b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    virtual bool handleInval(const SkRect*);
820b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    virtual bool onGetFocusView(SkView** focus) const;
830b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    virtual bool onSetFocusView(SkView* focus);
840b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
850b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerprivate:
860b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    SkBitmap::Config    fConfig;
870b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    SkBitmap    fBitmap;
880b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    SkRegion    fDirtyRgn;
891cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
901cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    SkTDArray<Click*>       fClicks; // to track clicks
910b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
920b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    SkTDArray<SkOSMenu*>    fMenus;
930b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
940b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    SkView* fFocusView;
950b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    bool    fWaitingOnInval;
960b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
970b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    SkString    fTitle;
980b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    SkMatrix    fMatrix;
990b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
1000b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    typedef SkView INHERITED;
1010b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger};
1020b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
1030b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger///////////////////////////////////////////////////////////
1040b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
1050b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#ifdef SK_USE_WXWIDGETS
1060b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    #include "SkOSWindow_wxwidgets.h"
1070b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#elif defined(SK_BUILD_FOR_MAC)
1080b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    #include "SkOSWindow_Mac.h"
1090b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#elif defined(SK_BUILD_FOR_WIN)
1100b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    #include "SkOSWindow_Win.h"
1111cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#elif defined(SK_BUILD_FOR_ANDROID)
1120b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    #include "SkOSWindow_Android.h"
1130b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#elif defined(SK_BUILD_FOR_UNIX)
1140b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger  #include "SkOSWindow_Unix.h"
1150b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#elif defined(SK_BUILD_FOR_SDL)
1160b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    #include "SkOSWindow_SDL.h"
1170b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#elif defined(SK_BUILD_FOR_IOS)
1180b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    #include "SkOSWindow_iOS.h"
1190b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#endif
1200b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
1210b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#endif
1220b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
123