mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 15:27:35 +00:00
LibWeb: Move background painting from Box to its own file
This makes the code accessible to things that aren't a Box, such as InlineNode.
This commit is contained in:
parent
b047c1bc97
commit
abc22b727c
5 changed files with 86 additions and 49 deletions
51
Userland/Libraries/LibWeb/Painting/BackgroundPainting.cpp
Normal file
51
Userland/Libraries/LibWeb/Painting/BackgroundPainting.cpp
Normal file
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2021, Sam Atkins <atkinssj@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <LibGfx/Painter.h>
|
||||
#include <LibWeb/Painting/BackgroundPainting.h>
|
||||
#include <LibWeb/Painting/PaintContext.h>
|
||||
|
||||
namespace Web::Painting {
|
||||
|
||||
void paint_background(PaintContext& context, Gfx::IntRect const& background_rect, BackgroundData const& background_data, BorderRadiusData const& border_radius)
|
||||
{
|
||||
// FIXME: Support elliptical corners
|
||||
context.painter().fill_rect_with_rounded_corners(background_rect, background_data.color, border_radius.top_left, border_radius.top_right, border_radius.bottom_right, border_radius.bottom_left);
|
||||
|
||||
// FIXME: Support multiple background layers
|
||||
if (background_data.image) {
|
||||
auto image_rect = background_rect;
|
||||
switch (background_data.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::NoRepeat:
|
||||
image_rect.set_width(background_data.image->width());
|
||||
break;
|
||||
}
|
||||
|
||||
switch (background_data.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:
|
||||
image_rect.set_height(background_data.image->height());
|
||||
break;
|
||||
}
|
||||
|
||||
// FIXME: Handle rounded corners
|
||||
context.painter().blit_tiled(image_rect, *background_data.image, background_data.image->rect());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
25
Userland/Libraries/LibWeb/Painting/BackgroundPainting.h
Normal file
25
Userland/Libraries/LibWeb/Painting/BackgroundPainting.h
Normal file
|
@ -0,0 +1,25 @@
|
|||
/*
|
||||
* Copyright (c) 2021, Sam Atkins <atkinssj@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <LibGfx/Forward.h>
|
||||
#include <LibWeb/CSS/StyleValue.h>
|
||||
#include <LibWeb/Painting/BorderPainting.h>
|
||||
#include <LibWeb/Painting/PaintContext.h>
|
||||
|
||||
namespace Web::Painting {
|
||||
|
||||
struct BackgroundData {
|
||||
Color color;
|
||||
Gfx::Bitmap const* image;
|
||||
CSS::Repeat repeat_x;
|
||||
CSS::Repeat repeat_y;
|
||||
};
|
||||
|
||||
void paint_background(PaintContext&, Gfx::IntRect const&, BackgroundData const&, BorderRadiusData const&);
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue