| /* | 
 |  * Copyright 2014 Google Inc. | 
 |  * | 
 |  * Use of this source code is governed by a BSD-style license that can be | 
 |  * found in the LICENSE file. | 
 |  */ | 
 |  | 
 | #ifndef GrSurfacePriv_DEFINED | 
 | #define GrSurfacePriv_DEFINED | 
 |  | 
 | #include "GrSurface.h" | 
 |  | 
 | /** Class that adds methods to GrSurface that are only intended for use internal to Skia. | 
 |     This class is purely a privileged window into GrSurface. It should never have additional data | 
 |     members or virtual methods. | 
 |     Non-static methods that are not trivial inlines should be spring-boarded (e.g. declared and | 
 |     implemented privately in GrSurface with a inline public method here). */ | 
 | class GrSurfacePriv { | 
 | public: | 
 |     /** Helpers used in read/write pixels implementations. The parameters are adjusted so that the | 
 |         read/write respects the bounds of a surface. If the input *rowBytes is 0 it will be | 
 |         the tight row bytes (based on width and bpp) on output. */ | 
 |     static bool AdjustReadPixelParams(int surfaceWidth, | 
 |                                       int surfaceHeight, | 
 |                                       size_t bpp, | 
 |                                       int* left, int* top, int* width, int* height, | 
 |                                       void** data, | 
 |                                       size_t* rowBytes); | 
 |     static bool AdjustWritePixelParams(int surfaceWidth, | 
 |                                       int surfaceHeight, | 
 |                                       size_t bpp, | 
 |                                       int* left, int* top, int* width, int* height, | 
 |                                       const void** data, | 
 |                                       size_t* rowBytes); | 
 |  | 
 |     bool hasPendingRead() const { return fSurface->hasPendingRead(); } | 
 |     bool hasPendingWrite() const { return fSurface->hasPendingWrite(); } | 
 |     bool hasPendingIO() const { return fSurface->hasPendingIO(); } | 
 |     bool hasUniqueRef() const { return fSurface->internalHasUniqueRef(); } | 
 |  | 
 |     GrInternalSurfaceFlags flags() const { return fSurface->fSurfaceFlags; } | 
 |  | 
 |     bool doesNotSupportMipMaps() const { return fSurface->doesNotSupportMipMaps(); } | 
 |     bool isGLTextureRectangleOrExternal() const { | 
 |         return fSurface->isGLTextureRectangleOrExternal(); | 
 |     } | 
 |     // We only support the clamp wrap mode with gl rectangle or external textures. | 
 |     bool isClampOnly() const { return fSurface->isGLTextureRectangleOrExternal(); } | 
 |  | 
 | private: | 
 |     explicit GrSurfacePriv(GrSurface* surface) : fSurface(surface) {} | 
 |     GrSurfacePriv(const GrSurfacePriv&); // unimpl | 
 |     GrSurfacePriv& operator=(const GrSurfacePriv&); // unimpl | 
 |  | 
 |     // No taking addresses of this type. | 
 |     const GrSurfacePriv* operator&() const; | 
 |     GrSurfacePriv* operator&(); | 
 |  | 
 |     GrSurface* fSurface; | 
 |  | 
 |     friend class GrSurface; // to construct/copy this type. | 
 | }; | 
 |  | 
 | inline GrSurfacePriv GrSurface::surfacePriv() { return GrSurfacePriv(this); } | 
 |  | 
 | inline const GrSurfacePriv GrSurface::surfacePriv() const { | 
 |     return GrSurfacePriv(const_cast<GrSurface*>(this)); | 
 | } | 
 |  | 
 | #endif |