2008-12-17 15:59:43 +00:00
|
|
|
/*
|
2011-07-28 14:26:00 +00:00
|
|
|
* Copyright 2006 The Android Open Source Project
|
2008-12-17 15:59:43 +00:00
|
|
|
*
|
2011-07-28 14:26:00 +00:00
|
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
|
|
* found in the LICENSE file.
|
2008-12-17 15:59:43 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef SkWindow_DEFINED
|
|
|
|
#define SkWindow_DEFINED
|
|
|
|
|
2016-02-18 16:53:33 +00:00
|
|
|
#include "../private/SkTDArray.h"
|
2008-12-17 15:59:43 +00:00
|
|
|
#include "SkView.h"
|
|
|
|
#include "SkBitmap.h"
|
2010-12-20 18:26:13 +00:00
|
|
|
#include "SkMatrix.h"
|
2008-12-17 15:59:43 +00:00
|
|
|
#include "SkRegion.h"
|
|
|
|
#include "SkEvent.h"
|
|
|
|
#include "SkKey.h"
|
2014-10-06 19:29:56 +00:00
|
|
|
#include "SkSurfaceProps.h"
|
2008-12-17 15:59:43 +00:00
|
|
|
|
2014-09-18 18:29:01 +00:00
|
|
|
class SkSurface;
|
2008-12-17 15:59:43 +00:00
|
|
|
class SkOSMenu;
|
|
|
|
|
2015-01-30 20:37:02 +00:00
|
|
|
#if SK_SUPPORT_GPU
|
|
|
|
struct GrGLInterface;
|
|
|
|
class GrContext;
|
|
|
|
class GrRenderTarget;
|
|
|
|
#endif
|
|
|
|
|
2008-12-17 15:59:43 +00:00
|
|
|
class SkWindow : public SkView {
|
|
|
|
public:
|
|
|
|
SkWindow();
|
|
|
|
virtual ~SkWindow();
|
|
|
|
|
2015-01-30 20:37:02 +00:00
|
|
|
struct AttachmentInfo {
|
2016-05-05 19:24:31 +00:00
|
|
|
AttachmentInfo()
|
|
|
|
: fSampleCount(0)
|
|
|
|
, fStencilBits(0)
|
|
|
|
, fColorBits(0) {}
|
|
|
|
|
2015-01-30 20:37:02 +00:00
|
|
|
int fSampleCount;
|
|
|
|
int fStencilBits;
|
2016-05-05 19:24:31 +00:00
|
|
|
int fColorBits;
|
2015-01-30 20:37:02 +00:00
|
|
|
};
|
|
|
|
|
2014-10-06 19:29:56 +00:00
|
|
|
SkSurfaceProps getSurfaceProps() const { return fSurfaceProps; }
|
|
|
|
void setSurfaceProps(const SkSurfaceProps& props) {
|
|
|
|
fSurfaceProps = props;
|
|
|
|
}
|
|
|
|
|
2016-02-15 15:48:35 +00:00
|
|
|
SkImageInfo info() const { return fBitmap.info(); }
|
2008-12-17 15:59:43 +00:00
|
|
|
const SkBitmap& getBitmap() const { return fBitmap; }
|
|
|
|
|
2016-01-18 09:18:34 +00:00
|
|
|
void resize(int width, int height);
|
2016-02-15 15:48:35 +00:00
|
|
|
void resize(const SkImageInfo&);
|
2016-06-16 20:03:24 +00:00
|
|
|
void setColorType(SkColorType, sk_sp<SkColorSpace>);
|
2008-12-17 15:59:43 +00:00
|
|
|
|
|
|
|
bool isDirty() const { return !fDirtyRgn.isEmpty(); }
|
2012-09-27 21:03:49 +00:00
|
|
|
bool update(SkIRect* updateArea);
|
2010-12-20 18:26:13 +00:00
|
|
|
// does not call through to onHandleInval(), but does force the fDirtyRgn
|
|
|
|
// to be wide open. Call before update() to ensure we redraw everything.
|
|
|
|
void forceInvalAll();
|
|
|
|
// return the bounds of the dirty/inval rgn, or [0,0,0,0] if none
|
|
|
|
const SkIRect& getDirtyBounds() const { return fDirtyRgn.getBounds(); }
|
|
|
|
|
2013-01-08 16:17:50 +00:00
|
|
|
bool handleClick(int x, int y, Click::State, void* owner, unsigned modi = 0);
|
2008-12-17 15:59:43 +00:00
|
|
|
bool handleChar(SkUnichar);
|
|
|
|
bool handleKey(SkKey);
|
|
|
|
bool handleKeyUp(SkKey);
|
|
|
|
|
|
|
|
void addMenu(SkOSMenu*);
|
2011-08-01 17:27:33 +00:00
|
|
|
const SkTDArray<SkOSMenu*>* getMenus() { return &fMenus; }
|
2012-08-23 18:09:54 +00:00
|
|
|
|
2008-12-23 16:49:54 +00:00
|
|
|
const char* getTitle() const { return fTitle.c_str(); }
|
2008-12-17 15:59:43 +00:00
|
|
|
void setTitle(const char title[]);
|
|
|
|
|
2010-12-20 18:26:13 +00:00
|
|
|
const SkMatrix& getMatrix() const { return fMatrix; }
|
|
|
|
void setMatrix(const SkMatrix&);
|
|
|
|
void preConcat(const SkMatrix&);
|
|
|
|
void postConcat(const SkMatrix&);
|
|
|
|
|
2016-07-28 22:17:34 +00:00
|
|
|
virtual sk_sp<SkSurface> makeSurface();
|
2012-10-01 20:31:56 +00:00
|
|
|
|
2016-10-10 14:39:38 +00:00
|
|
|
#if SK_SUPPORT_GPU
|
|
|
|
sk_sp<SkSurface> makeGpuBackedSurface(const AttachmentInfo& attachmentInfo,
|
|
|
|
const GrGLInterface* , GrContext* grContext);
|
|
|
|
#endif
|
|
|
|
|
2008-12-17 15:59:43 +00:00
|
|
|
protected:
|
|
|
|
virtual bool onEvent(const SkEvent&);
|
2013-01-08 16:17:50 +00:00
|
|
|
virtual bool onDispatchClick(int x, int y, Click::State, void* owner, unsigned modi);
|
2008-12-17 15:59:43 +00:00
|
|
|
// called if part of our bitmap is invalidated
|
|
|
|
virtual void onHandleInval(const SkIRect&);
|
|
|
|
virtual bool onHandleChar(SkUnichar);
|
|
|
|
virtual bool onHandleKey(SkKey);
|
|
|
|
virtual bool onHandleKeyUp(SkKey);
|
2016-10-18 18:42:44 +00:00
|
|
|
virtual void onAddMenu(const SkOSMenu*) {}
|
|
|
|
virtual void onUpdateMenu(const SkOSMenu*) {}
|
2008-12-17 15:59:43 +00:00
|
|
|
virtual void onSetTitle(const char title[]) {}
|
|
|
|
|
|
|
|
// overrides from SkView
|
2010-12-20 18:26:13 +00:00
|
|
|
virtual bool handleInval(const SkRect*);
|
2008-12-17 15:59:43 +00:00
|
|
|
virtual bool onGetFocusView(SkView** focus) const;
|
|
|
|
virtual bool onSetFocusView(SkView* focus);
|
|
|
|
|
|
|
|
private:
|
2014-10-06 19:29:56 +00:00
|
|
|
SkSurfaceProps fSurfaceProps;
|
2008-12-17 15:59:43 +00:00
|
|
|
SkBitmap fBitmap;
|
|
|
|
SkRegion fDirtyRgn;
|
2011-06-22 13:26:56 +00:00
|
|
|
|
|
|
|
SkTDArray<Click*> fClicks; // to track clicks
|
2008-12-17 15:59:43 +00:00
|
|
|
|
|
|
|
SkTDArray<SkOSMenu*> fMenus;
|
|
|
|
|
|
|
|
SkView* fFocusView;
|
|
|
|
bool fWaitingOnInval;
|
2012-08-23 18:09:54 +00:00
|
|
|
|
2008-12-23 16:49:54 +00:00
|
|
|
SkString fTitle;
|
2010-12-20 18:26:13 +00:00
|
|
|
SkMatrix fMatrix;
|
2008-12-17 15:59:43 +00:00
|
|
|
|
|
|
|
typedef SkView INHERITED;
|
|
|
|
};
|
|
|
|
|
2012-09-27 13:44:57 +00:00
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
2008-12-17 15:59:43 +00:00
|
|
|
|
2017-02-06 18:03:36 +00:00
|
|
|
#if defined(SK_BUILD_FOR_MAC)
|
2008-12-17 15:59:43 +00:00
|
|
|
#include "SkOSWindow_Mac.h"
|
|
|
|
#elif defined(SK_BUILD_FOR_WIN)
|
|
|
|
#include "SkOSWindow_Win.h"
|
2011-11-08 19:00:26 +00:00
|
|
|
#elif defined(SK_BUILD_FOR_ANDROID)
|
2016-07-06 14:52:08 +00:00
|
|
|
#error Android does not support SkOSWindow and SampleApp. Please use Viewer instead.
|
2011-03-15 15:15:15 +00:00
|
|
|
#elif defined(SK_BUILD_FOR_UNIX)
|
2015-11-05 19:49:35 +00:00
|
|
|
#include "SkOSWindow_Unix.h"
|
2010-12-20 18:26:13 +00:00
|
|
|
#elif defined(SK_BUILD_FOR_IOS)
|
|
|
|
#include "SkOSWindow_iOS.h"
|
2008-12-17 15:59:43 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif
|