mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 12:28:12 +00:00
LibWeb: Support two-value background-repeat
The background-repeat value may be specified as either one- or two-value identifiers (to be interpreted as horizontal and vertical repeat). This adds two pseudo-properties, background-repeat-x and background-repeat-y, to handle this. One-value identifiers are mapped to two-value in accordance with the spec.
This commit is contained in:
parent
0794d879f3
commit
5de0e0068c
12 changed files with 152 additions and 35 deletions
|
@ -50,7 +50,7 @@ void Box::paint(PaintContext& context, PaintPhase phase)
|
|||
context.painter().fill_rect(background_rect, computed_values().background_color());
|
||||
|
||||
if (background_image() && background_image()->bitmap()) {
|
||||
paint_background_image(context, *background_image()->bitmap(), computed_values().background_repeat(), move(background_rect));
|
||||
paint_background_image(context, *background_image()->bitmap(), computed_values().background_repeat_x(), computed_values().background_repeat_y(), move(background_rect));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -87,22 +87,30 @@ void Box::paint(PaintContext& context, PaintPhase phase)
|
|||
void Box::paint_background_image(
|
||||
PaintContext& context,
|
||||
const Gfx::Bitmap& background_image,
|
||||
CSS::Repeat background_repeat,
|
||||
CSS::Repeat background_repeat_x,
|
||||
CSS::Repeat background_repeat_y,
|
||||
Gfx::IntRect background_rect)
|
||||
{
|
||||
switch (background_repeat) {
|
||||
switch (background_repeat_x) {
|
||||
case CSS::Repeat::Round:
|
||||
case CSS::Repeat::Space:
|
||||
// FIXME: Support 'round' and 'space'. Fall through to 'repeat' since that most closely resembles these.
|
||||
case CSS::Repeat::Repeat:
|
||||
// The background rect is already sized to align with 'repeat'.
|
||||
break;
|
||||
case CSS::Repeat::RepeatX:
|
||||
background_rect.set_height(background_image.height());
|
||||
break;
|
||||
case CSS::Repeat::RepeatY:
|
||||
case CSS::Repeat::NoRepeat:
|
||||
background_rect.set_width(background_image.width());
|
||||
break;
|
||||
}
|
||||
|
||||
switch (background_repeat_y) {
|
||||
case CSS::Repeat::Round:
|
||||
case CSS::Repeat::Space:
|
||||
// FIXME: Support 'round' and 'space'. Fall through to 'repeat' since that most closely resembles these.
|
||||
case CSS::Repeat::Repeat:
|
||||
// The background rect is already sized to align with 'repeat'.
|
||||
break;
|
||||
case CSS::Repeat::NoRepeat:
|
||||
default: // FIXME: Support 'round' and 'square'
|
||||
background_rect.set_width(background_image.width());
|
||||
background_rect.set_height(background_image.height());
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue