Bug 1900530 - Allow gradient defined by a single color stop. r=layout-reviewers,emilio
Differential Revision: https://phabricator.services.mozilla.com/D233218
This commit is contained in:
@@ -127,7 +127,7 @@ impl GradientBuilder {
|
||||
/// the amount to adjust the gradient line start and stop.
|
||||
fn normalize(&mut self, extend_mode: di::ExtendMode) -> (f32, f32) {
|
||||
let stops = &mut self.stops;
|
||||
assert!(stops.len() >= 2);
|
||||
assert!(stops.len() >= 1);
|
||||
|
||||
let first = *stops.first().unwrap();
|
||||
let last = *stops.last().unwrap();
|
||||
|
||||
@@ -608,8 +608,8 @@ static nsTArray<ColorStop> ComputeColorStopsForItems(
|
||||
ComputedStyle* aComputedStyle,
|
||||
Span<const StyleGenericGradientItem<StyleColor, T>> aItems,
|
||||
CSSCoord aLineLength) {
|
||||
MOZ_ASSERT(aItems.Length() >= 2,
|
||||
"The parser should reject gradients with less than two stops");
|
||||
MOZ_ASSERT(!aItems.IsEmpty(),
|
||||
"The parser should reject gradients with no stops");
|
||||
|
||||
nsTArray<ColorStop> stops(aItems.Length());
|
||||
|
||||
|
||||
@@ -52,12 +52,14 @@ class MOZ_STACK_CLASS ColorStopInterpolator {
|
||||
|
||||
void CreateStops() {
|
||||
// This loop intentionally iterates extra stops at the beginning and end
|
||||
// if extending was requested.
|
||||
uint32_t iterStops = mStops.Length() - 1 + (mExtend ? 2 : 0);
|
||||
// if extending was requested, or in the degenerate case where only one
|
||||
// color stop was specified.
|
||||
const bool extend = mExtend || mStops.Length() == 1;
|
||||
const uint32_t iterStops = mStops.Length() - 1 + (extend ? 2 : 0);
|
||||
for (uint32_t i = 0; i < iterStops; i++) {
|
||||
auto thisindex = mExtend ? (i == 0 ? 0 : i - 1) : i;
|
||||
auto thisindex = extend ? (i == 0 ? 0 : i - 1) : i;
|
||||
auto nextindex =
|
||||
mExtend && (i == iterStops - 1 || i == 0) ? thisindex : thisindex + 1;
|
||||
extend && (i == iterStops - 1 || i == 0) ? thisindex : thisindex + 1;
|
||||
const auto& start = mStops[thisindex];
|
||||
const auto& end = mStops[nextindex];
|
||||
float startPosition = start.mPosition;
|
||||
@@ -68,7 +70,7 @@ class MOZ_STACK_CLASS ColorStopInterpolator {
|
||||
//
|
||||
// See https://bugzilla.mozilla.org/show_bug.cgi?id=1885716 for more info.
|
||||
uint32_t extraStops = 0;
|
||||
if (mExtend) {
|
||||
if (extend) {
|
||||
// If we're extending, we just need a single new stop, which will
|
||||
// duplicate the end being extended; do not create interpolated stops
|
||||
// within in the extension area!
|
||||
|
||||
@@ -786,7 +786,7 @@ impl Gradient {
|
||||
) -> Result<LengthPercentageItemList, ParseError<'i>> {
|
||||
let items =
|
||||
generic::GradientItem::parse_comma_separated(context, input, LengthPercentage::parse)?;
|
||||
if items.len() < 2 {
|
||||
if items.is_empty() {
|
||||
return Err(input.new_custom_error(StyleParseErrorKind::UnspecifiedError));
|
||||
}
|
||||
Ok(items)
|
||||
@@ -966,7 +966,7 @@ impl Gradient {
|
||||
AngleOrPercentage::parse_with_unitless,
|
||||
)?;
|
||||
|
||||
if items.len() < 2 {
|
||||
if items.is_empty() {
|
||||
return Err(input.new_custom_error(StyleParseErrorKind::UnspecifiedError));
|
||||
}
|
||||
|
||||
@@ -1249,7 +1249,7 @@ impl<T> generic::GradientItem<Color, T> {
|
||||
}
|
||||
}
|
||||
|
||||
if !seen_stop || items.len() < 2 {
|
||||
if !seen_stop || items.is_empty() {
|
||||
return Err(input.new_custom_error(StyleParseErrorKind::UnspecifiedError));
|
||||
}
|
||||
Ok(items.into())
|
||||
|
||||
Reference in New Issue
Block a user