123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- /*
- * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
- * Copyright (c) 2021-2023, Sam Atkins <atkinssj@serenityos.org>
- *
- * SPDX-License-Identifier: BSD-2-Clause
- */
- #pragma once
- #include <LibGfx/AntiAliasingPainter.h>
- #include <LibGfx/Forward.h>
- #include <LibWeb/CSS/ComputedValues.h>
- namespace Web::Painting {
- struct BorderRadiusData {
- CSSPixels horizontal_radius { 0 };
- CSSPixels vertical_radius { 0 };
- Gfx::AntiAliasingPainter::CornerRadius as_corner(PaintContext const& context) const;
- inline operator bool() const
- {
- return horizontal_radius > 0 || vertical_radius > 0;
- }
- inline void shrink(CSSPixels horizontal, CSSPixels vertical)
- {
- if (horizontal_radius != 0)
- horizontal_radius = max(CSSPixels(0), horizontal_radius - horizontal);
- if (vertical_radius != 0)
- vertical_radius = max(CSSPixels(0), vertical_radius - vertical);
- }
- inline void union_max_radii(BorderRadiusData const& other)
- {
- horizontal_radius = max(horizontal_radius, other.horizontal_radius);
- vertical_radius = max(vertical_radius, other.vertical_radius);
- }
- };
- using CornerRadius = Gfx::AntiAliasingPainter::CornerRadius;
- struct CornerRadii {
- CornerRadius top_left;
- CornerRadius top_right;
- CornerRadius bottom_right;
- CornerRadius bottom_left;
- inline bool has_any_radius() const
- {
- return top_left || top_right || bottom_right || bottom_left;
- }
- };
- struct BorderRadiiData {
- BorderRadiusData top_left;
- BorderRadiusData top_right;
- BorderRadiusData bottom_right;
- BorderRadiusData bottom_left;
- inline bool has_any_radius() const
- {
- return top_left || top_right || bottom_right || bottom_left;
- }
- inline void union_max_radii(BorderRadiiData const& other)
- {
- top_left.union_max_radii(other.top_left);
- top_right.union_max_radii(other.top_right);
- bottom_right.union_max_radii(other.bottom_right);
- bottom_left.union_max_radii(other.bottom_left);
- }
- inline void shrink(CSSPixels top, CSSPixels right, CSSPixels bottom, CSSPixels left)
- {
- top_left.shrink(left, top);
- top_right.shrink(right, top);
- bottom_right.shrink(right, bottom);
- bottom_left.shrink(left, bottom);
- }
- inline void inflate(CSSPixels top, CSSPixels right, CSSPixels bottom, CSSPixels left)
- {
- shrink(-top, -right, -bottom, -left);
- }
- inline CornerRadii as_corners(PaintContext const& context) const
- {
- return CornerRadii {
- top_left.as_corner(context),
- top_right.as_corner(context),
- bottom_right.as_corner(context),
- bottom_left.as_corner(context)
- };
- }
- };
- }
|