1 /* 2 * Copyright 2018 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 GrContextThreadSafeProxyPriv_DEFINED 9 #define GrContextThreadSafeProxyPriv_DEFINED 10 11 #include "GrContextThreadSafeProxy.h" 12 13 /** 14 * Class that adds methods to GrContextThreadSafeProxy that are only intended for use internal to 15 * Skia. This class is purely a privileged window into GrContextThreadSafeProxy. It should never 16 * have additional data members or virtual methods. 17 */ 18 class GrContextThreadSafeProxyPriv { 19 public: 20 const GrContextOptions& contextOptions() { return fProxy->fOptions; } 21 22 const GrCaps* caps() const { return fProxy->fCaps.get(); } 23 sk_sp<const GrCaps> refCaps() const { return fProxy->fCaps; } 24 uint32_t contextID() const { return fProxy->fContextID; } 25 GrBackendApi backend() const { return fProxy->fBackend; } 26 sk_sp<GrSkSLFPFactoryCache> fpFactoryCache() const; 27 28 private: 29 explicit GrContextThreadSafeProxyPriv(GrContextThreadSafeProxy* proxy) : fProxy(proxy) {} 30 GrContextThreadSafeProxyPriv(const GrContextThreadSafeProxy&) = delete; 31 GrContextThreadSafeProxyPriv& operator=(const GrContextThreadSafeProxyPriv&) = delete; 32 33 // No taking addresses of this type. 34 const GrContextThreadSafeProxyPriv* operator&() const = delete; 35 GrContextThreadSafeProxyPriv* operator&() = delete; 36 37 GrContextThreadSafeProxy* fProxy; 38 39 friend class GrContextThreadSafeProxy; // to construct/copy this type. 40 }; 41 42 inline GrContextThreadSafeProxyPriv GrContextThreadSafeProxy::priv() { 43 return GrContextThreadSafeProxyPriv(this); 44 } 45 46 inline const GrContextThreadSafeProxyPriv GrContextThreadSafeProxy::priv() const { 47 return GrContextThreadSafeProxyPriv(const_cast<GrContextThreadSafeProxy*>(this)); 48 } 49 50 #endif 51