blob: 8646e25d49ed73281685269d5e7d2e5eb314d925 [file] [log] [blame]
robertphillips4fd74ae2016-08-03 14:26:53 -07001/*
2 * Copyright 2016 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 GrContextPriv_DEFINED
9#define GrContextPriv_DEFINED
10
11#include "GrContext.h"
12
13/** Class that adds methods to GrContext that are only intended for use internal to Skia.
14 This class is purely a privileged window into GrContext. It should never have additional
15 data members or virtual methods. */
16class GrContextPriv {
17public:
18 // Create a drawContext that wraps an existing renderTarget
19 sk_sp<GrDrawContext> makeWrappedDrawContext(sk_sp<GrRenderTarget> rt,
20 sk_sp<SkColorSpace> colorSpace,
21 const SkSurfaceProps* = nullptr);
22
23 sk_sp<GrDrawContext> makeBackendTextureDrawContext(const GrBackendTextureDesc& desc,
24 sk_sp<SkColorSpace> colorSpace,
25 const SkSurfaceProps* = nullptr,
26 GrWrapOwnership = kBorrow_GrWrapOwnership);
27
28 sk_sp<GrDrawContext> makeBackendRenderTargetDrawContext(const GrBackendRenderTargetDesc& desc,
29 sk_sp<SkColorSpace> colorSpace,
30 const SkSurfaceProps* = nullptr);
31
32 sk_sp<GrDrawContext> makeBackendTextureAsRenderTargetDrawContext(
33 const GrBackendTextureDesc& desc,
34 sk_sp<SkColorSpace> colorSpace,
35 const SkSurfaceProps* = nullptr);
36
37private:
38 explicit GrContextPriv(GrContext* context) : fContext(context) {}
39 GrContextPriv(const GrContextPriv&) {} // unimpl
40 GrContextPriv& operator=(const GrContextPriv&); // unimpl
41
42 // No taking addresses of this type.
43 const GrContextPriv* operator&() const;
44 GrContextPriv* operator&();
45
46 GrContext* fContext;
47
48 friend class GrContext; // to construct/copy this type.
49};
50
51inline GrContextPriv GrContext::contextPriv() { return GrContextPriv(this); }
52
53inline const GrContextPriv GrContext::contextPriv () const {
54 return GrContextPriv(const_cast<GrContext*>(this));
55}
56
57#endif