Bug 1331538 - Add BorderLayerProperties for border layer. r=mattwoodrow

--HG--
extra : rebase_source : e6d182eaa1c0f2c687853309fca5c967a86a7805
This commit is contained in:
Ethan Lin 2017-01-18 21:48:00 +08:00
Родитель eb9554ad2c
Коммит abf0951bfa
2 изменённых файлов: 53 добавлений и 1 удалений

Просмотреть файл

@ -510,6 +510,52 @@ public:
IntRect mBounds;
};
struct BorderLayerProperties : public LayerPropertiesBase
{
explicit BorderLayerProperties(BorderLayer *aLayer)
: LayerPropertiesBase(aLayer)
, mColors(aLayer->GetColors())
, mRect(aLayer->GetRect())
, mCorners(aLayer->GetCorners())
, mWidths(aLayer->GetWidths())
{ }
protected:
BorderLayerProperties(const BorderLayerProperties& a) = delete;
BorderLayerProperties& operator=(const BorderLayerProperties& a) = delete;
public:
nsIntRegion ComputeChangeInternal(const char* aPrefix,
NotifySubDocInvalidationFunc aCallback,
bool& aGeometryChanged) override
{
BorderLayer* border = static_cast<BorderLayer*>(mLayer.get());
if (!border->GetLocalVisibleRegion().ToUnknownRegion().IsEqual(mVisibleRegion)) {
aGeometryChanged = true;
IntRect result = NewTransformedBounds();
result = result.Union(OldTransformedBounds());
return result;
}
if (!PodEqual(&mColors[0], &border->GetColors()[0], 4) ||
!PodEqual(&mWidths[0], &border->GetWidths()[0], 4) ||
!PodEqual(&mCorners[0], &border->GetCorners()[0], 4) ||
!mRect.IsEqualEdges(border->GetRect())) {
aGeometryChanged = true;
LTI_DUMP(NewTransformedBounds(), "bounds");
return NewTransformedBounds();
}
return nsIntRegion();
}
BorderColors mColors;
LayerRect mRect;
BorderCorners mCorners;
BorderWidths mWidths;
};
static ImageHost* GetImageHost(Layer* aLayer)
{
HostLayer* compositor = aLayer->AsHostLayer();
@ -644,11 +690,12 @@ CloneLayerTreePropertiesInternal(Layer* aRoot, bool aIsMask /* = false */)
return MakeUnique<ImageLayerProperties>(static_cast<ImageLayer*>(aRoot), aIsMask);
case Layer::TYPE_CANVAS:
return MakeUnique<CanvasLayerProperties>(static_cast<CanvasLayer*>(aRoot));
case Layer::TYPE_BORDER:
return MakeUnique<BorderLayerProperties>(static_cast<BorderLayer*>(aRoot));
case Layer::TYPE_READBACK:
case Layer::TYPE_SHADOW:
case Layer::TYPE_PAINTED:
case Layer::TYPE_TEXT:
case Layer::TYPE_BORDER:
return MakeUnique<LayerPropertiesBase>(aRoot);
}

Просмотреть файл

@ -2510,6 +2510,11 @@ public:
ComputeEffectiveTransformForMaskLayers(aTransformToSurface);
}
const BorderColors& GetColors() { return mColors; }
const LayerRect& GetRect() { return mRect; }
const BorderCorners& GetCorners() { return mCorners; }
const BorderWidths& GetWidths() { return mWidths; }
protected:
BorderLayer(LayerManager* aManager, void* aImplData)
: Layer(aManager, aImplData)