mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-29 07:42:04 +00:00
Bug 1384839 - Part1. Extract the generation of fallback data from PushItemAsImage into a helper function to reuse it for mask painting. r=kats
MozReview-Commit-ID: FUP6bZyfalQ --HG-- extra : rebase_source : fcea78dc934761c1e6517bd11bd3a9233f4405c6
This commit is contained in:
parent
cbd7e56969
commit
582a02967a
@ -386,11 +386,12 @@ PaintItemByDrawTarget(nsDisplayItem* aItem,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
already_AddRefed<WebRenderFallbackData>
|
||||||
WebRenderLayerManager::PushItemAsImage(nsDisplayItem* aItem,
|
WebRenderLayerManager::GenerateFallbackData(nsDisplayItem* aItem,
|
||||||
wr::DisplayListBuilder& aBuilder,
|
wr::DisplayListBuilder& aBuilder,
|
||||||
const StackingContextHelper& aSc,
|
nsDisplayListBuilder* aDisplayListBuilder,
|
||||||
nsDisplayListBuilder* aDisplayListBuilder)
|
LayerRect& aImageRect,
|
||||||
|
LayerPoint& aOffset)
|
||||||
{
|
{
|
||||||
RefPtr<WebRenderFallbackData> fallbackData = CreateOrRecycleWebRenderUserData<WebRenderFallbackData>(aItem);
|
RefPtr<WebRenderFallbackData> fallbackData = CreateOrRecycleWebRenderUserData<WebRenderFallbackData>(aItem);
|
||||||
|
|
||||||
@ -409,14 +410,13 @@ WebRenderLayerManager::PushItemAsImage(nsDisplayItem* aItem,
|
|||||||
PixelCastJustification::WebRenderHasUnitResolution);
|
PixelCastJustification::WebRenderHasUnitResolution);
|
||||||
|
|
||||||
LayerIntSize imageSize = RoundedToInt(bounds.Size());
|
LayerIntSize imageSize = RoundedToInt(bounds.Size());
|
||||||
LayerRect imageRect;
|
aImageRect = LayerRect(LayerPoint(0, 0), LayerSize(imageSize));
|
||||||
imageRect.SizeTo(LayerSize(imageSize));
|
|
||||||
if (imageSize.width == 0 || imageSize.height == 0) {
|
if (imageSize.width == 0 || imageSize.height == 0) {
|
||||||
return true;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
nsPoint shift = clippedBounds.TopLeft() - itemBounds.TopLeft();
|
nsPoint shift = clippedBounds.TopLeft() - itemBounds.TopLeft();
|
||||||
LayerPoint offset = ViewAs<LayerPixel>(
|
aOffset = ViewAs<LayerPixel>(
|
||||||
LayoutDevicePoint::FromAppUnits(aItem->ToReferenceFrame() + shift, appUnitsPerDevPixel),
|
LayoutDevicePoint::FromAppUnits(aItem->ToReferenceFrame() + shift, appUnitsPerDevPixel),
|
||||||
PixelCastJustification::WebRenderHasUnitResolution);
|
PixelCastJustification::WebRenderHasUnitResolution);
|
||||||
|
|
||||||
@ -448,7 +448,7 @@ WebRenderLayerManager::PushItemAsImage(nsDisplayItem* aItem,
|
|||||||
RefPtr<gfx::DrawTarget> dummyDt =
|
RefPtr<gfx::DrawTarget> dummyDt =
|
||||||
gfx::Factory::CreateDrawTarget(gfx::BackendType::SKIA, gfx::IntSize(1, 1), gfx::SurfaceFormat::B8G8R8X8);
|
gfx::Factory::CreateDrawTarget(gfx::BackendType::SKIA, gfx::IntSize(1, 1), gfx::SurfaceFormat::B8G8R8X8);
|
||||||
RefPtr<gfx::DrawTarget> dt = gfx::Factory::CreateRecordingDrawTarget(recorder, dummyDt, imageSize.ToUnknownSize());
|
RefPtr<gfx::DrawTarget> dt = gfx::Factory::CreateRecordingDrawTarget(recorder, dummyDt, imageSize.ToUnknownSize());
|
||||||
PaintItemByDrawTarget(aItem, dt, imageRect, offset, aDisplayListBuilder);
|
PaintItemByDrawTarget(aItem, dt, aImageRect, aOffset, aDisplayListBuilder);
|
||||||
recorder->Finish();
|
recorder->Finish();
|
||||||
|
|
||||||
wr::ByteBuffer bytes(recorder->mOutputStream.mLength, (uint8_t*)recorder->mOutputStream.mData);
|
wr::ByteBuffer bytes(recorder->mOutputStream.mLength, (uint8_t*)recorder->mOutputStream.mData);
|
||||||
@ -464,10 +464,10 @@ WebRenderLayerManager::PushItemAsImage(nsDisplayItem* aItem,
|
|||||||
UpdateImageHelper helper(imageContainer, imageClient, imageSize.ToUnknownSize());
|
UpdateImageHelper helper(imageContainer, imageClient, imageSize.ToUnknownSize());
|
||||||
{
|
{
|
||||||
RefPtr<gfx::DrawTarget> dt = helper.GetDrawTarget();
|
RefPtr<gfx::DrawTarget> dt = helper.GetDrawTarget();
|
||||||
PaintItemByDrawTarget(aItem, dt, imageRect, offset, aDisplayListBuilder);
|
PaintItemByDrawTarget(aItem, dt, aImageRect, aOffset, aDisplayListBuilder);
|
||||||
}
|
}
|
||||||
if (!helper.UpdateImage()) {
|
if (!helper.UpdateImage()) {
|
||||||
return false;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -475,7 +475,7 @@ WebRenderLayerManager::PushItemAsImage(nsDisplayItem* aItem,
|
|||||||
// If not force update, fallbackData may reuse the original key because it
|
// If not force update, fallbackData may reuse the original key because it
|
||||||
// doesn't know UpdateImageHelper already updated the image container.
|
// doesn't know UpdateImageHelper already updated the image container.
|
||||||
if (!fallbackData->UpdateImageKey(imageContainer, true)) {
|
if (!fallbackData->UpdateImageKey(imageContainer, true)) {
|
||||||
return false;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -489,6 +489,23 @@ WebRenderLayerManager::PushItemAsImage(nsDisplayItem* aItem,
|
|||||||
|
|
||||||
MOZ_ASSERT(fallbackData->GetKey());
|
MOZ_ASSERT(fallbackData->GetKey());
|
||||||
|
|
||||||
|
return fallbackData.forget();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
WebRenderLayerManager::PushItemAsImage(nsDisplayItem* aItem,
|
||||||
|
wr::DisplayListBuilder& aBuilder,
|
||||||
|
const StackingContextHelper& aSc,
|
||||||
|
nsDisplayListBuilder* aDisplayListBuilder)
|
||||||
|
{
|
||||||
|
LayerRect imageRect;
|
||||||
|
LayerPoint offset;
|
||||||
|
RefPtr<WebRenderFallbackData> fallbackData = GenerateFallbackData(aItem, aBuilder, aDisplayListBuilder,
|
||||||
|
imageRect, offset);
|
||||||
|
if (!fallbackData) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
wr::LayoutRect dest = aSc.ToRelativeLayoutRect(imageRect + offset);
|
wr::LayoutRect dest = aSc.ToRelativeLayoutRect(imageRect + offset);
|
||||||
aBuilder.PushImage(dest,
|
aBuilder.PushImage(dest,
|
||||||
dest,
|
dest,
|
||||||
|
@ -70,6 +70,11 @@ public:
|
|||||||
mozilla::wr::DisplayListBuilder& aBuilder,
|
mozilla::wr::DisplayListBuilder& aBuilder,
|
||||||
const StackingContextHelper& aSc,
|
const StackingContextHelper& aSc,
|
||||||
const LayerRect& aRect);
|
const LayerRect& aRect);
|
||||||
|
already_AddRefed<WebRenderFallbackData> GenerateFallbackData(nsDisplayItem* aItem,
|
||||||
|
wr::DisplayListBuilder& aBuilder,
|
||||||
|
nsDisplayListBuilder* aDisplayListBuilder,
|
||||||
|
LayerRect& aImageRect,
|
||||||
|
LayerPoint& aOffset);
|
||||||
bool PushItemAsImage(nsDisplayItem* aItem,
|
bool PushItemAsImage(nsDisplayItem* aItem,
|
||||||
wr::DisplayListBuilder& aBuilder,
|
wr::DisplayListBuilder& aBuilder,
|
||||||
const StackingContextHelper& aSc,
|
const StackingContextHelper& aSc,
|
||||||
|
Loading…
Reference in New Issue
Block a user