diff options
Diffstat (limited to 'Userland/Libraries/LibWeb/CSS/Frequency.h')
-rw-r--r-- | Userland/Libraries/LibWeb/CSS/Frequency.h | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/Userland/Libraries/LibWeb/CSS/Frequency.h b/Userland/Libraries/LibWeb/CSS/Frequency.h new file mode 100644 index 0000000000..c71cc67a1a --- /dev/null +++ b/Userland/Libraries/LibWeb/CSS/Frequency.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2022, Sam Atkins <atkinssj@serenityos.org> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include <AK/RefPtr.h> +#include <LibWeb/Forward.h> + +namespace Web::CSS { +class Frequency { +public: + enum class Type { + Calculated, + Hz, + kHz + }; + + static Optional<Type> unit_from_name(StringView); + + Frequency(int value, Type type); + Frequency(float value, Type type); + static Frequency make_calculated(NonnullRefPtr<CalculatedStyleValue>); + static Frequency make_hertz(float); + Frequency percentage_of(Percentage const&) const; + + bool is_calculated() const { return m_type == Type::Calculated; } + + String to_string() const; + float to_hertz() const; + + bool operator==(Frequency const& other) const + { + if (is_calculated()) + return m_calculated_style == other.m_calculated_style; + return m_type == other.m_type && m_value == other.m_value; + } + + bool operator!=(Frequency const& other) const + { + return !(*this == other); + } + +private: + StringView unit_name() const; + + Type m_type; + float m_value { 0 }; + RefPtr<CalculatedStyleValue> m_calculated_style; +}; +} |