Polyphase Game Engine
Loading...
Searching...
No Matches
UIStyleSheet.h
Go to the documentation of this file.
1#pragma once
2
3#include "UI/UITypes.h"
4
5#include <string>
6#include <vector>
7
8//------------------------------------------------------------
9// CSS Selector
10//------------------------------------------------------------
11
12enum class CSSSelectorType : uint8_t
13{
14 Element, // div, button, etc. (specificity 1)
15 Class, // .classname (specificity 10)
16 Id // #idname (specificity 100)
17};
18
20{
22 std::string mValue;
23
24 int32_t GetSpecificity() const;
25};
26
27//------------------------------------------------------------
28// CSS Rule
29//------------------------------------------------------------
30
32{
33 std::string mName;
35};
36
37struct CSSRule
38{
40 std::vector<CSSProperty> mProperties;
41};
42
43//------------------------------------------------------------
44// UIStyleSheet
45//------------------------------------------------------------
46
48{
49public:
50
51 void Parse(const std::string& cssSource);
52 void ParseAndAppend(const std::string& cssSource);
53 void Clear();
54
56 const char* elementType,
57 const char* className,
58 const char* id,
59 std::vector<const CSSRule*>& outRules) const;
60
61 void ApplyStyles(
62 Widget* widget,
63 const char* elementType,
64 const char* className,
65 const char* id) const;
66
67private:
68
69 std::vector<CSSRule> mRules;
70
71 static void SkipWhitespace(const char*& cursor);
72 static void SkipComments(const char*& cursor);
73 static void SkipWhitespaceAndComments(const char*& cursor);
74 static std::string ReadIdentifier(const char*& cursor);
75 static std::string ReadUntil(const char*& cursor, char delim);
76};
CSSSelectorType
Definition UIStyleSheet.h:13
Definition UIStyleSheet.h:48
void Parse(const std::string &cssSource)
Definition UIStyleSheet.cpp:83
void GetMatchingRules(const char *elementType, const char *className, const char *id, std::vector< const CSSRule * > &outRules) const
Definition UIStyleSheet.cpp:241
void ParseAndAppend(const std::string &cssSource)
Definition UIStyleSheet.cpp:89
void Clear()
Definition UIStyleSheet.cpp:212
void ApplyStyles(Widget *widget, const char *elementType, const char *className, const char *id) const
Definition UIStyleSheet.cpp:283
Definition Widget.h:53
Definition UIStyleSheet.h:32
CSSValue mValue
Definition UIStyleSheet.h:34
std::string mName
Definition UIStyleSheet.h:33
Definition UIStyleSheet.h:38
CSSSelector mSelector
Definition UIStyleSheet.h:39
std::vector< CSSProperty > mProperties
Definition UIStyleSheet.h:40
Definition UIStyleSheet.h:20
CSSSelectorType mType
Definition UIStyleSheet.h:21
int32_t GetSpecificity() const
Definition UIStyleSheet.cpp:13
std::string mValue
Definition UIStyleSheet.h:22
Definition UITypes.h:27