diff options
author | Sam Atkins <atkinssj@serenityos.org> | 2022-02-21 17:49:47 +0000 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2022-02-24 08:04:25 +0100 |
commit | bd79c303f6733f93c840423a2bc5f9bdd9168c2d (patch) | |
tree | e773e456c7c2ee3da5fca2c481ac781b53291d1e /Userland/Libraries/LibWeb/CSS/Frequency.h | |
parent | 355d1936f22bd3e8b9d41388e739938c9bfa1509 (diff) | |
download | serenity-bd79c303f6733f93c840423a2bc5f9bdd9168c2d.zip |
LibWeb: Implement CSS Frequency class
This corresponds to `<frequency>` in the grammar.
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; +}; +} |