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