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