SkWindow.h revision 97a0918715b621183647d96dbe8fd2eb038ed564
18a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2006 The Android Open Source Project 38a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 68a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 78a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkWindow_DEFINED 98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SkWindow_DEFINED 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 11a7e9f05119174848c6be5028568f46eb5e85398ebungeman#include "../private/SkTDArray.h" 128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkView.h" 138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkBitmap.h" 14f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com#include "SkMatrix.h" 158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkRegion.h" 168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkEvent.h" 178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkKey.h" 184302ae91b0c97993f7b659474a5fd305921cdc5ereed#include "SkSurfaceProps.h" 198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 200397e9f3415b4646797f1b17e9a38b5deb864ff0reedclass SkSurface; 218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkOSMenu; 228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 23c8fcafb3f0d152fb92465451bdb2e4bd3ef37222caryclark#if SK_SUPPORT_GPU 24c8fcafb3f0d152fb92465451bdb2e4bd3ef37222caryclarkstruct GrGLInterface; 25c8fcafb3f0d152fb92465451bdb2e4bd3ef37222caryclarkclass GrContext; 26c8fcafb3f0d152fb92465451bdb2e4bd3ef37222caryclarkclass GrRenderTarget; 27c8fcafb3f0d152fb92465451bdb2e4bd3ef37222caryclark#endif 28c8fcafb3f0d152fb92465451bdb2e4bd3ef37222caryclark 298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkWindow : public SkView { 308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkWindow(); 328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual ~SkWindow(); 338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 34c8fcafb3f0d152fb92465451bdb2e4bd3ef37222caryclark struct AttachmentInfo { 352d1ee7936e3536e45c963db004e3b512bb415fd8brianosman AttachmentInfo() 362d1ee7936e3536e45c963db004e3b512bb415fd8brianosman : fSampleCount(0) 372d1ee7936e3536e45c963db004e3b512bb415fd8brianosman , fStencilBits(0) 382d1ee7936e3536e45c963db004e3b512bb415fd8brianosman , fColorBits(0) {} 392d1ee7936e3536e45c963db004e3b512bb415fd8brianosman 40c8fcafb3f0d152fb92465451bdb2e4bd3ef37222caryclark int fSampleCount; 41c8fcafb3f0d152fb92465451bdb2e4bd3ef37222caryclark int fStencilBits; 422d1ee7936e3536e45c963db004e3b512bb415fd8brianosman int fColorBits; 43c8fcafb3f0d152fb92465451bdb2e4bd3ef37222caryclark }; 44c8fcafb3f0d152fb92465451bdb2e4bd3ef37222caryclark 454302ae91b0c97993f7b659474a5fd305921cdc5ereed SkSurfaceProps getSurfaceProps() const { return fSurfaceProps; } 464302ae91b0c97993f7b659474a5fd305921cdc5ereed void setSurfaceProps(const SkSurfaceProps& props) { 474302ae91b0c97993f7b659474a5fd305921cdc5ereed fSurfaceProps = props; 484302ae91b0c97993f7b659474a5fd305921cdc5ereed } 494302ae91b0c97993f7b659474a5fd305921cdc5ereed 50a34be68a7eff0ae475b194f8a29975460cf3e456reed SkImageInfo info() const { return fBitmap.info(); } 518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkBitmap& getBitmap() const { return fBitmap; } 528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 53973d92cf91b21013361209e8a5c0c4685728847fkkinnunen void resize(int width, int height); 54a34be68a7eff0ae475b194f8a29975460cf3e456reed void resize(const SkImageInfo&); 55b109b8c5ec40a7dd85a0a2951a1f98fa63b805aabrianosman void setColorType(SkColorType, sk_sp<SkColorSpace>); 568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool isDirty() const { return !fDirtyRgn.isEmpty(); } 58aa400ee34c035c582ea8f3bce8a467d9848ecd25reed@google.com bool update(SkIRect* updateArea); 59f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com // does not call through to onHandleInval(), but does force the fDirtyRgn 60f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com // to be wide open. Call before update() to ensure we redraw everything. 61f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com void forceInvalAll(); 62f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com // return the bounds of the dirty/inval rgn, or [0,0,0,0] if none 63f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com const SkIRect& getDirtyBounds() const { return fDirtyRgn.getBounds(); } 64f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com 654d5c26de0a24f86c37c1da8b0e30d11a550ea67breed@google.com bool handleClick(int x, int y, Click::State, void* owner, unsigned modi = 0); 668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool handleChar(SkUnichar); 678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool handleKey(SkKey); 688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool handleKeyUp(SkKey); 698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void addMenu(SkOSMenu*); 71654d72f94c855ceae34db0ee82d92844835c0d29yangsu@google.com const SkTDArray<SkOSMenu*>* getMenus() { return &fMenus; } 72fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 730ae6b245f2b79bc04f0801b08fcf05abcf98fd6creed@android.com const char* getTitle() const { return fTitle.c_str(); } 748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void setTitle(const char title[]); 758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 76f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com const SkMatrix& getMatrix() const { return fMatrix; } 77f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com void setMatrix(const SkMatrix&); 78f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com void preConcat(const SkMatrix&); 79f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com void postConcat(const SkMatrix&); 80f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com 810397e9f3415b4646797f1b17e9a38b5deb864ff0reed virtual SkSurface* createSurface(); 825957f47e8de0ff55b8c0bf84984d4915c7c72825reed@google.com 838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected: 848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual bool onEvent(const SkEvent&); 854d5c26de0a24f86c37c1da8b0e30d11a550ea67breed@google.com virtual bool onDispatchClick(int x, int y, Click::State, void* owner, unsigned modi); 868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // called if part of our bitmap is invalidated 878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void onHandleInval(const SkIRect&); 888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual bool onHandleChar(SkUnichar); 898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual bool onHandleKey(SkKey); 908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual bool onHandleKeyUp(SkKey); 91654d72f94c855ceae34db0ee82d92844835c0d29yangsu@google.com virtual void onAddMenu(const SkOSMenu*) {}; 92654d72f94c855ceae34db0ee82d92844835c0d29yangsu@google.com virtual void onUpdateMenu(const SkOSMenu*) {}; 938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void onSetTitle(const char title[]) {} 948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // overrides from SkView 96f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com virtual bool handleInval(const SkRect*); 978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual bool onGetFocusView(SkView** focus) const; 988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual bool onSetFocusView(SkView* focus); 998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 100c8fcafb3f0d152fb92465451bdb2e4bd3ef37222caryclark#if SK_SUPPORT_GPU 101c8fcafb3f0d152fb92465451bdb2e4bd3ef37222caryclark GrRenderTarget* renderTarget(const AttachmentInfo& attachmentInfo, 102c8fcafb3f0d152fb92465451bdb2e4bd3ef37222caryclark const GrGLInterface* , GrContext* grContext); 103c8fcafb3f0d152fb92465451bdb2e4bd3ef37222caryclark#endif 104c8fcafb3f0d152fb92465451bdb2e4bd3ef37222caryclark 1058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 1064302ae91b0c97993f7b659474a5fd305921cdc5ereed SkSurfaceProps fSurfaceProps; 1078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkBitmap fBitmap; 1088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkRegion fDirtyRgn; 109d3aed39ab1ad88b05b9423ee1329c227d1f8f612Scroggo 110d3aed39ab1ad88b05b9423ee1329c227d1f8f612Scroggo SkTDArray<Click*> fClicks; // to track clicks 1118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkTDArray<SkOSMenu*> fMenus; 1138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkView* fFocusView; 1158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool fWaitingOnInval; 116fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 1170ae6b245f2b79bc04f0801b08fcf05abcf98fd6creed@android.com SkString fTitle; 118f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com SkMatrix fMatrix; 1198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkView INHERITED; 1218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 123e229e92ea51e9bc7c11033e2099d3ef275621115tfarina@chromium.org//////////////////////////////////////////////////////////////////////////////// 1248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1253ac6b7551dc7aa182018f96b32f6e516305333eebungeman#if defined(SK_USE_SDL) 1263ac6b7551dc7aa182018f96b32f6e516305333eebungeman #include "SkOSWindow_SDL.h" 1273ac6b7551dc7aa182018f96b32f6e516305333eebungeman#elif defined(SK_BUILD_FOR_MAC) 1288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #include "SkOSWindow_Mac.h" 1298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#elif defined(SK_BUILD_FOR_WIN) 1308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com #include "SkOSWindow_Win.h" 13156c69773aea56c6c6bd47bc7e7970dd081205184djsollen@google.com#elif defined(SK_BUILD_FOR_ANDROID) 13297a0918715b621183647d96dbe8fd2eb038ed564liyuqian #error Android does not support SkOSWindow and SampleApp. Please use Viewer instead. 133b7e9aee1acf27fc98cb37ed69c05da71b4c3c69bscroggo#elif defined(SK_BUILD_FOR_UNIX) 134474a9ea051c584c373da28c5c8511f279ebd734cjoshualitt #include "SkOSWindow_Unix.h" 135f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com#elif defined(SK_BUILD_FOR_IOS) 136f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com #include "SkOSWindow_iOS.h" 1378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 140