diff options
Diffstat (limited to 'include/core/SkSurface.h')
-rw-r--r-- | include/core/SkSurface.h | 87 |
1 files changed, 54 insertions, 33 deletions
diff --git a/include/core/SkSurface.h b/include/core/SkSurface.h index 1871c676f2..0e238f8429 100644 --- a/include/core/SkSurface.h +++ b/include/core/SkSurface.h @@ -10,6 +10,7 @@ #include "SkRefCnt.h" #include "SkImage.h" +#include "SkSurfaceProps.h" class SkCanvas; class SkPaint; @@ -35,7 +36,8 @@ public: * If the requested surface cannot be created, or the request is not a * supported configuration, NULL will be returned. */ - static SkSurface* NewRasterDirect(const SkImageInfo&, void* pixels, size_t rowBytes); + static SkSurface* NewRasterDirect(const SkImageInfo&, void* pixels, size_t rowBytes, + const SkSurfaceProps* = NULL); /** * The same as NewRasterDirect, but also accepts a call-back routine, which is invoked @@ -43,7 +45,7 @@ public: */ static SkSurface* NewRasterDirectReleaseProc(const SkImageInfo&, void* pixels, size_t rowBytes, void (*releaseProc)(void* pixels, void* context), - void* context); + void* context, const SkSurfaceProps* = NULL); /** * Return a new surface, with the memory for the pixels automatically @@ -52,45 +54,36 @@ public: * If the requested surface cannot be created, or the request is not a * supported configuration, NULL will be returned. */ - static SkSurface* NewRaster(const SkImageInfo&); + static SkSurface* NewRaster(const SkImageInfo&, const SkSurfaceProps* = NULL); /** * Helper version of NewRaster. It creates a SkImageInfo with the * specified width and height, and populates the rest of info to match * pixels in SkPMColor format. */ - static SkSurface* NewRasterPMColor(int width, int height) { - return NewRaster(SkImageInfo::MakeN32Premul(width, height)); + static SkSurface* NewRasterPMColor(int width, int height, const SkSurfaceProps* props = NULL) { + return NewRaster(SkImageInfo::MakeN32Premul(width, height), props); } /** - * Text rendering modes that can be passed to NewRenderTarget* - */ - enum TextRenderMode { - /** - * This will use the standard text rendering method - */ - kStandard_TextRenderMode, - /** - * This will use signed distance fields for text rendering when possible - */ - kDistanceField_TextRenderMode, - }; - - /** * Return a new surface using the specified render target. - * The pixels in the rendertarget are not cleared or otherwised changed when the surface - * is created. */ - static SkSurface* NewRenderTargetDirect(GrRenderTarget*, - TextRenderMode trm = kStandard_TextRenderMode); - + static SkSurface* NewRenderTargetDirect(GrRenderTarget*, const SkSurfaceProps*); + + static SkSurface* NewRenderTargetDirect(GrRenderTarget* target) { + return NewRenderTargetDirect(target, NULL); + } + /** * Return a new surface whose contents will be drawn to an offscreen * render target, allocated by the surface. */ - static SkSurface* NewRenderTarget(GrContext*, const SkImageInfo&, int sampleCount = 0, - TextRenderMode trm = kStandard_TextRenderMode); + static SkSurface* NewRenderTarget(GrContext*, const SkImageInfo&, int sampleCount, + const SkSurfaceProps* = NULL); + + static SkSurface* NewRenderTarget(GrContext* gr, const SkImageInfo& info) { + return NewRenderTarget(gr, info, 0, NULL); + } /** * Return a new surface whose contents will be drawn to an offscreen @@ -104,8 +97,33 @@ public: * Note: Scratch textures count against the GrContext's cached resource * budget. */ - static SkSurface* NewScratchRenderTarget(GrContext*, const SkImageInfo&, int sampleCount = 0, - TextRenderMode trm = kStandard_TextRenderMode); + static SkSurface* NewScratchRenderTarget(GrContext*, const SkImageInfo&, int sampleCount, + const SkSurfaceProps* = NULL); + + static SkSurface* NewScratchRenderTarget(GrContext* gr, const SkImageInfo& info) { + return NewScratchRenderTarget(gr, info, 0, NULL); + } + +#ifdef SK_SUPPORT_LEGACY_TEXTRENDERMODE + /** + * Text rendering modes that can be passed to NewRenderTarget* + */ + enum TextRenderMode { + /** + * This will use the standard text rendering method + */ + kStandard_TextRenderMode, + /** + * This will use signed distance fields for text rendering when possible + */ + kDistanceField_TextRenderMode, + }; + static SkSurface* NewRenderTargetDirect(GrRenderTarget*, TextRenderMode); + static SkSurface* NewRenderTarget(GrContext*, const SkImageInfo&, int sampleCount, + TextRenderMode); + static SkSurface* NewScratchRenderTarget(GrContext*, const SkImageInfo&, int sampleCount, + TextRenderMode); +#endif int width() const { return fWidth; } int height() const { return fHeight; } @@ -194,9 +212,11 @@ public: */ const void* peekPixels(SkImageInfo* info, size_t* rowBytes); + const SkSurfaceProps& props() const { return fProps; } + protected: - SkSurface(int width, int height); - SkSurface(const SkImageInfo&); + SkSurface(int width, int height, const SkSurfaceProps*); + SkSurface(const SkImageInfo&, const SkSurfaceProps*); // called by subclass if their contents have changed void dirtyGenerationID() { @@ -204,9 +224,10 @@ protected: } private: - const int fWidth; - const int fHeight; - uint32_t fGenerationID; + const SkSurfaceProps fProps; + const int fWidth; + const int fHeight; + uint32_t fGenerationID; typedef SkRefCnt INHERITED; }; |