зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1091787, part 1 - Port the nsCSSRenderingBorders code that uses gfxContext::RoundedRectangle and gfxRGBA to Moz2D. r=mattwoodrow
This commit is contained in:
Родитель
856fd44c65
Коммит
5078f71c32
|
@ -60,21 +60,21 @@ static void ComputeBorderCornerDimensions(const Rect& aOuterRect,
|
||||||
|
|
||||||
// from the given base color and the background color, turn
|
// from the given base color and the background color, turn
|
||||||
// color into a color for the given border pattern style
|
// color into a color for the given border pattern style
|
||||||
static gfxRGBA MakeBorderColor(const gfxRGBA& aColor,
|
static Color MakeBorderColor(nscolor aColor,
|
||||||
const gfxRGBA& aBackgroundColor,
|
nscolor aBackgroundColor,
|
||||||
BorderColorStyle aBorderColorStyle);
|
BorderColorStyle aBorderColorStyle);
|
||||||
|
|
||||||
|
|
||||||
// Given a line index (an index starting from the outside of the
|
// Given a line index (an index starting from the outside of the
|
||||||
// border going inwards) and an array of line styles, calculate the
|
// border going inwards) and an array of line styles, calculate the
|
||||||
// color that that stripe of the border should be rendered in.
|
// color that that stripe of the border should be rendered in.
|
||||||
static gfxRGBA ComputeColorForLine(uint32_t aLineIndex,
|
static Color ComputeColorForLine(uint32_t aLineIndex,
|
||||||
const BorderColorStyle* aBorderColorStyle,
|
const BorderColorStyle* aBorderColorStyle,
|
||||||
uint32_t aBorderColorStyleCount,
|
uint32_t aBorderColorStyleCount,
|
||||||
nscolor aBorderColor,
|
nscolor aBorderColor,
|
||||||
nscolor aBackgroundColor);
|
nscolor aBackgroundColor);
|
||||||
|
|
||||||
static gfxRGBA ComputeCompositeColorForLine(uint32_t aLineIndex,
|
static Color ComputeCompositeColorForLine(uint32_t aLineIndex,
|
||||||
const nsBorderColors* aBorderColors);
|
const nsBorderColors* aBorderColors);
|
||||||
|
|
||||||
// little helper function to check if the array of 4 floats given are
|
// little helper function to check if the array of 4 floats given are
|
||||||
|
@ -521,33 +521,36 @@ nsCSSBorderRenderer::DoSideClipSubPath(mozilla::css::Side aSide)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
nsCSSBorderRenderer::FillSolidBorder(const gfxRect& aOuterRect,
|
nsCSSBorderRenderer::FillSolidBorder(const Rect& aOuterRect,
|
||||||
const gfxRect& aInnerRect,
|
const Rect& aInnerRect,
|
||||||
const RectCornerRadii& aBorderRadii,
|
const RectCornerRadii& aBorderRadii,
|
||||||
const Float* aBorderSizes,
|
const Float* aBorderSizes,
|
||||||
int aSides,
|
int aSides,
|
||||||
const gfxRGBA& aColor)
|
const ColorPattern& aColor)
|
||||||
{
|
{
|
||||||
mContext->SetColor(aColor);
|
DrawTarget* drawTarget = mContext->GetDrawTarget();
|
||||||
|
|
||||||
// Note that this function is allowed to draw more than just the
|
// Note that this function is allowed to draw more than just the
|
||||||
// requested sides.
|
// requested sides.
|
||||||
|
|
||||||
// If we have a border radius, do full rounded rectangles
|
// If we have a border radius, do full rounded rectangles
|
||||||
// and fill, regardless of what sides we're asked to draw.
|
// and fill, regardless of what sides we're asked to draw.
|
||||||
if (!AllCornersZeroSize(aBorderRadii)) {
|
if (!AllCornersZeroSize(aBorderRadii)) {
|
||||||
|
RefPtr<PathBuilder> builder =
|
||||||
|
drawTarget->CreatePathBuilder(FillRule::FILL_EVEN_ODD);
|
||||||
|
|
||||||
RectCornerRadii innerRadii;
|
RectCornerRadii innerRadii;
|
||||||
ComputeInnerRadii(aBorderRadii, aBorderSizes, &innerRadii);
|
ComputeInnerRadii(aBorderRadii, aBorderSizes, &innerRadii);
|
||||||
|
|
||||||
mContext->NewPath();
|
|
||||||
|
|
||||||
// do the outer border
|
// do the outer border
|
||||||
mContext->RoundedRectangle(aOuterRect, aBorderRadii, true);
|
AppendRoundedRectToPath(builder, aOuterRect, aBorderRadii, true);
|
||||||
|
|
||||||
// then do the inner border CCW
|
// then do the inner border CCW
|
||||||
mContext->RoundedRectangle(aInnerRect, innerRadii, false);
|
AppendRoundedRectToPath(builder, aInnerRect, innerRadii, false);
|
||||||
|
|
||||||
mContext->Fill();
|
RefPtr<Path> path = builder->Finish();
|
||||||
|
|
||||||
|
drawTarget->Fill(path, aColor);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -560,14 +563,10 @@ nsCSSBorderRenderer::FillSolidBorder(const gfxRect& aOuterRect,
|
||||||
CheckFourFloatsEqual(aBorderSizes, aBorderSizes[0]) &&
|
CheckFourFloatsEqual(aBorderSizes, aBorderSizes[0]) &&
|
||||||
!mAvoidStroke)
|
!mAvoidStroke)
|
||||||
{
|
{
|
||||||
gfxRect r(aOuterRect);
|
Float strokeWidth = aBorderSizes[0];
|
||||||
r.Deflate(aBorderSizes[0] / 2.0);
|
Rect r(aOuterRect);
|
||||||
mContext->SetLineWidth(aBorderSizes[0]);
|
r.Deflate(strokeWidth / 2.f);
|
||||||
|
drawTarget->StrokeRect(r, aColor, StrokeOptions(strokeWidth));
|
||||||
mContext->NewPath();
|
|
||||||
mContext->Rectangle(r);
|
|
||||||
mContext->Stroke();
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -632,37 +631,37 @@ nsCSSBorderRenderer::FillSolidBorder(const gfxRect& aOuterRect,
|
||||||
// Filling these one by one is faster than filling them all at once.
|
// Filling these one by one is faster than filling them all at once.
|
||||||
for (uint32_t i = 0; i < 4; i++) {
|
for (uint32_t i = 0; i < 4; i++) {
|
||||||
if (aSides & (1 << i)) {
|
if (aSides & (1 << i)) {
|
||||||
mContext->NewPath();
|
MaybeSnapToDevicePixels(r[i], *drawTarget, true);
|
||||||
mContext->Rectangle(ThebesRect(r[i]), true);
|
drawTarget->FillRect(r[i], aColor);
|
||||||
mContext->Fill();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gfxRGBA
|
Color
|
||||||
MakeBorderColor(const gfxRGBA& aColor, const gfxRGBA& aBackgroundColor, BorderColorStyle aBorderColorStyle)
|
MakeBorderColor(nscolor aColor, nscolor aBackgroundColor,
|
||||||
|
BorderColorStyle aBorderColorStyle)
|
||||||
{
|
{
|
||||||
nscolor colors[2];
|
nscolor colors[2];
|
||||||
int k = 0;
|
int k = 0;
|
||||||
|
|
||||||
switch (aBorderColorStyle) {
|
switch (aBorderColorStyle) {
|
||||||
case BorderColorStyleNone:
|
case BorderColorStyleNone:
|
||||||
return gfxRGBA(0.0, 0.0, 0.0, 0.0);
|
return Color(0.f, 0.f, 0.f, 0.f); // transparent black
|
||||||
|
|
||||||
case BorderColorStyleLight:
|
case BorderColorStyleLight:
|
||||||
k = 1;
|
k = 1;
|
||||||
/* fall through */
|
/* fall through */
|
||||||
case BorderColorStyleDark:
|
case BorderColorStyleDark:
|
||||||
NS_GetSpecial3DColors(colors, aBackgroundColor.Packed(), aColor.Packed());
|
NS_GetSpecial3DColors(colors, aBackgroundColor, aColor);
|
||||||
return gfxRGBA(colors[k]);
|
return Color::FromABGR(colors[k]);
|
||||||
|
|
||||||
case BorderColorStyleSolid:
|
case BorderColorStyleSolid:
|
||||||
default:
|
default:
|
||||||
return aColor;
|
return Color::FromABGR(aColor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gfxRGBA
|
Color
|
||||||
ComputeColorForLine(uint32_t aLineIndex,
|
ComputeColorForLine(uint32_t aLineIndex,
|
||||||
const BorderColorStyle* aBorderColorStyle,
|
const BorderColorStyle* aBorderColorStyle,
|
||||||
uint32_t aBorderColorStyleCount,
|
uint32_t aBorderColorStyleCount,
|
||||||
|
@ -671,17 +670,18 @@ ComputeColorForLine(uint32_t aLineIndex,
|
||||||
{
|
{
|
||||||
NS_ASSERTION(aLineIndex < aBorderColorStyleCount, "Invalid lineIndex given");
|
NS_ASSERTION(aLineIndex < aBorderColorStyleCount, "Invalid lineIndex given");
|
||||||
|
|
||||||
return MakeBorderColor(gfxRGBA(aBorderColor), gfxRGBA(aBackgroundColor), aBorderColorStyle[aLineIndex]);
|
return MakeBorderColor(aBorderColor, aBackgroundColor,
|
||||||
|
aBorderColorStyle[aLineIndex]);
|
||||||
}
|
}
|
||||||
|
|
||||||
gfxRGBA
|
Color
|
||||||
ComputeCompositeColorForLine(uint32_t aLineIndex,
|
ComputeCompositeColorForLine(uint32_t aLineIndex,
|
||||||
const nsBorderColors* aBorderColors)
|
const nsBorderColors* aBorderColors)
|
||||||
{
|
{
|
||||||
while (aLineIndex-- && aBorderColors->mNext)
|
while (aLineIndex-- && aBorderColors->mNext)
|
||||||
aBorderColors = aBorderColors->mNext;
|
aBorderColors = aBorderColors->mNext;
|
||||||
|
|
||||||
return gfxRGBA(aBorderColors->mColor);
|
return Color::FromABGR(aBorderColors->mColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -702,7 +702,8 @@ nsCSSBorderRenderer::DrawBorderSidesCompositeColors(int aSides, const nsBorderCo
|
||||||
Point ibr = ToPoint(mInnerRect.BottomRight());
|
Point ibr = ToPoint(mInnerRect.BottomRight());
|
||||||
|
|
||||||
for (uint32_t i = 0; i < uint32_t(maxBorderWidth); i++) {
|
for (uint32_t i = 0; i < uint32_t(maxBorderWidth); i++) {
|
||||||
gfxRGBA lineColor = ComputeCompositeColorForLine(i, aCompositeColors);
|
ColorPattern color(ToDeviceColor(
|
||||||
|
ComputeCompositeColorForLine(i, aCompositeColors)));
|
||||||
|
|
||||||
Rect siRect = soRect;
|
Rect siRect = soRect;
|
||||||
siRect.Deflate(1.0);
|
siRect.Deflate(1.0);
|
||||||
|
@ -724,7 +725,7 @@ nsCSSBorderRenderer::DrawBorderSidesCompositeColors(int aSides, const nsBorderCo
|
||||||
fakeBorderSizes[NS_SIDE_BOTTOM] = soRect.BottomRight().y - siRect.BottomRight().y;
|
fakeBorderSizes[NS_SIDE_BOTTOM] = soRect.BottomRight().y - siRect.BottomRight().y;
|
||||||
fakeBorderSizes[NS_SIDE_LEFT] = siRect.BottomLeft().x - soRect.BottomLeft().x;
|
fakeBorderSizes[NS_SIDE_LEFT] = siRect.BottomLeft().x - soRect.BottomLeft().x;
|
||||||
|
|
||||||
FillSolidBorder(ThebesRect(soRect), ThebesRect(siRect), radii, fakeBorderSizes, aSides, lineColor);
|
FillSolidBorder(soRect, siRect, radii, fakeBorderSizes, aSides, color);
|
||||||
|
|
||||||
soRect = siRect;
|
soRect = siRect;
|
||||||
|
|
||||||
|
@ -906,11 +907,11 @@ nsCSSBorderRenderer::DrawBorderSides(int aSides)
|
||||||
borderWidths[i][2], borderWidths[i][3]));
|
borderWidths[i][2], borderWidths[i][3]));
|
||||||
|
|
||||||
if (borderColorStyle[i] != BorderColorStyleNone) {
|
if (borderColorStyle[i] != BorderColorStyleNone) {
|
||||||
gfxRGBA color = ComputeColorForLine(i,
|
Color c = ComputeColorForLine(i, borderColorStyle, borderColorStyleCount,
|
||||||
borderColorStyle, borderColorStyleCount,
|
|
||||||
borderRenderColor, mBackgroundColor);
|
borderRenderColor, mBackgroundColor);
|
||||||
|
ColorPattern color(ToDeviceColor(c));
|
||||||
|
|
||||||
FillSolidBorder(ThebesRect(soRect), ThebesRect(siRect), radii, borderWidths[i], aSides, color);
|
FillSolidBorder(soRect, siRect, radii, borderWidths[i], aSides, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
ComputeInnerRadii(radii, borderWidths[i], &radii);
|
ComputeInnerRadii(radii, borderWidths[i], &radii);
|
||||||
|
@ -1055,8 +1056,8 @@ bool IsVisible(int aStyle)
|
||||||
|
|
||||||
TemporaryRef<GradientStops>
|
TemporaryRef<GradientStops>
|
||||||
nsCSSBorderRenderer::CreateCornerGradient(mozilla::css::Corner aCorner,
|
nsCSSBorderRenderer::CreateCornerGradient(mozilla::css::Corner aCorner,
|
||||||
const gfxRGBA &aFirstColor,
|
nscolor aFirstColor,
|
||||||
const gfxRGBA &aSecondColor,
|
nscolor aSecondColor,
|
||||||
DrawTarget *aDT,
|
DrawTarget *aDT,
|
||||||
Point &aPoint1,
|
Point &aPoint1,
|
||||||
Point &aPoint2)
|
Point &aPoint2)
|
||||||
|
@ -1088,8 +1089,8 @@ nsCSSBorderRenderer::CreateCornerGradient(mozilla::css::Corner aCorner,
|
||||||
aPoint1 = Point(pat1.x, pat1.y);
|
aPoint1 = Point(pat1.x, pat1.y);
|
||||||
aPoint2 = Point(pat2.x, pat2.y);
|
aPoint2 = Point(pat2.x, pat2.y);
|
||||||
|
|
||||||
Color firstColor = ToColor(aFirstColor);
|
Color firstColor = Color::FromABGR(aFirstColor);
|
||||||
Color secondColor = ToColor(aSecondColor);
|
Color secondColor = Color::FromABGR(aSecondColor);
|
||||||
|
|
||||||
nsTArray<gfx::GradientStop> rawStops(2);
|
nsTArray<gfx::GradientStop> rawStops(2);
|
||||||
rawStops.SetLength(2);
|
rawStops.SetLength(2);
|
||||||
|
@ -1334,11 +1335,11 @@ nsCSSBorderRenderer::DrawRectangularCompositeColors()
|
||||||
secondCorner.x -= cornerAdjusts[side].a;
|
secondCorner.x -= cornerAdjusts[side].a;
|
||||||
secondCorner.y -= cornerAdjusts[side].b;
|
secondCorner.y -= cornerAdjusts[side].b;
|
||||||
|
|
||||||
gfxRGBA currentColor =
|
Color currentColor = Color::FromABGR(
|
||||||
currentColors[side] ? gfxRGBA(currentColors[side]->mColor)
|
currentColors[side] ? currentColors[side]->mColor
|
||||||
: gfxRGBA(mBorderColors[side]);
|
: mBorderColors[side]);
|
||||||
|
|
||||||
mContext->SetColor(currentColor);
|
mContext->SetColor(ThebesColor(currentColor));
|
||||||
mContext->NewPath();
|
mContext->NewPath();
|
||||||
mContext->MoveTo(firstCorner);
|
mContext->MoveTo(firstCorner);
|
||||||
mContext->LineTo(secondCorner);
|
mContext->LineTo(secondCorner);
|
||||||
|
@ -1349,15 +1350,15 @@ nsCSSBorderRenderer::DrawRectangularCompositeColors()
|
||||||
cornerTopLeft.x -= 0.5;
|
cornerTopLeft.x -= 0.5;
|
||||||
cornerTopLeft.y -= 0.5;
|
cornerTopLeft.y -= 0.5;
|
||||||
mContext->Rectangle(gfxRect(cornerTopLeft, gfxSize(1, 1)));
|
mContext->Rectangle(gfxRect(cornerTopLeft, gfxSize(1, 1)));
|
||||||
gfxRGBA nextColor =
|
Color nextColor = Color::FromABGR(
|
||||||
currentColors[sideNext] ? gfxRGBA(currentColors[sideNext]->mColor)
|
currentColors[sideNext] ? currentColors[sideNext]->mColor
|
||||||
: gfxRGBA(mBorderColors[sideNext]);
|
: mBorderColors[sideNext]);
|
||||||
|
|
||||||
gfxRGBA cornerColor((currentColor.r + nextColor.r) / 2.0,
|
Color cornerColor((currentColor.r + nextColor.r) / 2.f,
|
||||||
(currentColor.g + nextColor.g) / 2.0,
|
(currentColor.g + nextColor.g) / 2.f,
|
||||||
(currentColor.b + nextColor.b) / 2.0,
|
(currentColor.b + nextColor.b) / 2.f,
|
||||||
(currentColor.a + nextColor.a) / 2.0);
|
(currentColor.a + nextColor.a) / 2.f);
|
||||||
mContext->SetColor(cornerColor);
|
mContext->SetColor(ThebesColor(cornerColor));
|
||||||
mContext->Fill();
|
mContext->Fill();
|
||||||
|
|
||||||
if (side != 0) {
|
if (side != 0) {
|
||||||
|
@ -1378,6 +1379,8 @@ nsCSSBorderRenderer::DrawRectangularCompositeColors()
|
||||||
void
|
void
|
||||||
nsCSSBorderRenderer::DrawBorders()
|
nsCSSBorderRenderer::DrawBorders()
|
||||||
{
|
{
|
||||||
|
DrawTarget* drawTarget = mContext->GetDrawTarget();
|
||||||
|
|
||||||
bool forceSeparateCorners = false;
|
bool forceSeparateCorners = false;
|
||||||
|
|
||||||
// Examine the border style to figure out if we can draw it in one
|
// Examine the border style to figure out if we can draw it in one
|
||||||
|
@ -1435,6 +1438,9 @@ nsCSSBorderRenderer::DrawBorders()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ColorPattern color(ToDeviceColor(mBorderColors[NS_SIDE_TOP]));
|
||||||
|
StrokeOptions strokeOptions(mBorderWidths[NS_SIDE_TOP]); // stroke width
|
||||||
|
|
||||||
bool allBordersSolid;
|
bool allBordersSolid;
|
||||||
|
|
||||||
// First there's a couple of 'special cases' that have specifically optimized
|
// First there's a couple of 'special cases' that have specifically optimized
|
||||||
|
@ -1488,8 +1494,6 @@ nsCSSBorderRenderer::DrawBorders()
|
||||||
!mNoBorderRadius)
|
!mNoBorderRadius)
|
||||||
{
|
{
|
||||||
// Relatively simple case.
|
// Relatively simple case.
|
||||||
SetupStrokeStyle(NS_SIDE_TOP);
|
|
||||||
|
|
||||||
RoundedRect borderInnerRect(mOuterRect, mBorderRadii);
|
RoundedRect borderInnerRect(mOuterRect, mBorderRadii);
|
||||||
borderInnerRect.Deflate(mBorderWidths[NS_SIDE_TOP],
|
borderInnerRect.Deflate(mBorderWidths[NS_SIDE_TOP],
|
||||||
mBorderWidths[NS_SIDE_BOTTOM],
|
mBorderWidths[NS_SIDE_BOTTOM],
|
||||||
|
@ -1505,11 +1509,12 @@ nsCSSBorderRenderer::DrawBorders()
|
||||||
// doesn't need to compute an offset curve to stroke the path. We know that
|
// doesn't need to compute an offset curve to stroke the path. We know that
|
||||||
// the rounded parts are elipses we can offset exactly and can just compute
|
// the rounded parts are elipses we can offset exactly and can just compute
|
||||||
// a new cubic approximation.
|
// a new cubic approximation.
|
||||||
mContext->NewPath();
|
RefPtr<PathBuilder> builder =
|
||||||
mContext->RoundedRectangle(mOuterRect, mBorderRadii, true);
|
drawTarget->CreatePathBuilder(FillRule::FILL_EVEN_ODD);
|
||||||
mContext->RoundedRectangle(borderInnerRect.rect, borderInnerRect.corners, false);
|
AppendRoundedRectToPath(builder, ToRect(mOuterRect), mBorderRadii, true);
|
||||||
mContext->Fill();
|
AppendRoundedRectToPath(builder, ToRect(borderInnerRect.rect), borderInnerRect.corners, false);
|
||||||
return;
|
RefPtr<Path> path = builder->Finish();
|
||||||
|
drawTarget->Fill(path, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool hasCompositeColors;
|
bool hasCompositeColors;
|
||||||
|
@ -1633,9 +1638,10 @@ nsCSSBorderRenderer::DrawBorders()
|
||||||
{
|
{
|
||||||
mContext->NewPath();
|
mContext->NewPath();
|
||||||
DoCornerSubPath(corner);
|
DoCornerSubPath(corner);
|
||||||
mContext->SetColor(MakeBorderColor(mBorderColors[sides[0]],
|
Color color = MakeBorderColor(mBorderColors[sides[0]],
|
||||||
mBackgroundColor,
|
mBackgroundColor,
|
||||||
BorderColorStyleForSolidCorner(mBorderStyles[sides[0]], corner)));
|
BorderColorStyleForSolidCorner(mBorderStyles[sides[0]], corner));
|
||||||
|
mContext->SetColor(ThebesColor(color));
|
||||||
mContext->Fill();
|
mContext->Fill();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
#include "nsStyleConsts.h"
|
#include "nsStyleConsts.h"
|
||||||
|
|
||||||
class gfxContext;
|
class gfxContext;
|
||||||
struct gfxRGBA;
|
|
||||||
struct nsBorderColors;
|
struct nsBorderColors;
|
||||||
|
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
|
@ -77,7 +76,9 @@ typedef enum {
|
||||||
} BorderColorStyle;
|
} BorderColorStyle;
|
||||||
|
|
||||||
struct nsCSSBorderRenderer {
|
struct nsCSSBorderRenderer {
|
||||||
|
typedef mozilla::gfx::ColorPattern ColorPattern;
|
||||||
typedef mozilla::gfx::Float Float;
|
typedef mozilla::gfx::Float Float;
|
||||||
|
typedef mozilla::gfx::Rect Rect;
|
||||||
typedef mozilla::gfx::RectCornerRadii RectCornerRadii;
|
typedef mozilla::gfx::RectCornerRadii RectCornerRadii;
|
||||||
|
|
||||||
nsCSSBorderRenderer(int32_t aAppUnitsPerPixel,
|
nsCSSBorderRenderer(int32_t aAppUnitsPerPixel,
|
||||||
|
@ -162,12 +163,12 @@ struct nsCSSBorderRenderer {
|
||||||
//
|
//
|
||||||
// Calling code is expected to only set up a clip as necessary; no
|
// Calling code is expected to only set up a clip as necessary; no
|
||||||
// clip is needed if we can render the entire border in 1 or 2 passes.
|
// clip is needed if we can render the entire border in 1 or 2 passes.
|
||||||
void FillSolidBorder(const gfxRect& aOuterRect,
|
void FillSolidBorder(const Rect& aOuterRect,
|
||||||
const gfxRect& aInnerRect,
|
const Rect& aInnerRect,
|
||||||
const RectCornerRadii& aBorderRadii,
|
const RectCornerRadii& aBorderRadii,
|
||||||
const Float* aBorderSizes,
|
const Float* aBorderSizes,
|
||||||
int aSides,
|
int aSides,
|
||||||
const gfxRGBA& aColor);
|
const ColorPattern& aColor);
|
||||||
|
|
||||||
//
|
//
|
||||||
// core rendering
|
// core rendering
|
||||||
|
@ -196,8 +197,8 @@ struct nsCSSBorderRenderer {
|
||||||
|
|
||||||
// Azure variant of CreateCornerGradient.
|
// Azure variant of CreateCornerGradient.
|
||||||
mozilla::TemporaryRef<mozilla::gfx::GradientStops>
|
mozilla::TemporaryRef<mozilla::gfx::GradientStops>
|
||||||
CreateCornerGradient(mozilla::css::Corner aCorner, const gfxRGBA &aFirstColor,
|
CreateCornerGradient(mozilla::css::Corner aCorner, nscolor aFirstColor,
|
||||||
const gfxRGBA &aSecondColor, mozilla::gfx::DrawTarget *aDT,
|
nscolor aSecondColor, mozilla::gfx::DrawTarget *aDT,
|
||||||
mozilla::gfx::Point &aPoint1, mozilla::gfx::Point &aPoint2);
|
mozilla::gfx::Point &aPoint1, mozilla::gfx::Point &aPoint2);
|
||||||
|
|
||||||
// Draw a solid color border that is uniformly the same width.
|
// Draw a solid color border that is uniformly the same width.
|
||||||
|
|
|
@ -23,11 +23,11 @@
|
||||||
== percent-3.html percent-3-ref.html
|
== percent-3.html percent-3-ref.html
|
||||||
|
|
||||||
# more serious tests, using SVG reference
|
# more serious tests, using SVG reference
|
||||||
== border-circle-2.html border-circle-2-ref.xhtml
|
fuzzy(64,75) == border-circle-2.html border-circle-2-ref.xhtml
|
||||||
fails == curved-stripe-border.html curved-stripe-border-ref.svg # bug 459945
|
fails == curved-stripe-border.html curved-stripe-border-ref.svg # bug 459945
|
||||||
|
|
||||||
# Corners
|
# Corners
|
||||||
== corner-1.html corner-1-ref.svg # bottom corners different radius than top corners
|
fuzzy(64,58) == corner-1.html corner-1-ref.svg # bottom corners different radius than top corners
|
||||||
random == corner-2.html corner-2-ref.svg # right corners different radius than left corners; see bug 500804
|
random == corner-2.html corner-2-ref.svg # right corners different radius than left corners; see bug 500804
|
||||||
|
|
||||||
# Test that radii too long are reduced
|
# Test that radii too long are reduced
|
||||||
|
@ -37,7 +37,7 @@ random == corner-2.html corner-2-ref.svg # right corners different radius than l
|
||||||
fails == clipping-1.html clipping-1-ref.html # background color should completely fill box; bug 466572
|
fails == clipping-1.html clipping-1-ref.html # background color should completely fill box; bug 466572
|
||||||
!= clipping-2.html about:blank # background color clipped to inner/outer border, can't get
|
!= clipping-2.html about:blank # background color clipped to inner/outer border, can't get
|
||||||
# great tests for this due to antialiasing problems described in bug 466572
|
# great tests for this due to antialiasing problems described in bug 466572
|
||||||
fuzzy-if(Android&&AndroidVersion<15,9,73) fuzzy-if(Android&&AndroidVersion>=15,9,200) == clipping-3.html clipping-3-ref.xhtml # edge of border-radius clips an underlying object's background
|
fuzzy(64,75) == clipping-3.html clipping-3-ref.xhtml # edge of border-radius clips an underlying object's background
|
||||||
|
|
||||||
# Tests for clipping the contents of replaced elements and overflow!=visible
|
# Tests for clipping the contents of replaced elements and overflow!=visible
|
||||||
!= clipping-4-ref.html clipping-4-notref.html
|
!= clipping-4-ref.html clipping-4-notref.html
|
||||||
|
@ -85,6 +85,6 @@ skip-if(B2G) fuzzy-if(/^Windows\x20NT\x206\.2/.test(http.oscpu),1,20) fuzzy-if(A
|
||||||
== iframe-1.html iframe-1-ref.html
|
== iframe-1.html iframe-1-ref.html
|
||||||
|
|
||||||
# Test for antialiasing gaps between background and border
|
# Test for antialiasing gaps between background and border
|
||||||
skip-if(B2G) fails-if(winWidget) fuzzy-if(Android,1,5) == curved-border-background-nogap.html curved-border-background-nogap-ref.html
|
skip-if(B2G) fails-if(d2d) fuzzy-if(Android,1,5) == curved-border-background-nogap.html curved-border-background-nogap-ref.html
|
||||||
|
|
||||||
== color-layer-1a.html color-layer-1-ref.html
|
== color-layer-1a.html color-layer-1-ref.html
|
||||||
|
|
|
@ -1195,9 +1195,9 @@ test-pref(dom.use_xbl_scopes_for_remote_xul,true) != 449149-1b.html about:blank
|
||||||
== 455280-1.xhtml 455280-1-ref.xhtml
|
== 455280-1.xhtml 455280-1-ref.xhtml
|
||||||
skip-if(B2G) fails-if(Android) == 455826-1.html 455826-1-ref.html
|
skip-if(B2G) fails-if(Android) == 455826-1.html 455826-1-ref.html
|
||||||
skip-if(B2G) fails-if(cocoaWidget) fails-if(Android) == 456147.xul 456147-ref.html # bug 458047
|
skip-if(B2G) fails-if(cocoaWidget) fails-if(Android) == 456147.xul 456147-ref.html # bug 458047
|
||||||
skip-if(B2G) fails-if(Android) fuzzy-if(/^Windows\x20NT\x206\.1/.test(http.oscpu),1,1) fuzzy-if(/^Windows\x20NT\x206\.2/.test(http.oscpu),1,69) == 456219-1a.html 456219-1-ref.html # bug 853273
|
skip-if(B2G) fails-if(Android) fuzzy-if(xulRuntime.OS=="Linux",1,75) fuzzy-if(azureQuartz,1,33) fuzzy-if(winWidget&&!d2d,6,82) fuzzy-if(d2d,43,208) == 456219-1a.html 456219-1-ref.html # bug 853273
|
||||||
skip-if(B2G) fails-if(Android) fuzzy-if(/^Windows\x20NT\x206\.1/.test(http.oscpu),1,1) fuzzy-if(/^Windows\x20NT\x206\.2/.test(http.oscpu),1,69) == 456219-1b.html 456219-1-ref.html # bug 853273
|
skip-if(B2G) fails-if(Android) fuzzy-if(xulRuntime.OS=="Linux",1,75) fuzzy-if(azureQuartz,1,33) fuzzy-if(winWidget&&!d2d,6,82) fuzzy-if(d2d,43,208) == 456219-1b.html 456219-1-ref.html # bug 853273
|
||||||
skip-if(B2G) fails-if(Android) fuzzy-if(/^Windows\x20NT\x206\.1/.test(http.oscpu),1,1) fuzzy-if(/^Windows\x20NT\x206\.2/.test(http.oscpu),1,69) == 456219-1c.html 456219-1-ref.html # bug 853273
|
skip-if(B2G) fails-if(Android) fuzzy-if(xulRuntime.OS=="Linux",1,75) fuzzy-if(azureQuartz,1,33) fuzzy-if(winWidget&&!d2d,6,82) fuzzy-if(d2d,43,208) == 456219-1c.html 456219-1-ref.html # bug 853273
|
||||||
== 456219-2.html 456219-2-ref.html
|
== 456219-2.html 456219-2-ref.html
|
||||||
== 456330-1.gif 456330-1-ref.png
|
== 456330-1.gif 456330-1-ref.png
|
||||||
== 456484-1.html 456484-1-ref.html
|
== 456484-1.html 456484-1-ref.html
|
||||||
|
|
|
@ -13,11 +13,11 @@ skip-if(B2G) fails-if(azureSkia) fails-if(cocoaWidget) == canvas-outside-documen
|
||||||
skip-if(B2G) HTTP(..) == element-paint-continuation.html element-paint-continuation-ref.html
|
skip-if(B2G) HTTP(..) == element-paint-continuation.html element-paint-continuation-ref.html
|
||||||
== element-paint-transform-01.html element-paint-transform-01-ref.html
|
== element-paint-transform-01.html element-paint-transform-01-ref.html
|
||||||
random-if(d2d) == element-paint-transform-02.html element-paint-transform-02-ref.html # bug 587133
|
random-if(d2d) == element-paint-transform-02.html element-paint-transform-02-ref.html # bug 587133
|
||||||
== element-paint-background-size-01.html element-paint-background-size-01-ref.html
|
fuzzy-if(d2d&&/^Windows\x20NT\x206\.1/.test(http.oscpu),16,90) == element-paint-background-size-01.html element-paint-background-size-01-ref.html
|
||||||
== element-paint-background-size-02.html element-paint-background-size-02-ref.html
|
== element-paint-background-size-02.html element-paint-background-size-02-ref.html
|
||||||
== element-paint-transform-repeated.html element-paint-transform-repeated-ref.html
|
== element-paint-transform-repeated.html element-paint-transform-repeated-ref.html
|
||||||
fuzzy-if(d2d,255,24) == element-paint-transform-03.html element-paint-transform-03-ref.html
|
fuzzy-if(d2d,255,24) == element-paint-transform-03.html element-paint-transform-03-ref.html
|
||||||
fuzzy-if(B2G,1,5) fuzzy-if(gtk2Widget,1,32) fuzzy-if(cocoaWidget,1,106) == element-paint-native-widget.html element-paint-native-widget-ref.html
|
fuzzy-if(B2G,1,15) fuzzy-if(gtk2Widget,1,32) fuzzy-if(cocoaWidget,1,106) == element-paint-native-widget.html element-paint-native-widget-ref.html
|
||||||
== element-paint-subimage-sampling-restriction.html about:blank
|
== element-paint-subimage-sampling-restriction.html about:blank
|
||||||
== element-paint-clippath.html element-paint-clippath-ref.html
|
== element-paint-clippath.html element-paint-clippath-ref.html
|
||||||
== element-paint-sharpness-01a.html element-paint-sharpness-01b.html
|
== element-paint-sharpness-01a.html element-paint-sharpness-01b.html
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
== outline-and-box-shadow.html outline-and-box-shadow-ref.html
|
== outline-and-box-shadow.html outline-and-box-shadow-ref.html
|
||||||
== outline-and-3d-transform-1a.html outline-and-3d-transform-1-ref.html
|
== outline-and-3d-transform-1a.html outline-and-3d-transform-1-ref.html
|
||||||
== outline-and-3d-transform-1b.html outline-and-3d-transform-1-ref.html
|
== outline-and-3d-transform-1b.html outline-and-3d-transform-1-ref.html
|
||||||
== outline-and-3d-transform-2.html outline-and-3d-transform-2-ref.html
|
fuzzy-if(d2d,16,96) == outline-and-3d-transform-2.html outline-and-3d-transform-2-ref.html
|
||||||
== outline-overflow-block-abspos.html outline-overflow-block-ref.html
|
== outline-overflow-block-abspos.html outline-overflow-block-ref.html
|
||||||
== outline-overflow-block-float.html outline-overflow-block-ref.html
|
== outline-overflow-block-float.html outline-overflow-block-ref.html
|
||||||
== outline-overflow-inlineblock-abspos.html outline-overflow-inlineblock-ref.html
|
== outline-overflow-inlineblock-abspos.html outline-overflow-inlineblock-ref.html
|
||||||
|
|
Загрузка…
Ссылка в новой задаче