michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- michael@0: * This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #ifndef GFX_CLIENTCANVASLAYER_H michael@0: #define GFX_CLIENTCANVASLAYER_H michael@0: michael@0: #include "mozilla/layers/CanvasClient.h" // for CanvasClient, etc michael@0: #include "ClientLayerManager.h" // for ClientLayerManager, etc michael@0: #include "CopyableCanvasLayer.h" // for CopyableCanvasLayer michael@0: #include "Layers.h" // for CanvasLayer, etc michael@0: #include "mozilla/Attributes.h" // for MOZ_OVERRIDE michael@0: #include "mozilla/RefPtr.h" // for RefPtr michael@0: #include "mozilla/layers/LayersMessages.h" // for CanvasLayerAttributes, etc michael@0: #include "mozilla/mozalloc.h" // for operator delete michael@0: #include "nsAutoPtr.h" // for nsRefPtr michael@0: #include "nsDebug.h" // for NS_ASSERTION michael@0: #include "nsISupportsImpl.h" // for MOZ_COUNT_CTOR, etc michael@0: #include "nsRegion.h" // for nsIntRegion michael@0: michael@0: namespace mozilla { michael@0: namespace layers { michael@0: michael@0: class CompositableClient; michael@0: class ShadowableLayer; michael@0: michael@0: class ClientCanvasLayer : public CopyableCanvasLayer, michael@0: public ClientLayer michael@0: { michael@0: typedef CanvasClient::CanvasClientType CanvasClientType; michael@0: public: michael@0: ClientCanvasLayer(ClientLayerManager* aLayerManager) : michael@0: CopyableCanvasLayer(aLayerManager, michael@0: static_cast(MOZ_THIS_IN_INITIALIZER_LIST())) michael@0: , mTextureSurface(nullptr) michael@0: , mFactory(nullptr) michael@0: { michael@0: MOZ_COUNT_CTOR(ClientCanvasLayer); michael@0: } michael@0: virtual ~ClientCanvasLayer(); michael@0: michael@0: virtual void SetVisibleRegion(const nsIntRegion& aRegion) michael@0: { michael@0: NS_ASSERTION(ClientManager()->InConstruction(), michael@0: "Can only set properties in construction phase"); michael@0: CanvasLayer::SetVisibleRegion(aRegion); michael@0: } michael@0: michael@0: virtual void Initialize(const Data& aData); michael@0: michael@0: virtual void RenderLayer(); michael@0: michael@0: virtual void ClearCachedResources() michael@0: { michael@0: if (mCanvasClient) { michael@0: mCanvasClient->Clear(); michael@0: } michael@0: } michael@0: michael@0: virtual void FillSpecificAttributes(SpecificLayerAttributes& aAttrs) michael@0: { michael@0: aAttrs = CanvasLayerAttributes(mFilter, mBounds); michael@0: } michael@0: michael@0: virtual Layer* AsLayer() { return this; } michael@0: virtual ShadowableLayer* AsShadowableLayer() { return this; } michael@0: michael@0: virtual void Disconnect() michael@0: { michael@0: mCanvasClient = nullptr; michael@0: ClientLayer::Disconnect(); michael@0: } michael@0: michael@0: virtual CompositableClient* GetCompositableClient() MOZ_OVERRIDE michael@0: { michael@0: return mCanvasClient; michael@0: } michael@0: protected: michael@0: ClientLayerManager* ClientManager() michael@0: { michael@0: return static_cast(mManager); michael@0: } michael@0: michael@0: CanvasClientType GetCanvasClientType() michael@0: { michael@0: if (mGLContext) { michael@0: return CanvasClient::CanvasClientGLContext; michael@0: } michael@0: return CanvasClient::CanvasClientSurface; michael@0: } michael@0: michael@0: RefPtr mCanvasClient; michael@0: michael@0: gfx::SharedSurface* mTextureSurface; michael@0: gfx::SurfaceFactory* mFactory; michael@0: michael@0: friend class DeprecatedCanvasClient2D; michael@0: friend class CanvasClient2D; michael@0: friend class DeprecatedCanvasClientSurfaceStream; michael@0: friend class CanvasClientSurfaceStream; michael@0: }; michael@0: } michael@0: } michael@0: michael@0: #endif