diff --git a/src/core/mainconfig.cpp b/src/core/mainconfig.cpp
index 3bfcabc3..551f8078 100644
--- a/src/core/mainconfig.cpp
+++ b/src/core/mainconfig.cpp
@@ -117,4 +117,5 @@ QString MainConfig::getVersion(const QJsonObject &p_jobj)
void MainConfig::doVersionSpecificOverride()
{
// In a new version, we may want to change one value by force.
+ m_coreConfig->setTheme(QStringLiteral("pure"));
}
diff --git a/src/core/sessionconfig.cpp b/src/core/sessionconfig.cpp
index d30d1f33..00690db8 100644
--- a/src/core/sessionconfig.cpp
+++ b/src/core/sessionconfig.cpp
@@ -282,5 +282,4 @@ void SessionConfig::doVersionSpecificOverride()
{
// In a new version, we may want to change one value by force.
// SHOULD set the in memory variable only, or will override the notebook list.
- m_systemTitleBarEnabled = true;
}
diff --git a/src/core/thememgr.cpp b/src/core/thememgr.cpp
index 48a09c37..3a4d6b89 100644
--- a/src/core/thememgr.cpp
+++ b/src/core/thememgr.cpp
@@ -91,7 +91,7 @@ void ThemeMgr::loadCurrentTheme(const QString &p_themeName)
}
if (!m_currentTheme) {
- const QString defaultTheme("native");
+ const QString defaultTheme("pure");
qWarning() << "fall back to default theme" << defaultTheme;
m_currentTheme.reset(loadTheme(findThemeFolder(defaultTheme)));
}
diff --git a/src/data/core/vnotex.json b/src/data/core/vnotex.json
index dfc8f4c8..f04c00cb 100644
--- a/src/data/core/vnotex.json
+++ b/src/data/core/vnotex.json
@@ -6,7 +6,7 @@
"version" : "3.0.0-beta.5"
},
"core" : {
- "theme" : "moonlight",
+ "theme" : "pure",
"locale" : "",
"shortcuts" : {
"FullScreen" : "F11",
diff --git a/src/data/extra/extra.qrc b/src/data/extra/extra.qrc
index c11a9d3e..887f41c7 100644
--- a/src/data/extra/extra.qrc
+++ b/src/data/extra/extra.qrc
@@ -104,6 +104,38 @@
themes/moonlight/up.svg
themes/moonlight/up_disabled.svg
themes/moonlight/web.css
+ themes/pure/arrow_dropdown.svg
+ themes/pure/arrow_dropdown_disabled.svg
+ themes/pure/branch_closed.svg
+ themes/pure/branch_open.svg
+ themes/pure/checkbox_checked.svg
+ themes/pure/checkbox_checked_disabled.svg
+ themes/pure/checkbox_unchecked.svg
+ themes/pure/checkbox_unchecked_disabled.svg
+ themes/pure/close.svg
+ themes/pure/close_grey.svg
+ themes/pure/cover.png
+ themes/pure/down.svg
+ themes/pure/down_disabled.svg
+ themes/pure/float.svg
+ themes/pure/highlight.css
+ themes/pure/interface.qss
+ themes/pure/left.svg
+ themes/pure/left_disabled.svg
+ themes/pure/menu_checkbox.svg
+ themes/pure/menu_radiobutton.svg
+ themes/pure/palette.json
+ themes/pure/radiobutton_checked.svg
+ themes/pure/radiobutton_checked_disabled.svg
+ themes/pure/radiobutton_unchecked.svg
+ themes/pure/radiobutton_unchecked_disabled.svg
+ themes/pure/right.svg
+ themes/pure/right_disabled.svg
+ themes/pure/sizegrip.svg
+ themes/pure/text-editor.theme
+ themes/pure/up.svg
+ themes/pure/up_disabled.svg
+ themes/pure/web.css
syntax-highlighting/themes/markdown-default.theme
syntax-highlighting/themes/markdown-breeze-dark.theme
syntax-highlighting/themes/default.theme
diff --git a/src/data/extra/themes/moonlight/highlight.css b/src/data/extra/themes/moonlight/highlight.css
index 0e68bdbb..2ce2f611 100644
--- a/src/data/extra/themes/moonlight/highlight.css
+++ b/src/data/extra/themes/moonlight/highlight.css
@@ -213,7 +213,6 @@ div.code-toolbar > .toolbar span {
color: #bbb;
font-size: .8em;
padding: 0 .5em;
- background: #f5f2f0;
background: rgba(224, 224, 224, 0.2);
box-shadow: 0 2px 0 0 rgba(0,0,0,0.2);
border-radius: .5em;
diff --git a/src/data/extra/themes/native/highlight.css b/src/data/extra/themes/native/highlight.css
index 1ab14afd..a6dd3c32 100644
--- a/src/data/extra/themes/native/highlight.css
+++ b/src/data/extra/themes/native/highlight.css
@@ -231,7 +231,6 @@ div.code-toolbar > .toolbar span {
color: #bbb;
font-size: .8em;
padding: 0 .5em;
- background: #f5f2f0;
background: rgba(224, 224, 224, 0.2);
box-shadow: 0 2px 0 0 rgba(0,0,0,0.2);
border-radius: .5em;
diff --git a/src/data/extra/themes/pure/arrow_dropdown.svg b/src/data/extra/themes/pure/arrow_dropdown.svg
new file mode 100644
index 00000000..388cbe9d
--- /dev/null
+++ b/src/data/extra/themes/pure/arrow_dropdown.svg
@@ -0,0 +1,9 @@
+
+
+
+
diff --git a/src/data/extra/themes/pure/arrow_dropdown_disabled.svg b/src/data/extra/themes/pure/arrow_dropdown_disabled.svg
new file mode 100644
index 00000000..c1ef5c52
--- /dev/null
+++ b/src/data/extra/themes/pure/arrow_dropdown_disabled.svg
@@ -0,0 +1,9 @@
+
+
+
+
diff --git a/src/data/extra/themes/pure/branch_closed.svg b/src/data/extra/themes/pure/branch_closed.svg
new file mode 100644
index 00000000..f44c49d0
--- /dev/null
+++ b/src/data/extra/themes/pure/branch_closed.svg
@@ -0,0 +1,8 @@
+
diff --git a/src/data/extra/themes/pure/branch_open.svg b/src/data/extra/themes/pure/branch_open.svg
new file mode 100644
index 00000000..e6b5decc
--- /dev/null
+++ b/src/data/extra/themes/pure/branch_open.svg
@@ -0,0 +1,8 @@
+
diff --git a/src/data/extra/themes/pure/checkbox_checked.svg b/src/data/extra/themes/pure/checkbox_checked.svg
new file mode 100644
index 00000000..f489cd22
--- /dev/null
+++ b/src/data/extra/themes/pure/checkbox_checked.svg
@@ -0,0 +1,7 @@
+
diff --git a/src/data/extra/themes/pure/checkbox_checked_disabled.svg b/src/data/extra/themes/pure/checkbox_checked_disabled.svg
new file mode 100644
index 00000000..78317037
--- /dev/null
+++ b/src/data/extra/themes/pure/checkbox_checked_disabled.svg
@@ -0,0 +1,7 @@
+
diff --git a/src/data/extra/themes/pure/checkbox_unchecked.svg b/src/data/extra/themes/pure/checkbox_unchecked.svg
new file mode 100644
index 00000000..2fafd48f
--- /dev/null
+++ b/src/data/extra/themes/pure/checkbox_unchecked.svg
@@ -0,0 +1,6 @@
+
diff --git a/src/data/extra/themes/pure/checkbox_unchecked_disabled.svg b/src/data/extra/themes/pure/checkbox_unchecked_disabled.svg
new file mode 100644
index 00000000..307a9cb0
--- /dev/null
+++ b/src/data/extra/themes/pure/checkbox_unchecked_disabled.svg
@@ -0,0 +1,6 @@
+
diff --git a/src/data/extra/themes/pure/close.svg b/src/data/extra/themes/pure/close.svg
new file mode 100644
index 00000000..b1173868
--- /dev/null
+++ b/src/data/extra/themes/pure/close.svg
@@ -0,0 +1,10 @@
+
+
+
+
diff --git a/src/data/extra/themes/pure/close_grey.svg b/src/data/extra/themes/pure/close_grey.svg
new file mode 100644
index 00000000..24bddd4e
--- /dev/null
+++ b/src/data/extra/themes/pure/close_grey.svg
@@ -0,0 +1,10 @@
+
+
+
+
diff --git a/src/data/extra/themes/pure/cover.png b/src/data/extra/themes/pure/cover.png
new file mode 100644
index 00000000..cb91aae9
Binary files /dev/null and b/src/data/extra/themes/pure/cover.png differ
diff --git a/src/data/extra/themes/pure/down.svg b/src/data/extra/themes/pure/down.svg
new file mode 100644
index 00000000..00ca93ed
--- /dev/null
+++ b/src/data/extra/themes/pure/down.svg
@@ -0,0 +1,8 @@
+
diff --git a/src/data/extra/themes/pure/down_disabled.svg b/src/data/extra/themes/pure/down_disabled.svg
new file mode 100644
index 00000000..1863b6ae
--- /dev/null
+++ b/src/data/extra/themes/pure/down_disabled.svg
@@ -0,0 +1,8 @@
+
diff --git a/src/data/extra/themes/pure/float.svg b/src/data/extra/themes/pure/float.svg
new file mode 100644
index 00000000..4a3ad0fb
--- /dev/null
+++ b/src/data/extra/themes/pure/float.svg
@@ -0,0 +1 @@
+
diff --git a/src/data/extra/themes/pure/highlight.css b/src/data/extra/themes/pure/highlight.css
new file mode 100644
index 00000000..8030a50b
--- /dev/null
+++ b/src/data/extra/themes/pure/highlight.css
@@ -0,0 +1,245 @@
+/* PrismJS 1.21.0
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+abap+abnf+actionscript+ada+agda+al+antlr4+apacheconf+apl+applescript+aql+arduino+arff+asciidoc+aspnet+asm6502+autohotkey+autoit+bash+basic+batch+bbcode+bison+bnf+brainfuck+brightscript+bro+bsl+c+csharp+cpp+cil+clojure+cmake+coffeescript+concurnas+csp+crystal+css-extras+cypher+d+dart+dax+dhall+diff+django+dns-zone-file+docker+ebnf+editorconfig+eiffel+ejs+elixir+elm+etlua+erb+erlang+excel-formula+fsharp+factor+firestore-security-rules+flow+fortran+ftl+gml+gcode+gdscript+gedcom+gherkin+git+glsl+go+graphql+groovy+haml+handlebars+haskell+haxe+hcl+hlsl+http+hpkp+hsts+ichigojam+icon+ignore+inform7+ini+io+j+java+javadoc+javadoclike+javastacktrace+jolie+jq+jsdoc+js-extras+json+json5+jsonp+jsstacktrace+js-templates+julia+keyman+kotlin+latex+latte+less+lilypond+liquid+lisp+livescript+llvm+lolcode+lua+makefile+markdown+markup-templating+matlab+mel+mizar+mongodb+monkey+moonscript+n1ql+n4js+nand2tetris-hdl+naniscript+nasm+neon+nginx+nim+nix+nsis+objectivec+ocaml+opencl+oz+parigp+parser+pascal+pascaligo+pcaxis+peoplecode+perl+php+phpdoc+php-extras+plsql+powerquery+powershell+processing+prolog+properties+protobuf+pug+puppet+pure+purebasic+python+q+qml+qore+r+racket+jsx+tsx+reason+regex+renpy+rest+rip+roboconf+robotframework+ruby+rust+sas+sass+scss+scala+scheme+shell-session+smali+smalltalk+smarty+solidity+solution-file+soy+sparql+splunk-spl+sqf+sql+stan+iecst+stylus+swift+t4-templating+t4-cs+t4-vb+tap+tcl+tt2+textile+toml+turtle+twig+typescript+typoscript+unrealscript+vala+vbnet+velocity+verilog+vhdl+vim+visual-basic+warpscript+wasm+wiki+xeora+xml-doc+xojo+xquery+yaml+yang+zig&plugins=line-numbers+toolbar+copy-to-clipboard+filter-highlight-all */
+/**
+ * prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+
+code[class*="language-"],
+pre[class*="language-"] {
+ color: black;
+ background: none;
+ font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+ font-size: 1em;
+ text-align: left;
+ white-space: pre;
+ word-spacing: normal;
+ word-break: normal;
+ word-wrap: normal;
+ line-height: 1.5;
+
+ -moz-tab-size: 4;
+ -o-tab-size: 4;
+ tab-size: 4;
+
+ -webkit-hyphens: none;
+ -moz-hyphens: none;
+ -ms-hyphens: none;
+ hyphens: none;
+}
+
+pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
+code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+
+pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
+code[class*="language-"]::selection, code[class*="language-"] ::selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+
+@media print {
+ code[class*="language-"],
+ pre[class*="language-"] {
+ text-shadow: none;
+ }
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+ padding: 1em;
+ margin: .5em 0;
+ overflow: auto;
+}
+
+:not(pre) > code[class*="language-"],
+pre[class*="language-"] {
+ background: #ede8e4;
+}
+
+/* Inline code */
+:not(pre) > code[class*="language-"] {
+ padding: .1em;
+ border-radius: .3em;
+ white-space: normal;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+ color: slategray;
+}
+
+.token.punctuation {
+ color: #999;
+}
+
+.token.namespace {
+ opacity: .7;
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.constant,
+.token.symbol,
+.token.deleted {
+ color: #905;
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+ color: #690;
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+ color: #9a6e3a;
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+ color: #07a;
+}
+
+.token.function,
+.token.class-name {
+ color: #DD4A68;
+}
+
+.token.regex,
+.token.important,
+.token.variable {
+ color: #e90;
+}
+
+.token.important,
+.token.bold {
+ font-weight: bold;
+}
+.token.italic {
+ font-style: italic;
+}
+
+.token.entity {
+ cursor: help;
+}
+
+pre[class*="language-"].line-numbers {
+ position: relative;
+ padding-left: 3.8em;
+ counter-reset: linenumber;
+}
+
+pre[class*="language-"].line-numbers > code {
+ position: relative;
+ white-space: inherit;
+}
+
+.line-numbers .line-numbers-rows {
+ position: absolute;
+ pointer-events: none;
+ top: 0;
+ font-size: 100%;
+ left: -3.8em;
+ width: 3em; /* works for line-numbers below 1000 lines */
+ letter-spacing: -1px;
+ border-right: 1px solid #999;
+
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+
+}
+
+ .line-numbers-rows > span {
+ display: block;
+ counter-increment: linenumber;
+ }
+
+ .line-numbers-rows > span:before {
+ content: counter(linenumber);
+ color: #999;
+ display: block;
+ padding-right: 0.8em;
+ text-align: right;
+ }
+
+div.code-toolbar {
+ position: relative;
+}
+
+div.code-toolbar > .toolbar {
+ position: absolute;
+ top: .3em;
+ right: .2em;
+ transition: opacity 0.3s ease-in-out;
+ opacity: 0;
+}
+
+div.code-toolbar:hover > .toolbar {
+ opacity: 1;
+}
+
+/* Separate line b/c rules are thrown out if selector is invalid.
+ IE11 and old Edge versions don't support :focus-within. */
+div.code-toolbar:focus-within > .toolbar {
+ opacity: 1;
+}
+
+div.code-toolbar > .toolbar .toolbar-item {
+ display: inline-block;
+}
+
+div.code-toolbar > .toolbar a {
+ cursor: pointer;
+}
+
+div.code-toolbar > .toolbar button {
+ background: none;
+ border: 0;
+ color: inherit;
+ font: inherit;
+ line-height: normal;
+ overflow: visible;
+ padding: 0;
+ -webkit-user-select: none; /* for button */
+ -moz-user-select: none;
+ -ms-user-select: none;
+}
+
+div.code-toolbar > .toolbar a,
+div.code-toolbar > .toolbar button,
+div.code-toolbar > .toolbar span {
+ color: #bbb;
+ font-size: .8em;
+ padding: 0 .5em;
+ background: rgba(224, 224, 224, 0.2);
+ box-shadow: 0 2px 0 0 rgba(0,0,0,0.2);
+ border-radius: .5em;
+}
+
+div.code-toolbar > .toolbar a:hover,
+div.code-toolbar > .toolbar a:focus,
+div.code-toolbar > .toolbar button:hover,
+div.code-toolbar > .toolbar button:focus,
+div.code-toolbar > .toolbar span:hover,
+div.code-toolbar > .toolbar span:focus {
+ color: inherit;
+ text-decoration: none;
+}
+
diff --git a/src/data/extra/themes/pure/interface.qss b/src/data/extra/themes/pure/interface.qss
new file mode 100644
index 00000000..52f0c804
--- /dev/null
+++ b/src/data/extra/themes/pure/interface.qss
@@ -0,0 +1,1096 @@
+/* Qt Style Sheets file
+ * Please refer to https://doc.qt.io/qt-5.12/stylesheet-reference.html
+ * for detailed inforamtion.
+ * **Notice** that selectors using base class and child class are considered to have the
+ * same specificity and the rule that appears last takes precedence.
+ * VNote specific syntax:
+ * - @widgets#toolbox#title#border: reference to a color defined in palette.ini;
+ * - $2px: 2 will be scaled by multiplying current display scaled factor.
+ */
+
+QWidget {
+ color: @widgets#qwidget#fg;
+ background-color: @widgets#qwidget#bg;
+ font-family: "冬青黑体", "YaHei Consolas Hybrid", "Microsoft YaHei", "微软雅黑", "Microsoft YaHei UI", "WenQuanYi Micro Hei", "文泉驿雅黑", "Dengxian", "等线体", "STXihei", "华文细黑", "Liberation Sans", "Droid Sans", "NSimSun", "新宋体", "SimSun", "宋体", "Helvetica", "sans-serif", "Tahoma", "Arial", "Verdana", "Geneva", "Georgia", "Times New Roman";
+}
+
+QWidget[DialogCentralWidget="true"] {
+ border: none;
+}
+
+/* All widgets */
+*[State="info"] {
+ border: 2px solid @widgets#qwidget#info#border;
+}
+
+*[State="warning"] {
+ border: 2px solid @widgets#qwidget#warning#border;
+}
+
+*[State="error"] {
+ border: 2px solid @widgets#qwidget#error#border;
+}
+
+/* QAbstractScrollArea */
+QAbstractScrollArea {
+ border: 1px solid @widgets#qabstractscrollarea#border;
+}
+
+QAbstractScrollArea::corner {
+ background-color: @widgets#qabstractscrollarea#corner#bg;
+ border: none;
+}
+
+/* ToolBox */
+vnotex--ToolBox QWidget[ToolBoxTitle="true"] {
+ border-bottom: 2px solid @widgets#toolbox#title#border;
+ margin: 0px;
+ padding: 0px;
+}
+
+vnotex--ToolBox QToolButton[ToolBoxTitleButton="true"] {
+ padding: 4px 10px 4px 4px;
+ margin: 0px;
+ border: none;
+}
+
+vnotex--ToolBox QToolButton[ToolBoxTitleButton="true"]:checked {
+ font-weight: bold;
+ /* Reverse */
+ color: @widgets#toolbox#title#button#active#fg;
+ background-color: @widgets#toolbox#title#button#active#bg;
+}
+
+/* TitleBar */
+/* The height should be large enough regarding to the action buttons. */
+vnotex--TitleBar QLabel[TitleBarTitle="true"] {
+ padding: 5px 1px;
+ margin: 0px;
+}
+
+/* QDockWidget */
+QDockWidget {
+ color: @widgets#qdockwidget#fg;
+ background-color: @widgets#qdockwidget#bg;
+ titlebar-close-icon: url(close.svg);
+ titlebar-normal-icon: url(float.svg);
+}
+
+QDockWidget::Title {
+ background-color: @widgets#qdockwidget#title#bg;
+ text-align: center left;
+}
+
+QDockWidget::close-button, QDockWidget::float-button {
+ border: none;
+ icon-size: 16px;
+ width: 16px;
+}
+
+QDockWidget::close-button:hover, QDockWidget::float-button:hover {
+ background-color: @widgets#qdockwidget#title#button#hover#bg;
+}
+
+QDockWidget::close-button {
+ subcontrol-position: top right;
+ subcontrol-origin: margin;
+ position: absolute;
+ top: 0px; right: 0px; bottom: 0px;
+}
+
+QDockWidget::float-button {
+ subcontrol-position: top right;
+ subcontrol-origin: margin;
+ position: absolute;
+ top: 0px; right: 18px; bottom: 0px;
+}
+
+/* NotebookSelector */
+vnotex--NotebookSelector {
+ icon-size: 20px;
+}
+
+vnotex--NotebookSelector QAbstractItemView::item {
+ padding: 5px, 2px, 5px, 2px;
+}
+
+QToolTip
+{
+ border: none;
+ color: @widgets#qtooltip#fg;
+ background-color: @widgets#qtooltip#bg;
+}
+
+/* QMainWindow */
+QMainWindow {
+ color: @widgets#qmainwindow#fg;
+ background-color: @widgets#qmainwindow#bg;
+}
+
+QMainWindow::separator {
+ /* For vertical */
+ width: 1px;
+ /* For horizontal */
+ height: 1px;
+ background-color: @widgets#qmainwindow#separator#bg;
+}
+
+/* QToolBar */
+QToolBar {
+ border: none;
+ background-color: @widgets#qtoolbar#bg;
+}
+
+QToolBar::separator {
+ width: 1px;
+ height: 1px;
+ border: none;
+ background-color: @widgets#qtoolbar#separator#bg;
+}
+
+QToolBarExtension {
+ background-color: @widgets#qtoolbar#extension#bg;
+}
+
+/* QToolButton */
+/* Only for MenuButtonPopup */
+QToolButton[popupMode="1"] {
+ /* Make way for the popup button */
+ padding-right: 16px; /* make way for the popup button */
+}
+
+/* Must put after popupMode related styles */
+QToolButton[ActionToolButton="true"] {
+ border: none;
+}
+
+QToolButton[ActionToolButton="true"]::menu-indicator {
+ image: none;
+}
+
+QToolButton[NoMenuIndicator="true"]::menu-indicator {
+ image: none;
+}
+
+/* QPushButton, QToolButton */
+QToolButton {
+ border: none;
+ color: @widgets#qtoolbutton#fg;
+ background-color: @widgets#qtoolbutton#bg;
+ margin: 1px 3px 1px 3px;
+ padding: 0px;
+}
+
+QToolButton:checked {
+ color: @widgets#qtoolbutton#checked#fg;
+ background-color: @widgets#qtoolbutton#checked#bg;
+}
+
+QToolButton:hover {
+ border:none;
+ color: @widgets#qtoolbutton#hover#fg;
+ background-color: @widgets#qtoolbutton#hover#bg;
+}
+
+QToolButton:pressed {
+ color: @widgets#qtoolbutton#pressed#fg;
+ background-color: @widgets#qtoolbutton#pressed#bg;
+}
+
+/* the subcontrols below are used only in the MenuButtonPopup mode */
+QToolButton::menu-button {
+ border: none;
+ width: 16px;
+}
+
+QToolButton::menu-arrow {
+ image: url(arrow_dropdown.svg);
+ width: 16px;
+ height: 16px;
+}
+
+QPushButton[DangerButton="true"]:hover, QToolButton[DangerButton="true"]:hover {
+ color: @widgets#qwidget#danger#fg;
+ background-color: @widgets#qwidget#danger#bg;
+ border: none;
+}
+
+/* QPushButton */
+QPushButton {
+ color: @widgets#qpushbutton#fg;
+ background-color: @widgets#qpushbutton#bg;
+ border: 1px solid @widgets#qpushbutton#border;
+ padding: 3px;
+ min-width: 80px;
+}
+
+QPushButton:default {
+ border: 1px solid @widgets#qpushbutton#default#border;
+}
+
+QPushButton:focus {
+ color: @widgets#qpushbutton#focus#fg;
+ background-color: @widgets#qpushbutton#focus#bg;
+}
+
+QPushButton:checked {
+ color: @widgets#qpushbutton#checked#fg;
+ background-color: @widgets#qpushbutton#checked#bg;
+}
+
+QPushButton:flat {
+ border: none;
+}
+
+QPushButton:hover {
+ color: @widgets#qpushbutton#hover#fg;
+ background-color: @widgets#qpushbutton#hover#bg;
+}
+
+QPushButton:pressed {
+ color: @widgets#qpushbutton#pressed#fg;
+ background-color: @widgets#qpushbutton#pressed#bg;
+}
+
+QPushButton:disabled {
+ color: @widgets#qpushbutton#disabled#fg;
+ background-color: @widgets#qpushbutton#disabled#bg;
+}
+
+QPushButton::menu-indicator {
+ image: url(arrow_dropdown.svg);
+ width: 16px;
+ height: 16px;
+}
+
+/* QMenu */
+QMenu {
+ color: @widgets#qmenu#fg;
+ background-color: @widgets#qmenu#bg;
+ border: 2px solid @widgets#qmenu#border;
+}
+
+QMenu::icon {
+ margin: 5px;
+}
+
+QMenu::item {
+ padding: 5px 30px 5px 30px;
+ border: 1px solid transparent;
+}
+
+QMenu::item:selected {
+ color: @widgets#qmenu#item#selected#fg;
+ background-color: @widgets#qmenu#item#selected#bg;
+}
+
+QMenu::item:disabled {
+ color: @widgets#qmenu#item#disabled#fg;
+}
+
+QMenu::icon:checked { /* appearance of a 'checked' icon */
+ border: 2px solid @widgets#qmenu#fg;
+}
+
+QMenu::separator {
+ height: 1px;
+ background-color: @widgets#qmenu#separator#bg;
+ margin-left: 10px;
+ margin-right: 5px;
+}
+
+QMenu::indicator {
+ width: 20px;
+ height: 20px;
+}
+
+QMenu::indicator:non-exclusive:unchecked {
+ image: none;
+}
+
+QMenu::indicator:non-exclusive:checked {
+ image: url(menu_checkbox.svg);
+}
+
+QMenu::indicator:exclusive:unchecked {
+ image: none;
+}
+
+QMenu::indicator:exclusive:checked {
+ image: url(menu_radiobutton.svg);
+}
+/* End QMenu */
+
+QDialog {
+ color: @widgets#qdialog#fg;
+ background-color: @widgets#qdialog#bg
+}
+
+/* DrapDropAreaIndicator */
+vnotex--DragDropAreaIndicator {
+ border: 2px dashed @widgets#dragdropareaindicator#border;
+ margin: 2px;
+ max-height: 200px;
+}
+
+/* QComboBox */
+QComboBox {
+ padding: 3px;
+ color: @widgets#qcombobox#fg;
+ background-color: @widgets#qcombobox#bg;
+ border: 1px solid @widgets#qcombobox#border;
+}
+
+QComboBox:focus, QComboBox:on {
+ background-color: @widgets#qcombobox#focus#bg;
+ border: 2px solid @widgets#qcombobox#focus#border;
+}
+
+QComboBox:hover {
+ background-color: @widgets#qcombobox#hover#bg;
+ border: 2px solid @widgets#qcombobox#hover#border;
+}
+
+QComboBox:disabled {
+ color: @widgets#qcombobox#disabled#fg;
+}
+
+QComboBox::drop-down {
+ subcontrol-origin: padding;
+ subcontrol-position: top right;
+ width: 20px;
+ border: none;
+ background-color: transparent;
+}
+
+QComboBox::down-arrow {
+ image: url(arrow_dropdown.svg);
+ width: 20px;
+ height: 20px;
+}
+
+QComboBox::down-arrow:disabled {
+ image: url(arrow_dropdown_disabled.svg);
+ width: 20px;
+ height: 20px;
+}
+
+QComboBox QAbstractItemView {
+ padding: 2px;
+ border: 1px solid @widgets#qcombobox#view#border;
+ background-color: @widgets#qcombobox#view#bg;
+ selection-color: @widgets#qcombobox#view#selection#fg;
+ selection-background-color: @widgets#qcombobox#view#selection#bg;
+}
+
+QComboBox QAbstractItemView::item {
+ background-color: transparent;
+ padding: 3px;
+}
+
+QComboBox QAbstractItemView::item:hover {
+ color: @widgets#qcombobox#item#hover#fg;
+ background-color: @widgets#qcombobox#item#hover#bg;
+}
+
+/* QLabel */
+QLabel {
+ border: none;
+ color: @widgets#qlabel#fg;
+ background-color: transparent;
+}
+
+vnotex--DragDropAreaIndicator QLabel {
+ color: @widgets#dragdropareaindicator#fg;
+ font-size: 12pt;
+ font-weight: bold;
+}
+
+/* QLineEdit */
+QLineEdit {
+ border: 1px solid @widgets#qlineedit#border;
+ padding: 3px;
+ color: @widgets#qlineedit#fg;
+ background-color: @widgets#qlineedit#bg;
+ selection-color: @widgets#qlineedit#selection#fg;
+ selection-background-color: @widgets#qlineedit#selection#bg;
+}
+
+QLineEdit:focus {
+ border: 2px solid @widgets#qlineedit#focus#border;
+ background-color: @widgets#qlineedit#focus#bg;
+}
+
+QLineEdit:hover {
+ border: 2px solid @widgets#qlineedit#hover#border;
+ background-color: @widgets#qlineedit#hover#bg;
+}
+
+QLineEdit:disabled {
+ color: @widgets#qlineedit#disabled#fg;
+}
+
+/* QTabWidget */
+QTabWidget {
+ border: none;
+}
+
+QTabWidget::pane {
+ border: none;
+}
+
+QTabWidget::tab-bar {
+ alignment: left;
+}
+
+/* QTabBar */
+QTabBar {
+ border: none;
+}
+
+QTabBar::tab {
+ color: @widgets#qtabbar#tab#fg;
+ background-color: @widgets#qtabbar#tab#bg;
+ border: none;
+}
+
+QTabBar::tab:top, QTabBar::tab:bottom {
+ border-top: 2px solid transparent;
+ border-right: 1px solid @widgets#qtabbar#tab#border;
+ /* MUST leave right and left padding 0px. */
+ padding: 2px 0px 2px 0px;
+ height: 20px;
+}
+
+QTabBar::tab:right {
+ border-right: 3px solid transparent;
+ border-bottom: 1px solid @widgets#qtabbar#tab#border;
+ padding: 5px 2px 5px 2px;
+ min-width: 20px;
+}
+
+QTabBar::tab:left {
+ border-left: 3px solid transparent;
+ border-bottom: 1px solid @widgets#qtabbar#tab#border;
+ padding: 5px 2px 5px 2px;
+ min-width: 20px;
+}
+
+QTabBar::tab:hover {
+ color: @widgets#qtabbar#tab#hover#fg;
+ background-color: @widgets#qtabbar#tab#hover#bg;
+}
+
+QTabBar::tab:selected {
+ color: @widgets#qtabbar#tab#selected#fg;
+ background-color: @widgets#qtabbar#tab#selected#bg;
+}
+
+QTabBar::tab:top:selected, QTabBar::tab:bottom:selected {
+ border-top: 2px solid @widgets#qtabbar#tab#selected#border;
+}
+
+QTabBar::tab:right:selected {
+ border-right: 3px solid @widgets#qtabbar#tab#selected#border;
+}
+
+QTabBar::tab:left:selected {
+ border-left: 3px solid @widgets#qtabbar#tab#selected#border;
+}
+
+QTabBar::close-button {
+ image: url(close_grey.svg);
+}
+
+QTabBar::close-button:focus {
+ image: url(close.svg);
+}
+
+QTabBar::close-button:hover {
+ image: url(close.svg);
+}
+
+QTabBar::scroller {
+ width: 20px;
+}
+
+QTabBar QToolButton {
+ border: none;
+}
+
+QTabBar QToolButton::right-arrow:enabled {
+ image: url(right.svg);
+}
+
+QTabBar QToolButton::left-arrow:enabled {
+ image: url(left.svg);
+}
+
+QTabBar QToolButton::right-arrow:disabled {
+ image: url(right_disabled.svg);
+}
+
+QTabBar QToolButton::left-arrow:disabled {
+ image: url(left_disabled.svg);
+}
+
+/* QTreeView */
+QTreeView {
+ color: @widgets#qtreeview#fg;
+ background-color: @widgets#qtreeview#bg;
+ show-decoration-selected: 0;
+ border: none;
+ selection-background-color: transparent;
+ outline: none;
+}
+
+QTreeView::item {
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+QTreeView::item:hover {
+ color: @widgets#qtreeview#item#hover#fg;
+ background-color: @widgets#qtreeview#item#hover#bg;
+}
+
+QTreeView::item:selected {
+ color: @widgets#qtreeview#item#selected#fg;
+ background-color: @widgets#qtreeview#item#selected#bg;
+}
+
+QTreeView::item:selected:active {
+ color: @widgets#qtreeview#item#selected#active#fg;
+ background-color: @widgets#qtreeview#item#selected#active#bg;
+}
+
+QTreeView::item:selected:!active {
+ color: @widgets#qtreeview#item#selected#inactive#fg;
+ background-color: @widgets#qtreeview#item#selected#inactive#bg;
+}
+
+QTreeView::branch:has-siblings:!adjoins-item {
+ border-image: none;
+}
+
+QTreeView::branch:has-siblings:adjoins-item {
+ border-image: none;
+}
+
+QTreeView::branch:!has-children:!has-siblings:adjoins-item {
+ border-image: none;
+}
+
+QTreeView::branch:has-children:!has-siblings:closed,
+QTreeView::branch:closed:has-children:has-siblings {
+ border-image: none;
+ image: url(branch_closed.svg);
+}
+
+QTreeView::branch:open:has-children:!has-siblings,
+QTreeView::branch:open:has-children:has-siblings {
+ border-image: none;
+ image: url(branch_open.svg);
+}
+
+/* QListView */
+QListView {
+ color: @widgets#qlistview#fg;
+ background-color: @widgets#qlistview#bg;
+ show-decoration-selected: 0;
+ border: none;
+ selection-background-color: transparent;
+ outline: none;
+}
+
+QListView::item {
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+QListView::item:hover {
+ color: @widgets#qlistview#item#hover#fg;
+ background-color: @widgets#qlistview#item#hover#bg;
+}
+
+QListView::item:selected {
+ color: @widgets#qlistview#item#selected#fg;
+ background-color: @widgets#qlistview#item#selected#bg;
+}
+
+QListView::item:selected:active {
+ color: @widgets#qlistview#item#selected#active#fg;
+ background-color: @widgets#qlistview#item#selected#active#bg;
+}
+
+QListView::item:selected:!active {
+ color: @widgets#qlistview#item#selected#inactive#fg;
+ background-color: @widgets#qlistview#item#selected#inactive#bg;
+}
+
+QListView::item:disabled {
+ background-color: transparent;
+}
+
+/* QSplitter */
+QSplitter {
+ border: none;
+}
+
+QSplitter::handle {
+ background-color: @widgets#qsplitter#handle#bg;
+}
+
+QSplitter::handle:pressed {
+ background-color: @widgets#qsplitter#handle#pressed#bg;
+}
+
+QSplitter::handle:vertical {
+ height: 2px;
+}
+
+QSplitter::handle:horizontal {
+ width: 2px;
+}
+
+/* QStatusBar */
+QStatusBar {
+ color: @widgets#qstatusbar#fg;
+ background-color: @widgets#qstatusbar#bg;
+ border: none;
+}
+
+QStatusBar::item {
+ border: none;
+}
+
+/* QScrollBar */
+QScrollBar::add-page, QScrollBar::sub-page {
+ background-color: @widgets#qscrollbar#addpage#bg;
+}
+
+QScrollBar:vertical {
+ background-color: @widgets#qscrollbar#bg;
+ width: 16px;
+ margin: 16px 0px 16px 0px;
+ padding: 0px 2px 0px 2px;
+ border: none;
+}
+
+QScrollBar::handle:vertical {
+ background-color: @widgets#qscrollbar#handle#bg;
+ min-height: 16px;
+}
+
+QScrollBar::handle:vertical:hover {
+ background-color: @widgets#qscrollbar#handle#hover#bg;
+}
+
+QScrollBar::handle:vertical:pressed {
+ background-color: @widgets#qscrollbar#handle#pressed#bg;
+}
+
+QScrollBar::add-line:vertical {
+ border: none;
+ background-color: @widgets#qscrollbar#bg;
+ width: 16px;
+ height: 16px;
+ subcontrol-position: bottom;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::add-line:vertical:hover {
+ background-color: @widgets#qscrollbar#handle#hover#bg;
+}
+
+QScrollBar::add-line:vertical:pressed {
+ background-color: @widgets#qscrollbar#handle#pressed#bg;
+}
+
+QScrollBar::sub-line:vertical {
+ border: none;
+ background-color: @widgets#qscrollbar#bg;
+ width: 16px;
+ height: 16px;
+ subcontrol-position: top;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::sub-line:vertical:hover {
+ background-color: @widgets#qscrollbar#handle#hover#bg;
+}
+
+QScrollBar::sub-line:vertical:pressed {
+ background-color: @widgets#qscrollbar#handle#pressed#bg;
+}
+
+QScrollBar::down-arrow:vertical {
+ image: url(down.svg);
+ width: 16px;
+ height: 16px;
+}
+
+QScrollBar::up-arrow:vertical {
+ image: url(up.svg);
+ width: 16px;
+ height: 16px;
+}
+
+QScrollBar:horizontal {
+ background-color: @widgets#qscrollbar#bg;
+ height: 16px;
+ margin: 0px 16px 0px 16px;
+ padding: 2px 0px 2px 0px;
+ border: none;
+}
+
+QScrollBar::handle:horizontal {
+ background-color: @widgets#qscrollbar#handle#bg;
+ min-width: 16px;
+}
+
+QScrollBar::handle:horizontal:hover {
+ background-color: @widgets#qscrollbar#handle#hover#bg;
+}
+
+QScrollBar::handle:horizontal:pressed {
+ background-color: @widgets#qscrollbar#handle#pressed#bg;
+}
+
+QScrollBar::add-line:horizontal {
+ border: none;
+ background-color: @widgets#qscrollbar#bg;
+ width: 16px;
+ height: 16px;
+ subcontrol-position: right;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::add-line:horizontal:hover {
+ background-color: @widgets#qscrollbar#handle#hover#bg;
+}
+
+QScrollBar::add-line:horizontal:pressed {
+ background-color: @widgets#qscrollbar#handle#pressed#bg;
+}
+
+QScrollBar::sub-line:horizontal {
+ border: none;
+ background-color: @widgets#qscrollbar#bg;
+ width: 16px;
+ height: 16px;
+ subcontrol-position: left;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::sub-line:horizontal:hover {
+ background-color: @widgets#qscrollbar#handle#hover#bg;
+}
+
+QScrollBar::sub-line:horizontal:pressed {
+ background-color: @widgets#qscrollbar#handle#pressed#bg;
+}
+
+QScrollBar::right-arrow:horizontal {
+ image: url(right.svg);
+ width: 16px;
+ height: 16px;
+}
+
+QScrollBar::left-arrow:horizontal {
+ image: url(left.svg);
+ width: 16px;
+ height: 16px;
+}
+
+/* QCheckBox */
+QCheckBox {
+ spacing: 5px;
+}
+
+QCheckBox:disabled {
+ color: @widgets#qcheckbox#disabled#fg;
+}
+
+QCheckBox::indicator:unchecked {
+ image: url(checkbox_unchecked.svg);
+}
+
+QCheckBox::indicator:unchecked:disabled {
+ image: url(checkbox_unchecked_disabled.svg);
+}
+
+QCheckBox::indicator:checked {
+ image: url(checkbox_checked.svg);
+}
+
+QCheckBox::indicator:checked:disabled {
+ image: url(checkbox_checked_disabled.svg);
+}
+
+QCheckBox::indicator {
+ width: 20px;
+ height: 20px;
+}
+
+QCheckBox::indicator:focus {
+ background-color: @widgets#qcheckbox#indicator#focus#bg;
+}
+
+QCheckBox::indicator:hover {
+ background-color: @widgets#qcheckbox#indicator#hover#bg;
+}
+
+QCheckBox::indicator:pressed {
+ background-color: @widgets#qcheckbox#indicator#pressed#bg;
+}
+
+/* QRadioButton */
+QRadioButton {
+ spacing: 5px;
+}
+
+QRadioButton:disabled {
+ color: @widgets#qradiobutton#disabled#fg;
+}
+
+QRadioButton::indicator:unchecked {
+ image: url(radiobutton_unchecked.svg);
+}
+
+QRadioButton::indicator:unchecked:disabled {
+ image: url(radiobutton_unchecked_disabled.svg);
+}
+
+QRadioButton::indicator:checked {
+ image: url(radiobutton_checked.svg);
+}
+
+QRadioButton::indicator:checked:disabled {
+ image: url(radiobutton_checked_disabled.svg);
+}
+
+QRadioButton::indicator {
+ width: 20px;
+ height: 20px;
+}
+
+QRadioButton::indicator:focus {
+ background-color: @widgets#qradiobutton#indicator#focus#bg;
+}
+
+QRadioButton::indicator:hover {
+ background-color: @widgets#qradiobutton#indicator#hover#bg;
+}
+
+QRadioButton::indicator:pressed {
+ background-color: @widgets#qradiobutton#indicator#pressed#bg;
+}
+
+QAbstractSpinBox {
+ border: 1px solid @widgets#qspinbox#border;
+ color: @widgets#qspinbox#fg;
+ background-color: @widgets#qspinbox#bg;
+ padding-right: 25px;
+ min-height: 25px;
+ selection-color: @widgets#qspinbox#selection#fg;
+ selection-background-color: @widgets#qspinbox#selection#bg;
+}
+
+QAbstractSpinBox:disabled {
+ color: @widgets#qspinbox#disabled#fg;
+ background-color: @widgets#qspinbox#disabled#bg;
+}
+
+QAbstractSpinBox:focus {
+ border: 2px solid @widgets#qspinbox#focus#border;
+ background-color: @widgets#qspinbox#focus#bg;
+}
+
+QAbstractSpinBox:hover {
+ border: 2px solid @widgets#qspinbox#hover#border;
+ background-color: @widgets#qspinbox#hover#bg;
+}
+
+QAbstractSpinBox::up-button {
+ subcontrol-origin: border;
+ /* Position at the top right corner */
+ subcontrol-position: top right;
+ width: 25px;
+ border: none;
+ background-color: transparent;
+}
+
+QAbstractSpinBox::up-button:hover {
+ background-color: @widgets#qspinbox#button#hover#bg;
+}
+
+QAbstractSpinBox::up-button:pressed {
+ background-color: @widgets#qspinbox#button#pressed#bg;
+}
+
+QAbstractSpinBox::up-arrow {
+ image: url(up.svg);
+ width: 12px;
+ height: 12px;
+}
+
+QAbstractSpinBox::up-arrow:disabled, QAbstractSpinBox::up-arrow:off {
+ image: url(up_disabled.svg);
+}
+
+QAbstractSpinBox::down-button {
+ subcontrol-origin: border;
+ /* Position at the top right corner */
+ subcontrol-position: bottom right;
+ width: 25px;
+ border: none;
+ background-color: transparent;
+}
+
+QAbstractSpinBox::down-button:hover {
+ background-color: @widgets#qspinbox#button#hover#bg;
+}
+
+QAbstractSpinBox::down-button:pressed {
+ background-color: @widgets#qspinbox#button#pressed#bg;
+}
+
+QAbstractSpinBox::down-arrow {
+ image: url(down.svg);
+ width: 12px;
+ height: 12px;
+}
+
+QAbstractSpinBox::down-arrow:disabled, QAbstractSpinBox::down-arrow:off {
+ image: url(down_disabled.svg);
+}
+
+/* QHeaderView */
+QHeaderView::section {
+ color: @widgets#qheaderview#section#fg;
+ background-color: @widgets#qheaderview#section#bg;
+ padding-left: 4px;
+ border: none;
+ border-left: 1px solid @widgets#qheaderview#section#border;
+ border-bottom: 1px solid @widgets#qheaderview#section#border;
+}
+
+QHeaderView::section:checked
+{
+ color: @widgets#qheaderview#section#checked#fg;
+ background-color: @widgets#qheaderview#section#checked#bg;
+}
+
+/* style the sort indicator */
+QHeaderView::down-arrow {
+ image: url(down.svg);
+ width: 12px;
+ height: 12px;
+}
+
+QHeaderView::up-arrow {
+ image: url(up.svg);
+ width: 12px;
+ height: 12px;
+}
+
+/* QProgressBar */
+QProgressBar {
+ background-color: @widgets#qprogressbar#bg;
+ border: 1px solid @widgets#qprogressbar#border;
+ text-align: center;
+}
+
+QProgressBar::chunk {
+ background-color: @widgets#qprogressbar#chunk#bg;
+ width: 20px;
+}
+
+/* QGroupBox */
+QGroupBox {
+ border: 2px solid @widgets#qgroupbox#border;
+ border-radius: 5px;
+ margin-top: 2ex;
+}
+
+QGroupBox::title {
+ color: @widgets#qgroupbox#title#fg;
+ subcontrol-origin: margin;
+ subcontrol-position: top left;
+ position: absolute;
+ padding: 0 3px;
+ top: 0px;
+ left: 10px;
+ bottom: 0px;
+}
+
+/* QSlider */
+QSlider::groove:horizontal {
+ border: 1px solid @widgets#qslider#groove#border;
+ height: 8px;
+ background-color: @widgets#qslider#groove#bg;
+ margin: 2px 0;
+}
+
+QSlider::handle:horizontal {
+ border: 1px solid @widgets#qslider#handle#border;
+ background-color: @widgets#qslider#handle#bg;
+ width: 18px;
+ margin: -2px 0;
+}
+
+QSlider::add-page:horizontal {
+ background-color: transparent;
+}
+
+QSlider::sub-page:horizontal {
+ border: 1px solid @widgets#qslider#subpage#border;
+ background-color: @widgets#qslider#subpage#bg;
+ margin: 2px 0;
+}
+
+QSlider::groove:vertical {
+ border: 1px solid @widgets#qslider#groove#border;
+ width: 8px;
+ background-color: @widgets#qslider#groove#bg;
+ margin: 0 2px;
+}
+
+QSlider::handle:vertical {
+ border: 1px solid @widgets#qslider#handle#border;
+ background-color: @widgets#qslider#handle#bg;
+ height: 18px;
+ margin: 0 -2px;
+}
+
+QSlider::add-page:vertical {
+ background-color: transparent;
+}
+
+QSlider::sub-page:vertical {
+ border: 1px solid @widgets#qslider#subpage#border;
+ background-color: @widgets#qslider#subpage#bg;
+ margin: 0 2px;
+}
+
+QSizeGrip {
+ image: url(sizegrip.svg);
+ width: 16px;
+ height: 16px;
+}
+
+/* ViewWindow */
+vnotex--ViewWindow QToolBar[ViewWindowToolBar="true"] {
+ background-color: @widgets#viewwindow#toolbar#bg;
+}
+
+/* ViewSplit */
+vnotex--ViewSplit QTabBar::tab:selected {
+ color: @widgets#viewsplit#tabbar#tab#selected#fg;
+ background-color: @widgets#viewsplit#tabbar#tab#selected#bg;
+}
+
+vte--VTextEdit {
+ border: none;
+}
diff --git a/src/data/extra/themes/pure/left.svg b/src/data/extra/themes/pure/left.svg
new file mode 100644
index 00000000..ca5722a9
--- /dev/null
+++ b/src/data/extra/themes/pure/left.svg
@@ -0,0 +1,8 @@
+
diff --git a/src/data/extra/themes/pure/left_disabled.svg b/src/data/extra/themes/pure/left_disabled.svg
new file mode 100644
index 00000000..e161891d
--- /dev/null
+++ b/src/data/extra/themes/pure/left_disabled.svg
@@ -0,0 +1,8 @@
+
diff --git a/src/data/extra/themes/pure/menu_checkbox.svg b/src/data/extra/themes/pure/menu_checkbox.svg
new file mode 100644
index 00000000..39232bae
--- /dev/null
+++ b/src/data/extra/themes/pure/menu_checkbox.svg
@@ -0,0 +1,6 @@
+
diff --git a/src/data/extra/themes/pure/menu_radiobutton.svg b/src/data/extra/themes/pure/menu_radiobutton.svg
new file mode 100644
index 00000000..d61c36f9
--- /dev/null
+++ b/src/data/extra/themes/pure/menu_radiobutton.svg
@@ -0,0 +1,6 @@
+
diff --git a/src/data/extra/themes/pure/palette.json b/src/data/extra/themes/pure/palette.json
new file mode 100644
index 00000000..1aa6ea22
--- /dev/null
+++ b/src/data/extra/themes/pure/palette.json
@@ -0,0 +1,597 @@
+{
+ "metadata" : {
+ "revision" : 0,
+ "//comment" : "If there is a file named 'editor-highlight.theme' under theme folder, this value will be ignored.",
+ "//comment" : "Otherwise, this value specify the theme name to use for syntax highlighting.",
+ "editor-highlight-theme" : "Default",
+ "//comment" : "If there is a file named 'markdown-editor-highlight.theme' under theme folder, this value will be ignored.",
+ "//comment" : "Otherwise, this value specify the theme name to use for syntax highlighting.",
+ "//comment" : "If empty, 'editor-highlight-theme' will be used.",
+ "markdown-editor-highlight-theme" : "Markdown Default",
+ "display_name" : "Pure",
+ "//comment" : "Display name for different locales",
+ "display_name_zh_CN" : "纯净"
+ },
+ "palette" : {
+ "bg3_1" : "#c0c0c0",
+ "bg3_2" : "#cdcdcd",
+ "bg3_3" : "#d2d2d2",
+ "bg3_4" : "#dadada",
+ "bg3_41" : "#e0e0e0",
+ "bg3_5" : "#eaeaea",
+ "bg3_6" : "#f1f1f1",
+ "fg3_5" : "#222222",
+ "fg3_6" : "#646464",
+ "fg3_7" : "#7a7a7a",
+ "fg3_8" : "#9e9e9e",
+ "fg3_9" : "#b0b0b0",
+ "fg3_10" : "#d0d0d0",
+ "bg2_4" : "#007b6e",
+ "bg2_5" : "#00897b",
+ "bg2_6" : "#199488",
+ "bg2_7" : "#e5f3f1",
+ "fg10" : "#b71c1c",
+ "fg11" : "#ab5683",
+ "fg12" : "#283593",
+ "fg13" : "#b42b1f",
+ "fg15_3" : "#b0b0b0",
+ "fg15_4" : "#7a7a7a",
+ "fg15_5" : "#222222",
+ "bg11" : "#6dafff"
+ },
+ "base" : {
+ "normal" : {
+ "fg" : "@palette#fg3_5",
+ "bg" : "@palette#bg3_5",
+ "border" : "@palette#fg3_10"
+ },
+ "master" : {
+ "fg" : "@palette#bg3_6",
+ "bg" : "@palette#bg2_5",
+ "alt" : "@palette#bg2_6"
+ },
+ "header" : {
+ "fg" : "@base#normal#fg",
+ "bg" : "@base#normal#bg"
+ },
+ "footer" : {
+ "fg" : "@base#normal#fg",
+ "bg" : "@base#normal#bg"
+ },
+ "title" : {
+ "fg" : "@base#normal#fg",
+ "bg" : "@palette#bg3_41"
+ },
+ "content" : {
+ "fg" : "@palette#fg3_5",
+ "bg" : "@palette#bg3_6",
+ "border" : "@base#normal#border",
+ "disabled" : {
+ "fg" : "@base#disabled#fg",
+ "bg" : "@base#content#bg"
+ },
+ "pressed" : {
+ "fg" : "@base#pressed#fg",
+ "bg" : "@base#pressed#bg"
+ },
+ "focus" : {
+ "fg" : "@base#content#fg",
+ "bg" : "@base#focus#bg",
+ "border" : "@base#master#bg"
+ },
+ "hover" : {
+ "fg" : "@base#content#fg",
+ "bg" : "@base#hover#bg",
+ "border" : "@base#master#bg"
+ },
+ "selection" : {
+ "fg" : "@palette#fg3_5",
+ "bg" : "@palette#bg11"
+ },
+ "selected" : {
+ "fg" : "@base#content#fg",
+ "bg" : "@base#selected#bg",
+ "active" : {
+ "fg" : "@base#content#selected#fg",
+ "bg" : "@base#content#selected#bg"
+ },
+ "inactive" : {
+ "fg" : "@base#content#selected#fg",
+ "bg" : "@base#content#hover#bg"
+ }
+ }
+ },
+ "edit" : {
+ "focus" : {
+ "fg" : "@base#content#fg",
+ "bg" : "@base#content#bg",
+ "border" : "@base#master#bg"
+ },
+ "hover" : {
+ "fg" : "@base#content#fg",
+ "bg" : "@palette#bg2_7",
+ "border" : "@base#master#bg"
+ }
+ },
+ "error" : {
+ "fg" : "@palette#fg10"
+ },
+ "warning" : {
+ "fg" : "@palette#fg11"
+ },
+ "info" : {
+ "fg" : "@palette#fg12"
+ },
+ "danger" : {
+ "fg": "@base#normal#bg",
+ "bg": "@palette#fg13"
+ },
+ "disabled" : {
+ "fg" : "@palette#fg3_8",
+ "bg" : "@base#normal#bg"
+ },
+ "pressed" : {
+ "fg" : "@palette#fg3_5",
+ "bg" : "@palette#bg3_1"
+ },
+ "focus" : {
+ "fg" : "@palette#fg3_5",
+ "bg" : "@palette#bg3_2"
+ },
+ "hover" : {
+ "fg" : "@palette#fg3_5",
+ "bg" : "@palette#bg3_4"
+ },
+ "selected" : {
+ "fg" : "@palette#fg3_5",
+ "bg" : "@palette#bg3_3"
+ },
+ "icon" : {
+ "fg" : "@palette#fg15_5",
+ "inactive" : {
+ "fg" : "@palette#fg15_4"
+ },
+ "disabled" : {
+ "fg" : "@palette#fg15_3"
+ },
+ "warning" : {
+ "fg" : "@base#warning#fg"
+ },
+ "danger" : {
+ "fg": "@base#danger#fg"
+ }
+ }
+ },
+ "widgets" : {
+ "separator" : {
+ "bg" : "@base#normal#border"
+ },
+ "qwidget" : {
+ "fg" : "@base#normal#fg",
+ "bg" : "@base#normal#bg",
+ "info" : {
+ "border" : "@base#info#fg"
+ },
+ "warning" : {
+ "border" : "@base#warning#fg"
+ },
+ "error" : {
+ "border" : "@base#error#fg"
+ },
+ "danger" : {
+ "fg" : "@base#danger#fg",
+ "bg" : "@base#danger#bg"
+ }
+ },
+ "toolbox" : {
+ "title" : {
+ "border" : "@widgets#toolbox#title#button#active#bg",
+ "button": {
+ "fg" : "@base#normal#fg",
+ "active" : {
+ "fg" : "@base#master#fg",
+ "bg" : "@base#master#bg"
+ }
+ }
+ }
+ },
+ "titlebar" : {
+ "button" : {
+ "fg" : "@base#icon#fg"
+ },
+ "menu_icon" : {
+ "fg" : "@base#icon#fg",
+ "disabled" : {
+ "fg" : "@base#icon#disabled#fg"
+ }
+ }
+ },
+ "toolbar" : {
+ "icon" : {
+ "fg" : "@base#icon#fg",
+ "disabled" : {
+ "fg" : "@base#icon#disabled#fg"
+ },
+ "danger" : {
+ "fg" : "@base#icon#danger#fg"
+ }
+ }
+ },
+ "notebookexplorer" : {
+ "node_icon" : {
+ "fg" : "@base#icon#fg"
+ }
+ },
+ "viewsplit" : {
+ "action_button" : {
+ "fg" : "@base#icon#inactive#fg",
+ "active" : {
+ "fg" : "@base#icon#fg"
+ }
+ },
+ "tabbar" : {
+ "tab" : {
+ "selected" : {
+ "fg" : "@base#content#fg",
+ "bg" : "@base#content#bg"
+ }
+ }
+ }
+ },
+ "qmainwindow" : {
+ "fg" : "@base#normal#fg",
+ "bg" : "@base#normal#bg",
+ "separator" : {
+ "bg" : "@widgets#separator#bg"
+ }
+ },
+ "dragdropareaindicator" : {
+ "fg" : "@base#normal#fg",
+ "border" : "@widgets#dragdropareaindicator#fg"
+ },
+ "navigationlabel" : {
+ "fg" : "@widgets#toolbox#title#button#active#fg",
+ "bg" : "@widgets#toolbox#title#button#active#bg"
+ },
+ "qmenu" : {
+ "fg" : "@base#normal#fg",
+ "bg" : "@base#normal#bg",
+ "border" : "@base#normal#border",
+ "item" : {
+ "selected" : {
+ "fg" : "@base#selected#fg",
+ "bg" : "@base#selected#bg"
+ },
+ "disabled" : {
+ "fg" : "@base#disabled#fg"
+ }
+ },
+ "separator" : {
+ "bg" : "@widgets#separator#bg"
+ }
+ },
+ "qtooltip" : {
+ "fg" : "@base#master#fg",
+ "bg" : "@base#master#bg"
+ },
+ "qtoolbar" : {
+ "bg" : "@base#header#bg",
+ "separator" : {
+ "bg" : "@widgets#separator#bg"
+ },
+ "extension" : {
+ "bg" : "@base#normal#fg"
+ }
+ },
+ "qtoolbutton" : {
+ "fg" : "@base#normal#fg",
+ "bg" : "transparent",
+ "checked" : {
+ "fg" : "@base#selected#fg",
+ "bg" : "@base#selected#bg"
+ },
+ "hover" : {
+ "fg" : "@base#hover#fg",
+ "bg" : "@base#hover#bg"
+ },
+ "pressed" : {
+ "fg" : "@base#pressed#fg",
+ "bg" : "@base#pressed#bg"
+ }
+ },
+ "qdockwidget" : {
+ "fg" : "@base#normal#fg",
+ "bg" : "@base#normal#bg",
+ "title" : {
+ "bg" : "@base#title#bg",
+ "button" : {
+ "hover" : {
+ "bg" : "@base#hover#bg"
+ }
+ }
+ }
+ },
+ "qpushbutton" : {
+ "fg" : "@base#normal#fg",
+ "bg" : "transparent",
+ "border" : "@base#normal#border",
+ "default" : {
+ "border" : "@base#master#bg"
+ },
+ "focus" : {
+ "fg" : "@base#focus#fg",
+ "bg" : "@base#focus#bg"
+ },
+ "checked" : {
+ "fg" : "@base#selected#fg",
+ "bg" : "@base#selected#bg"
+ },
+ "hover" : {
+ "fg" : "@base#hover#fg",
+ "bg" : "@base#hover#bg"
+ },
+ "pressed" : {
+ "fg" : "@base#pressed#fg",
+ "bg" : "@base#pressed#bg"
+ },
+ "disabled" : {
+ "fg" : "@base#disabled#fg",
+ "bg" : "@widgets#qpushbutton#bg"
+ }
+ },
+ "qdialog" : {
+ "fg" : "@base#normal#fg",
+ "bg" : "@base#normal#bg"
+ },
+ "qcombobox" : {
+ "fg" : "@base#content#fg",
+ "bg" : "@base#content#bg",
+ "border" : "@base#content#border",
+ "focus" : {
+ "bg" : "@base#content#focus#bg",
+ "border" : "@base#content#focus#border"
+ },
+ "hover" : {
+ "bg" : "@base#content#hover#bg",
+ "border" : "@base#content#hover#border"
+ },
+ "disabled" : {
+ "fg" : "@base#content#disabled#fg"
+ },
+ "view" : {
+ "border" : "@base#content#border",
+ "bg" : "@widgets#qcombobox#bg",
+ "selection" : {
+ "fg" : "@base#content#selection#fg",
+ "bg" : "@base#content#selection#bg"
+ }
+ },
+ "item" : {
+ "hover" : {
+ "fg" : "@base#content#hover#fg",
+ "bg" : "@base#content#hover#bg"
+ }
+ }
+ },
+ "qlabel" : {
+ "fg" : "@base#normal#fg"
+ },
+ "qlineedit" : {
+ "border" : "@base#content#border",
+ "fg" : "@base#content#fg",
+ "bg" : "@base#content#bg",
+ "selection" : {
+ "fg" : "@base#content#selection#fg",
+ "bg" : "@base#content#selection#bg"
+ },
+ "focus" : {
+ "bg" : "@base#edit#focus#bg",
+ "border" : "@base#edit#focus#border"
+ },
+ "hover" : {
+ "bg" : "@base#edit#hover#bg",
+ "border" : "@base#edit#hover#border"
+ },
+ "disabled" : {
+ "fg" : "@base#content#disabled#fg"
+ }
+ },
+ "qtabbar" : {
+ "tab" : {
+ "fg" : "@base#normal#fg",
+ "bg" : "@base#normal#bg",
+ "border" : "@base#normal#border",
+ "hover" : {
+ "fg" : "@base#hover#fg",
+ "bg" : "@base#hover#bg"
+ },
+ "selected" : {
+ "fg" : "@base#content#fg",
+ "bg" : "@base#content#bg",
+ "border" : "@base#master#bg"
+ }
+ }
+ },
+ "qtreeview" : {
+ "fg" : "@base#content#fg",
+ "bg" : "@base#content#bg",
+ "item" : {
+ "hover" : {
+ "fg" : "@base#content#hover#fg",
+ "bg" : "@base#content#hover#bg"
+ },
+ "selected" : {
+ "fg" : "@base#content#selected#fg",
+ "bg" : "@base#content#selected#bg",
+ "active" : {
+ "fg" : "@base#content#selected#active#fg",
+ "bg" : "@base#content#selected#active#bg"
+ },
+ "inactive" : {
+ "fg" : "@base#content#selected#inactive#fg",
+ "bg" : "@base#content#selected#inactive#bg"
+ }
+ }
+ }
+ },
+ "qlistview" : {
+ "fg" : "@base#content#fg",
+ "bg" : "@base#content#bg",
+ "item" : {
+ "hover" : {
+ "fg" : "@base#content#hover#fg",
+ "bg" : "@base#content#hover#bg"
+ },
+ "selected" : {
+ "fg" : "@base#content#selected#fg",
+ "bg" : "@base#content#selected#bg",
+ "active" : {
+ "fg" : "@base#content#selected#active#fg",
+ "bg" : "@base#content#selected#active#bg"
+ },
+ "inactive" : {
+ "fg" : "@base#content#selected#inactive#fg",
+ "bg" : "@base#content#selected#inactive#bg"
+ }
+ }
+ }
+ },
+ "qsplitter" : {
+ "handle" : {
+ "bg" : "@base#normal#border",
+ "pressed" : {
+ "bg" : "@base#pressed#bg"
+ }
+ }
+ },
+ "qstatusbar" : {
+ "fg" : "@base#footer#fg",
+ "bg" : "@base#footer#bg"
+ },
+ "qscrollbar" : {
+ "bg" : "@base#normal#bg",
+ "addpage" : {
+ "bg" : "transparent"
+ },
+ "handle" : {
+ "bg" : "@palette#bg3_4",
+ "hover" : {
+ "bg" : "@palette#bg3_3"
+ },
+ "pressed" : {
+ "bg" : "@palette#bg3_2"
+ }
+ }
+ },
+ "qcheckbox" : {
+ "disabled" : {
+ "fg" : "@base#disabled#fg"
+ },
+ "indicator" : {
+ "focus" : {
+ "bg" : "@base#focus#bg"
+ },
+ "hover" : {
+ "bg" : "@base#hover#bg"
+ },
+ "pressed" : {
+ "bg" : "@base#pressed#bg"
+ }
+ }
+ },
+ "qradiobutton" : {
+ "disabled" : {
+ "fg" : "@base#disabled#fg"
+ },
+ "indicator" : {
+ "focus" : {
+ "bg" : "@base#focus#bg"
+ },
+ "hover" : {
+ "bg" : "@base#hover#bg"
+ },
+ "pressed" : {
+ "bg" : "@base#pressed#bg"
+ }
+ }
+ },
+ "qspinbox" : {
+ "border" : "@base#content#border",
+ "fg" : "@base#content#fg",
+ "bg" : "@base#content#bg",
+ "disabled" : {
+ "fg" : "@base#content#disabled#fg",
+ "bg" : "@base#content#disabled#bg"
+ },
+ "selection" : {
+ "fg" : "@base#content#selection#fg",
+ "bg" : "@base#content#selection#bg"
+ },
+ "focus" : {
+ "bg" : "@base#edit#focus#bg",
+ "border" : "@base#edit#focus#border"
+ },
+ "hover" : {
+ "bg" : "@base#edit#hover#bg",
+ "border" : "@base#edit#hover#border"
+ },
+ "button" : {
+ "hover" : {
+ "bg" : "@base#content#hover#bg"
+ },
+ "pressed" : {
+ "bg" : "@base#content#pressed#bg"
+ }
+ }
+ },
+ "qheaderview" : {
+ "section" : {
+ "fg" : "@base#content#fg",
+ "bg" : "@base#content#bg",
+ "border" : "@base#content#border",
+ "checked" : {
+ "fg" : "@base#content#selected#fg",
+ "bg" : "@base#content#selected#bg"
+ }
+ }
+ },
+ "qprogressbar" : {
+ "bg" : "@base#content#bg",
+ "border" : "@base#content#border",
+ "chunk" : {
+ "bg" : "@base#master#alt"
+ }
+ },
+ "qgroupbox" : {
+ "border" : "@base#normal#border",
+ "title" : {
+ "fg" : "@base#normal#fg"
+ }
+ },
+ "qabstractscrollarea" : {
+ "border" : "@base#normal#border",
+ "corner" : {
+ "bg" : "@widgets#qscrollbar#bg"
+ }
+ },
+ "qslider" : {
+ "groove" : {
+ "bg" : "@base#content#bg",
+ "border" : "@base#content#border"
+ },
+ "handle" : {
+ "border" : "@base#content#border",
+ "bg" : "@base#master#bg"
+ },
+ "subpage" : {
+ "border" : "@widgets#qslider#handle#border",
+ "bg" : "@base#master#alt"
+ }
+ },
+ "viewwindow" : {
+ "toolbar" : {
+ "bg" : "@base#content#bg"
+ }
+ }
+ }
+}
diff --git a/src/data/extra/themes/pure/radiobutton_checked.svg b/src/data/extra/themes/pure/radiobutton_checked.svg
new file mode 100644
index 00000000..eb117cb3
--- /dev/null
+++ b/src/data/extra/themes/pure/radiobutton_checked.svg
@@ -0,0 +1,7 @@
+
diff --git a/src/data/extra/themes/pure/radiobutton_checked_disabled.svg b/src/data/extra/themes/pure/radiobutton_checked_disabled.svg
new file mode 100644
index 00000000..9aa33733
--- /dev/null
+++ b/src/data/extra/themes/pure/radiobutton_checked_disabled.svg
@@ -0,0 +1,7 @@
+
diff --git a/src/data/extra/themes/pure/radiobutton_unchecked.svg b/src/data/extra/themes/pure/radiobutton_unchecked.svg
new file mode 100644
index 00000000..ddac281c
--- /dev/null
+++ b/src/data/extra/themes/pure/radiobutton_unchecked.svg
@@ -0,0 +1,6 @@
+
diff --git a/src/data/extra/themes/pure/radiobutton_unchecked_disabled.svg b/src/data/extra/themes/pure/radiobutton_unchecked_disabled.svg
new file mode 100644
index 00000000..8232c04a
--- /dev/null
+++ b/src/data/extra/themes/pure/radiobutton_unchecked_disabled.svg
@@ -0,0 +1,6 @@
+
diff --git a/src/data/extra/themes/pure/right.svg b/src/data/extra/themes/pure/right.svg
new file mode 100644
index 00000000..f44c49d0
--- /dev/null
+++ b/src/data/extra/themes/pure/right.svg
@@ -0,0 +1,8 @@
+
diff --git a/src/data/extra/themes/pure/right_disabled.svg b/src/data/extra/themes/pure/right_disabled.svg
new file mode 100644
index 00000000..ff849266
--- /dev/null
+++ b/src/data/extra/themes/pure/right_disabled.svg
@@ -0,0 +1,8 @@
+
diff --git a/src/data/extra/themes/pure/sizegrip.svg b/src/data/extra/themes/pure/sizegrip.svg
new file mode 100644
index 00000000..3018b1bb
--- /dev/null
+++ b/src/data/extra/themes/pure/sizegrip.svg
@@ -0,0 +1 @@
+
diff --git a/src/data/extra/themes/pure/text-editor.theme b/src/data/extra/themes/pure/text-editor.theme
new file mode 100644
index 00000000..398d5197
--- /dev/null
+++ b/src/data/extra/themes/pure/text-editor.theme
@@ -0,0 +1,199 @@
+{
+ "metadata" : {
+ "revision" : 0,
+ "name" : "Moonlight",
+ "type" : "vtextedit"
+ },
+ "editor-styles" : {
+ "Text" : {
+ "//comment" : "Support a list of fonts separated by ,",
+ "font-family" : "YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New",
+ "font-size" : 12,
+ "text-color" : "#222222",
+ "background-color" : "#f1f1f1",
+ "selected-text-color" : "#f1f1f1",
+ "selected-background-color" : "#1976d2"
+ },
+ "CursorLine" : {
+ "background-color" : "#c5cae9"
+ },
+ "TrailingSpace" : {
+ "background-color" : "#a8a8a8"
+ },
+ "Tab" : {
+ "background-color" : "#cfcfcf"
+ },
+ "SelectedText" : {
+ "//comment" : "Selected text highlight",
+ "text-color" : "#222222",
+ "background-color" : "#dfdf00"
+ },
+ "IndicatorsBorder" : {
+ "text-color" : "#aaaaaa",
+ "background-color" : "#ededed"
+ },
+ "CurrentLineNumber" : {
+ "text-color" : "#222222"
+ },
+ "Folding" : {
+ "text-color" : "#6495ed"
+ },
+ "FoldedFolding" : {
+ "text-color" : "#4169e1"
+ },
+ "FoldingHighlight" : {
+ "text-color" : "#a9c4f5"
+ },
+ "FoldedFoldingRangeLine" : {
+ "background-color" : "#befbdd"
+ },
+ "IncrementalSearch" : {
+ "//comment" : "Incremental search highlight",
+ "text-color" : "#222222",
+ "background-color" : "#ce93d8"
+ },
+ "Search" : {
+ "//comment" : "Search highlight",
+ "text-color" : "#222222",
+ "background-color" : "#4db6ac"
+ },
+ "SearchUnderCursor" : {
+ "//comment" : "Search highlight under cursor",
+ "text-color" : "#222222",
+ "background-color" : "#66bb6a"
+ }
+ },
+ "//comment" : "Override the Text style in editor-styles",
+ "markdown-editor-styles" : {
+ "Text" : {
+ "//comment" : "Support a list of fonts separated by ,",
+ "font-family" : "冬青黑体, YaHei Consolas Hybrid, Microsoft YaHei, 微软雅黑, Microsoft YaHei UI, WenQuanYi Micro Hei, 文泉驿雅黑, Dengxian, 等线体, STXihei, 华文细黑, Liberation Sans, Droid Sans, NSimSun, 新宋体, SimSun, 宋体, Verdana, Helvetica, sans-serif, Tahoma, Arial, Geneva, Georgia, Times New Roman",
+ "font-size" : 12,
+ "text-color" : "#222222",
+ "background-color" : "#f1f1f1",
+ "selected-text-color" : "#f1f1f1",
+ "selected-background-color" : "#1976d2"
+ }
+ },
+ "markdown-syntax-styles" : {
+ "H1" : {
+ "text-color" : "#222222",
+ "bold" : true,
+ "font-size" : 17
+ },
+ "H2" : {
+ "text-color" : "#222222",
+ "bold" : true,
+ "font-size" : 16
+ },
+ "H3" : {
+ "text-color" : "#222222",
+ "bold" : true,
+ "font-size" : 15
+ },
+ "H4" : {
+ "text-color" : "#222222",
+ "bold" : true,
+ "font-size" : 14
+ },
+ "H5" : {
+ "text-color" : "#222222",
+ "bold" : true,
+ "font-size" : 13
+ },
+ "H6" : {
+ "text-color" : "#222222",
+ "bold" : true,
+ "font-size" : 12
+ },
+ "HRULE" : {
+ "text-color" : "#222222",
+ "background-color" : "#dac7c9"
+ },
+ "LIST_BULLET" : {
+ "text-color" : "#d33682",
+ "bold" : true
+ },
+ "LIST_ENUMERATOR" : {
+ "text-color" : "#0000ff"
+ },
+ "LINK" : {
+ "text-color" : "#005fff"
+ },
+ "AUTO_LINK_URL" : {
+ "text-color" : "#005fff"
+ },
+ "AUTO_LINK_EMAIL" : {
+ "text-color" : "#005fff"
+ },
+ "IMAGE" : {
+ "text-color" : "#616161"
+ },
+ "REFERENCE" : {
+ "text-color" : "#826200"
+ },
+ "CODE" : {
+ "text-color" : "#8e24aa",
+ "font-family" : "YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New"
+ },
+ "EMPH" : {
+ "italic" : true
+ },
+ "STRONG" : {
+ "bold" : true
+ },
+ "HTML_ENTITY" : {
+ "text-color" : "#8900b5"
+ },
+ "HTML" : {
+ "text-color" : "#8900b5"
+ },
+ "HTMLBLOCK" : {
+ "text-color" : "#8900b5"
+ },
+ "COMMENT" : {
+ "text-color" : "#93a1a1"
+ },
+ "VERBATIM" : {
+ "text-color" : "#673ab7",
+ "font-family" : "YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New"
+ },
+ "//comment" : "Please modify the syntax highlight theme as well if you change this",
+ "FENCEDCODEBLOCK" : {
+ "text-color" : "#673ab7",
+ "font-family" : "YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New"
+ },
+ "BLOCKQUOTE" : {
+ "text-color" : "#00af00"
+ },
+ "NOTE" : {
+ "text-color" : "#0087b5"
+ },
+ "STRIKE" : {
+ "text-color" : "#b71c1c",
+ "strike-through" : true
+ },
+ "FRONTMATTER" : {
+ "text-color" : "#6c6c6c"
+ },
+ "INLINEEQUATION" : {
+ "text-color" : "#00897b",
+ "font-family" : "YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New"
+ },
+ "DISPLAYFORMULA" : {
+ "text-color" : "#00897b",
+ "font-family" : "YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New"
+ },
+ "MARK" : {
+ "text-color" : "#222222",
+ "background-color" : "#ffff76"
+ },
+ "TABLE" : {
+ "font-family" : "YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New"
+ },
+ "TABLEBORDER" : {
+ "text-color" : "#d33682",
+ "background-color" : "#e0e0e0"
+ }
+ }
+}
diff --git a/src/data/extra/themes/pure/up.svg b/src/data/extra/themes/pure/up.svg
new file mode 100644
index 00000000..54926252
--- /dev/null
+++ b/src/data/extra/themes/pure/up.svg
@@ -0,0 +1,8 @@
+
diff --git a/src/data/extra/themes/pure/up_disabled.svg b/src/data/extra/themes/pure/up_disabled.svg
new file mode 100644
index 00000000..d9af609a
--- /dev/null
+++ b/src/data/extra/themes/pure/up_disabled.svg
@@ -0,0 +1,8 @@
+
diff --git a/src/data/extra/themes/pure/web.css b/src/data/extra/themes/pure/web.css
new file mode 100644
index 00000000..3e127617
--- /dev/null
+++ b/src/data/extra/themes/pure/web.css
@@ -0,0 +1,285 @@
+body {
+ margin: 0 auto;
+ font-family: "Segoe UI", Helvetica, sans-serif, Tahoma, Arial, Geneva, Georgia, Palatino, "Times New Roman", "冬青黑体", "YaHei Consolas Hybrid", "Microsoft YaHei", "微软雅黑", "Microsoft YaHei UI", "WenQuanYi Micro Hei", "文泉驿雅黑", Dengxian, "等线体", STXihei, "华文细黑", "Liberation Sans", "Droid Sans", NSimSun, "新宋体", SimSun, "宋体";
+ color: #222222;
+ line-height: 1.5;
+ padding: 15px;
+ background-color: #f1f1f1;
+ font-size: 16px;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ color: #222222;
+ font-weight: bold;
+ margin-top: 20px;
+ margin-bottom: 10px;
+ padding: 0;
+}
+
+p {
+ padding: 0;
+ margin-top: 16px;
+ margin-bottom: 16px;
+}
+
+h1 {
+ font-size: 26px;
+}
+
+h2 {
+ font-size: 24px;
+}
+
+h3 {
+ font-size: 22px;
+}
+
+h4 {
+ font-size: 20px;
+}
+
+h5 {
+ font-size: 19px;
+}
+
+h6 {
+ font-size: 18px;
+}
+
+a {
+ color: #0099ff;
+ margin: 0;
+ padding: 0;
+ vertical-align: baseline;
+ text-decoration: none;
+ word-break: break-word;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+a:visited {
+ color: #800080;
+}
+
+ul, ol {
+ padding: 0;
+ padding-left: 24px;
+}
+
+li {
+ line-height: 24px;
+}
+
+li ul, li ol {
+ margin-left: 16px;
+}
+
+p, ul, ol {
+ font-size: 16px;
+ line-height: 24px;
+}
+
+pre {
+ display: block;
+ overflow-y: hidden;
+ overflow-x: auto;
+ -moz-tab-size: 4;
+ -o-tab-size: 4;
+ tab-size: 4;
+}
+
+code {
+ font-family: "YaHei Consolas Hybrid", Consolas, Monaco, Monospace, Courier;
+ color: #8e24aa;
+ word-break: break-word;
+}
+
+pre code {
+ display: block;
+ padding-left: 0.5em;
+ padding-right: 0.5em;
+ color: #222222;
+ background-color: #e0e0e0;
+ line-height: 1.5;
+ font-family: "YaHei Consolas Hybrid", Consolas, Monaco, Monospace, Courier;
+ white-space: pre;
+ -moz-tab-size: 4;
+ -o-tab-size: 4;
+ tab-size: 4;
+}
+
+aside {
+ display: block;
+ float: right;
+ width: 390px;
+}
+
+blockquote {
+ color: #666666;
+ border-left: .5em solid #7a7a7a;
+ padding: 0 1em;
+ margin-left: 0;
+}
+
+blockquote p {
+ color: #666666;
+}
+
+hr {
+ display: block;
+ text-align: left;
+ margin: 1em 0;
+ border: none;
+ height: 2px;
+ background-color: #999999;
+}
+
+table {
+ padding: 0;
+ margin: 1rem 0.5rem;
+ border-collapse: collapse;
+}
+
+table tr {
+ border-top: 1px solid #cccccc;
+ background-color: #ffffff;
+ margin: 0;
+ padding: 0;
+}
+
+table tr:hover {
+ background-color: #dadada;
+}
+
+table tr th {
+ font-weight: bold;
+ border: 1px solid #cccccc;
+ margin: 0;
+ padding: 6px 13px;
+}
+
+table tr td {
+ border: 1px solid #cccccc;
+ margin: 0;
+ padding: 6px 13px;
+}
+
+table tr th :first-child, table tr td :first-child {
+ margin-top: 0;
+}
+
+table tr th :last-child, table tr td :last-child {
+ margin-bottom: 0;
+}
+
+div.vx-mermaid-graph {
+ margin: 16px 0px 16px 0px;
+ overflow-y: hidden;
+}
+
+div.vx-flowchartjs-graph {
+ padding: 0px 5px 0px 5px;
+ margin: 16px 0px 16px 0px;
+ width: fit-content;
+ overflow: hidden;
+}
+
+div.vx-wavedrom-graph {
+ padding: 0px 5px 0px 5px;
+ margin: 16px 0px 16px 0px;
+ width: fit-content;
+ overflow: hidden;
+}
+
+div.vx-plantuml-graph {
+ padding: 5px 5px 0px 5px;
+ margin: 16px 0px 16px 0px;
+ width: fit-content;
+ overflow: hidden;
+}
+
+::selection {
+ background-color: #6dafff;
+ color: #222222;
+}
+
+::-webkit-scrollbar {
+ background-color: #eaeaea;
+ width: 14px;
+ height: 14px;
+ border: none;
+}
+
+::-webkit-scrollbar-corner {
+ background-color: #eaeaea;
+}
+
+::-webkit-scrollbar-button {
+ /* This selector affects the styling of both the up & down and left & right buttons of a scrollbar */
+ height: 14px;
+ width: 14px;
+ background-color: #eaeaea;
+}
+
+::-webkit-scrollbar-button:hover {
+ background-color: #dadada;
+}
+
+::-webkit-scrollbar-button:active {
+ background-color: #c0c0c0;
+}
+
+::-webkit-scrollbar-track {
+ /* This selector affects the styling of the area in the scrollbar between the two buttons */
+ background-color: #eaeaea;
+}
+
+::-webkit-scrollbar-thumb {
+ /* This selector affects the styling of draggable element of the scollbar */
+ border: none;
+ background-color: #dadada;
+}
+
+::-webkit-scrollbar-thumb:hover {
+ background-color: #d2d2d2;
+}
+
+::-webkit-scrollbar-thumb:active {
+ background-color: #cdcdcd;
+}
+
+::-webkit-scrollbar-button:horizontal:increment {
+ background-image: url(right.svg);
+ background-repeat: no-repeat;
+ background-size: contain;
+}
+
+::-webkit-scrollbar-button:horizontal:decrement {
+ background-image: url(left.svg);
+ background-repeat: no-repeat;
+ background-size: contain;
+}
+
+::-webkit-scrollbar-button:vertical:increment {
+ background-image: url(down.svg);
+ background-repeat: no-repeat;
+ background-size: contain;
+}
+
+::-webkit-scrollbar-button:vertical:decrement {
+ background-image: url(up.svg);
+ background-repeat: no-repeat;
+ background-size: contain;
+}
+
+#vx-content span.vx-search-match {
+ color: #222222;
+ background-color: #4db6ac;
+}
+
+#vx-content span.vx-current-search-match {
+ color: #222222;
+ background-color: #66bb6a;
+}