Bug 867474 - Split BasicShadowableLayerManager into a separate ClientLayerManager. r=nrc
This commit is contained in:
@@ -59,124 +59,6 @@ BasicContainerLayer::ChildrenPartitionVisibleRegion(const nsIntRect& aInRect)
|
||||
return covered.Contains(rect);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
class BasicShadowableContainerLayer : public BasicContainerLayer,
|
||||
public BasicShadowableLayer {
|
||||
public:
|
||||
BasicShadowableContainerLayer(BasicShadowLayerManager* aManager) :
|
||||
BasicContainerLayer(aManager)
|
||||
{
|
||||
MOZ_COUNT_CTOR(BasicShadowableContainerLayer);
|
||||
}
|
||||
virtual ~BasicShadowableContainerLayer()
|
||||
{
|
||||
MOZ_COUNT_DTOR(BasicShadowableContainerLayer);
|
||||
}
|
||||
|
||||
virtual void InsertAfter(Layer* aChild, Layer* aAfter);
|
||||
virtual void RemoveChild(Layer* aChild);
|
||||
virtual void RepositionChild(Layer* aChild, Layer* aAfter);
|
||||
|
||||
virtual Layer* AsLayer() { return this; }
|
||||
virtual ShadowableLayer* AsShadowableLayer() { return this; }
|
||||
|
||||
virtual void Disconnect()
|
||||
{
|
||||
BasicShadowableLayer::Disconnect();
|
||||
}
|
||||
|
||||
virtual void ComputeEffectiveTransforms(const gfx3DMatrix& aTransformToSurface) MOZ_OVERRIDE
|
||||
{
|
||||
if (HasShadow()) {
|
||||
DefaultComputeEffectiveTransforms(aTransformToSurface);
|
||||
} else {
|
||||
BasicContainerLayer::ComputeEffectiveTransforms(aTransformToSurface);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
BasicShadowLayerManager* ShadowManager()
|
||||
{
|
||||
return static_cast<BasicShadowLayerManager*>(mManager);
|
||||
}
|
||||
};
|
||||
|
||||
void
|
||||
BasicShadowableContainerLayer::InsertAfter(Layer* aChild, Layer* aAfter)
|
||||
{
|
||||
if (HasShadow() && ShouldShadow(aChild)) {
|
||||
while (aAfter && !ShouldShadow(aAfter)) {
|
||||
aAfter = aAfter->GetPrevSibling();
|
||||
}
|
||||
ShadowManager()->InsertAfter(ShadowManager()->Hold(this),
|
||||
ShadowManager()->Hold(aChild),
|
||||
aAfter ? ShadowManager()->Hold(aAfter) : nullptr);
|
||||
}
|
||||
BasicContainerLayer::InsertAfter(aChild, aAfter);
|
||||
}
|
||||
|
||||
void
|
||||
BasicShadowableContainerLayer::RemoveChild(Layer* aChild)
|
||||
{
|
||||
if (HasShadow() && ShouldShadow(aChild)) {
|
||||
ShadowManager()->RemoveChild(ShadowManager()->Hold(this),
|
||||
ShadowManager()->Hold(aChild));
|
||||
}
|
||||
BasicContainerLayer::RemoveChild(aChild);
|
||||
}
|
||||
|
||||
void
|
||||
BasicShadowableContainerLayer::RepositionChild(Layer* aChild, Layer* aAfter)
|
||||
{
|
||||
if (HasShadow() && ShouldShadow(aChild)) {
|
||||
while (aAfter && !ShouldShadow(aAfter)) {
|
||||
aAfter = aAfter->GetPrevSibling();
|
||||
}
|
||||
ShadowManager()->RepositionChild(ShadowManager()->Hold(this),
|
||||
ShadowManager()->Hold(aChild),
|
||||
aAfter ? ShadowManager()->Hold(aAfter) : nullptr);
|
||||
}
|
||||
BasicContainerLayer::RepositionChild(aChild, aAfter);
|
||||
}
|
||||
|
||||
class BasicShadowableRefLayer : public RefLayer, public BasicImplData,
|
||||
public BasicShadowableLayer {
|
||||
template<class Container>
|
||||
friend void ContainerComputeEffectiveTransforms(const gfx3DMatrix& aTransformToSurface,
|
||||
Container* aContainer);
|
||||
public:
|
||||
BasicShadowableRefLayer(BasicShadowLayerManager* aManager) :
|
||||
RefLayer(aManager, static_cast<BasicImplData*>(this))
|
||||
{
|
||||
MOZ_COUNT_CTOR(BasicShadowableRefLayer);
|
||||
}
|
||||
virtual ~BasicShadowableRefLayer()
|
||||
{
|
||||
MOZ_COUNT_DTOR(BasicShadowableRefLayer);
|
||||
}
|
||||
|
||||
virtual Layer* AsLayer() { return this; }
|
||||
virtual ShadowableLayer* AsShadowableLayer() { return this; }
|
||||
|
||||
virtual void Disconnect()
|
||||
{
|
||||
BasicShadowableLayer::Disconnect();
|
||||
}
|
||||
|
||||
virtual void ComputeEffectiveTransforms(const gfx3DMatrix& aTransformToSurface)
|
||||
{
|
||||
ContainerComputeEffectiveTransforms(aTransformToSurface, this);
|
||||
}
|
||||
|
||||
private:
|
||||
BasicShadowLayerManager* ShadowManager()
|
||||
{
|
||||
return static_cast<BasicShadowLayerManager*>(mManager);
|
||||
}
|
||||
};
|
||||
|
||||
already_AddRefed<ContainerLayer>
|
||||
BasicLayerManager::CreateContainerLayer()
|
||||
{
|
||||
@@ -185,26 +67,5 @@ BasicLayerManager::CreateContainerLayer()
|
||||
return layer.forget();
|
||||
}
|
||||
|
||||
already_AddRefed<ContainerLayer>
|
||||
BasicShadowLayerManager::CreateContainerLayer()
|
||||
{
|
||||
NS_ASSERTION(InConstruction(), "Only allowed in construction phase");
|
||||
nsRefPtr<BasicShadowableContainerLayer> layer =
|
||||
new BasicShadowableContainerLayer(this);
|
||||
MAYBE_CREATE_SHADOW(Container);
|
||||
return layer.forget();
|
||||
}
|
||||
|
||||
already_AddRefed<RefLayer>
|
||||
BasicShadowLayerManager::CreateRefLayer()
|
||||
{
|
||||
NS_ASSERTION(InConstruction(), "Only allowed in construction phase");
|
||||
nsRefPtr<BasicShadowableRefLayer> layer =
|
||||
new BasicShadowableRefLayer(this);
|
||||
MAYBE_CREATE_SHADOW(Ref);
|
||||
return layer.forget();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user