Line data Source code
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 : /** Helpers used in read/write pixels implementations. The paramters are adjusted so that the
21 : read/write respects the bounds of a surface. If the input *rowBytes is 0 it will be
22 : the tight row bytes (based on width and bpp) on output. */
23 : static bool AdjustReadPixelParams(int surfaceWidth,
24 : int surfaceHeight,
25 : size_t bpp,
26 : int* left, int* top, int* width, int* height,
27 : void** data,
28 : size_t* rowBytes);
29 : static bool AdjustWritePixelParams(int surfaceWidth,
30 : int surfaceHeight,
31 : size_t bpp,
32 : int* left, int* top, int* width, int* height,
33 : const void** data,
34 : size_t* rowBytes);
35 :
36 : bool hasPendingRead() const { return fSurface->hasPendingRead(); }
37 0 : bool hasPendingWrite() const { return fSurface->hasPendingWrite(); }
38 0 : bool hasPendingIO() const { return fSurface->hasPendingIO(); }
39 :
40 : private:
41 0 : explicit GrSurfacePriv(GrSurface* surface) : fSurface(surface) {}
42 : GrSurfacePriv(const GrSurfacePriv&); // unimpl
43 : GrSurfacePriv& operator=(const GrSurfacePriv&); // unimpl
44 :
45 : // No taking addresses of this type.
46 : const GrSurfacePriv* operator&() const;
47 : GrSurfacePriv* operator&();
48 :
49 : GrSurface* fSurface;
50 :
51 : friend class GrSurface; // to construct/copy this type.
52 : };
53 :
54 0 : inline GrSurfacePriv GrSurface::surfacePriv() { return GrSurfacePriv(this); }
55 :
56 : inline const GrSurfacePriv GrSurface::surfacePriv() const {
57 : return GrSurfacePriv(const_cast<GrSurface*>(this));
58 : }
59 :
60 : #endif
|