Bug 1458870 - Changes necessary to deal with new WebRender nine-patch API from PR 2724. r?jrmuizel
MozReview-Commit-ID: 9217FeM4VJH
--- a/gfx/webrender_bindings/WebRenderAPI.cpp
+++ b/gfx/webrender_bindings/WebRenderAPI.cpp
@@ -1115,23 +1115,25 @@ DisplayListBuilder::PushBorder(const wr:
}
void
DisplayListBuilder::PushBorderImage(const wr::LayoutRect& aBounds,
const wr::LayoutRect& aClip,
bool aIsBackfaceVisible,
const wr::BorderWidths& aWidths,
wr::ImageKey aImage,
- const wr::NinePatchDescriptor& aPatch,
+ const uint32_t aWidth,
+ const uint32_t aHeight,
+ const wr::SideOffsets2D<uint32_t>& aSlice,
const wr::SideOffsets2D<float>& aOutset,
const wr::RepeatMode& aRepeatHorizontal,
const wr::RepeatMode& aRepeatVertical)
{
wr_dp_push_border_image(mWrState, aBounds, aClip, aIsBackfaceVisible,
- aWidths, aImage, aPatch, aOutset,
+ aWidths, aImage, aWidth, aHeight, aSlice, aOutset,
aRepeatHorizontal, aRepeatVertical);
}
void
DisplayListBuilder::PushBorderGradient(const wr::LayoutRect& aBounds,
const wr::LayoutRect& aClip,
bool aIsBackfaceVisible,
const wr::BorderWidths& aWidths,
--- a/gfx/webrender_bindings/WebRenderAPI.h
+++ b/gfx/webrender_bindings/WebRenderAPI.h
@@ -401,17 +401,19 @@ public:
const Range<const wr::BorderSide>& aSides,
const wr::BorderRadius& aRadius);
void PushBorderImage(const wr::LayoutRect& aBounds,
const wr::LayoutRect& aClip,
bool aIsBackfaceVisible,
const wr::BorderWidths& aWidths,
wr::ImageKey aImage,
- const wr::NinePatchDescriptor& aPatch,
+ const uint32_t aWidth,
+ const uint32_t aHeight,
+ const wr::SideOffsets2D<uint32_t>& aSlice,
const wr::SideOffsets2D<float>& aOutset,
const wr::RepeatMode& aRepeatHorizontal,
const wr::RepeatMode& aRepeatVertical);
void PushBorderGradient(const wr::LayoutRect& aBounds,
const wr::LayoutRect& aClip,
bool aIsBackfaceVisible,
const wr::BorderWidths& aWidths,
--- a/gfx/webrender_bindings/WebRenderTypes.h
+++ b/gfx/webrender_bindings/WebRenderTypes.h
@@ -456,26 +456,16 @@ static inline wr::BorderWidths ToBorderW
wr::BorderWidths bw;
bw.top = top;
bw.right = right;
bw.bottom = bottom;
bw.left = left;
return bw;
}
-static inline wr::NinePatchDescriptor ToNinePatchDescriptor(uint32_t width, uint32_t height,
- const wr::SideOffsets2D<uint32_t>& slice)
-{
- NinePatchDescriptor patch;
- patch.width = width;
- patch.height = height;
- patch.slice = slice;
- return patch;
-}
-
static inline wr::SideOffsets2D<uint32_t> ToSideOffsets2D_u32(uint32_t top, uint32_t right, uint32_t bottom, uint32_t left)
{
SideOffsets2D<uint32_t> offset;
offset.top = top;
offset.right = right;
offset.bottom = bottom;
offset.left = left;
return offset;
--- a/gfx/webrender_bindings/src/bindings.rs
+++ b/gfx/webrender_bindings/src/bindings.rs
@@ -2063,30 +2063,33 @@ pub extern "C" fn wr_dp_push_border(stat
#[no_mangle]
pub extern "C" fn wr_dp_push_border_image(state: &mut WrState,
rect: LayoutRect,
clip: LayoutRect,
is_backface_visible: bool,
widths: BorderWidths,
image: WrImageKey,
- patch: NinePatchDescriptor,
+ width: u32,
+ height: u32,
+ slice: SideOffsets2D<u32>,
outset: SideOffsets2D<f32>,
repeat_horizontal: RepeatMode,
repeat_vertical: RepeatMode) {
debug_assert!(unsafe { is_in_main_thread() });
- let border_details =
- BorderDetails::Image(ImageBorder {
- image_key: image,
- patch: patch.into(),
- fill: false,
- outset: outset.into(),
- repeat_horizontal: repeat_horizontal.into(),
- repeat_vertical: repeat_vertical.into(),
- });
+ let border_details = BorderDetails::NinePatch(NinePatchBorder {
+ source: NinePatchBorderSource::Image(image),
+ width,
+ height,
+ slice,
+ fill: false,
+ outset: outset.into(),
+ repeat_horizontal: repeat_horizontal.into(),
+ repeat_vertical: repeat_vertical.into(),
+ });
let mut prim_info = LayoutPrimitiveInfo::with_clip_rect(rect, clip.into());
prim_info.is_backface_visible = is_backface_visible;
prim_info.tag = state.current_tag;
state.frame_builder
.dl_builder
.push_border(&prim_info,
widths.into(),
border_details);
--- a/gfx/webrender_bindings/webrender_ffi_generated.h
+++ b/gfx/webrender_bindings/webrender_ffi_generated.h
@@ -607,28 +607,16 @@ struct TypedSideOffsets2D {
left == aOther.left;
}
};
// The default side offset type with no unit.
template<typename T>
using SideOffsets2D = TypedSideOffsets2D<T, UnknownUnit>;
-struct NinePatchDescriptor {
- uint32_t width;
- uint32_t height;
- SideOffsets2D<uint32_t> slice;
-
- bool operator==(const NinePatchDescriptor& aOther) const {
- return width == aOther.width &&
- height == aOther.height &&
- slice == aOther.slice;
- }
-};
-
struct Shadow {
LayoutVector2D offset;
ColorF color;
float blur_radius;
bool operator==(const Shadow& aOther) const {
return offset == aOther.offset &&
color == aOther.color &&
@@ -1193,17 +1181,19 @@ WR_FUNC;
WR_INLINE
void wr_dp_push_border_image(WrState *aState,
LayoutRect aRect,
LayoutRect aClip,
bool aIsBackfaceVisible,
BorderWidths aWidths,
WrImageKey aImage,
- NinePatchDescriptor aPatch,
+ uint32_t aWidth,
+ uint32_t aHeight,
+ SideOffsets2D<uint32_t> aSlice,
SideOffsets2D<float> aOutset,
RepeatMode aRepeatHorizontal,
RepeatMode aRepeatVertical)
WR_FUNC;
WR_INLINE
void wr_dp_push_border_radial_gradient(WrState *aState,
LayoutRect aRect,
--- a/layout/painting/nsCSSRenderingBorders.cpp
+++ b/layout/painting/nsCSSRenderingBorders.cpp
@@ -3736,20 +3736,19 @@ nsCSSBorderImageRenderer::CreateWebRende
return;
}
aBuilder.PushBorderImage(dest,
clip,
!aItem->BackfaceIsHidden(),
wr::ToBorderWidths(widths[0], widths[1], widths[2], widths[3]),
key.value(),
- wr::ToNinePatchDescriptor(
- (float)(mImageSize.width) / appUnitsPerDevPixel,
- (float)(mImageSize.height) / appUnitsPerDevPixel,
- wr::ToSideOffsets2D_u32(slice[0], slice[1], slice[2], slice[3])),
+ (float)(mImageSize.width) / appUnitsPerDevPixel,
+ (float)(mImageSize.height) / appUnitsPerDevPixel,
+ wr::ToSideOffsets2D_u32(slice[0], slice[1], slice[2], slice[3]),
wr::ToSideOffsets2D_f32(outset[0], outset[1], outset[2], outset[3]),
wr::ToRepeatMode(mRepeatModeHorizontal),
wr::ToRepeatMode(mRepeatModeVertical));
break;
}
case eStyleImageType_Gradient:
{
RefPtr<nsStyleGradient> gradientData = mImageRenderer.GetGradientData();
--- a/layout/painting/nsDisplayList.cpp
+++ b/layout/painting/nsDisplayList.cpp
@@ -5601,20 +5601,19 @@ nsDisplayBorder::CreateBorderImageWebRen
return;
}
aBuilder.PushBorderImage(dest,
clip,
!BackfaceIsHidden(),
wr::ToBorderWidths(widths[0], widths[1], widths[2], widths[3]),
key.value(),
- wr::ToNinePatchDescriptor(
- (float)(mBorderImageRenderer->mImageSize.width) / appUnitsPerDevPixel,
- (float)(mBorderImageRenderer->mImageSize.height) / appUnitsPerDevPixel,
- wr::ToSideOffsets2D_u32(slice[0], slice[1], slice[2], slice[3])),
+ (float)(mBorderImageRenderer->mImageSize.width) / appUnitsPerDevPixel,
+ (float)(mBorderImageRenderer->mImageSize.height) / appUnitsPerDevPixel,
+ wr::ToSideOffsets2D_u32(slice[0], slice[1], slice[2], slice[3]),
wr::ToSideOffsets2D_f32(outset[0], outset[1], outset[2], outset[3]),
wr::ToRepeatMode(mBorderImageRenderer->mRepeatModeHorizontal),
wr::ToRepeatMode(mBorderImageRenderer->mRepeatModeVertical));
break;
}
case eStyleImageType_Gradient:
{
RefPtr<nsStyleGradient> gradientData = mBorderImageRenderer->mImageRenderer.GetGradientData();