/src/serenity/Userland/Libraries/LibWeb/CSS/EdgeRect.cpp
Line | Count | Source |
1 | | /* |
2 | | * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> |
3 | | * Copyright (c) 2021-2023, Sam Atkins <atkinssj@serenityos.org> |
4 | | * Copyright (c) 2021, Tobias Christiansen <tobyase@serenityos.org> |
5 | | * Copyright (c) 2022-2023, MacDue <macdue@dueutil.tech> |
6 | | * |
7 | | * SPDX-License-Identifier: BSD-2-Clause |
8 | | */ |
9 | | |
10 | | #include "EdgeRect.h" |
11 | | |
12 | | namespace Web::CSS { |
13 | | |
14 | | // https://www.w3.org/TR/CSS2/visufx.html#value-def-shape |
15 | | CSSPixelRect EdgeRect::resolved(Layout::Node const& layout_node, CSSPixelRect border_box) const |
16 | 0 | { |
17 | | // In CSS 2.1, the only valid <shape> value is: rect(<top>, <right>, <bottom>, <left>) where |
18 | | // <top> and <bottom> specify offsets from the top border edge of the box, and <right>, and |
19 | | // <left> specify offsets from the left border edge of the box. |
20 | | |
21 | | // The value 'auto' means that a given edge of the clipping region will be the same as the edge |
22 | | // of the element's generated border box (i.e., 'auto' means the same as '0' for <top> and |
23 | | // <left>, the same as the used value of the height plus the sum of vertical padding and border |
24 | | // widths for <bottom>, and the same as the used value of the width plus the sum of the |
25 | | // horizontal padding and border widths for <right>, such that four 'auto' values result in the |
26 | | // clipping region being the same as the element's border box). |
27 | 0 | auto left = border_box.left() + (left_edge.is_auto() ? 0 : left_edge.to_px(layout_node)); |
28 | 0 | auto top = border_box.top() + (top_edge.is_auto() ? 0 : top_edge.to_px(layout_node)); |
29 | 0 | auto right = border_box.left() + (right_edge.is_auto() ? border_box.width() : right_edge.to_px(layout_node)); |
30 | 0 | auto bottom = border_box.top() + (bottom_edge.is_auto() ? border_box.height() : bottom_edge.to_px(layout_node)); |
31 | 0 | return CSSPixelRect { |
32 | 0 | left, |
33 | 0 | top, |
34 | 0 | right - left, |
35 | 0 | bottom - top |
36 | 0 | }; |
37 | 0 | } |
38 | | |
39 | | } |