mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-23 15:47:30 +09:00
Issue #1925 - Replace RectCorner with Corner.
This commit is contained in:
parent
c096b46278
commit
5c509ea6ce
5 changed files with 41 additions and 54 deletions
|
|
@ -378,12 +378,12 @@ struct BaseRect {
|
||||||
Point TopRight() const { return Point(XMost(), y); }
|
Point TopRight() const { return Point(XMost(), y); }
|
||||||
Point BottomLeft() const { return Point(x, YMost()); }
|
Point BottomLeft() const { return Point(x, YMost()); }
|
||||||
Point BottomRight() const { return Point(XMost(), YMost()); }
|
Point BottomRight() const { return Point(XMost(), YMost()); }
|
||||||
Point AtCorner(int aCorner) const {
|
Point AtCorner(Corner aCorner) const {
|
||||||
switch (aCorner) {
|
switch (aCorner) {
|
||||||
case RectCorner::TopLeft: return TopLeft();
|
case eCornerTopLeft: return TopLeft();
|
||||||
case RectCorner::TopRight: return TopRight();
|
case eCornerTopRight: return TopRight();
|
||||||
case RectCorner::BottomRight: return BottomRight();
|
case eCornerBottomRight: return BottomRight();
|
||||||
case RectCorner::BottomLeft: return BottomLeft();
|
case eCornerBottomLeft: return BottomLeft();
|
||||||
}
|
}
|
||||||
MOZ_CRASH("GFX: Incomplete switch");
|
MOZ_CRASH("GFX: Incomplete switch");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -125,10 +125,10 @@ AppendRoundedRectToPath(PathBuilder* aPathBuilder,
|
||||||
Point pc, p0, p1, p2, p3;
|
Point pc, p0, p1, p2, p3;
|
||||||
|
|
||||||
if (aDrawClockwise) {
|
if (aDrawClockwise) {
|
||||||
aPathBuilder->MoveTo(Point(aRect.X() + aRadii[RectCorner::TopLeft].width,
|
aPathBuilder->MoveTo(Point(aRect.X() + aRadii[eCornerTopLeft].width,
|
||||||
aRect.Y()));
|
aRect.Y()));
|
||||||
} else {
|
} else {
|
||||||
aPathBuilder->MoveTo(Point(aRect.X() + aRect.Width() - aRadii[RectCorner::TopRight].width,
|
aPathBuilder->MoveTo(Point(aRect.X() + aRect.Width() - aRadii[eCornerTopRight].width,
|
||||||
aRect.Y()));
|
aRect.Y()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -178,35 +178,35 @@ inline already_AddRefed<Path> MakePathForRect(const DrawTarget& aDrawTarget,
|
||||||
}
|
}
|
||||||
|
|
||||||
struct RectCornerRadii {
|
struct RectCornerRadii {
|
||||||
Size radii[RectCorner::Count];
|
Size radii[eCornerCount];
|
||||||
|
|
||||||
RectCornerRadii() {}
|
RectCornerRadii() {}
|
||||||
|
|
||||||
explicit RectCornerRadii(Float radius) {
|
explicit RectCornerRadii(Float radius) {
|
||||||
for (int i = 0; i < RectCorner::Count; i++) {
|
NS_FOR_CSS_FULL_CORNERS(i) {
|
||||||
radii[i].SizeTo(radius, radius);
|
radii[i].SizeTo(radius, radius);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
explicit RectCornerRadii(Float radiusX, Float radiusY) {
|
explicit RectCornerRadii(Float radiusX, Float radiusY) {
|
||||||
for (int i = 0; i < RectCorner::Count; i++) {
|
NS_FOR_CSS_FULL_CORNERS(i) {
|
||||||
radii[i].SizeTo(radiusX, radiusY);
|
radii[i].SizeTo(radiusX, radiusY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RectCornerRadii(Float tl, Float tr, Float br, Float bl) {
|
RectCornerRadii(Float tl, Float tr, Float br, Float bl) {
|
||||||
radii[RectCorner::TopLeft].SizeTo(tl, tl);
|
radii[eCornerTopLeft].SizeTo(tl, tl);
|
||||||
radii[RectCorner::TopRight].SizeTo(tr, tr);
|
radii[eCornerTopRight].SizeTo(tr, tr);
|
||||||
radii[RectCorner::BottomRight].SizeTo(br, br);
|
radii[eCornerBottomRight].SizeTo(br, br);
|
||||||
radii[RectCorner::BottomLeft].SizeTo(bl, bl);
|
radii[eCornerBottomLeft].SizeTo(bl, bl);
|
||||||
}
|
}
|
||||||
|
|
||||||
RectCornerRadii(const Size& tl, const Size& tr,
|
RectCornerRadii(const Size& tl, const Size& tr,
|
||||||
const Size& br, const Size& bl) {
|
const Size& br, const Size& bl) {
|
||||||
radii[RectCorner::TopLeft] = tl;
|
radii[eCornerTopLeft] = tl;
|
||||||
radii[RectCorner::TopRight] = tr;
|
radii[eCornerTopRight] = tr;
|
||||||
radii[RectCorner::BottomRight] = br;
|
radii[eCornerBottomRight] = br;
|
||||||
radii[RectCorner::BottomLeft] = bl;
|
radii[eCornerBottomLeft] = bl;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Size& operator[](size_t aCorner) const {
|
const Size& operator[](size_t aCorner) const {
|
||||||
|
|
@ -218,38 +218,35 @@ struct RectCornerRadii {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator==(const RectCornerRadii& aOther) const {
|
bool operator==(const RectCornerRadii& aOther) const {
|
||||||
for (size_t i = 0; i < RectCorner::Count; i++) {
|
return TopLeft() == aOther.TopLeft() &&
|
||||||
if (radii[i] != aOther.radii[i]) return false;
|
TopRight() == aOther.TopRight() &&
|
||||||
}
|
BottomRight() == aOther.BottomRight() &&
|
||||||
return true;
|
BottomLeft() == aOther.BottomLeft();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AreRadiiSame() const {
|
bool AreRadiiSame() const {
|
||||||
for (size_t i = 1; i < RectCorner::Count; i++) {
|
return TopLeft() == TopRight() &&
|
||||||
if (radii[i] != radii[0]) {
|
TopLeft() == BottomRight() &&
|
||||||
return false;
|
TopLeft() == BottomLeft();
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Scale(Float aXScale, Float aYScale) {
|
void Scale(Float aXScale, Float aYScale) {
|
||||||
for (int i = 0; i < RectCorner::Count; i++) {
|
NS_FOR_CSS_FULL_CORNERS(i) {
|
||||||
radii[i].Scale(aXScale, aYScale);
|
radii[i].Scale(aXScale, aYScale);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const Size TopLeft() const { return radii[RectCorner::TopLeft]; }
|
const Size TopLeft() const { return radii[eCornerTopLeft]; }
|
||||||
Size& TopLeft() { return radii[RectCorner::TopLeft]; }
|
Size& TopLeft() { return radii[eCornerTopLeft]; }
|
||||||
|
|
||||||
const Size TopRight() const { return radii[RectCorner::TopRight]; }
|
const Size TopRight() const { return radii[eCornerTopRight]; }
|
||||||
Size& TopRight() { return radii[RectCorner::TopRight]; }
|
Size& TopRight() { return radii[eCornerTopRight]; }
|
||||||
|
|
||||||
const Size BottomRight() const { return radii[RectCorner::BottomRight]; }
|
const Size BottomRight() const { return radii[eCornerBottomRight]; }
|
||||||
Size& BottomRight() { return radii[RectCorner::BottomRight]; }
|
Size& BottomRight() { return radii[eCornerBottomRight]; }
|
||||||
|
|
||||||
const Size BottomLeft() const { return radii[RectCorner::BottomLeft]; }
|
const Size BottomLeft() const { return radii[eCornerBottomLeft]; }
|
||||||
Size& BottomLeft() { return radii[RectCorner::BottomLeft]; }
|
Size& BottomLeft() { return radii[eCornerBottomLeft]; }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -359,21 +359,6 @@ typedef mozilla::gfx::SurfaceFormat gfxImageFormat;
|
||||||
|
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
|
|
||||||
// We can't use MOZ_BEGIN_ENUM_CLASS here because that prevents the enum
|
|
||||||
// values from being used for indexing. Wrapping the enum in a struct does at
|
|
||||||
// least gives us name scoping.
|
|
||||||
struct RectCorner {
|
|
||||||
enum {
|
|
||||||
// This order is important since Rect::AtCorner, AppendRoundedRectToPath
|
|
||||||
// and other code depends on it!
|
|
||||||
TopLeft = 0,
|
|
||||||
TopRight = 1,
|
|
||||||
BottomRight = 2,
|
|
||||||
BottomLeft = 3,
|
|
||||||
Count = 4
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
// Side constants for use in various places.
|
// Side constants for use in various places.
|
||||||
enum Side { eSideTop, eSideRight, eSideBottom, eSideLeft };
|
enum Side { eSideTop, eSideRight, eSideBottom, eSideLeft };
|
||||||
|
|
||||||
|
|
@ -414,6 +399,11 @@ enum Corner {
|
||||||
eCornerBottomLeft = 3
|
eCornerBottomLeft = 3
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// RectCornerRadii::radii depends on this value. It is not being added to
|
||||||
|
// Corner because we want to lift the responsibility to handle it in the
|
||||||
|
// switch-case.
|
||||||
|
constexpr int eCornerCount = 4;
|
||||||
|
|
||||||
// Creates a for loop that walks over the four mozilla::Corner values. This
|
// Creates a for loop that walks over the four mozilla::Corner values. This
|
||||||
// implementation uses the same technique as NS_FOR_CSS_SIDES.
|
// implementation uses the same technique as NS_FOR_CSS_SIDES.
|
||||||
#define NS_FOR_CSS_FULL_CORNERS(var_) \
|
#define NS_FOR_CSS_FULL_CORNERS(var_) \
|
||||||
|
|
|
||||||
|
|
@ -435,7 +435,7 @@ ComputeMinSizeForShadowShape(const RectCornerRadii* aCornerRadii,
|
||||||
Size cornerSize(0, 0);
|
Size cornerSize(0, 0);
|
||||||
if (aCornerRadii) {
|
if (aCornerRadii) {
|
||||||
const RectCornerRadii& corners = *aCornerRadii;
|
const RectCornerRadii& corners = *aCornerRadii;
|
||||||
for (size_t i = 0; i < RectCorner::Count; i++) {
|
NS_FOR_CSS_FULL_CORNERS(i) {
|
||||||
cornerSize.width = std::max(cornerSize.width, corners[i].width);
|
cornerSize.width = std::max(cornerSize.width, corners[i].width);
|
||||||
cornerSize.height = std::max(cornerSize.height, corners[i].height);
|
cornerSize.height = std::max(cornerSize.height, corners[i].height);
|
||||||
}
|
}
|
||||||
|
|
@ -1169,7 +1169,7 @@ static void GetBlurMargins(const RectCornerRadii* aInnerClipRadii,
|
||||||
Size cornerSize(0, 0);
|
Size cornerSize(0, 0);
|
||||||
if (aInnerClipRadii) {
|
if (aInnerClipRadii) {
|
||||||
const RectCornerRadii& corners = *aInnerClipRadii;
|
const RectCornerRadii& corners = *aInnerClipRadii;
|
||||||
for (size_t i = 0; i < RectCorner::Count; i++) {
|
NS_FOR_CSS_FULL_CORNERS(i) {
|
||||||
cornerSize.width = std::max(cornerSize.width, corners[i].width);
|
cornerSize.width = std::max(cornerSize.width, corners[i].width);
|
||||||
cornerSize.height = std::max(cornerSize.height, corners[i].height);
|
cornerSize.height = std::max(cornerSize.height, corners[i].height);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue