summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibWeb/CSS/Frequency.h
diff options
context:
space:
mode:
Diffstat (limited to 'Userland/Libraries/LibWeb/CSS/Frequency.h')
-rw-r--r--Userland/Libraries/LibWeb/CSS/Frequency.h53
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;
+};
+}