1 /* 2 * Copyright 2014 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef GrSurfacePriv_DEFINED 9 #define GrSurfacePriv_DEFINED 10 11 #include "GrSurface.h" 12 13 /** Class that adds methods to GrSurface that are only intended for use internal to Skia. 14 This class is purely a privileged window into GrSurface. It should never have additional data 15 members or virtual methods. 16 Non-static methods that are not trivial inlines should be spring-boarded (e.g. declared and 17 implemented privately in GrSurface with a inline public method here). */ 18 class GrSurfacePriv { 19 public: 20 /** 21 * Derive a SkImageInfo from the surface's descriptor. This is lossy as ImageInfo has fields not 22 * known to GrSurface (e.g. alphaType). 23 */ info()24 SkImageInfo info() const { return fSurface->info(); } 25 26 /** 27 * Write the contents of the surface to a PNG. Returns true if successful. 28 * @param filename Full path to desired file 29 */ savePixels(const char * filename)30 bool savePixels(const char* filename) { return fSurface->savePixels(filename); } 31 hasPendingRead()32 bool hasPendingRead() const { return fSurface->hasPendingRead(); } hasPendingWrite()33 bool hasPendingWrite() const { return fSurface->hasPendingWrite(); } hasPendingIO()34 bool hasPendingIO() const { return fSurface->hasPendingIO(); } 35 36 private: GrSurfacePriv(GrSurface * surface)37 explicit GrSurfacePriv(GrSurface* surface) : fSurface(surface) {} 38 GrSurfacePriv(const GrSurfacePriv&); // unimpl 39 GrSurfacePriv& operator=(const GrSurfacePriv&); // unimpl 40 41 // No taking addresses of this type. 42 const GrSurfacePriv* operator&() const; 43 GrSurfacePriv* operator&(); 44 45 GrSurface* fSurface; 46 47 friend class GrSurface; // to construct/copy this type. 48 }; 49 surfacePriv()50inline GrSurfacePriv GrSurface::surfacePriv() { return GrSurfacePriv(this); } 51 surfacePriv()52inline const GrSurfacePriv GrSurface::surfacePriv() const { 53 return GrSurfacePriv(const_cast<GrSurface*>(this)); 54 } 55 56 #endif 57