summaryrefslogtreecommitdiff
path: root/Libraries/LibHTML/CSS/StyleValue.h
diff options
context:
space:
mode:
authorAndreas Kling <awesomekling@gmail.com>2019-07-04 16:16:50 +0200
committerAndreas Kling <awesomekling@gmail.com>2019-07-04 16:16:50 +0200
commit04b9dc2d30cfc9b383029f6a4b02e2725108b0ae (patch)
treee117a998173b767f9fd009d49c4f8573d8b85432 /Libraries/LibHTML/CSS/StyleValue.h
parent63814ffebf16291419745cd8ba29a4d2fd888563 (diff)
downloadserenity-04b9dc2d30cfc9b383029f6a4b02e2725108b0ae.zip
Libraries: Create top level directory for libraries.
Things were getting a little crowded in the project root, so this patch moves the Lib*/ directories into Libraries/.
Diffstat (limited to 'Libraries/LibHTML/CSS/StyleValue.h')
-rw-r--r--Libraries/LibHTML/CSS/StyleValue.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/Libraries/LibHTML/CSS/StyleValue.h b/Libraries/LibHTML/CSS/StyleValue.h
new file mode 100644
index 0000000000..574fd8215d
--- /dev/null
+++ b/Libraries/LibHTML/CSS/StyleValue.h
@@ -0,0 +1,70 @@
+#pragma once
+
+#include <AK/AKString.h>
+#include <AK/RefCounted.h>
+#include <AK/RefPtr.h>
+#include <AK/StringView.h>
+#include <LibHTML/CSS/Length.h>
+
+class StyleValue : public RefCounted<StyleValue> {
+public:
+ virtual ~StyleValue();
+
+ enum class Type {
+ Invalid,
+ Inherit,
+ Initial,
+ String,
+ Length,
+ };
+
+ Type type() const { return m_type; }
+
+ virtual String to_string() const = 0;
+
+protected:
+ explicit StyleValue(Type);
+
+private:
+ Type m_type { Type::Invalid };
+};
+
+class StringStyleValue : public StyleValue {
+public:
+ static NonnullRefPtr<StringStyleValue> create(const String& string)
+ {
+ return adopt(*new StringStyleValue(string));
+ }
+ virtual ~StringStyleValue() override {}
+
+ String to_string() const override { return m_string; }
+
+private:
+ explicit StringStyleValue(const String& string)
+ : StyleValue(Type::String)
+ , m_string(string)
+ {
+ }
+
+ String m_string;
+};
+
+class LengthStyleValue : public StyleValue {
+public:
+ static NonnullRefPtr<LengthStyleValue> create(const Length& length)
+ {
+ return adopt(*new LengthStyleValue(length));
+ }
+ virtual ~LengthStyleValue() override {}
+
+ String to_string() const override { return m_length.to_string(); }
+
+private:
+ explicit LengthStyleValue(const Length& length)
+ : StyleValue(Type::Length)
+ , m_length(length)
+ {
+ }
+
+ Length m_length;
+};