Bug 1376855 - Support image mode of nsDisplayBorder in layers free mode. r=kats

MozReview-Commit-ID: 8FgUKpeCbka

--HG--
extra : rebase_source : 66b66d26c9b22cc0a9b11f57e9a743f07d8e6b42
This commit is contained in:
Morris Tseng 2017-06-28 13:57:00 -07:00
Родитель b01c8dcc1a
Коммит c5b2766eac
2 изменённых файлов: 10 добавлений и 8 удалений

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

@ -4962,8 +4962,8 @@ nsDisplayBorder::CreateWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuild
} }
if (mBorderImageRenderer) { if (mBorderImageRenderer) {
// TODO: support image type display items. CreateBorderImageWebRenderCommands(aBuilder, aSc, aParentCommands,
//CreateBorderImageWebRenderCommands(aBuilder, aSc, aParentCommands, aLayer); aManager, aDisplayListBuilder);
} else if (mBorderRenderer) { } else if (mBorderRenderer) {
mBorderRenderer->CreateWebRenderCommands(aBuilder, aSc); mBorderRenderer->CreateWebRenderCommands(aBuilder, aSc);
} }
@ -4975,7 +4975,8 @@ void
nsDisplayBorder::CreateBorderImageWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuilder, nsDisplayBorder::CreateBorderImageWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuilder,
const StackingContextHelper& aSc, const StackingContextHelper& aSc,
nsTArray<WebRenderParentCommand>& aParentCommands, nsTArray<WebRenderParentCommand>& aParentCommands,
WebRenderDisplayItemLayer* aLayer) mozilla::layers::WebRenderLayerManager* aManager,
nsDisplayListBuilder* aDisplayListBuilder)
{ {
MOZ_ASSERT(mBorderImageRenderer); MOZ_ASSERT(mBorderImageRenderer);
if (!mBorderImageRenderer->mImageRenderer.IsReady()) { if (!mBorderImageRenderer->mImageRenderer.IsReady()) {
@ -5006,18 +5007,18 @@ nsDisplayBorder::CreateBorderImageWebRenderCommands(mozilla::wr::DisplayListBuil
switch (mBorderImageRenderer->mImageRenderer.GetType()) { switch (mBorderImageRenderer->mImageRenderer.GetType()) {
case eStyleImageType_Image: case eStyleImageType_Image:
{ {
nsDisplayListBuilder* builder = aLayer->GetDisplayListBuilder(); uint32_t flags = aDisplayListBuilder->ShouldSyncDecodeImages() ?
uint32_t flags = builder->ShouldSyncDecodeImages() ?
imgIContainer::FLAG_SYNC_DECODE : imgIContainer::FLAG_SYNC_DECODE :
imgIContainer::FLAG_NONE; imgIContainer::FLAG_NONE;
RefPtr<imgIContainer> img = mBorderImageRenderer->mImageRenderer.GetImage(); RefPtr<imgIContainer> img = mBorderImageRenderer->mImageRenderer.GetImage();
RefPtr<layers::ImageContainer> container = img->GetImageContainer(aLayer->WrManager(), flags); RefPtr<layers::ImageContainer> container = img->GetImageContainer(aManager, flags);
if (!container) { if (!container) {
return; return;
} }
Maybe<wr::ImageKey> key = aLayer->SendImageContainer(container, aParentCommands); gfx::IntSize size;
Maybe<wr::ImageKey> key = aManager->CreateImageKey(this, container, aBuilder, aSc, size);
if (key.isNothing()) { if (key.isNothing()) {
return; return;
} }

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

@ -2907,7 +2907,8 @@ protected:
void CreateBorderImageWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuilder, void CreateBorderImageWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuilder,
const StackingContextHelper& aSc, const StackingContextHelper& aSc,
nsTArray<WebRenderParentCommand>& aParentCommands, nsTArray<WebRenderParentCommand>& aParentCommands,
WebRenderDisplayItemLayer* aLayer); mozilla::layers::WebRenderLayerManager* aManager,
nsDisplayListBuilder* aDisplayListBuilder);
nsRegion CalculateBounds(const nsStyleBorder& aStyleBorder); nsRegion CalculateBounds(const nsStyleBorder& aStyleBorder);
mozilla::Array<mozilla::gfx::Color, 4> mColors; mozilla::Array<mozilla::gfx::Color, 4> mColors;